单片机倒计时器

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

单片机倒计时器设计

一电路原理

倒计时采用stc89c52, 74hc573驱动四位数码管以及按键构成。

原理图如下:

RP1为上拉10k排阻

晶振采用12Mhz无缘晶振

数码管为四位共阴数码管

74hc573起所存作用

四个按键分别连P3.4~P3.7

二工作过程

单片机上电初始化,P0口输出0,并把四位数码管全部打开,数码管显示四个0。

检测按键如果按键key1 按下那么数码管第一位加1。

如果按键key2 按下那么数码管第一位加1。

如果按键key3 按下那么启动定时器,开始倒计时。

如果按键key4 按下倒计时暂停,数码管显示停留在当前数值。

倒计时器用到了计时器工作方式0和t0溢出中断

设定计时器初值为TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

即50ms中断一次20次记一秒从而达到记时一秒的目的。

三软件程序

程序由Keil uVision4软件用c语言编写,内容如下

#include

#include

#define uc unsigned char;

unsigned char code table[]={

0x3f,0x06,0x5b,0x4f,0x66,0x6d,

0x7d,0x07,0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71,0x76,0x79,0x38,0x3f,0};

sbit dula=P2^6;

sbit wela=P2^7;

sbit key1=P3^4;

sbit key2=P3^5;

sbit key3=P3^6;

sbit key4=P3^7;

uc shu,shi,ge,bai,t0,num,ss;

void shuma(shi,ge,ss);

void delay(unsigned int z);

void init ();

void main()

{

P3=0xff;

init();

while(1)

{

if(key4==0)

{

TR0=0;

}

if(key3==0)

TR0=1;

if(key1==0)

{

delay(5);

if(key1==0)

{

shi++;

if(shi==10)

shi=0;

}

while(!key1);

delay(5);

while(!key1);

}

dula=1;

P0=table[shi];

dula=0;

if(key2==0)

{

delay(5);

if(key2==0)

{

ge++;

if(ge==10)

ge=0;

}

while(!key2);

delay(5);

while(!key2);

}

dula=1;

P0=table[ge];

dula=0;

shuma(shi,ge,ss);

}

}

void init()

{

shi=0;

ge=0;

ss=0;

TMOD=0x11;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

EA=1;

ET0=1;

EX0=1;

}

void time0() interrupt 1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

t0++;

if(t0==2)

{

t0=0;

if(ss==0)

{

if(ge==0)

{

if(shi==0)

TR0=0;

else

{

ge=9;

shi--;

ss=9;

}

}

else

{

ss=9;

ge--;

}

}

else

ss--;

}

}

void shuma(shi,ge,ss)

{

dula=1;

P0=table[shi];

dula=0;

P0=0xff;

delay(10);

wela=1;

P0=0xfe;

wela=0;

delay(10);

dula=1;

P0=table[ge];

dula=0;

P0=0xff;

delay(10);

wela=1;

P0=0xfd;

wela=0;

delay(10);

dula=1;

P0=table[ss];

dula=0;

P0=0xff;

delay(10);

wela=1;

P0=0xfb ;

相关文档
最新文档