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

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

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

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

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

网站地图

Top