在主函数里面调用它时void main(){...key();...},不能这现个,十,百,千位数值相加减。 #define Qdshj 200 #define ljshj 10 bit keyflag; uchar keyswitch=1; char idata dis_0=0; char idata dis_1=0; char idata dis_2=0; char idata dis_3=0; void key() { static uchar keycounter; uchar keyvalue; P1=P1|0xc0; keyvalue=P1; keyvalue=~keyvalue; keyvalue=keyvalue&0xc0; if(!keyvalue) { keycounter=0; keyflag=0; return; } if(keyflag) { keycounter++; if(Qdshj==keycounter) { keycounter-=ljshj; key_process(keyvalue); } else { return; } } else { delay(10); P1=P1|0xc0; keyvalue=P1; keyvalue=~keyvalue; keyvalue=keyvalue&0xc0; if(!keyvalue) { keycounter=0; keyflag=0; return; } keyflag=1; key_process(keyvalue); } } void key_process(uchar upload) { if(upload&0x40==0x40) { /* f++; if(f>=10000)f=9999; */ dis_0++;//个位 if(dis_0==10) { dis_0=0; dis_1++;//十位 if(dis_1==0) { dis_1=0; dis_2++;//百位 if(dis_2==10) { dis_2=0; dis_3++;//千位 if(dis_3==10) dis_3=9; } } } } else if(upload&0x80==0x80) { /* f--; if(f<0)f=0; */ dis_0--;//个位 if(dis_0<0) { dis_0=9; dis_1--;//十位 if(dis_1<0) { dis_1=9; dis_2--;//百位 if(dis_2<0) { dis_2=9; dis_3--;//千位 if(dis_3<0) dis_3=0; } } } } } |