单片机12分钟倒计时
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
比赛时间还原、暂停、倒计时设置
按键1用来还原比赛的时间。本设计设定的每节比赛的时间为12分钟。当按下1键时,每节比赛剩余时间还原为“12:00”,并显示在数码管上。时间还原后比赛就可以开始了,如果裁判吹响开始的哨声,则应立即按下2键使倒计时开始。如果出现死球情况,就要按下3键,使倒计时停止。暂停时间到时,再按下2键继续倒计时,直至结束。
key1 key2 key3
程序:
#include
#define uint unsigned int
void delay(uint);
unsigned char DUANZHI[]={0x3f,0x30,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//定义0~9指针
unsigned char dpsbf[]={0,0,0,0};
unsigned char A[]={0xfe,0xfd,0xfb,0xf7};
sbit key1=P3^0;
sbit key2=P3^1;
sbit key3=P3^2;
unsigned char num,msecond=1,mminute=1; unsigned char i,key1_1=0,key2_1=0,key3_1=0; void display();
void Time0_Init() //中断初始化
{
TMOD=0X01;
IE=0X82;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
}
void main() //主函数
{
num=0;
Time0_Init();
for(;;)
{
if(key1==0)
{
msecond=1;
mminute=13;
key3_1=0;
}
if(key2==0)key3_1=1;
if(key3==0)key3_1=0;
display();
}
}
void delay(uint x) //延迟
{
uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
void T0_time()interrupt 1 // 中断
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
if(key3_1==1)
num++;
}
void display() //显示{
if(key3_1==1)
{
if(num>=20)
{
num=0;
msecond--;
if(msecond<=0)
{
msecond=60;mminute--;
if(mminute<=0)
{
msecond=1;
mminute=1;
key3_1=0;
}
}
}
}
dpsbf[3]=(msecond-1)%10;
dpsbf[2]=(msecond-1)/10;
dpsbf[1]=(mminute-1)%10;
dpsbf[0]=(mminute-1)/10;
for(i=0;i<=3;i++)
{
P1=A[i];
P0=DUANZHI[dpsbf[i]];
delay(3);
}
}