花了幾天時間整了下微控制器的鍵盤.我用的微控制器板子是用的p2的8個io埠對16個鍵達到控制的目的.
那怎樣來使用8個埠控制16個鍵呢?其實很簡單,先必須要掌握她的原理圖,
[img]/upload/attachment/89572/8ed2c5c8-088a-3ed2-84f2-75aa84fac52e.bmp[/img]
先將key0置低電平,其餘的置高電平,當我們按下第一列的按鍵時,p2的高四位肯定會有所變化,而我們就是用的這種變化達到分辨不同按鍵的目的.同理,我們可以將key1置低電平,再去檢測p2的高四位,也得出了第二列按的哪個鍵.依次類推,我們即可檢測微控制器的16個按鍵了.
下面有乙個微控制器鍵盤的完整示例程式,本程式已在89c52微控制器上成功執行,產生的效果是,按下微控制器上不同的鍵時,數碼管將顯示不同的值與之對應.
#include
#define uchar unsigned char
#define uint unsigned int
sbit sda = p1^0;
sbit clk = p1^1;
sbit dig1 = p1^2;
sbit dig2 = p1^3;
sbit dig3 = p1^4;
sbit dig4 = p1^5;
uchar code table=;
uchar key = 255;
uchar diskey = 255;
void init();
void delay(uchar);
void write(uchar);
void display(uchar);
uchar scankey();
void main()
}/** 鍵盤掃瞄 **/
uchar scankey()
}//display(key);//顯示按的鍵
}/* 檢查第二列是否有按鍵按下 */
p2 = 0xfd;
temp = p2;
temp = temp&0xf0;
if(temp!=0xf0)
}//display(key);//顯示按的鍵
}/* 檢查第三列是否有按鍵按下 */
p2 = 0xfb;
temp = p2;
temp = temp&0xf0;
if(temp!=0xf0)
}//display(key);//顯示按的鍵
}/* 檢查第四列是否有按鍵按下 */
p2 = 0xf7;
temp = p2;
temp = temp&0xf0;
if(temp!=0xf0)
}//display(key);//顯示按的鍵
}return key;
}/** 顯示乙個3位的整數 **/
void display(uchar num)
}/** 程式初始化函式 **/
void init()
/** 向資料碼管寫入乙個位元組資料 **/
void write(uchar u)
}/** 延遲函式 **/
void delay(uchar t)
微控制器程式設計
1 data idata pdata和xdata的區別 2 微控制器中的位 bit 位元組 byte 字 word stc89c52 共有 512 位元組的 ram 是用來儲存資料的,比如我們定義的變數都是直接存在 ram 裡邊的。但是微控制器的這 512 位元組的 ram在地位上並不都是平等的,而...
51微控制器 鍵盤掃瞄
p3口接16個按鍵 include define uint unsigned int define uchar unsigned char sbit dula p2 6 sbit wela p2 7 sbit key1 p3 4 uchar code table uchar num,temp,num...
51微控制器矩陣鍵盤
行列掃瞄法 所有的行線置高電平,依次對列線進行掃瞄。將第一列置低電平,p1.0 0 若檢測到行線p1.4 0,則k0鍵被按下。同理若p1.5 0,則k4被按下。pertues 圖 c程式 include include define uchar unsigned char define uint u...