关于定时器的相关知识在我看来主要是定时器的参数设置,然后在定时器中断函数中完成相关的功能
上图是关于定时器初始化函数和中断函数,中断函数可以设置函数调用的间隔。以下是我设计的定时器时钟代码
Timer0.c
#include <REGX52.H>
/**
*@brief ¶¨Ê±Æ÷0³õʼ»¯£¬1ºÁÃë
*@param ÎÞ
*@retval ÎÞ
*/
void Timer0_Init()
{
TMOD &= 0xF0;
TMOD |= 0x01;
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;
}
}
*/
main.c
#include <REGX52.H>
#include "Delay.h"
#include "Timer0.h"
#include "LCD1602.h"
unsigned char Sec=59,Min=59,Hour=23;
void main()
{
LCD_Init();
LCD_ShowString(1,1,"Clock:");
LCD_ShowString(2,3,":");
LCD_ShowString(2,6,":");
Timer0_Init();
while(1)
{
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;
T0Count++;
if(T0Count>=1000)
{
T0Count=0;
Sec++;
if(Sec>=60)
{
Sec=0;
Min++;
if(Min>=60)
{
Min=0;
Hour++;
if(Hour>=24)
{
Hour=0;
}
}
}
}
}