|
请教我设计的按键控制为什么按住jia或jian键后程序会停止?
[复制链接]
#include
#define uchar unsigned char
#define uint unsigned int
uchar bb; //定时器中断次数 。
uchar m; //个位秒。
uchar tt; //十位秒。
uchar tt1; // 个位分。
uchar tt2; // 十位分。
uchar tt3; // 没用。
uchar ii; // 闪烁时间。
uchar shu; //设置按键 按下的次数 。
uchar code table[]={
0xC0,0xF9,0xA4,0xB0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x77,0x7c,
0x39,0x5e,0x79,0x71};
sbit d=P1^0; //位选。
sbit c=P1^1; //位选。
sbit b=P1^2; //位选。
sbit a=P1^3; //位选。
sbit shezhi=P1^4; // 设置按键 。
sbit jia=P1^5; // 加按键。
sbit jian=P1^6; // 减按键。
sbit e=P2^7; //小数点。
void delay(); //延时。
void time(); //位选子函数
void key(); //按键判断子函数 。
void init(); //初始化子函数 。
void jinwei(); //进位子函数 。
void main ()
{
init();
while(1)
{
time();
key();
jinwei();
}
}
void temp() interrupt 1 //中断服务子函数 。
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
bb++;
}
void init() //初始化函数。
{
b=0;
c=0;
d=0;
shezhi=1;
jia=1;
jian=1;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
void jinwei() //进位函数。
{
if(bb==15)
{
bb=0;
m++;
}
if(m==10)
{
m=0;
tt++;
}
if(tt==6)
{
tt=0;
tt1++;
}
if(tt1==10)
{
tt1=0;
tt2++;
}
if(tt2==6)
tt2=0;
}
void delay(uint z) //延时函数。
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void key() //按键判断函数 。
{
if(shezhi==0)
delay(5);
if(shezhi==0) //按键去抖。
{
TR0=0; //检测设置键按下,关闭定时器 。
shu++; //按键按下次数 。
if(shu==5)
{
shu=0;
TR0=1; //设置键循环按下一周,打开定时器 。
}
while(!shezhi)
time();
}
if(jia==0)
delay(5);
if(jia==0)
{
if(shu==1) //加按键按下,并且设置键按下一次,则秒个位增加。
{
m++;
if(m==10)
m=0;
}
if(shu==2) //加按键按下,并且设置键按下二次,则秒十位增加。
{
tt++;
if(tt==6)
tt=0;
}
if(shu==3) //加按键按下,并且设置键按下三次,则分个位增加。
{
tt1++;
if(tt1==10)
tt1=0;
}
if(shu==4) //加按键按下,并且设置键按下四次,则分十位增加。
{
tt2++;
if(tt2==6)
tt2=0;
}
}
while(!jia)
time();
if(jian==0)
delay(5);
if(jian==0)
{
if(shu==1)
{
m--; //当m=0时,再自减m的值就会变成255,作此判断防止乱码。
if(m==255)
m=9;
}
if(shu==2)
{
tt--;
if(tt==255)
tt=5;
}
if(shu==3)
{
tt1--;
if(tt1==255)
tt1=9;
}
if(shu==4)
{
tt2--;
if(tt2==255)
tt2=5;
}
}
while(!jian)
time();
}
void time() //位选函数。
{
ii++;
delay(2);
if(ii==20)
ii=0; //闪烁时间设置。
a=1;
P2=table[m];
if((shu==1)&&(ii<10)) //ii<10时,P2口关闭,当10
P2=0xff;
delay(5);
a=0;
b=1;
P2=table[tt];
if((shu==2)&&(ii<10))
P2=0xff;
delay(5);
b=0;
c=1;
P2=table[tt1];
e=0;
if((shu==3)&&(ii<10))
P2=0xff;
delay(5);
c=0;
d=1;
P2=table[tt2];
if((shu==4)&&(ii<10))
P2=0xff;
delay(5);
d=0;
}
|
-
-
dsq.rar
13.04 KB, 下载次数: 1
proteus仿真文件
|