这里需要了解的是定时器的使用,在单片机的如何取配置定时器,我们在数据手册中取找到定时器配置相应的寄存器,并将它配置好,就可以使用了
我们在使用时需要按照上图中显示的寄存器去配置,所以
#include <REGX52.H>
/*
void Timer0_Init(void)
{
// TMOD = 0x01; //0000 0001
TMOD&=0xF0; //把TMOD的低四位清零,高四位保持不变
TMOD|=0x01; //把TMOD的最低位置1,高四位保持不变
TF0=0;
TR0=1;
TH0=0xFC; //64535/256取高八位
TL0=0x17; //64535%256取低八位
ET0=1;
EA=1;
PT0=0;
}
*/
/**
* @brief 定时器0初始化,1毫秒@12.000MHz
* @param 无
* @retval 无
*/
void Timer0Init(void) //1毫秒@12.000MHz
{
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x01; //设置定时器模式
TL0 = 0x18; //设置定时初值
TH0 = 0xFC; //设置定时初值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0=1;
EA=1;
PT0=0;
}
/*定时器中断函数模板
void Timer0_Routine(void) interrupt 1
{
static unsigned int T0_Count;
TL0 = 0x18; //设置定时初值
TH0 = 0xFC; //设置定时初值
T0_Count++;
if(T0_Count>=1000)
{
T0_Count=0;
}
}
*/
我们还需要了解中断系统是如何的
将中断函数以及中断配置好后就可以使用了
#include <REGX52.H>
#include "Delay.h"
#include "LCD1602.h"
#include "Timer0.h"
unsigned char Sec,Min,Hour;
void main(void)
{
LCD_Init();
Timer0Init();
LCD_ShowString(1,1,"Clock:");
LCD_ShowString(2,1," : :");
while(1)
{
LCD_ShowNum(2,1,Hour,2);
LCD_ShowNum(2,4,Min,2);
LCD_ShowNum(2,7,Sec,2);
}
}
void Timer0_Routine(void) interrupt 1
{
static unsigned int T0_Count;
TL0 = 0x18; //设置定时初值
TH0 = 0xFC; //设置定时初值
T0_Count++;
if(T0_Count>=1000)
{
T0_Count=0;
Sec++;
if(Sec>=60)
{
Sec=0;
Min++;
if(Min>=60)
{
Min=0;
Hour++;
if(Hour>=24)
{
Hour=0;
}
}
}
}
}