欢迎来到天天文库
浏览记录
ID:33021634
大小:65.89 KB
页数:8页
时间:2019-02-19
《手机型键盘输入处理程序思路漫谈》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、手机型键盘输入处理程序思路漫谈先看原理图:4ZJ回回■回0回■A■9••■•c■DU2AND4。□回日由与门输出到中断口,当有按键按下时,产生屮断。voidvlNTO(void)interrupt0{if(b_KeyShock==0)执行扫描{if(b_lntroduce==0)退出介绍{b_KeyScan=l;扫描b_KeyShock=l;}}elseb_KeyShock=0;if(b_KeyShock==l)b_KillShock=l;b」ntroduce=0;}以上程序用于设定标志,关闭初始化介绍标志。按键扫描
2、思路如下:为了防止抖动干扰,在处理时先关闭外部中断,然后读取键值即可。#include#defineSCANPORTPlunsignedcharuca_LineScan[4]={0xEF,0xDF,0xBF,0x7F};unsignedcharucKeyScan(){unsignedcharucTemp=0;unsignedcharucRow=0,ucUne二0;EXO=O;for(ucLine二O;ucLinev4;ucLine++){SCANPORT=uca_LineScanfucLine]
3、;ucTemp=SCANPORT&OxOF;讦(ucTemp!=0x0F)switch(ucTemp)caseOxOE:ucRow=10;break;caseOxOD:ucRow=20;break;caseOxOB:ucRow=30;break;case0x07:ucRow=40;break;default:ucRow=50;break;}break;}}SCANPORT=OxOF;EXO=1;returnucRow+ucLine+l;}获得键值以后,输入字母大小写,数字处理思路如下:1.数字处理程序:unsigne
4、dcharucGetNum(unsignedcharucKeyCode)switch(ucKeyCode){casell:return'7';break;case12:return8;break;case42:return'O^break;default:break;}returnOxFF;2、字母处理程序:unsignedcharucGetLetter(unsignedcharucKeyCode)先查看大小写标志:根据大小写标志选择执行的程序:unsignedcharucGetLetterfunsignedchar
5、ucKeyCode){if(b_CapStatus==O)returnucCapProc(ucKeyCode);elsereturnucSmallProc(ucKeyCode);}这里注意,RETURN后面可以跟一个函数,因为调用函数后,返回的也是一个uchar■值。每一个键值代表着三个字母,这样需要在按键的时候,对按键次数进行计数,根据计数值来计算选择是第几个字母,程序如下:unsignedcharucCapProc(unsignedcharucKeyCode){switch(uc_ClickCount%3){ca
6、seO:returnucCapOne(ucKeyCode);break;casel:returnucCapTwo(ucKeyCode);break;case2:returnucCapThree(ucKeyCode);break;default:break;return1}如果按键次数为1,根据键值获得的按键值如下:unsignedcharucCapOne(unsignedcharucKeyCode){switch(ucKeyCode){casell:return'Af;break;case12:returnD;bre
7、ak;case13:returnG;break;case21:return!J';break;case22:return^'jbreak;case23:returnP;break;case31:returnS;break;case32:returnV^break;case33:return'Y';break;default:break;}returnOxFF;}以上完成了数字与字母的处理函数,下面对其他功能按键进行处理C键盘功能图如下:UserGuid7ABC8DEF9GHIOpenIntrodu4JKL5MNO6P
8、QRBlank1STU2vwx3YZCapsLockCleanAll0I•CleanOneInputChange先看清楚单个字母或者数字按键:先读取光标位置,然后根据光标位置清除该数组中的字符,然后向液晶发现写入空格命令即可。程序如下:voidvCleanOne(){讦(uc_CharPointer>0){uc_CharPointer~;uca
此文档下载收益归作者所有