程序始終無法實現器件狀態變化時間存儲,時鐘部分時間的存儲時正常的,請好心人幫我看看看吧!應該主要的問題是在鍵盤掃描部分,求助:
void keyscan() //鍵盤掃描函數
{
uint temp,i=0;
P1=0xfe;
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
temp=P1;
switch(temp)
{
case 0xee: //切換顯示
{
key1=0;
TR2=0;
keynum++;
if(keynum==1|keynum==2|keynum==3)
{ y=0;
factor=0;
display1(shi,fen,miao);
}
if(keynum==4|keynum==5|keynum==6)
{
factor=1;
display1(year,month,date);
}
if(keynum==7)
{
factor=2;
display2(week);
}
if(keynum==8|keynum==9|keynum==1)
{
factor=3;
display1(one,two,three);
}
if(keynum==11)
{
TR2=1;
countyear=0;
factor=0;
display1(shi,fen,miao);
keynum=0;
}
/*i=miao;
if(key1==1)
{
//count2=0;
if(((miao-i)==10)&&key1==1)
{
TR2=1;
countyear=0;
factor=0;
display1(shi,fen,miao);
keynum=0;
}
}
if(key1==0)
{
//count2=0;
if(((miao-i)==10)&&key1==0)
{
TR2=1;
countyear=0;
factor=0;
display1(shi,fen,miao);
keynum=0;
}
}*/
break;
}
case 0x7e: //按鍵減
{
key2=0;
switch(keynum)
{
case 1:
miao--;
if(miao==-1)
miao=59;
write_add(6,miao);
break;
case 2:
fen--;
if(fen==-1)
fen=59;
write_add(5,fen);
break;
case 3:
shi--;
if(shi==-1)
shi=23;
write_add(4,shi);
break;
case 4:
date--;
if(date==-1)
date=30;
write_add(3,date);
break;
case 5:
month--;
if(month==-1)
month=12;
write_add(2,month);
break;
case 6:
year--;
if(year==-1)
year=99;
write_add(1,year);
break;
case 7:
week--;
if(week==0)
week=7;
write_add(7,week);
break;
case 8:
three--;
if(three==-1)
three=59;
write_add(10,three);
break;
case 9:
two--;
if(two==-1)
two=59;
write_add(9,two);
break;
case 10:
one--;
if(one==-1)
one=23;
write_add(8,one);
break;
}
break;
}
case 0xbe:
{ //按鍵加
key3=0;
switch(keynum)
{
case 1:
miao++;
if(miao==60)
miao=0;
write_add(6,miao);
break;
case 2:
fen++;
if(fen==60)
fen=0;
write_add(5,fen);
break;
case 3:
shi++;
if(shi==24)
shi=0;
write_add(4,shi);
break;
case 4:
date++;
if(date==31)
date=0;
write_add(3,date);
break;
case 5:
month++;
if(month==13)
month=1;
write_add(2,month);
break;
case 6:
year++;
if(year==100)
year=0;
write_add(1,year);
break;
case 7:
week++;
if(week==8)
week=1;
write_add(7,week);
break;
case 8:
three++;
if(three==60)
three=0;
write_add(10,three);
break;
case 9:
two++;
if(two==60)
two=0;
write_add(9,two);
break;
case 10:
one++;
if(one==24)
one=0;
write_add(8,one);
break;
}
break;
}
case 0xde:
key4=0;
break;
}
while(temp!=0xf0) //按鍵釋放
{
temp=P1;
temp=temp&0xf0;
}
delay(120); //延時,不然一個鍵按下可能會出現減幾個數的情況
}
}
P1=0xfd; //第2列鍵盤掃描
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
temp=P1;
switch(temp)
{
case 0xed:
key5=0;
TR2=0;
n++;
switch(n)
{
case 1: //切換顯示開機次數
{factor=13;displaykai();}
break;
case 2:
{
if(number==1)
{factor=4;displayhh(cc[0],shi3[0],fen3[0],miao3[0]);}
if(number==2)
{factor=5;displayhh(cc[1],shi3[1],fen3[1],miao3[1]);}
if(number==3)
{factor=6;displayhh(cc[2],shi3[2],fen3[2],miao3[2]);}
if(number==4)
{
n=0;
TR2=1;
countyear=0;
factor=0;
display1(shi,fen,miao);
}
}
break;
case 3:
{ //切換顯示第一路器件變化
if(number==1)
{factor=7;display3(1,state1[0],k6[0],shi1[0],fen1[0],miao1[0]);}
if(number==2)
{factor=8;display3(1,state1[1],k6[1],shi1[1],fen1[1],miao1[1]);}
if(number==3)
{factor=9;display3(1,state1[2],k6[2],shi1[2],fen1[2],miao1[2]);}
if(number==4)
{
n=0;
TR2=1;
countyear=0;
factor=0;
display1(shi,fen,miao);
}
}
break;
case 4: //切換顯示第二路器件變化
{
if(number==1)
{factor=10;display3(2,state2[0],k7[0],shi2[0],fen2[0],miao2[0]);}
if(number==2)
{factor=11;display3(2,state2[1],k7[1],shi2[1],fen2[1],miao2[1]);}
if(number==3)
{factor=12;display3(2,state2[2],k7[2],shi2[2],fen2[2],miao2[2]);}
if(number==4)
{
n=0;
TR2=1;
countyear=0;
factor=0;
display1(shi,fen,miao);
}
}
break;
}
if(n>4)
{
n=0;
TR2=1;
countyear=0;
factor=0;
display1(shi,fen,miao);
}
break;
case 0xdd: //按鍵5定義為三路器件的近三次記錄的切換顯示
key5=0;
number++;
if(number>4)number=0;
break;
case 0xbd: //第一路器件,偶數次為開,基數次為關
key6=0;
k6[x]++;
if(k6[x]>99)k6[x]=0;
if(k6[x]%2!=0)
state1[x]=d[1];
if(k6[x]%2==0)
state1[x]=d[0];
write_add(address1,state1[x]);delay0();
write_add(address1+1,k6[x]);delay0();
write1(address1+2,shi,fen,miao);
address1=address1+5;
if(address1==40)address1=25;
write_add(56,address1);
x++;
if(x>2)x=0;
break;
case 0x7d: //第二路器件,偶數次為開,基數次為關
key7=0;
k7[yy]++;
if(k7[yy]>99)k7[yy]=0;
if(k7[yy]%2!=0)
state2[yy]=d[1];
if(k7[yy]%2==0)
state2[yy]=d[0];
write_add(address2,state2[yy]);delay0();
write_add(address2+1,k7[yy]);delay0();
write1(address2+2,shi,fen,miao);
address2=address2+5;
if(address2==55)address2=40;
write_add(57,address2);
yy++;
if(yy>2)yy=0;
break;}
while(temp!=0xf0)
{temp=P1;
temp=temp&0xf0;}
delay(120);
}}}
|