- /*****************************************************************
- //文件名:Keypad.c
- //描绘:该文件界说与矩阵键盘有关的各种接口、函数,适用于MSP430F149
- //编写人:小邪@清水
- //版本号:1.01
- *****************************************************************/
- #include
- #include”12864.h”
- ucharkeyPressed;//按键是否被按下:1–是,0–否
- ucharkeyval;//寄存键值
- ucharkeyFlag;//按键是否已铺开:1–是,0–否
- //设置键盘逻辑键值与程序核算键值的映射
- //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};
- /*************************************************************************
- //称号:InitKeypad
- //参数:延时的时刻n
- //返回值:无
- //功用:初始化矩阵键盘的IO口
- *************************************************************************/
- voidInitKeypad(void)
- {
- P1DIR=0xf0;//P1.0~P1.3设置为输入状况,P1.4~P1.7设置为输出状况
- P1OUT|=0xf0;//P1.4~P1.7输出高电平
- keyFlag=0;
- keyPressed=0;
- keyval=0;
- }
- /*************************************************************************
- //称号:CheckKey
- //参数:无
- //返回值:无
- //功用:扫描矩阵键盘,获取键值
- *************************************************************************/
- 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输出四位中有一个为0
- tmp1>>=1;
- if((P1IN&0x0f)<0x0f)//是否P1IN的P1.0~P1.3中有一位为0
- {
- tmp2=0x01;//tmp2用于检测出那一位为0
- for(col=0;col<4;col++)//列检测
- {
- if((P1IN&tmp2)==0x00)//是否是该列,等于0为是
- {
- keyval=key_Map[row*4+col];//获取键值
- return;//退出循环
- }
- tmp2<<=1;//tmp2右移1位
- }
- }
- }
- }
- /*************************************************************************
- //称号:delay
- //参数:无
- //返回值:无
- //功用:延时15ms的时刻,用于消抖
- *************************************************************************/
- voiddelay()
- {
- uinttmp;
- for(tmp=12000;tmp>0;tmp–);
- }
- /*************************************************************************
- //称号:KeyEvent
- //参数:无
- //返回值:无
- //功用:检测按键,获取键值
- *************************************************************************/
- voidKeyEvent(void)
- {
- uchartmp;
- P1OUT&=0x00;//设置P1OUT全为0,等候按键输入
- tmp=P1IN;//获取p1IN
- if((keyPressed==0x00)&&((tmp&0x0f)<0x0f))//假如有键按下
- {
- keyPressed=1;//假如有按键按下,设置keyPressed标识
- delay();//消除颤动
- CheckKey();//调用checkKey(),获取键值
- }
- elseif((keyPressed==1)&&((tmp&0x0f)==0x0f))//假如按键现已开释
- {
- keyPressed=0;//铲除keyPressed标识
- keyFlag=1;//设置keyFlag标识
- }
- else
- {
- keyval=17;
- }
- }
-
矩阵键盘操控forMSP430
*****************************************************************文件名:Keypadc描述:该文件定义与矩阵键盘有关的各种接口、函
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/news/guandian/257262.html