|
#include<msp430f1612.h>
unsigned char const table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//數(shù)碼管的段位
//定義共陰極數(shù)碼管段選碼表,無小數(shù)點(diǎn)
static char key; //定義靜態(tài)變量key(用來記錄鍵盤編碼)
//系統(tǒng)默認(rèn)時(shí)鐘源dco,時(shí)鐘aclk,頻率800k
void delayus(unsigned int t) //延時(shí)函數(shù)
{
unsigned int i;
while(t--)
for(i=1330;i>0;i--); //實(shí)際測得時(shí)間1ms,根據(jù)示波器
}
char keyscan(void) //掃描模塊
{
char sccode,recode; //定義行,列鍵盤編碼
P3OUT=0x00; //p3輸出端口全部置低
if((P3IN&0xf0)!=0xf0) //去掉抖動(dòng)模塊,判斷是否有鍵抖動(dòng),如果是返回
{
delayus(20); //延時(shí)20ms
if((P3IN&0xf0)!=0xf0) //再次判斷是否有鍵抖動(dòng),如果是返回
{
sccode=0xfe; //將第一行置低(p3.0),用來掃描
while((sccode&0x0f)!=0x0f) //按位與&;盡量取0.行掃描完成
{
P3OUT=sccode; //輸出行掃描碼
if((P3IN&0XF0)!=0XF0) //當(dāng)前有鍵閉合 ,因?yàn)閕n是后四位所以f0
{
recode=(P3IN&0XF0)|0X0F; //讀取高4位列值,低四位置一(配合行碼)
//按位或盡量取1
key=(sccode&recode); //行和列組合得到鍵盤編碼
return key; //返回靜態(tài)變量key
}
else //所掃描行沒有鍵閉合
{
sccode=(sccode<<1)|0x01; //行掃描碼左移一位,就換到了下一行置0
//按位或盡量取1
}
}
}
return 0xff;//沒有鍵閉合則返回
}
return 0xff;//沒有鍵閉合則返回 ?
}
char getkeyval(char keycode)
{
char keyval;
switch(keycode)
{
case 0x77: //0b01110111
keyval=0 ;
break;
case 0x7b : //0b01111011
keyval= 1 ;
break;
case 0x7d: //0b01111101
keyval= 2 ;
break;
case 0x7e: //
keyval= 3;
break;
case 0xb7:
keyval= 4;
break;
case 0xbb:
keyval= 5;
break;
case 0xbd:
keyval= 6;
break;
case 0xbe:
keyval= 7;
break;
case 0xd7:
keyval= 8;
break;
case 0xdb:
keyval= 9;
break;
case 0xdd:
keyval= 10;
break;
case 0xde:
keyval= 11;
break;
case 0xe7:
keyval= 12;
break;
case 0xeb:
keyval= 13;
break;
case 0xed :
keyval= 14;
break;
case 0xee:
keyval=15 ;
break;
default :keyval =255;
}
return keyval;
}
void main(void)
{
WDTCTL=WDTPW+WDTHOLD;//關(guān)狗
P1DIR=0XFF; //全部輸出
P1SEL=0X00; //功能設(shè)置為普通i/o端口
P1OUT=0X00; //p1out全部置低
P3DIR=0X0F; //p3.4~p3.7鍵盤輸入,p3.0~p3.3鍵盤掃描信號(hào)輸出輸出
while(1)
{
key=getkeyval(keyscan()); //key取掃描值
if(key!=255) //key是正常值,按鍵有效
{
P1OUT=table[key]; //p1out輸出掃描碼顯示在數(shù)碼管上
}
}
}
}
|
-
-
矩陣鍵盤.zip
2018-8-9 20:33 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
1.54 KB, 下載次數(shù): 18, 下載積分: 黑幣 -5
評(píng)分
-
查看全部評(píng)分
|