定时器查询方式
选用芯片:AT89S52
注意:定时器查询方式使用时记得标志位需要软件清零
此程序主要展示定时器的查询方法设计,主程序很简单,可以根据自己需要自行设计,主要是学会用定时器查询方式,学习设计思路。这样自己拿到任何型号的51单片机,只要有原理图,都可以自主设计。
博主刚接触单片机,才疏学浅,可能会出现设计不足和错误,欢迎大家评论区交流。^ _ ^
/***********************************************************
此函数功能为:定时器T0的查询方式,时间每过一秒在数码管的显示
值加一,从0——F循环显示。
作者:Crazy Wind
日期:2020.10.1
version:1.0.0
***********************************************************/
#include "reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;
u8 code smgduan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; //数码管显示0-F
u8 code smgwei[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //位码
void dsq() //定时器
{
TMOD=0x01; //定时器T0的模式1
TH0=0x4C; //定时器T0的高8位赋初值 (11.0592MHz)
TL0=0x00; //定时器T0的低8位赋初值
TR0=1; //启动定时器T0
TF0=0; //溢出标志位 清零
}
void main()
{
u16 i,k;
i=0;
P2=smgwei[0]; //赋位码
P0=smgduan[0]; //赋段码 (初值为0)
dsq(); //定时器
while(1) //循环查询检测
{
while(TF0==1) //当记满溢出 TF0为1
{
TF0=0; //查询方式 *标志位需要软件清零
i++;
TH0=0x3C; //再次赋初值
TL0=0xB0;
if(i==20) //1秒(20个50ms)
{
i=0;
k++;
if(k==16)
{
k=0;
}
P0=smgduan[k];
}
}
}
}