資源簡介
例LY-K4矩陣鍵盤程序

代碼片段和文件信息
/***************************************************************************
標(biāo)題: 4*4鍵盤程序
效果: 按鍵盤,數(shù)碼管顯示鍵號(hào)
工作于:LY5A-L2A開發(fā)板
作者: 林洋電子-單片機(jī)
網(wǎng)站: lydz8.taobao.com
說明: 板使用12M晶振
******************************************************************************/
#include?
#include?
#define?KEY4_4?P2
//引腳定義:
sbit?SMG_q?=?P1^0; //定義數(shù)碼管陽級(jí)控制腳(千位)
sbit?SMG_b?=?P1^1; //定義數(shù)碼管陽級(jí)控制腳(百位)
sbit?SMG_s?=?P1^2; //定義數(shù)碼管陽級(jí)控制腳(十位)
sbit?SMG_g?=?P1^3; //定義數(shù)碼管陽級(jí)控制腳(個(gè)位)
sbit?SPK=P1^5; //蜂鳴器
sbit?JDQ=P1^4; //繼電器
//變量定義:
code?unsigned?char?table[]=
{0xc00xf90xa40xb00x990x920x820xf80x800x90};
//表:共陽數(shù)碼管?0-9?
unsigned?char?l_posit=2; //顯示位置
code?unsigned?char?key_tab[17]={0x000xee0xde0xbe0x7e
0xed0xdd0xbd0x7d
0xeb0xdb0xbb0x7b
0xe70xd70xb70x77};
// 1 2 3 4
// 5 6 7 8
// 9 10 11 12
// 13 14 15 16
unsigned?char?l_key=0x0; //定義變量,存放鍵值
unsigned?char?l_keyold=0xFF; //做為按鍵松開否的憑證
//函數(shù)聲明:
void?ReadKey(void);??? //掃描鍵盤?獲取鍵值,并將鍵值重新編碼
void?display(unsigned?int?da);//定義顯示函數(shù),參數(shù)為顯示內(nèi)容
void?delay(unsigned?int?timer);?
//主函數(shù),C語言的入口函數(shù):
void?main(void)
{
while(1){
ReadKey(); //調(diào)用鍵盤掃描
display(l_key); //輸出顯示獲取的鍵號(hào)
if(l_key==1) //按1鍵繼電器啟動(dòng)
JDQ=0;
if(l_key==2)
JDQ=1; //按2鍵繼電器關(guān)閉
}
}
//掃描鍵盤?獲取鍵值
void?ReadKey(void) //分三個(gè)部份來理解,
{
unsigned?char?ikey;
//**************第一部份,掃描讀取鍵值******************************/
key=0xff; //設(shè)定初值
KEY4_4=0xfe; //第一行掃描
if(KEY4_4!=0xfe)
key=KEY4_4;
KEY4_4=0xfd; //第二行
if(KEY4_4!=0xfd)
key=KEY4_4;
KEY4_4=0xfb; //第三行
if(KEY4_4!=0xfb)
key=KEY4_4;
KEY4_4=0xf7; //第四行
if(KEY4_4!=0xf7)
key=KEY4_4;
KEY4_4=0XFF; //復(fù)位接口
/****************第二部份,檢測(cè)是否干擾或無按鍵按下********************/
if?(key==0xff){ //如果讀取不到接口的值
l_keyold=0xff;
SPK=1; //按鍵有松開關(guān)閉蜂鳴器
return;
}
else
SPK=0; //否則打開蜂鳴器,繼續(xù)處理
/****************第三部份,檢測(cè)是否新按鍵按下,獲取新的鍵盤編碼值*******/
if(l_keyold!=key){ //檢測(cè)是否為新的鍵被按下
l_keyold=key; //保存鍵碼做為下次檢測(cè)
for(i=0;i<17;i++){ //查表獲得相應(yīng)的鍵號(hào)存放l_key變量中
if?(key==key_tab[i]){
l_key=i;
break;
}
}
}
//轉(zhuǎn)換的鍵號(hào)放于l_key變量中,主程序就可以檢測(cè)此變量做相應(yīng)外理
}??
//顯示函數(shù),參數(shù)為顯示內(nèi)容
void?display(unsigned?int?da)
{
P0=0XFF; //
da=da%10000;
switch(l_posit){
case?0: //選擇千位數(shù)碼管,關(guān)閉其它位
SMG_q=0;
SMG_b=1;
SMG_s=1;
SMG_g=1;
P0=table[da/1000]; //輸出顯示內(nèi)容
break;
case?1: //選擇百位數(shù)碼管,關(guān)閉其它位
SMG_q=1;
SMG_b=0;
SMG_s=1;
SMG_g=1;
P0=table[da%1000/100];
break;
case?2: //選擇十位數(shù)碼管,關(guān)閉其它位
SMG_q=1;
SMG_b=1;
SMG_s=0;
SMG_g=1;
P0=table[da%100/10];
break;
case?3: //選擇個(gè)位數(shù)碼管,關(guān)閉其它位
SMG_q=1;
SMG_b=1;
SMG_s=1;
SMG_g=0;
P0=table[da%10];
break;
}
l_posit++; //每調(diào)用一次將輪流顯示一位
if(l_posit>3)
l_posit=2; //從2開始,表示只顯示后兩位
}
//延時(shí)子函數(shù)
void?delay(unsigned?int?timer){
while(timer--);
}
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件????????191??2012-11-12?11:12??例LY-K4矩陣鍵盤程序\lhj.plg
?????文件???????1859??2009-08-24?10:25??例LY-K4矩陣鍵盤程序\lhj.Uv2
?????文件???????3498??2012-11-15?17:53??例LY-K4矩陣鍵盤程序\l_key.c
?????文件???????5169??2012-11-12?11:10??例LY-K4矩陣鍵盤程序\l_key.OBJ
?????文件?????????48??2012-11-12?11:10??例LY-K4矩陣鍵盤程序\lhj.lnp
?????文件???????4879??2012-11-12?11:10??例LY-K4矩陣鍵盤程序\lhj
?????文件???????1607??2012-11-12?11:10??例LY-K4矩陣鍵盤程序\lhj.hex
?????文件???????1012??2012-11-12?11:11??例LY-K4矩陣鍵盤程序\lhj.Opt
?????文件?????151830??2012-06-19?15:36??LY-K4矩陣鍵盤使用說明.pdf
?????文件?????130865??2012-11-15?17:55??LY-K4短陣鍵盤連接參考圖.jpg
?????目錄??????????0??2011-11-25?21:24??例LY-K4矩陣鍵盤程序
-----------?---------??----------?-----??----
???????????????300958????????????????????11
評(píng)論
共有 條評(píng)論