微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 第37节:数码管作为仪表盘显示跑马灯的方向,速度和状态

第37节:数码管作为仪表盘显示跑马灯的方向,速度和状态

时间:11-22 来源:互联网 点击:

  1. 新变量。每次更改LED灯的状态都要更新一次。
  2. unsigned char ucLedStep_09_16=0; //第9个至第16个LED跑马灯的步骤变量
  3. unsigned intuiTimeCnt_09_16=0; //第9个至第16个LED跑马灯的统计定时中断次数的延时计数器
  4. unsigned char ucLedStatus16_09=0; //代表底层74HC595输出状态的中间变量
  5. unsigned char ucLedStatus08_01=0; //代表底层74HC595输出状态的中间变量
  6. unsigned char ucLedDirFlag=0; //方向变量,把按键与跑马灯关联起来的核心变量,0代表正方向,1代表反方向
  7. unsigned intuiSetTimeLevel_09_16=300;//速度变量,此数值越大速度越慢,此数值越小速度越快。
  8. unsigned char ucLedStartFlag=1; //启动和暂停的变量,0代表暂停,1代表启动
  9. unsigned char ucDigShow8;//第8位数码管要显示的内容
  10. unsigned char ucDigShow7;//第7位数码管要显示的内容
  11. unsigned char ucDigShow6;//第6位数码管要显示的内容
  12. unsigned char ucDigShow5;//第5位数码管要显示的内容
  13. unsigned char ucDigShow4;//第4位数码管要显示的内容
  14. unsigned char ucDigShow3;//第3位数码管要显示的内容
  15. unsigned char ucDigShow2;//第2位数码管要显示的内容
  16. unsigned char ucDigShow1;//第1位数码管要显示的内容
  17. unsigned char ucDigDot8;//数码管8的小数点是否显示的标志
  18. unsigned char ucDigDot7;//数码管7的小数点是否显示的标志
  19. unsigned char ucDigDot6;//数码管6的小数点是否显示的标志
  20. unsigned char ucDigDot5;//数码管5的小数点是否显示的标志
  21. unsigned char ucDigDot4;//数码管4的小数点是否显示的标志
  22. unsigned char ucDigDot3;//数码管3的小数点是否显示的标志
  23. unsigned char ucDigDot2;//数码管2的小数点是否显示的标志
  24. unsigned char ucDigDot1;//数码管1的小数点是否显示的标志
  25. unsigned char ucDigShowTemp=0; //临时中间变量
  26. unsigned char ucDisplayDriveStep=1;//动态扫描数码管的步骤变量
  27. unsigned char ucWd1Part1Update=1;//窗口1的局部1更新显示变量
  28. unsigned char ucWd1Part2Update=1;//窗口1的局部2更新显示变量
  29. unsigned char ucWd1Part3Update=1;//窗口1的局部3更新显示变量
  30. //根据原理图得出的共阴数码管字模表
  31. code unsigned char dig_table[]=
  32. {
  33. 0x3f,//0 序号0
  34. 0x06,//1 序号1
  35. 0x5b,//2 序号2
  36. 0x4f,//3 序号3
  37. 0x66,//4 序号4
  38. 0x6d,//5 序号5
  39. 0x7d,//6 序号6
  40. 0x07,//7 序号7
  41. 0x7f,//8 序号8
  42. 0x6f,//9 序号9
  43. 0x00,//无 序号10
  44. 0x40,//- 序号11
  45. 0x73,//P 序号12
  46. 0x5c,//o 序号13
  47. 0x71,//F 序号14
  48. 0x3e,//U 序号15
  49. 0x37,//n 序号16
  50. };
  51. void main()
  52. {
  53. initial_myself();
  54. delay_long(100);
  55. initial_peripheral();
  56. while(1)
  57. {
  58. key_service(); //按键服务的应用程序
  59. display_service(); //显示的窗口菜单服务程序
  60. led_flicker_09_16(); //第9个至第16个LED的跑马灯程序,逐个亮并且每次只能亮一个.
  61. led_update();//LED更新函数
  62. }
  63. }
  64. /* 注释一:
  65. * 由于本程序只有1个窗口,而这个窗口又分成3个局部,因此可以省略去窗口变量uWd,
  66. * 只用三个局部变量ucWdxPartyUpdate就可以了。
  67. */
  68. void display_service() //显示的窗口菜单服务程序
  69. {
  70. if(ucWd1Part1Update==1) //更新显示当前系统是处于运行还是暂停的状态
  71. {
  72. ucWd1Part1Update=0; //及时把更新变量清零,防止一直进来更新
  73. if(ucLedStartFlag==1)//启动,显示on
  74. {
  75. ucDigShow8=13;//显示o
  76. ucDigShow7=16;//显示n
  77. ucDigShow6=10;//显示空
  78. }
  79. else//暂停,显示oFF
  80. {
  81. ucDigShow8=13;//显示o
  82. ucDigShow7=14;//显示F
  83. ucDigShow6=14;//显示F
  84. }
  85. }
  86. if(ucWd1Part2Update==1) //更新显示当前系统是处于正方向还是反方向
  87. {
  88. ucWd1Part2Update=0; //及时把更新变量清零,防止一直进来更新
  89. if(ucLedDirFlag==0)//正方向,向上,显示n
  90. {
  91. ucDigShow5=16;//显示n
  92. }
  93. else//反方向,向下,显示U
  94. {
  95. ucDigShow5=15;//显示U
  96. }
  97. }
  98. if(ucWd1Part3Update==1) //更新显示当前系统的速度,此数值越大速度越慢,此数值越小速度越快。
  99. {
  100. ucWd1Part3Update=0; //及时把更新变量清零,防止一直进来更新
  101. ucDigShow4=10;//显示空这一位不用,作为空格
  102. if(uiSetTimeLevel_09_16>=100)
  103. {
  104. ucDigShow3=uiSetTimeLevel_09_16/100; //显示速度的百位
  105. }
  106. else
  107. {
  108. ucDigShow3=10; //显示空
  109. }
  110. if(uiSetTimeLevel_09_16>=10)
  111. {
  112. ucDigSho

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top