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

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

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

  1. w2=uiSetTimeLevel_09_16%100/10;//显示速度的十位
  2. }
  3. else
  4. {
  5. ucDigShow2=10; //显示空
  6. }
  7. ucDigShow1=uiSetTimeLevel_09_16%10; //显示速度的个位
  8. }
  9. }
  10. void key_scan()//按键扫描函数 放在定时中断里
  11. {
  12. if(key_sr1==1)//IO是高电平,说明按键没有被按下,这时要及时清零一些标志位
  13. {
  14. ucKeyLock1=0; //按键自锁标志清零
  15. uiKeyTimeCnt1=0;//按键去抖动延时计数器清零,此行非常巧妙,是我实战中摸索出来的。
  16. }
  17. else if(ucKeyLock1==0)//有按键按下,且是第一次被按下
  18. {
  19. uiKeyTimeCnt1++; //累加定时中断次数
  20. if(uiKeyTimeCnt1>const_key_time1)
  21. {
  22. uiKeyTimeCnt1=0;
  23. ucKeyLock1=1;//自锁按键置位,避免一直触发
  24. ucKeySec=1; //触发1号键
  25. }
  26. }
  27. if(key_sr2==1)//IO是高电平,说明按键没有被按下,这时要及时清零一些标志位
  28. {
  29. ucKeyLock2=0; //按键自锁标志清零
  30. uiKeyTimeCnt2=0;//按键去抖动延时计数器清零,此行非常巧妙,是我实战中摸索出来的。
  31. }
  32. else if(ucKeyLock2==0)//有按键按下,且是第一次被按下
  33. {
  34. uiKeyTimeCnt2++; //累加定时中断次数
  35. if(uiKeyTimeCnt2>const_key_time2)
  36. {
  37. uiKeyTimeCnt2=0;
  38. ucKeyLock2=1;//自锁按键置位,避免一直触发
  39. ucKeySec=2; //触发2号键
  40. }
  41. }
  42. if(key_sr3==1)//IO是高电平,说明按键没有被按下,这时要及时清零一些标志位
  43. {
  44. ucKeyLock3=0; //按键自锁标志清零
  45. uiKeyTimeCnt3=0;//按键去抖动延时计数器清零,此行非常巧妙,是我实战中摸索出来的。
  46. }
  47. else if(ucKeyLock3==0)//有按键按下,且是第一次被按下
  48. {
  49. uiKeyTimeCnt3++; //累加定时中断次数
  50. if(uiKeyTimeCnt3>const_key_time3)
  51. {
  52. uiKeyTimeCnt3=0;
  53. ucKeyLock3=1;//自锁按键置位,避免一直触发
  54. ucKeySec=3; //触发3号键
  55. }
  56. }
  57. if(key_sr4==1)//IO是高电平,说明按键没有被按下,这时要及时清零一些标志位
  58. {
  59. ucKeyLock4=0; //按键自锁标志清零
  60. uiKeyTimeCnt4=0;//按键去抖动延时计数器清零,此行非常巧妙,是我实战中摸索出来的。
  61. }
  62. else if(ucKeyLock4==0)//有按键按下,且是第一次被按下
  63. {
  64. uiKeyTimeCnt4++; //累加定时中断次数
  65. if(uiKeyTimeCnt4>const_key_time4)
  66. {
  67. uiKeyTimeCnt4=0;
  68. ucKeyLock4=1;//自锁按键置位,避免一直触发
  69. ucKeySec=4; //触发4号键
  70. }
  71. }
  72. }
  73. void key_service() //按键服务的应用程序
  74. {
  75. switch(ucKeySec) //按键服务状态切换
  76. {
  77. case 1:// 改变跑马灯方向的按键 对应朱兆祺学习板的S1键
  78. if(ucLedDirFlag==0) //通过中间变量改变跑马灯的方向
  79. {
  80. ucLedDirFlag=1;
  81. }
  82. else
  83. {
  84. ucLedDirFlag=0;
  85. }
  86. ucWd1Part2Update=1; //及时更新显示方向
  87. uiVoiceCnt=const_voice_short; //按键声音触发,滴一声就停。
  88. ucKeySec=0;//响应按键服务处理程序后,按键编号清零,避免一致触发
  89. break;
  90. case 2:// 加速按键 对应朱兆祺学习板的S5键 uiSetTimeLevel_09_16越小速度越快
  91. uiSetTimeLevel_09_16=uiSetTimeLevel_09_16-10;
  92. if(uiSetTimeLevel_09_16<50)//最快限定在50
  93. {
  94. uiSetTimeLevel_09_16=50;
  95. }
  96. ucWd1Part3Update=1; //及时更新显示速度
  97. uiVoiceCnt=const_voice_short; //按键声音触发,滴一声就停。
  98. ucKeySec=0;//响应按键服务处理程序后,按键编号清零,避免一致触发
  99. break;
  100. case 3:// 减速按键 对应朱兆祺学习板的S9键uiSetTimeLevel_09_16越大速度越慢
  101. uiSetTimeLevel_09_16=uiSetTimeLevel_09_16+10;
  102. if(uiSetTimeLevel_09_16>550)//最慢限定在550
  103. {
  104. uiSetTimeLevel_09_16=550;
  105. }
  106. ucWd1Part3Update=1; //及时更新显示速度
  107. uiVoiceCnt=const_voice_short; //按键声音触发,滴一声就停。
  108. ucKeySec=0;//响应按键服务处理程序后,按键编号清零,避免一致触发
  109. break;
  110. case 4:// 启动和暂停按键 对应朱兆祺学习板的S13键ucLedStartFlag为0时代表暂停,为1时代表启动
  111. if(ucLedStartFlag==1)//启动和暂停两种状态循环切换
  112. {
  113. ucLedStartFlag=0;
  114. }
  115. else //启动和暂停两种状态循环切换
  116. {
  117. ucLedStartFlag=1;
  118. }
  119. ucWd1Part1Update=1; //及时更新显示系统的运行状态,是运行还是暂停.
  120. uiVoiceCnt=const_voice_short; //按键声音触发,滴一声就停。
  121. ucKeySec=0;//响应按键服务处理程序后,按键编号清零,避免一致触发
  122. break;
  123. }
  124. }
  125. voi

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

网站地图

Top