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

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

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

  1. Write1302 (WRITE_PROTECT,0x80); //允许写保护
  2. }
  3. ucWd2Update=1;//窗口2更新显示
  4. }
  5. break;
  6. }
  7. ucVoiceLock=1;//原子锁加锁,保护主函数与中断函数的共享变量uiVoiceCnt
  8. uiVoiceCnt=const_voice_short; //按键声音触发,滴一声就停。
  9. ucVoiceLock=0;//原子锁解锁,保护主函数与中断函数的共享变量uiVoiceCnt
  10. ucKeySec=0;//响应按键服务处理程序后,按键编号清零,避免一致触发
  11. break;
  12. case 17://长按3秒设置按键 对应朱兆祺学习板的S9键
  13. switch(ucWd)//在不同的窗口下,设置不同的参数
  14. {
  15. case 2:
  16. if(ucPart==0) //处于非设置时间的状态下,要第一次激活设置时间,必须是长按3秒才可以
  17. {
  18. ucWd=1;
  19. ucPart=1;//进入到设置日期的状态下
  20. ucWd1Update=1;//窗口1更新显示
  21. }
  22. break;
  23. }
  24. ucVoiceLock=1;//原子锁加锁,保护主函数与中断函数的共享变量uiVoiceCnt
  25. uiVoiceCnt=const_voice_short; //按键声音触发,滴一声就停。
  26. ucVoiceLock=0;//原子锁解锁,保护主函数与中断函数的共享变量uiVoiceCnt
  27. ucKeySec=0;//响应按键服务处理程序后,按键编号清零,避免一致触发
  28. break;
  29. }
  30. /* 注释六:
  31. * 注意,此处就是第一次出现的电平按键程序,跟以往的下降沿按键不一样。
  32. * ucKey4Sr是经过软件滤波处理后,直接反应IO口电平状态的变量.当电平发生
  33. * 变化时,就会切换到不同的显示界面,这里多用了一个ucKey4SrRecord变量
  34. * 记录上一次的电平状态,是为了避免一直刷新显示。
  35. */
  36. if(ucKey4Sr!=ucKey4SrRecord)//说明S13的切换按键电平状态发生变化
  37. {
  38. ucKey4SrRecord=ucKey4Sr;//及时记录当前最新的按键电平状态避免一直进来触发
  39. if(ucKey4Sr==1) //松手后切换到显示时间的窗口
  40. {
  41. ucWd=2; //显示时分秒的窗口
  42. ucPart=0;//进入到非设置时间的状态下
  43. ucWd2Update=1;//窗口2更新显示
  44. }
  45. else//按下去切换到显示日期的窗口
  46. {
  47. ucWd=1; //显示年月日的窗口
  48. ucPart=0;//进入到非设置时间的状态下
  49. ucWd1Update=1;//窗口1更新显示
  50. }
  51. }
  52. }
  53. void display_drive(void)
  54. {
  55. //以下程序,如果加一些数组和移位的元素,还可以压缩容量。但是鸿哥追求的不是容量,而是清晰的讲解思路
  56. switch(ucDisplayDriveStep)
  57. {
  58. case 1://显示第1位
  59. ucDigShowTemp=dig_table[ucDigShow1];
  60. if(ucDigDot1==1)
  61. {
  62. ucDigShowTemp=ucDigShowTemp|0x80;//显示小数点
  63. }
  64. dig_hc595_drive(ucDigShowTemp,0xfe);
  65. break;
  66. case 2://显示第2位
  67. ucDigShowTemp=dig_table[ucDigShow2];
  68. if(ucDigDot2==1)
  69. {
  70. ucDigShowTemp=ucDigShowTemp|0x80;//显示小数点
  71. }
  72. dig_hc595_drive(ucDigShowTemp,0xfd);
  73. break;
  74. case 3://显示第3位
  75. ucDigShowTemp=dig_table[ucDigShow3];
  76. if(ucDigDot3==1)
  77. {
  78. ucDigShowTemp=ucDigShowTemp|0x80;//显示小数点
  79. }
  80. dig_hc595_drive(ucDigShowTemp,0xfb);
  81. break;
  82. case 4://显示第4位
  83. ucDigShowTemp=dig_table[ucDigShow4];
  84. if(ucDigDot4==1)
  85. {
  86. ucDigShowTemp=ucDigShowTemp|0x80;//显示小数点
  87. }
  88. dig_hc595_drive(ucDigShowTemp,0xf7);
  89. break;
  90. case 5://显示第5位
  91. ucDigShowTemp=dig_table[ucDigShow5];
  92. if(ucDigDot5==1)
  93. {
  94. ucDigShowTemp=ucDigShowTemp|0x80;//显示小数点
  95. }
  96. dig_hc595_drive(ucDigShowTemp,0xef);
  97. break;
  98. case 6://显示第6位
  99. ucDigShowTemp=dig_table[ucDigShow6];
  100. if(ucDigDot6==1)
  101. {
  102. ucDigShowTemp=ucDigShowTemp|0x80;//显示小数点
  103. }
  104. dig_hc595_drive(ucDigShowTemp,0xdf);
  105. break;
  106. case 7://显示第7位
  107. ucDigShowTemp=dig_table[ucDigShow7];
  108. if(ucDigDot7==1)
  109. {
  110. ucDigShowTemp=ucDigShowTemp|0x80;//显示小数点
  111. }
  112. dig_hc595_drive(ucDigShowTemp,0xbf);
  113. break;
  114. case 8://显示第8位
  115. ucDigShowTemp=dig_table[ucDigShow8];
  116. if(ucDigDot8==1)
  117. {
  118. ucDigShowTemp=ucDigShowTemp|0x80;//显示小数点
  119. }
  120. dig_hc595_drive(ucDigShowTemp,0x7f);
  121. break;

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

网站地图

Top