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

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

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

  1. 知主函数及时更新采集时间数据
  2. ucTimerSecond++; //秒时间累加1
  3. if(ucTimerSecond>=60)
  4. {
  5. ucTimerSecond=0;
  6. ucTimerMinute++; //分时间累加1
  7. if(ucTimerMinute>=60)
  8. {
  9. ucTimerMinute=0;
  10. ucTimerHour++;//小时的时间累加1,为了避免if的嵌套过多,把小时的判断放到外面两层的if来继续判断
  11. }
  12. }
  13. if(ucTimerHour>=24)
  14. {
  15. ucTimerHour=0;
  16. ucTimerDate++; //天时间累加1
  17. ucTimerDateMax=get_date(ucTimerYear,ucTimerMonth);//根据年和月获取当前月份的最大天数
  18. if(ucTimerDate>ucTimerDateMax)//
  19. {
  20. ucTimerDate=1; //每个月都是从1号开始
  21. ucTimerMonth++;//月时间累加1
  22. if(ucTimerMonth>12)
  23. {
  24. ucTimerMonth=1; //每年从1月份开始
  25. ucTimerYear++; //年时间累加1
  26. if(ucTimerYear>99) //本系统的最高有效年份是2099年
  27. {
  28. ucTimerYear=99;
  29. }
  30. }
  31. }
  32. }
  33. }
  34. }
  35. if(ucVoiceLock==0) //原子锁判断
  36. {
  37. if(uiVoiceCnt!=0)
  38. {
  39. uiVoiceCnt--; //每次进入定时中断都自减1,直到等于零为止。才停止鸣叫
  40. beep_dr=0;//蜂鸣器是PNP三极管控制,低电平就开始鸣叫。
  41. }
  42. else
  43. {
  44. ; //此处多加一个空指令,想维持跟if括号语句的数量对称,都是两条指令。不加也可以。
  45. beep_dr=1;//蜂鸣器是PNP三极管控制,高电平就停止鸣叫。
  46. }
  47. }
  48. if(ucDpyTimeLock==0) //原子锁判断
  49. {
  50. uiDpyTimeCnt++;//数码管的闪烁计时器
  51. }
  52. key_scan(); //按键扫描函数
  53. display_drive();//数码管字模的驱动函数
  54. TH0=0xfe; //重装初始值(65535-500)=65035=0xfe0b
  55. TL0=0x0b;
  56. TR0=1;//开中断
  57. }
  58. void delay_short(unsigned int uiDelayShort)
  59. {
  60. unsigned int i;
  61. for(i=0;i
  62. {
  63. ; //一个分号相当于执行一条空语句
  64. }
  65. }
  66. void delay_long(unsigned int uiDelayLong)
  67. {
  68. unsigned int i;
  69. unsigned int j;
  70. for(i=0;i
  71. {
  72. for(j=0;j<500;j++)//内嵌循环的空指令数量
  73. {
  74. ; //一个分号相当于执行一条空语句
  75. }
  76. }
  77. }
  78. void initial_myself(void)//第一区 初始化单片机
  79. {
  80. key_gnd_dr=0; //模拟独立按键的地GND,因此必须一直输出低电平
  81. beep_dr=1; //用PNP三极管控制蜂鸣器,输出高电平时不叫。
  82. hc595_drive(0x00,0x00);//关闭所有经过另外两个74HC595驱动的LED灯
  83. TMOD=0x01;//设置定时器0为工作方式1
  84. TH0=0xfe; //重装初始值(65535-500)=65035=0xfe0b
  85. TL0=0x0b;
  86. }
  87. void initial_peripheral(void) //第二区 初始化外围
  88. {
  89. ucDigDot8=0; //小数点全部不显示
  90. ucDigDot7=0;
  91. ucDigDot6=0;
  92. ucDigDot5=0;
  93. ucDigDot4=0;
  94. ucDigDot3=0;
  95. ucDigDot2=0;
  96. ucDigDot1=0;
  97. EA=1; //开总中断
  98. ET0=1; //允许定时中断
  99. TR0=1; //启动定时中断
  100. }

总结陈词:

任何一个电子产品在投入生产的时候都要考虑到生产的测试,朱兆祺51单片机学习板在生产加工后也一样要进行测试。那么这个测试的程序如何能够做到快速,全面,易用这三个要求呢?欲知详情,请听下回分解-----生产朱兆祺51学习板的从机自检测试程序源代码.。

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

网站地图

Top