?? sercom.c
字號:
#include <reg51.h>
#include <intrins.h>
sbit P34 = 0xB4;
sbit P35 = 0xB5;
unsigned char get_char(void); /* 函數說明 */
void delay(void);
main() {
unsigned char keybuf[16], count; /* 鍵盤緩沖區和讀鍵計數變量 */
SCON=0; /* 將串行口設置成工作方式0 */
ES=0; /* 禁止串口中斷 */
EA=0;
count=0;
while(count<16) keybuf[count++]=get_char(); /* 讀入16個按鍵的鍵值 */
}
unsigned char get_char(void) {
/* 定義表示列號、鍵序號和待發送數據的變量column、key_code和mask */
unsigned char key_code, column=0, mask=0x00;
/* 下列語句從串行口向74LS164移位輸出8個0 */
TI=0;
SBUF=mask;
while(TI==0); /* 等待發送完畢 */
/* 下列語句通過檢測P3.4和P3.5是否為0來判斷是否有鍵壓下, 檢測到有鍵壓下時
延時10ms以消除桉鍵抖動, 然后繼續檢測P3.4和P3.5是否為0, 若不為0則表明
檢測到干擾信號并繼續等待按鍵, 否則表示有一個鍵被可靠地按下并退出循環
*/
while(1) {
while((P34&P35)!=0);
delay();
if((P34&P35)!=0) continue;
else break;
}
/* 下列語句分析被按下的鍵所在的列號 */
mask=0xfe;
while(1) {
TI=0;
SBUF=mask;
while(TI==0);
if((P34&P35)!=0) {
mask=_crol_(mask,1); /* mask的值循環左移一位 */
column++;
if(column>=8) column=0;
continue;
}
else break;
}
/* 下列語句分析被按下的鍵所在的行號并計算鍵序號 */
if(P34==0) key_code=column;
else key_code=8+column;
return(key_code);
}
void delay(void) {
unsigned int i=10; /* 延時10ms */
while(i--);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -