微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 第48节:利用DS1302做一个实时时钟

第48节:利用DS1302做一个实时时钟

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

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

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

网站地图

Top