我寫了一個計算器的程序 但鍵盤掃描程序寫完了 燒進實驗板 按鍵時沒反應 計劃寫一個兩字節的計算程序 請高手幫忙看看 感激不盡
#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;
} |