在单片机课,能问一下怎么改这个程序能实现从99s倒计时可以用四个开关实现+10s,-10s,+1s,-1s这样的
#include
#define uchar unsigned char
#define uint unsigned int
sbit key0=P1^0;
sbit key1=P1^1;
sbit key2=P1^2;
sbit key3=P1^3;
sbit led=P1^4;
uchar count=0;
uchar time=99;
void DelayMS(uint ms)
{ uchar t;
while(ms--)
{
for(t=0;t<120;t++);
}
}
void keysecp()
{
if(key0==0)
{
DelayMS(10);
if (key0==0) time=time+10;
while(!key0);
}
if(key1==0)
{
DelayMS(10);
if (key1==0) time=time-10;
while(!key1);
}
if(key2==0)
{
DelayMS(10);
if (key2==0) time--;
while(!key2);
}
if(key3==0)
{
DelayMS(10);
if (key3==0) time++;
while(!key3);
}
}
void disp(unsigned char i)
{
unsigned char guan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90} ;
//定义0~9显示码,共阳极数码管
P0=guan[i/10]; //显示i高位
P2=guan[i%10]; //显示i低位
}
void jishi() interrupt 3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
count++;
if (count==10)
{
count=0;
time--;
led=0;
}
if((time%10)==0)
{
led=0;
}
if(time%10!=0)
{
led=1; }
}
void main() //主函数
{
TMOD=0x10; //设置T1为工作方式1
TH1=(65536-50000)/256; //设置T1计数初值高8位,定时时间50ms
TL1=(65536-50000)%256; //设置T1计数初值低8位
ET1=1; //开放T1中断允许
EA=1; //开放总中断允许
TR1=1; //启动T1开始计数
while(1){
disp(time); //显示秒计数器值
}
}
在while循环里调用keysecp函数
while(1)
{
keysecp();
disp(time);
}
还有在keysecp函数里,需要对time值的返回坐下判断,比如time-10,如果time本身小于10该怎么处理,等等。