51单片机99秒倒计时C语言源程序
局域网 共享51单片机99秒倒计时C语言源程序
丁俊晖 147
51单片机实现数码管99秒倒计时,其实很简单,就是使用定时器中断来实现。目的就是学习怎样用单片机实现倒计时,从而实现一些延时控制类的东西,99秒只是一个例子,你完全可以做出任意倒计时如10秒倒计时程序。定时器定时时间计算公式:初值X=M(最大计时)-计数值。
初值,换算成十六进制,高位给TH0,低位给TL0,如果用定时器0的话。
M(最大计时)如果是16位的,就是216次方,最大定时,65535 微秒,实现1秒定时,可以通过定时10毫秒,然后100次改变一次秒值即可。10*100毫秒=1S
计数值:你要定时多长时间,如果定时1领结婚证都需要什么毫秒,就是1000微秒,(单位为微秒),如果定时10毫秒,就是10000(微秒),当然,最大定时被定时器本身位数限制了,最大216次方(16位定时计数器),只能定时65.535毫秒。定时1S当然不可能1S定时器中断。
下面为实现99秒倒计时C语言源程序
/*了解定时器,这样的话,就可以做一些基本的实验了,如定时~~10秒后打开关闭继电器*/
/*数码管,12M晶振*/
#include <reg52.h>鹌鹑蛋罐头
#define uchar unsigned char
sbit p11=P1^1;  //连的是继电器。。
code unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar shiwei;
uchar gewei;
void delay(unsigned int cnt)
{
while(--cnt);
}
void main()
{
TMOD|=0x01;  /*定时器 16位定时器    X=65535-1000010毫秒)=55535=D8F0(十六进制)定时八字合婚准吗10ms
*/
TH0=0xd8;
TL0=0xf0;
IE=0x82;    //这里是中断优先级控制EA=1(开总中断),ET0=1(定时器0允许中断),这里用定时器0来定时
TR0=1;    //开定时器0
while(1)
{
P0=shiwei;        //99的十位
P2=0;            //99的个位,
delay(300);    //动态扫描数码管延时
P0=gewei;
P2=1;
delay(300);
}
}
void tim(void) interrupt 1 using 1    //定时器0中断   
{
static uchar second=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];        //数码管个位
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。