赞
踩
- #include <REGX52.H>
- #include "Delay.h"
- #include "LCD1602.h"
- #include "Timer0.h"
-
-
- unsigned char Sec = 55,Min = 59,Hour = 23;
-
- void main()
- {
-
- LCD_Init(); //初始化LCD1602显示屏
- Timer0Init(); //调用 Timer0Init() 函数初始化定时器0,并设置中断
- LCD_ShowString(1,1,"Clock:"); /*使用 LCD_ShowString() 和 LCD_ShowNum()
- 函数在LCD上显示初始的时钟字符串和时间*/
- LCD_ShowString(2,1," : :");
- while(1) //无限循环,在每次迭代中调用 LCD_ShowNum()
- //函数更新LCD上的时间显示。
- {
- LCD_ShowNum(2,1,Hour,2);
- LCD_ShowNum(2,4,Min,2);
- LCD_ShowNum(2,7,Sec,2);
- }
-
- }
-
- void Time0_Routine() interrupt 1
- {
- static unsigned int T0Count;
- TL0 = 0x18;
- TH0 = 0Xfc; //使用 TL0 和 TH0 设置定时器0的初始值
- T0Count++; //在每次中断中,T0Count 自增并进行判断
- if(T0Count>=1000) //如果 T0Count 达到 1000(约为1秒),
- //则将其重置为 0,并进行时间递增操作。
- {
- T0Count = 0; //时间递增的逻辑为:秒数 Sec 自增,
- //如果秒数超过等于 60,则秒数重置为 0,
- //分钟数 Min 自增,如果分钟数超过等于 60,则分钟数重置为 0,
- //小时数 Hour 自增,如果小时数超过等于 24,则小时数重置为 0
- Sec++;
- if(Sec>=60)
- {
- Sec=0;
- Min++;
- if(Min>=60)
- {
- Min = 0;
- Hour++;
- if(Hour>=24)
- {
- Hour = 0;
- }
- }
-
- }
- }
- }
-
-
-
- #include <REGX52.H>
-
- /*
- *:定时器初始化
- */
-
-
- void Timer0Init(void)
- {
- //TMOD = 0X01; //0000 0001
-
- TMOD = TMOD&0xF0; //把低四位清0,高四位不变;配置 TMOD 寄存器:通过位运算清零低四位,保留高四位,并将最低位置1,以设置定时器0的工作方式
- TMOD = TMOD|0x01; //把最低位置1,高四位不变
- TL0 = 0x18;
- TH0 = 0Xfc; //设置定时初始值
- TF0 = 0;
- TR0 = 1;
- ET0 =1;
- EA=1; //打开总中断开关
- PT0=0;
-
- }
-
-
- /* 定时器模板
- void Time0_Routine() interrupt 1
- {
- static unsigned int T0Count;
- TL0 = 0x18;
- TH0 = 0Xfc; //设置定时初始值
- T0Count++;
- if(T0Count>=1000)
- {
- T0Count = 0;
- P2_0 = ~P2_0;
- }
- }
- */
代码解读:
这段代码是一个定时器初始化函数
Timer0Init()
的定义,用于初始化8051单片机的定时器0。在函数内部的操作包括:
- 配置
TMOD
寄存器:通过位运算清零低四位,保留高四位,并将最低位置1,以设置定时器0的工作方式。- 设置
TL0
和TH0
的初始值:将TL0
设置为 0x18,将TH0
设置为 0xFC,这是用来控制定时器0计数的初值。- 清除定时器0溢出标志
TF0
。- 启动定时器0:将
TR0
设置为 1,启动定时器0的计数。- 允许定时器0中断
ET0
,使能定时器0中断。- 打开总中断开关
EA
,允许中断的触发。- 设置定时器0中断的优先级
PT0
。这段代码的作用是初始化定时器0,使其开始工作并能够触发中断。
在使用这段代码时,需要在主程序中调用
Timer0Init()
函数来初始化定时器0,以启动定时器的计数和中断功能。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。