微控制器 鍵盤程式設計

2021-08-29 22:06:29 字數 1620 閱讀 1083

花了幾天時間整了下微控制器的鍵盤.我用的微控制器板子是用的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...