微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 第89节:用单片机内部定时器做一个时钟

第89节:用单片机内部定时器做一个时钟

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

  1. 4Cnt1=0; //在软件滤波中,非常关键的语句!!!类似按键去抖动程序的及时清零
  2. uiKey4Cnt2++; //类似独立按键去抖动的软件抗干扰处理
  3. if(uiKey4Cnt2>const_key_time4)
  4. {
  5. uiKey4Cnt2=0;
  6. ucKey4Sr=1;//实时反映按键松手时的电平状态
  7. }
  8. }
  9. else
  10. {
  11. uiKey4Cnt2=0; //在软件滤波中,非常关键的语句!!!类似按键去抖动程序的及时清零
  12. uiKey4Cnt1++;
  13. if(uiKey4Cnt1>const_key_time4)
  14. {
  15. uiKey4Cnt1=0;
  16. ucKey4Sr=0;//实时反映按键按下时的电平状态
  17. }
  18. }
  19. }
  20. void key_service(void) //按键服务的应用程序
  21. {
  22. switch(ucKeySec) //按键服务状态切换
  23. {
  24. case 1:// 加按键 对应朱兆祺学习板的S1键
  25. switch(ucWd)//在不同的窗口下,设置不同的参数
  26. {
  27. case 1:
  28. switch(ucPart) //在不同的局部变量下,相当于二级菜单
  29. {
  30. case 1://年
  31. ucYear++;
  32. if(ucYear>99)
  33. {
  34. ucYear=99;
  35. }
  36. ucWd1Part1Update=1;//更新显示
  37. break;
  38. case 2: //月
  39. ucMonth++;
  40. if(ucMonth>12)
  41. {
  42. ucMonth=12;
  43. }
  44. ucWd1Part2Update=1;//更新显示
  45. break;
  46. case 3: //日
  47. ucDate++;
  48. if(ucDate>31)
  49. {
  50. ucDate=31;
  51. }
  52. ucWd1Part3Update=1;//更新显示
  53. break;
  54. }
  55. break;
  56. case 2:
  57. switch(ucPart) //在不同的局部变量下,相当于二级菜单
  58. {
  59. case 1://时
  60. ucHour++;
  61. if(ucHour>23)
  62. {
  63. ucHour=23;
  64. }
  65. ucWd2Part1Update=1;//更新显示
  66. break;
  67. case 2: //分
  68. ucMinute++;
  69. if(ucMinute>59)
  70. {
  71. ucMinute=59;
  72. }
  73. ucWd2Part2Update=1;//更新显示
  74. break;
  75. case 3: //秒
  76. ucSecond++;
  77. if(ucSecond>59)
  78. {
  79. ucSecond=59;
  80. }
  81. ucWd2Part3Update=1;//更新显示
  82. break;
  83. }
  84. break;
  85. }
  86. ucVoiceLock=1;//原子锁加锁,保护主函数与中断函数的共享变量uiVoiceCnt
  87. uiVoiceCnt=const_voice_short; //按键声音触发,滴一声就停。
  88. ucVoiceLock=0;//原子锁解锁,保护主函数与中断函数的共享变量uiVoiceCnt
  89. ucKeySec=0;//响应按键服务处理程序后,按键编号清零,避免一致触发
  90. break;
  91. case 2:// 减按键 对应朱兆祺学习板的S5键
  92. switch(ucWd)//在不同的窗口下,设置不同的参数
  93. {
  94. case 1:
  95. switch(ucPart) //在不同的局部变量下,相当于二级菜单
  96. {
  97. case 1://年
  98. ucYear--;
  99. if(ucYear>99)
  100. {
  101. ucYear=0;
  102. }
  103. ucWd1Part1Update=1;//更新显示
  104. break;
  105. case 2: //月
  106. ucMonth--;
  107. if(ucMonth<1)
  108. {
  109. ucMonth=1;
  110. }
  111. ucWd1Part2Update=1;//更新显示
  112. break;
  113. case 3: //日
  114. ucDate--;
  115. if(ucDate<1)
  116. {
  117. ucDate=1;
  118. }
  119. ucWd1Part3Update=1;//更新显示
  120. break;
  121. }
  122. break;
  123. case 2:
  124. switch(ucPart) //在不同的局部变量下,相当于二级菜单
  125. {
  126. case 1://时
  127. ucHour--;
  128. if(ucHour>23)
  129. {
  130. ucHour=0;
  131. }
  132. ucWd2Part1Update=1;//更新显示
  133. break;
  134. case 2: //分
  135. ucMinute--;
  136. if(ucMinute>59)
  137. {
  138. ucMinute=0;
  139. }
  140. ucWd2Part2Update=1;//更新显示
  141. break;
  142. case 3: //秒
  143. ucSecond--;
  144. if(ucSecond>59)
  145. {
  146. ucSecond=0;
  147. }
  148. ucWd2Part3Update=1;//更新显示
  149. break;
  150. }
  151. break;
  152. }
  153. ucVoiceLock=1;//原子锁加锁,保护主函数与中断函数的共享变量uiVoiceCnt
  154. uiVoiceCnt=const_voice_short; //按键声音触发,滴一声就停。
  155. ucVoiceLock=0;//原子锁解锁,保护主函数与中断函数

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

网站地图

Top