51单片机-------实现数字时钟功能

主函数

#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。

在函数内部的操作包括:

  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,以启动定时器的计数和中断功能。

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青葱岁月夏小凡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值