另外還有一個3*4矩陣鍵盤,稍微修改一下即可:
- #include "reg51.h"
- #define uint8 unsigned char
- #define uint16 unsigned int
- uint8 code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39}; //0~9,AbC
- void delay(uint16 x)
- {
- uint8 i;
- for(x;x>0;x--)
- for(i=110;i>0;i--);
- }
- uint8 scanf()
- {
- uint8 temp,key=0;
- P1=0x07; //行掃描
- temp=P1&0x07;
- delay(5);
- if(temp != 0x07)
- {
- if(temp==1) key=0;
- if(temp==2) key=4;
- if(temp==4) key=8;
- }
- P1=0xf8; //列掃描
- temp=P1&0xf8;
- delay(5);
- if(temp != 0xf8)
- {
- if(temp==0xf0) key=key+1;
- if(temp==0xe8) key=key+2;
- if(temp==0xd8) key=key+3;
- if(temp==0xb8) key=key+4;
- }
- while(P1!=0xf8); //松手檢測
- return key;
- }
- void main()
- {
- uint8 key;
- while(1)
- {
- key=scanf();
- P2=tab[key]; //當顯示0表示沒按下按鍵,顯示其他則表示按下相應按鍵了
- }
- }
復制代碼 |