选用芯片: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]; } } } }