单片机按键控制数码管显示

单片机按键控制数码管显示,2个按键K1,K2(无自锁按键),K1按下去的时候,数码管进入倒计时15秒显示,在15秒内,K1如果再次按下不会影响倒计时,K2按下,倒计时结束,数码管显示关闭。如果超过15秒,倒计时结束,数码管显示被关闭,此时按键K1K2无效,直至上电复位。
晶振11.0592M 想知道具体的算法 已经上图
SBUF=dispcode[num0];//祥姿第亩宴档1位
while(!TI);
TI=0;
led0=0;
delay(2);
led0=1;

SBUF=dispcode[num1];//第2位
while(!TI);
TI=0;
led1=0;
delay(2);
led1=1;

SBUF=dispcode[num2];//第3位
while(!TI);
TI=0;
led2=0;
delay(2);
led2=1;
我可以帮助你,你先设置我最佳答迅乱案后,我百度Hii教你。
你有原理图没?

设置三个标志位,辩销全局变量,需要在倒顷橘计时中断里改变状态的。

程序流程是:

主程序流程:
上电初始化(设置LED状态,设置定携乎游时器相关寄存器参数,设置三个标志位状态)---> 死循环(判断标志位是否容许按键有效,然后判断是否有按键按下,转入响应的子程序处理段)

定时器中断任务:
判断是否到15秒,到了就置位标志位。
#include<橘袭陪reg51.h>
sbit k1=P1^0;
sbit k2=P1^1;
unsigned char i,j=1;
void tate1();
void tate2();
void delay(unsigned char x)
{
while(x--)
{
for(i=0;i<圆蠢100;i++);
}
}
void main()
{
unsigned int a[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
while(1) {
for(i=0;i<50;i++) //for(i=0;i<200;i++)
{
tate1();
delay(5);
tate2();
P0=a[j/10];
P2=0xe3;
delay(5);
P0=a[j%10];
P2=0xe7;
}
for(i=0;i<200;i++) /禅信/P0=0x00;delay(100);
P0=0x00;
}
}
void tate1()
{
if(k1==0)
{
delay(80);
if(k1==0)
while(!k1);
if(j==30)
j=0;
j=j+1;}
}
void tate2()
{
if(k2==0)
{
delay(80);
if(k2==0)
while(!k2);
if(j==1)
j=31;
j=j-1; }
}
晶振频率是多少?