当前位置:   article > 正文

51单片机-------实现数字时钟功能_51单片机时钟程序代码

51单片机时钟程序代码

主函数

  1. #include <REGX52.H>
  2. #include "Delay.h"
  3. #include "LCD1602.h"
  4. #include "Timer0.h"
  5. unsigned char Sec = 55,Min = 59,Hour = 23;
  6. void main()
  7. {
  8. LCD_Init(); //初始化LCD1602显示屏
  9. Timer0Init(); //调用 Timer0Init() 函数初始化定时器0,并设置中断
  10. LCD_ShowString(1,1,"Clock:"); /*使用 LCD_ShowString() 和 LCD_ShowNum()
  11. 函数在LCD上显示初始的时钟字符串和时间*/
  12. LCD_ShowString(2,1," : :");
  13. while(1) //无限循环,在每次迭代中调用 LCD_ShowNum()
  14. //函数更新LCD上的时间显示。
  15. {
  16. LCD_ShowNum(2,1,Hour,2);
  17. LCD_ShowNum(2,4,Min,2);
  18. LCD_ShowNum(2,7,Sec,2);
  19. }
  20. }
  21. void Time0_Routine() interrupt 1
  22. {
  23. static unsigned int T0Count;
  24. TL0 = 0x18;
  25. TH0 = 0Xfc; //使用 TL0 和 TH0 设置定时器0的初始值
  26. T0Count++; //在每次中断中,T0Count 自增并进行判断
  27. if(T0Count>=1000) //如果 T0Count 达到 1000(约为1秒),
  28. //则将其重置为 0,并进行时间递增操作。
  29. {
  30. T0Count = 0; //时间递增的逻辑为:秒数 Sec 自增,
  31. //如果秒数超过等于 60,则秒数重置为 0,
  32. //分钟数 Min 自增,如果分钟数超过等于 60,则分钟数重置为 0,
  33. //小时数 Hour 自增,如果小时数超过等于 24,则小时数重置为 0
  34. Sec++;
  35. if(Sec>=60)
  36. {
  37. Sec=0;
  38. Min++;
  39. if(Min>=60)
  40. {
  41. Min = 0;
  42. Hour++;
  43. if(Hour>=24)
  44. {
  45. Hour = 0;
  46. }
  47. }
  48. }
  49. }
  50. }

定时器初始化函数

  1. #include <REGX52.H>
  2. /*
  3. *:定时器初始化
  4. */
  5. void Timer0Init(void)
  6. {
  7. //TMOD = 0X01; //0000 0001
  8. TMOD = TMOD&0xF0; //把低四位清0,高四位不变;配置 TMOD 寄存器:通过位运算清零低四位,保留高四位,并将最低位置1,以设置定时器0的工作方式
  9. TMOD = TMOD|0x01; //把最低位置1,高四位不变
  10. TL0 = 0x18;
  11. TH0 = 0Xfc; //设置定时初始值
  12. TF0 = 0;
  13. TR0 = 1;
  14. ET0 =1;
  15. EA=1; //打开总中断开关
  16. PT0=0;
  17. }
  18. /* 定时器模板
  19. void Time0_Routine() interrupt 1
  20. {
  21. static unsigned int T0Count;
  22. TL0 = 0x18;
  23. TH0 = 0Xfc; //设置定时初始值
  24. T0Count++;
  25. if(T0Count>=1000)
  26. {
  27. T0Count = 0;
  28. P2_0 = ~P2_0;
  29. }
  30. }
  31. */

代码解读:

这段代码是一个定时器初始化函数 Timer0Init() 的定义,用于初始化8051单片机的定时器0。

在函数内部的操作包括:

  1. 配置 TMOD 寄存器:通过位运算清零低四位,保留高四位,并将最低位置1,以设置定时器0的工作方式。
  2. 设置 TL0TH0 的初始值:将 TL0 设置为 0x18,将 TH0 设置为 0xFC,这是用来控制定时器0计数的初值。
  3. 清除定时器0溢出标志 TF0
  4. 启动定时器0:将 TR0 设置为 1,启动定时器0的计数。
  5. 允许定时器0中断 ET0,使能定时器0中断。
  6. 打开总中断开关 EA,允许中断的触发。
  7. 设置定时器0中断的优先级 PT0

这段代码的作用是初始化定时器0,使其开始工作并能够触发中断。

在使用这段代码时,需要在主程序中调用 Timer0Init() 函数来初始化定时器0,以启动定时器的计数和中断功能。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/408613
推荐阅读
相关标签
  

闽ICP备14008679号