51单片机矩阵键盘C语言编程

51单片机矩阵键盘C语言编程

ID:38139946

大小:104.85 KB

页数:5页

时间:2019-05-31

51单片机矩阵键盘C语言编程_第1页
51单片机矩阵键盘C语言编程_第2页
51单片机矩阵键盘C语言编程_第3页
51单片机矩阵键盘C语言编程_第4页
51单片机矩阵键盘C语言编程_第5页
资源描述:

《51单片机矩阵键盘C语言编程》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、矩阵键盘[例12]根据原理图12所示,编写程序实现以下功能:用7段数码管显示矩阵非编码键盘的键名。例如,按1键则显示“1”,按2键则显示“2”。RP1+5V87654321LED1P1013973P10P00aAP1123868P11P01bAP123374P12P02cP134362P13P03dP145351GNDP14P04eP156349P15P05fP1673310P16P06gP178U1325P17P07DPAT89C511021+5VP30/RXDP201122P31/TXDP211223C3P32/INT0P2213241uFP33/INT1P2

2、31425RESP34/T0P241526P35/T1P2527R1P26X11928C11KX1P27+5VX131EA/VPP21733pFRD/P37X21816Y1X2WR/P3630C2ALE/PRDG1RES929X2RESETPSEN33pFGNDP14P15P16P170123P104567P1189ABP12CDEFP13原理图12根据矩阵非编码键盘逐行扫描法处理流程,键盘扫描程序应包括以下内容。(1)查询是否有键被按下。首先单片机向行扫描口输出扫描码F0H,然后从列检测口读取列检测信号,只要一列信号不为“1”,即P1口的值不等于F0H,则表示有

3、键被按下;否则表示无键被按下。键值译码公式如下:(2)查询闭合键所在的行列位置。若有键按下,单片机将等到的列检测信号取反,列检测口中为1的位便是闭合键所在的列。列号确定后,还需要进行逐行扫描以确定行号。单片机首先向行扫描口输出第1行的扫描码FEH,按着读列检测口,若列检测信号全为“1”,则表示闭合键不在第1行。接着向行扫描口输出第2行的扫描码FDH,再读列检测品,……。以此类推,直到找到闭合键所在的行,并将该行的扫描码取反保存。如果扫描完所有的行后仍没有找到闭合键,则结束行扫描,判断本次按键是误动作。(3)对得到的行号和列号进行译码,确定键值。根据原理图12所示,

4、1、2、3、4行的扫描码分别为0xfe、0xfd、0xeb、0xf7;1、2、3、4列的列检测数据分别为0xe0、0xd0、0xb0、0x70。设行扫描码码子HSM,列检测数据为LJC,则键值为KEY,则有______KEY=HSM+LJC

5、0x0f例如,“0”键处在第1行第1列,其HSM=0xfe,LJC=0xe0,代入上式,可得“0”键的键值为____________KEY=HSM+LJC

6、0x0f=0xfe+0xe0

7、0x0f=0x01+0x10=0x11根据上述计算方法,可计算所有按键地键值,见下表键名键值键名键值00x1180x1410x2190x242

8、0x41A0x4430x81B0x8440x12C0x1850x22D0x2860x42E0x4870x82F0x88(4)按键防抖动处理。当用手按下一个按键时,一般会产生抖动,即所按下的键盘会在闭合位置与断开位置之间跳动几下才能达到稳定状态。抖动持续的时间长短不一,通常10ms。若抖动问题不解决,就会导致对闭合键的多次读入。解决的方法是:在发现有键盘按下后,延时10ms再进行逐行扫描。因为键被按下时的闭合时间远远大于10ms,所以延时后再扫描也不迟。[例12]的程序如下:/*********************************************

9、*********************************程序名称:L12.c程序功能:4×4矩阵非编码键盘的应用******************************************************************************/#include#defineucharunsignedchar#defineuintunsignedintucharHSM,LJC;//定义行扫描码和列检测数据uchartmp,keyvalue;//定义接收键值和键值ucharkeyscan();voiddelay(u

10、intx);/******************************************************************************函数名称:main()函数功能:主函数,键值处理******************************************************************************/voidmain(){while(1){tmp=keyscan();switch(tmp){case0x11:P0=0x3f;//0break;case0x21:P0=0x06;//1break

11、;case

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。