T1定时器处理函数——学习笔记论坛——站长专属——冰糖橙之家

T1定时器处理函数

一、代码总览

void T1_Proc()
{
	if(!TF1) //定时时间未到,返回
		return;
	TF1 = 0 ; //定时时间到,TF1标记置0,防止事情没做完一直进入
	if(++uims==1000)
	{
			uims = 0;
			if(++ucSec==60) //1分钟到
			{
					ucSec = 0;
					if(++ucMin==60) //1小时到
							ucMin = 0;
			}
	}
	if(++uiSeg_Dly==500) //控制锁存器的周期
		uiSeg_Dly = 0;  //允许新的数据对数码管进行更新
	if(uims % 4 == 0) //每隔4ms刷新一个数码管
	{
		Seg_Disp(pucseg_Code, ucseg_Pos); //在ucseg_Pos位置上显示A4编码的数字
		if(++ucseg_Pos == 4)  // 0 1 2 3
			 ucseg_Pos = 0;
	}
}

二、分段解析

1、定时器TF1判断

if(!TF1)
	return;
TF1 = 0 ;

判断TF1值,如TF1=0则返回,TF1=1则将TF1重置为0后继续执行代码。

2、时分秒计时累加

if(++uims==1000)
{
		uims = 0;
		if(++ucSec==60) //1分钟到
		{
				ucSec = 0;
				if(++ucMin==60) //1小时到
						ucMin = 0;
		}
}

uims = 0;1s到时将毫秒重置为0,1000ms=1s。

ucSec = 0;1min到时将分钟重置为0,1min=60s。

ucMin = 0;1h到时将小时重置为0,1h=60min。

3、锁存器控制函数

if(++uiSeg_Dly==500) 
	uiSeg_Dly = 0;

控制锁存器的周期,当uiSeg_Dly = 0时允许新的数据对数码管进行更新。

4、数码管刷新函数

if(uims % 4 == 0)
{
	Seg_Disp(pucseg_Code, ucseg_Pos); 
	if(++ucseg_Pos == 4) 
		 ucseg_Pos = 0;
}

if(uims % 4 == 0)判断当前ms时间是否可以整除4ms,每隔4ms刷新一个数码管。

if(++ucseg_Pos == 4) 
	 ucseg_Pos = 0;

当位码ucseg_Pos为4时,重置为0。

请登录后发表评论

    没有回复内容