我写了一个计算器的程序 但键盘扫描程序写完了 烧进实验板 按键时没反应 计划写一个两字节的计算程序 请高手帮忙看看 感激不尽
#include <stdio.h> #include <AT89x051.H> #define liekey (~P0)&0X0F #define rowkey (~P0)&0XF0 sfr P0 = 0x80; sfr P2 = 0xA0; void Initial(); int Data_In(); int Comput(); bit KeyIn(void); //如果有键按下返回 1,健值存在 KEYdata int OP1,OP2,OP,sta;
char KeyData,Buff,Resut; char DisBuffer[8]; char KeyData=0; char KeyTab[]={0x7e,0x7d,0x7b,0x0be,0x0bd,0x0bb,0x0de,0x0dd,0x0db,0x0ee,0x77,0x0b7,0x0d7,0x0e7,0x0eb,0x0ed};//键盘的16个键 char Seg_Tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x79};//数字的0~9 + - */ 对应 ASCD "E"对应错误
void main () { bit flag=0; Initial(); while (1)
{ flag=KeyIn(); if( flag) { DisBuffer[1]=KeyData; // Display();
} else { }
} }
bit KeyIn() { int i; char lie,kcode,row; //lie为列对应的低位数据的取反 row为行对应的高位数据取反 bit keyin=0,last,temp; lie=liekey; row=rowkey; if(lie!=0) { //若低位出现非0的情况则为有键按下 kcode=~(lie|row); //将按键所对应的二进制数据送给kcode for(i=0;KeyTab!=kcode&&i<16;i++) KeyData=i+1; keyin=1; } last=keyin; keyin=keyin&temp; temp=~last; return keyin; } void Initial() { OP1=0; OP2=0; sta=0; TH0=0xd8; // ;定时时间为10ms TL0=0xf0; ET0=1; EA=1; TR0=1; DisBuffer[0]=0x3f; DisBuffer[1]=0x3f; DisBuffer[2]=0x3f; DisBuffer[3]=0x3f;
}
void dis (void) interrupt 1 using 2 { static char dispPost=0; TR0=0; EA=0; TH0=0xd8; TL0=0xf0; TF0=0; P2=0xff; //先熄灭数码管 以免产生扫尾现象 P1=dispPost; P2=DisBuffer[dispPost]; dispPost++; if (dispPost>=8) dispPost=0; TR0=1; EA=1;
} |