51单片机99秒倒计时C语言源程序

  • 格式:doc
  • 大小:20.00 KB
  • 文档页数:3

下载文档原格式

  / 3
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

51单片机99秒倒计时C语言源程序

51单片机实现数码管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晶振*/

#include

#define uchar unsigned char

sbit p20 = P2^0;

sbit p21 = P2^1;

code unsigned char

tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

code unsigned char

tab_dot[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};

uchar shiwei;

uchar gewei;

int timecounter = 50;

void delay(unsigned int cnt)

{

while(--cnt);

}

void main()

{

TMOD|=0x01; /*定时器0 16位定时器 X=65535-10000(10毫秒)

=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 timer0(void) interrupt 1 using 1 //定时器0中断

{

static uchar second=timecounter,count; //99可以任意改

TH0=0xd8; //定时10毫秒

TL0=0xf0;

count++;

if(count==10) //10毫秒定时,延时为10*10=100(毫秒)=0.1秒

{

count=0;

second--;

if(second==0)

{

P20 = ~P20;

P21 = ~P21;

second=timecounter; //回到99再循环来,当然,可以做其他的控制,}

shiwei=tab_dot[second/10]; //数码管10位gewei=tab[second%10]; //数码管个位

}

void keyscan(void)

{

}