矩陣鍵盤(pán)控制forMSP430
- /*****************************************************************
- //文件名:Keypad.c
- //描述:該文件定義與矩陣鍵盤(pán)有關(guān)的各種接口、函數(shù),適用于MSP430F149
- //編寫(xiě)人:小邪@清水
- //版本號(hào):1.01
- *****************************************************************/
- #include
- #include"12864.h"
- ucharkeyPressed;//按鍵是否被按下:1--是,0--否
- ucharkeyval;//存放鍵值
- ucharkeyFlag;//按鍵是否已放開(kāi):1--是,0--否
- //設(shè)置鍵盤(pán)邏輯鍵值與程序計(jì)算鍵值的映射
- //12313(enter)
- //45614(up)
- //78915(down)
- //11(.)012(back)16(clear)
- ucharkey_Map[]={1,2,3,13,4,5,6,14,7,8,9,15,11,0,12,16};
- /*************************************************************************
- //名稱(chēng):InitKeypad
- //參數(shù):延時(shí)的時(shí)間n
- //返回值:無(wú)
- //功能:初始化矩陣鍵盤(pán)的IO口
- *************************************************************************/
- voidInitKeypad(void)
- {
- P1DIR=0xf0;//P1.0~P1.3設(shè)置為輸入狀態(tài),P1.4~P1.7設(shè)置為輸出狀態(tài)
- P1OUT|=0xf0;//P1.4~P1.7輸出高電平
- keyFlag=0;
- keyPressed=0;
- keyval=0;
- }
- /*************************************************************************
- //名稱(chēng):CheckKey
- //參數(shù):無(wú)
- //返回值:無(wú)
- //功能:掃描矩陣鍵盤(pán),獲取鍵值
- *************************************************************************/
- voidCheckKey(void)
- {
- ucharrow,col,tmp1,tmp2;
- tmp1=0x80;
- for(row=0;row<4;row++)//行掃描
- {
- P1OUT=0xf0;//P1.4~P1.7輸出全1
- P1OUT-=tmp1;//P1.4~p1.7輸出四位中有一個(gè)為0
- tmp1>>=1;
- if((P1IN&0x0f)<0x0f)//是否P1IN的P1.0~P1.3中有一位為0
- {
- tmp2=0x01;//tmp2用于檢測(cè)出那一位為0
- for(col=0;col<4;col++)//列檢測(cè)
- {
- if((P1IN&tmp2)==0x00)//是否是該列,等于0為是
- {
- keyval=key_Map[row*4+col];//獲取鍵值
- return;//退出循環(huán)
- }
- tmp2<<=1;//tmp2右移1位
- }
- }
- }
- }
- /*************************************************************************
- //名稱(chēng):delay
- //參數(shù):無(wú)
- //返回值:無(wú)
- //功能:延時(shí)15ms的時(shí)間,用于消抖
- *************************************************************************/
- voiddelay()
- {
- uinttmp;
- for(tmp=12000;tmp>0;tmp--);
- }
- /*************************************************************************
- //名稱(chēng):KeyEvent
- //參數(shù):無(wú)
- //返回值:無(wú)
- //功能:檢測(cè)按鍵,獲取鍵值
- *************************************************************************/
- voidKeyEvent(void)
- {
- uchartmp;
- P1OUT&=0x00;//設(shè)置P1OUT全為0,等待按鍵輸入
- tmp=P1IN;//獲取p1IN
- if((keyPressed==0x00)&&((tmp&0x0f)<0x0f))//如果有鍵按下
- {
- keyPressed=1;//如果有按鍵按下,設(shè)置keyPressed標(biāo)識(shí)
- delay();//消除抖動(dòng)
- CheckKey();//調(diào)用checkKey(),獲取鍵值
- }
- elseif((keyPressed==1)&&((tmp&0x0f)==0x0f))//如果按鍵已經(jīng)釋放
- {
- keyPressed=0;//清除keyPressed標(biāo)識(shí)
- keyFlag=1;//設(shè)置keyFlag標(biāo)識(shí)
- }
- else
- {
- keyval=17;
- }
- }
評(píng)論