?? 鍵盤掃描程序源碼解析.c
字號:
/* 3x4矩陣鍵盤的掃描程序
按相應的按鍵,數碼管顯示相應的數字,星號鍵和井號鍵分別顯示為E和F
*********************************
Created 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();
}
}
/*
P1_7 P1_6 P1_5
| |
P1_3--------------------------
| |
P1_2--------------------------
| |
P1_1--------------------------
| |
P1_0--------------------------
| |
*/
void KeyScan() //按鍵掃描子程序
{
P1=0xFF; //使用P1口作為四行三列的矩陣,初始化全部置高
P1_3=0; //先掃描第1行,第一行置零
temp=P1; //當前值為1111 1011
temp&=0xF0; //如果沒有按鍵按下,則為 1111 0000
if(temp !=0xF0) //不為F0,說明P1_4 - P1_6有按鍵按下
{
delay10ms(1); //去除抖動
temp=P1;
temp&=0xF0;
if(temp !=0xF0)
{
temp=P1;
temp&=0xF0;
switch(temp)
{
case 0x70: //表示P1_7按下
key=1;break;
case 0xB0: //表示P1_6按下
key=2;break;
case 0xD0: //表示P1_5按下
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;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -