微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > STC89C52单片机的定时器使用

STC89C52单片机的定时器使用

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

函数名称:Timer_Display
函数功能:把显示缓冲区的数值显示在数码管上
参数介绍:cNumber:记录for语句的循环次数
返回值:
注意事项:无
/////////////////////////////////////////////////////////////////////////
void Timer_Display()
{
uchar cNumber;
for(cNumber=0;cNumber<6;cNumber++)
{
One_DigitalTube_display(uDis_buff[cNumber],cNumber);
if(cNumber==1|cNumber==3)
{
Digital_tube_Duan_Enable; //使能数码管的段选
Digital_tube_Duan=0x80; //输入所要显示的数值
Digital_tube_Duan_Disable; //关闭数码管的段选

Digital_tube_Wei_Enable; //使能数码管的位选
Digital_tube_Duan=Dis_Position[cNumber]; //点亮特定的数码管的公共端
Digital_tube_Wei_Disable; //关闭数码管的位选
DelayMs(1);
}
}
}
/////////////////////////////////////////////////////////////////////////

函数名称:main
函数功能:利用定时器2中断,实现准确的时钟系统,然后在数码管上显示实现
参数介绍:无
返回值:
注意事项:无
/////////////////////////////////////////////////////////////////////////
void main()
{
Init_time1(); //初始化定时器1
cTime[0]=23,cTime[1]=58,cTime[2]=58;
Time_to_disbuffer(); //把预设时间送入显示缓冲区
while(1)
{
if(cTime_1s_ok) //判断是否到1秒了
{
cTime_1s_ok=0;
if(++cTime[2]>=60) //每次自加一,同时判断是否到1分钟
{
cTime[2]=0;
if(++cTime[1]>=60) //每次自加一,同时判断是否到1小时了
{
cTime[1]=0;
if(++cTime[0]>=24) //每次自加一,同时判断是否到24点了
{
cTime[0]=0;
}
}
}
Time_to_disbuffer(); //新调整好的时间送入显示缓冲区
}
Timer_Display(); //更新显示内容
}
}
/////////////////////////////////////////////////////////////////////////

函数名称:Interrupt_handler_time2
函数功能:重新给寄存器TH2和TL2赋值,判断是否到达一秒,如果到一秒了,把相应的
变量赋予正值,以方便其他的程序编写
参数介绍:无
返回值:
注意事项:无
/////////////////////////////////////////////////////////////////////////
void Interrupt_handler_time2(void) interrupt 5
{
TF2=0;
TH2=(65535-10000)/256;//定时10毫秒
TL2=(65535-10000)%6;
cTime_10ms_counter++;
if(cTime_10ms_counter==Time_1s_Sign) //判断是否到达一秒
{
cTime_10ms_counter=0;
cTime_1s_ok=1;
}
}

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

网站地图

Top