第37节:数码管作为仪表盘显示跑马灯的方向,速度和状态
时间:11-22
来源:互联网
点击:
- 新变量。每次更改LED灯的状态都要更新一次。
- unsigned char ucLedStep_09_16=0; //第9个至第16个LED跑马灯的步骤变量
- unsigned intuiTimeCnt_09_16=0; //第9个至第16个LED跑马灯的统计定时中断次数的延时计数器
- unsigned char ucLedStatus16_09=0; //代表底层74HC595输出状态的中间变量
- unsigned char ucLedStatus08_01=0; //代表底层74HC595输出状态的中间变量
- unsigned char ucLedDirFlag=0; //方向变量,把按键与跑马灯关联起来的核心变量,0代表正方向,1代表反方向
- unsigned intuiSetTimeLevel_09_16=300;//速度变量,此数值越大速度越慢,此数值越小速度越快。
- unsigned char ucLedStartFlag=1; //启动和暂停的变量,0代表暂停,1代表启动
- unsigned char ucDigShow8;//第8位数码管要显示的内容
- unsigned char ucDigShow7;//第7位数码管要显示的内容
- unsigned char ucDigShow6;//第6位数码管要显示的内容
- unsigned char ucDigShow5;//第5位数码管要显示的内容
- unsigned char ucDigShow4;//第4位数码管要显示的内容
- unsigned char ucDigShow3;//第3位数码管要显示的内容
- unsigned char ucDigShow2;//第2位数码管要显示的内容
- unsigned char ucDigShow1;//第1位数码管要显示的内容
- unsigned char ucDigDot8;//数码管8的小数点是否显示的标志
- unsigned char ucDigDot7;//数码管7的小数点是否显示的标志
- unsigned char ucDigDot6;//数码管6的小数点是否显示的标志
- unsigned char ucDigDot5;//数码管5的小数点是否显示的标志
- unsigned char ucDigDot4;//数码管4的小数点是否显示的标志
- unsigned char ucDigDot3;//数码管3的小数点是否显示的标志
- unsigned char ucDigDot2;//数码管2的小数点是否显示的标志
- unsigned char ucDigDot1;//数码管1的小数点是否显示的标志
- unsigned char ucDigShowTemp=0; //临时中间变量
- unsigned char ucDisplayDriveStep=1;//动态扫描数码管的步骤变量
- unsigned char ucWd1Part1Update=1;//窗口1的局部1更新显示变量
- unsigned char ucWd1Part2Update=1;//窗口1的局部2更新显示变量
- unsigned char ucWd1Part3Update=1;//窗口1的局部3更新显示变量
- //根据原理图得出的共阴数码管字模表
- code unsigned char dig_table[]=
- {
- 0x3f,//0 序号0
- 0x06,//1 序号1
- 0x5b,//2 序号2
- 0x4f,//3 序号3
- 0x66,//4 序号4
- 0x6d,//5 序号5
- 0x7d,//6 序号6
- 0x07,//7 序号7
- 0x7f,//8 序号8
- 0x6f,//9 序号9
- 0x00,//无 序号10
- 0x40,//- 序号11
- 0x73,//P 序号12
- 0x5c,//o 序号13
- 0x71,//F 序号14
- 0x3e,//U 序号15
- 0x37,//n 序号16
- };
- void main()
- {
- initial_myself();
- delay_long(100);
- initial_peripheral();
- while(1)
- {
- key_service(); //按键服务的应用程序
- display_service(); //显示的窗口菜单服务程序
- led_flicker_09_16(); //第9个至第16个LED的跑马灯程序,逐个亮并且每次只能亮一个.
- led_update();//LED更新函数
- }
- }
- /* 注释一:
- * 由于本程序只有1个窗口,而这个窗口又分成3个局部,因此可以省略去窗口变量uWd,
- * 只用三个局部变量ucWdxPartyUpdate就可以了。
- */
- void display_service() //显示的窗口菜单服务程序
- {
- if(ucWd1Part1Update==1) //更新显示当前系统是处于运行还是暂停的状态
- {
- ucWd1Part1Update=0; //及时把更新变量清零,防止一直进来更新
- if(ucLedStartFlag==1)//启动,显示on
- {
- ucDigShow8=13;//显示o
- ucDigShow7=16;//显示n
- ucDigShow6=10;//显示空
- }
- else//暂停,显示oFF
- {
- ucDigShow8=13;//显示o
- ucDigShow7=14;//显示F
- ucDigShow6=14;//显示F
- }
- }
- if(ucWd1Part2Update==1) //更新显示当前系统是处于正方向还是反方向
- {
- ucWd1Part2Update=0; //及时把更新变量清零,防止一直进来更新
- if(ucLedDirFlag==0)//正方向,向上,显示n
- {
- ucDigShow5=16;//显示n
- }
- else//反方向,向下,显示U
- {
- ucDigShow5=15;//显示U
- }
- }
- if(ucWd1Part3Update==1) //更新显示当前系统的速度,此数值越大速度越慢,此数值越小速度越快。
- {
- ucWd1Part3Update=0; //及时把更新变量清零,防止一直进来更新
- ucDigShow4=10;//显示空这一位不用,作为空格
- if(uiSetTimeLevel_09_16>=100)
- {
- ucDigShow3=uiSetTimeLevel_09_16/100; //显示速度的百位
- }
- else
- {
- ucDigShow3=10; //显示空
- }
- if(uiSetTimeLevel_09_16>=10)
- {
- ucDigSho
数码管仪表盘跑马 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)