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

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

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

  1. earTemp;
  2. uiYearYu=uiYearTemp%4;
  3. if(uiYearYu==0) //闰年
  4. {
  5. if(ucDayResult>29)
  6. {
  7. ucDayResult=29;
  8. }
  9. }
  10. else
  11. {
  12. if(ucDayResult>28)
  13. {
  14. ucDayResult=28;
  15. }
  16. }
  17. break;
  18. case 4:
  19. case 6:
  20. case 9:
  21. case 11:
  22. if(ucDayResult>30)
  23. {
  24. ucDayResult=30;
  25. }
  26. break;
  27. }
  28. return ucDayResult;
  29. }
  30. void display_service(void) //显示的窗口菜单服务程序
  31. {
  32. switch(ucWd)//本程序的核心变量,窗口显示变量。类似于一级菜单的变量。代表显示不同的窗口。
  33. {
  34. case 1: //显示日期窗口的数据数据格式 NN-YY-RR 年-月-日
  35. if(ucWd1Update==1)//窗口1要全部更新显示
  36. {
  37. ucWd1Update=0;//及时清零标志,避免一直进来扫描
  38. ucDigShow6=11;//显示一杠"-"
  39. ucDigShow3=11;//显示一杠"-"
  40. ucWd1Part1Update=1;//局部年更新显示
  41. ucWd1Part2Update=1;//局部月更新显示
  42. ucWd1Part3Update=1;//局部日更新显示
  43. }
  44. if(ucWd1Part1Update==1)//局部年更新显示
  45. {
  46. ucWd1Part1Update=0;
  47. ucTemp8=ucYear/10;//年
  48. ucTemp7=ucYear%10;
  49. ucDigShow8=ucTemp8; //数码管显示实际内容
  50. ucDigShow7=ucTemp7;
  51. }
  52. if(ucWd1Part2Update==1)//局部月更新显示
  53. {
  54. ucWd1Part2Update=0;
  55. ucTemp5=ucMonth/10;//月
  56. ucTemp4=ucMonth%10;
  57. ucDigShow5=ucTemp5; //数码管显示实际内容
  58. ucDigShow4=ucTemp4;
  59. }
  60. if(ucWd1Part3Update==1) //局部日更新显示
  61. {
  62. ucWd1Part3Update=0;
  63. ucTemp2=ucDate/10;//日
  64. ucTemp1=ucDate%10;
  65. ucDigShow2=ucTemp2; //数码管显示实际内容
  66. ucDigShow1=ucTemp1;
  67. }
  68. //数码管闪烁
  69. switch(ucPart)//相当于二级菜单,根据局部变量的值,使对应的参数产生闪烁的动态效果。
  70. {
  71. case 0://都不闪烁
  72. break;
  73. case 1://年参数闪烁
  74. if(uiDpyTimeCnt==const_dpy_time_half)
  75. {
  76. ucDigShow8=ucTemp8; //数码管显示实际内容
  77. ucDigShow7=ucTemp7;
  78. }
  79. else if(uiDpyTimeCnt>const_dpy_time_all) //const_dpy_time_all一定要比const_dpy_time_half 大
  80. {
  81. ucDpyTimeLock=1; //原子锁加锁
  82. uiDpyTimeCnt=0; //及时把闪烁记时器清零
  83. ucDpyTimeLock=0;//原子锁解锁
  84. ucDigShow8=10; //数码管显示空,什么都不显示
  85. ucDigShow7=10;
  86. }
  87. break;
  88. case 2: //月参数闪烁
  89. if(uiDpyTimeCnt==const_dpy_time_half)
  90. {
  91. ucDigShow5=ucTemp5; //数码管显示实际内容
  92. ucDigShow4=ucTemp4;
  93. }
  94. else if(uiDpyTimeCnt>const_dpy_time_all) //const_dpy_time_all一定要比const_dpy_time_half 大
  95. {
  96. ucDpyTimeLock=1; //原子锁加锁
  97. uiDpyTimeCnt=0; //及时把闪烁记时器清零
  98. ucDpyTimeLock=0;//原子锁解锁
  99. ucDigShow5=10; //数码管显示空,什么都不显示
  100. ucDigShow4=10;
  101. }
  102. break;
  103. case 3: //日参数闪烁
  104. if(uiDpyTimeCnt==const_dpy_time_half)
  105. {
  106. ucDigShow2=ucTemp2; //数码管显示实际内容
  107. ucDigShow1=ucTemp1;
  108. }
  109. else if(uiDpyTimeCnt>const_dpy_time_all) //const_dpy_time_all一定要比const_dpy_time_half 大
  110. {
  111. ucDpyTimeLock=1; //原子锁加锁
  112. uiDpyTimeCnt=0; //及时把闪烁记时器清零
  113. ucDpyTimeLock=0;//原子锁解锁
  114. ucDigShow2=10; //数码管显示空,什么都不显示
  115. ucDigShow1=10;
  116. }
  117. break;
  118. }
  119. break;
  120. case 2: //显示时间窗口的数据数据格式 SS FF MM 时 分 秒
  121. if(ucWd2Update==1)//窗口2要全部更新显示
  122. {
  123. ucWd2Update=0;//及时清零标志,避免一直进来扫描
  124. ucDigShow6=10;//显示空
  125. ucDigShow3=10;//显示空
  126. ucWd2Part3Update=1;//局部时更新显示
  127. ucWd2Part2Update=1;//局部分更新显示
  128. ucWd2Part1Update=1;//局部秒更新显示
  129. }
  130. if(ucWd2Part1Update==1)//局部时更新显示
  131. {
  132. ucWd2Part1Update=0;
  133. ucTemp8=ucHour/10;//时
  134. ucTemp7=ucHour%10;
  135. ucDigShow8=ucTemp8; //数码管显示实际内容
  136. ucDigShow7=ucTemp7;
  137. }
  138. if(ucWd2Part2Update==1)//局部分更

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

网站地图

Top