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

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

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

  1. ucMonth--;
  2. if(ucMonth<1)
  3. {
  4. ucMonth=1;
  5. }
  6. ucWd1Part2Update=1;//更新显示
  7. break;
  8. case 3: //日
  9. ucDate--;
  10. if(ucDate<1)
  11. {
  12. ucDate=1;
  13. }
  14. ucWd1Part3Update=1;//更新显示
  15. break;
  16. }
  17. break;
  18. case 2:
  19. switch(ucPart) //在不同的局部变量下,相当于二级菜单
  20. {
  21. case 1://时
  22. ucHour--;
  23. if(ucHour>23)
  24. {
  25. ucHour=0;
  26. }
  27. ucWd2Part1Update=1;//更新显示
  28. break;
  29. case 2: //分
  30. ucMinute--;
  31. if(ucMinute>59)
  32. {
  33. ucMinute=0;
  34. }
  35. ucWd2Part2Update=1;//更新显示
  36. break;
  37. case 3: //秒
  38. ucSecond--;
  39. if(ucSecond>59)
  40. {
  41. ucSecond=0;
  42. }
  43. ucWd2Part3Update=1;//更新显示
  44. break;
  45. }
  46. break;
  47. }
  48. ucVoiceLock=1;//原子锁加锁,保护主函数与中断函数的共享变量uiVoiceCnt
  49. uiVoiceCnt=const_voice_short; //按键声音触发,滴一声就停。
  50. ucVoiceLock=0;//原子锁解锁,保护主函数与中断函数的共享变量uiVoiceCnt
  51. ucKeySec=0;//响应按键服务处理程序后,按键编号清零,避免一致触发
  52. break;
  53. case 3://短按设置按键 对应朱兆祺学习板的S9键
  54. switch(ucWd)//在不同的窗口下,设置不同的参数
  55. {
  56. case 1:
  57. ucPart++;
  58. if(ucPart>3)
  59. {
  60. ucPart=1;
  61. ucWd=2; //切换到第二个窗口,设置时分秒
  62. ucWd2Update=1;//窗口2更新显示
  63. }
  64. ucWd1Update=1;//窗口1更新显示
  65. break;
  66. case 2:
  67. if(ucPart>0) //在窗口2的时候,要第一次激活设置时间,必须是长按3秒才可以,这里短按激活不了第一次
  68. {
  69. ucPart++;
  70. if(ucPart>3)//设置时间结束
  71. {
  72. ucPart=0;
  73. /* 注释五:
  74. * 每个月份的天数最大值是不一样的,在写入ds1302时钟芯片内部数据前,应该做一次调整。
  75. * 有的月份最大28天,有的月份最大29天,有的月份最大30天,有的月份最大31天,
  76. */
  77. ucDate=date_adjust(ucYear,ucMonth,ucDate); //日调整 避免日的数值在某个月份超范围
  78. ucYearBCD=number_to_bcd(ucYear);//原始数值转BCD
  79. ucMonthBCD=number_to_bcd(ucMonth); //原始数值转BCD
  80. ucDateBCD=number_to_bcd(ucDate);//原始数值转BCD
  81. ucHourBCD=number_to_bcd(ucHour);//原始数值转BCD
  82. ucMinuteBCD=number_to_bcd(ucMinute);//原始数值转BCD
  83. ucSecondBCD=number_to_bcd(ucSecond);//原始数值转BCD
  84. Write1302 (WRITE_PROTECT,0X00); //禁止写保护
  85. Write1302 (WRITE_YEAR,ucYearBCD); //年修改
  86. Write1302 (WRITE_MONTH,ucMonthBCD); //月修改
  87. Write1302 (WRITE_DATE,ucDateBCD); //日修改
  88. Write1302 (WRITE_HOUR,ucHourBCD); //小时修改
  89. Write1302 (WRITE_MINUTE,ucMinuteBCD); //分钟修改
  90. Write1302 (WRITE_SECOND,ucSecondBCD); //秒位修改

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

网站地图

Top