利用单片机设计实现一个60秒倒计时显示装置,并且计时到后发出报警声音。

利用单片机设计实现一个60秒倒计时显示装置,并且计时到后发出报警声音。

任务指引:
1、此倒计时装置只有60S,只需2位数码管,因此使用P1、P2口静态显示就行了。

2、完成倒计时,首先是要解决1S定时的问题,每1S到后把计数器time减1。由于单片机还有计数处理、显示输出等任务,使用软件延时方式将会使计时不准确,所以要使用定时/计数器、中断地方式进行定时。

求这道题的C语言代码,有图

#include<reg52.h>
sbit bz=P3^1;
unsigned char a[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xd8,0x80,0x90};
unsigned char n,time=60;
main()
{
P1=a[0];
P2=a[6];
TMOD=0X01;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
EA=1;
ET0=1;
TR0=1;
while(1);
}
timer0() interrupt 1
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
if(time!=0)
{
n++;
if(n==100)
{
n=0;
time--;
P1=a[time%10];
P2=a[time/10];
}
}
else bz=~bz;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-10-29
#include <reg51.H>
sbit BUZZER =P3^1;
unsigned char code dispcode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0x00};
unsigned char second=60;
unsigned char keycnt;
unsigned int tcnt;
unsigned int flag;
void delay05s(void)
{
unsigned char i,j,k;
for(i=5;i>0;i--)
for(j=200;j>0;j--)
for(k=248;k>0;k--);
}
void main(void)
{
unsigned char i,j;
TMOD=0x02;
ET0=1;
EA=1;
second=0;
P2=dispcode[second/10];
P1=dispcode[second%10];
while(1)
{
if(flag==1)
{
BUZZER=1;
delay05s();
BUZZER=0;
delay05s();
}
}
}
void t0(void) interrupt 1 using 0
{
tcnt++;
if(tcnt==4000)
{
tcnt=0;
second--;
if(second==0)
{
second=0;
flag=1;
TR0=0;
}
P2=dispcode[second/10];
P1=dispcode[second%10];
}
}本回答被网友采纳
第2个回答  2014-10-30
没有按键控制?

晶振选用多少?