【Proteus仿真】【51单片机】LED点阵花样显示设计

您所在的位置:网站首页 点阵屏滚动 【Proteus仿真】【51单片机】LED点阵花样显示设计

【Proteus仿真】【51单片机】LED点阵花样显示设计

2023-12-30 13:47| 来源: 网络整理| 查看: 265

文章目录 一、功能简介二、软件设计三、实验现象联系作者

一、功能简介

本项目使用Proteus8仿真51单片机控制器,使用8*8LED点阵、按键模块等。

系统运行后,默认以静态模式显示,此时点阵左右循环切换图像。 当按下K1键,点阵从下往上滚动显示图像; 当再次按下K1键,点阵从上往下滚动显示图像; 当再次按下K1键,点阵从左往右滚动显示图像; 当再次按下K1键,点阵从右往左滚动显示图像; 如此循环。

二、软件设计 /* 作者:嗨小易(QQ:3443792007) */ //全局变量定义 //扫描每列,对应行数据,用于静态显示、左右滚动显示 //LED点阵显示图像的行数据(取模软件获取:纵向取模、字节不倒序) code u8 gled_row_lr[24]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//额外增加的无显示数据 0x38,0x7C,0x7E,0x3F,0x3F,0x7E,0x7C,0x38, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};//额外增加的无显示数据 //LED点阵显示图像的列数据(每一列扫描数据) code u8 gled_col_lr[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; //扫描每行,对应列数据,用于上下滚动显示 //LED点阵显示图像的列数据(取模软件获取:横向取模、字节不倒序) code u8 gled_col_ud[24]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//额外增加的无显示数据 0x00,0x66,0xFF,0xFF,0xFF,0x7E,0x3C,0x18, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};//额外增加的无显示数据 //LED点阵显示图像的行数据(每一行扫描数据) code u8 gled_row_ud[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; //定时器0中断函数 void time0() interrupt 1 { static u8 i=0; u8 key=0; TH0=0XDC; //给定时器赋初值,定时10ms TL0=0X00; i++; if(i==5)//间隔50mS { i=0; key=key_scan(0); if(key==KEY1_PRESS) { leddz_struct.mode++; if(leddz_struct.mode==5)leddz_struct.mode=0; if(leddz_struct.mode==MODE_DOWN_UP_SHOW||leddz_struct.mode==MODE_RIGHT_LEFT_SHOW) leddz_struct.data_cnt=0; else if(leddz_struct.mode==MODE_UP_DOWN_SHOW||leddz_struct.mode==MODE_LEFT_RIGHT_SHOW) leddz_struct.data_cnt=16; } } } //LED花样显示 void leddz_trick_show(void) { u8 i=0; u16 time=0; while(1) { //静态显示 if(leddz_struct.mode==MODE_STATIC_SHOW) { for(time=0;time LEDDZ_COL_PORT=gled_col_lr[i];//传送列选数据 hc595_write_data(gled_row_lr[i+8]);//传送行选数据 delay_10us(10);//延时一段时间,等待显示稳定 hc595_write_data(0x00);//消影 } } for(time=0;time LEDDZ_COL_PORT=gled_col_lr[i];//传送列选数据 hc595_write_data(gled_row_lr[i+7]);//传送行选数据 delay_10us(10);//延时一段时间,等待显示稳定 hc595_write_data(0x00);//消影 } } } //从下往上滚动显示 else if(leddz_struct.mode==MODE_DOWN_UP_SHOW) { for(time=0;time LEDDZ_COL_PORT=~gled_col_ud[i+leddz_struct.data_cnt];//传送列选数据 hc595_write_data(~gled_row_ud[i]);//传送行选数据 delay_10us(10);//延时一段时间,等待显示稳定 hc595_write_data(0x00);//消影 } } leddz_struct.data_cnt++; if(leddz_struct.data_cnt==16)leddz_struct.data_cnt=0; } //从上往下滚动显示 else if(leddz_struct.mode==MODE_UP_DOWN_SHOW) { for(time=0;time LEDDZ_COL_PORT=~gled_col_ud[i+leddz_struct.data_cnt];//传送列选数据 hc595_write_data(~gled_row_ud[i]);//传送行选数据 delay_10us(10);//延时一段时间,等待显示稳定 hc595_write_data(0x00);//消影 } } leddz_struct.data_cnt--; if(leddz_struct.data_cnt==0)leddz_struct.data_cnt=16; } //从左往右滚动显示 else if(leddz_struct.mode==MODE_LEFT_RIGHT_SHOW) { for(time=0;time LEDDZ_COL_PORT=gled_col_lr[i];//传送列选数据 hc595_write_data(gled_row_lr[i+leddz_struct.data_cnt]);//传送行选数据 delay_10us(10);//延时一段时间,等待显示稳定 hc595_write_data(0x00);//消影 } } leddz_struct.data_cnt--; if(leddz_struct.data_cnt==0)leddz_struct.data_cnt=16; } //从右往左滚动显示 else if(leddz_struct.mode==MODE_RIGHT_LEFT_SHOW) { for(time=0;time LEDDZ_COL_PORT=gled_col_lr[i];//传送列选数据 hc595_write_data(gled_row_lr[i+leddz_struct.data_cnt]);//传送行选数据 delay_10us(10);//延时一段时间,等待显示稳定 hc595_write_data(0x00);//消影 } } leddz_struct.data_cnt++; if(leddz_struct.data_cnt==16)leddz_struct.data_cnt=0; } } } //LED点阵花样显示系统 void leddz_control_sys(void) { time0_init();//初始化定时器0 time0_start();//开启定时器0 while(1) { leddz_trick_show(); } } 三、实验现象

演示视频:https://space.bilibili.com/444388619

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

联系作者

专注于51单片机、STM32、国产32、DSP、Proteus、ardunio、ESP32、物联网软件开发,PCB设计,视频分享,技术交流。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3