您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 51单片机99秒倒计时C语言源程序
51单片机99秒倒计时C语言源程序2009-10-2920:3451单片机实现数码管99秒倒计时,其实很简单,就是使用定时器中断来实现。目的就是学习怎样用单片机实现倒计时,从而实现一些延时控制类的东西,99秒只是一个例子,你完全可以做出任意倒计时如10秒倒计时程序。定时器定时时间计算公式:初值X=M(最大计时)-计数值。初值,换算成十六进制,高位给TH0,低位给TL0,如果用定时器0的话。M(最大计时)如果是16位的,就是2的16次方,最大定时,65535微秒,实现1秒定时,可以通过定时10毫秒,然后100次改变一次秒值即可。10*100毫秒=1S计数值:你要定时多长时间,如果定时1毫秒,就是1000微秒,(单位为微秒),如果定时10毫秒,就是10000(微秒),当然,最大定时被定时器本身位数限制了,最大2的16次方(16位定时计数器),只能定时65.535毫秒。定时1S当然不可能1S定时器中断。下面为实现99秒倒计时C语言源程序/*了解定时器,这样的话,就可以做一些基本的实验了,如定时炸弹~~,10秒后打开关闭继电器*//*数码管,12M晶振*/#includereg52.h#defineucharunsignedcharsbitp11=P1^1;//连的是继电器。。codeunsignedchartab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};ucharshiwei;uchargewei;voiddelay(unsignedintcnt){while(--cnt);}voidmain(){TMOD|=0x01;/*定时器016位定时器X=65535-10000(10毫秒)=55535=D8F0(十六进制)定时10ms*/TH0=0xd8;TL0=0xf0;IE=0x82;//这里是中断优先级控制EA=1(开总中断),ET0=1(定时器0允许中断),这里用定时器0来定时TR0=1;//开定时器0while(1){P0=shiwei;//99的十位P2=0;//99的个位,delay(300);//动态扫描数码管延时P0=gewei;P2=1;delay(300);}}voidtim(void)interrupt1using1//定时器0中断{staticucharsecond=99,count;//99只是一个数,可以任意改,因为这里只学习怎样实现倒计时TH0=0xd8;//定时10毫秒TL0=0xf0;count++;if(count==100)//10毫秒定时,10*100=1000(毫秒)=1秒{count=0;second--;if(second==0){p11=0;//这里让继电器动作,当然动作之后,要复位才能等下次倒定时再动作。second=99;//回到99再循环来,当然,可以做其他的控制,}shiwei=tab[second/10];//数码管10位gewei=tab[second%10];//数码管个位}}
本文标题:51单片机99秒倒计时C语言源程序
链接地址:https://www.777doc.com/doc-2416468 .html