/* 3x4矩陣鍵盤的掃描程序 按相應的按鍵,數碼管顯示相應的數字,星號鍵和井號鍵分別顯示為E和F ********************************* Create by:左秀龍 ********************************* 測試通過*/ #include unsigned char code table[]={0xC0,0xF9,0xA4,0xB0,0x99, //0~4 0x92,0x82,0xF8,0x80,0x90, //5~9 0x88,0x83,0xA7,0xA1,0x86,0x8E}; //A~F void KeyScan(); void delay10ms(unsigned char time); void Dispaly(unsigned char k); unsigned char key,temp; void main() //主程序 { while(1) { KeyScan(); } } void KeyScan() //按鍵掃描子程序 { P1=0xFF; P1_3=0; temp=P1; temp&=0xF0; if(temp !=0xF0) { delay10ms(1); temp=P1; temp&=0xF0; if(temp !=0xF0) { temp=P1; temp&=0xF0; switch(temp) { case 0x70: key=1;break; case 0xB0: key=2;break; case 0xD0: key=3;break; } Dispaly(key); } } P1=0xFF; P1_2=0; temp=P1; temp&=0xF0; if(temp !=0xF0) { delay10ms(1); temp=P1; temp&=0xF0; if(temp !=0xF0) { temp=P1; temp&=0xF0; switch(temp) { case 0x70: key=4;break; case 0xB0: key=5;break; case 0xD0: key=6;break; } Dispaly(key); } } P1=0xFF; P1_1=0; temp=P1; temp&=0xF0; if(temp !=0xF0) { delay10ms(1); temp=P1; temp&=0xF0; if(temp !=0xF0) { temp=P1; temp&=0xF0; switch(temp) { case 0x70: key=7;break; case 0xB0: key=8;break; case 0xD0: key=9;break; } Dispaly(key); } } P1=0xFF; P1_0=0; temp=P1; temp&=0xF0; if(temp !=0xF0) { delay10ms(1); temp=P1; temp&=0xF0; if(temp !=0xF0) { temp=P1; temp&=0xF0; switch(temp) { case 0x70: key=14;break; case 0xB0: key=0;break; case 0xD0: key=15;break; } Dispaly(key); } } } //延時程序 void delay10ms(unsigned char time) { unsigned char a,b,c; for(a=0;a for(b=0;b<10;b++) for(c=0;c<120;c++) ; } void Dispaly(unsigned char k) //顯示程序 { P0=table[k]; P2_1=0; } |