激光打印机喷墨打印机:急!!!C51显示的问题

来源:百度文库 编辑:高校问答 时间:2024/05/02 18:48:04
#include<reg52.h>
#define uchar unsigned char

uchar data a,g;//判断按键是否按下
uchar data e=0;/*光标所在位置*/
uchar data b[4]={0x00,0x00,0x00,0x00};/*显示数据存*/
uchar data f[4]={0x01,0x00,0x00,0x00};
uchar data c[12]={0x00,0x08,0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};/*显示数据段码*/
uchar data d=0xf7;/*位控*/

display(){
uchar data i,j;/*显示位数*/
for (i=0;i<4;i++)
{g=f[i];
b[i]=c[g];
P0=b[i];
P1=d;
for (j=0;j<100;j++){;}
d=d>>1;
}
d=0xf7;
}

void key1(){
display();
if((P2|0xe0)==0xff){
++e;
if(e==4)
e=0;
f[e]=1;
}
}

void key2(){
display();
if((P2|0xe0)==0xff){
if(e==0)
e=4;
--e;
f[e]=1;
}
}

void key3(){
display();
if((P2|0xe0)==0xff){
f[e]++;
if (f[e]>11) f[e]=2;
}
}

void key4(){
display();
if((P2|0xe0)==0xff){
f[e]--;
if (f[e]<2) f[e]=11;
}
}

void key5(){
}

keyscan(){
if ((P2|0xe0)!=0xff) {
display();
if ((P2|0xe0)!=0xff){
a=(P2|0xe0);
while((P2|0xe0)==0xff);
switch (a){

case 0xfe:key1();
break;
case 0xfd:key2();
break;
case 0xfb:key3();
break;
case 0xf7:key4();
break;
case 0xef:key5();
break;

}
}
}

}

main(){

while(1){
display();
keyscan();

}
}
麻烦哪位大虾帮我看看,哪里出错了,急用,过几天就毕业检查了!!!
key1,key2,key3,key4,key5五个键分别与AT89S52的P2.0, P2.1,P2.2,P2.3,P2.4连接,分别用于控制4位8段LED的位的左移,右移,数字的上升,下降(从0-9循环显示)。