收藏 分享(赏)

4乘4矩阵键盘总结.doc

上传人:scg750829 文档编号:8200806 上传时间:2019-06-13 格式:DOC 页数:9 大小:89KB
下载 相关 举报
4乘4矩阵键盘总结.doc_第1页
第1页 / 共9页
4乘4矩阵键盘总结.doc_第2页
第2页 / 共9页
4乘4矩阵键盘总结.doc_第3页
第3页 / 共9页
4乘4矩阵键盘总结.doc_第4页
第4页 / 共9页
4乘4矩阵键盘总结.doc_第5页
第5页 / 共9页
点击查看更多>>
资源描述

1、1234567891011121314151617181920212223242526272829303132333435363738/*/*C51 按键识别函数集源文件 */*/ 作者: Ryudo 桂林电子科技大学 开发开始时间: 2006 年 8 月 15 日/ 说明: 涉及到的所有的延时函数配合 C51 延时函数包使用 默认晶振频率 12MHZ/ 版本信息: Ver 1.0/*/ 扫描方法一: 06.8.15 添加 4X4 矩阵按键逐行扫描 (一次 )识别法函数/ 硬件连接 : / _VCC/ | | | |/ | | | |/ | | | |/ R R R R/ | | | |/

2、| | | |/ / | / | / | / |/ P X.7 -/-|-/-|-/-|-/-| 每个按键对应的识别码是: 0x88,0x84,0x82,0x81/ | | | |/ / | / | / | / |/ P X.6 -/-|-/-|-/-|-/-| 0x48,0x44,0x42,0x41/ | | | |/ / | / | / | / |/ P X.5 -/-|-/-|-/-|-/-| 0x28,0x24,0x22,0x21/ | | | |/ / | / | / | / |/ P X.4 -/-|-/-|-/-|-/-| 0x18,0x14,0x12,0x11/ | | | |

3、/ | | | |/ P X.3 -| | | |/ | | |/ | | |/ P X.2 -|-| | |/ | |/ | | / P X.1 -|-|-| |代码有错,正确的可见单片机上机作业3940414243444546474849505152535455565758596061626364656667686970717273747576/ |/ |/ P X.0 -|-|-|-|/*/ 扫描方法二: 06.8.15 添加 4X4 矩阵键盘线翻转识别法函数/ 硬件连接 : / | | | | / / | / | / | / |/ P X.7 -/-|-/-|-/-|-/-| 每个按键

4、对应的识别码是: 0x77,0x7b,0x7d,0x7e/ | | | | / / | / | / | / | / P X.6 -/-|-/-|-/-|-/-| 0xb7,0xbb,0xbd,0xbe / | | | |/ / | / | / | / |/ P X.5 -/-|-/-|-/-|-/-| 0xd7,0xdb,0xdd,0xde/ | | | |/ / | / | / | / |/ P X.4 -/-|-/-|-/-|-/-| 0xe7,0xeb,0xed,0xee/ | | | |/ | | | |/ P X.3 -| | | |/ | | |/ | | |/ P X.2 -|-

5、| | |/ | |/ | | / P X.1 -|-|-| |/ |/ |/ P X.0 -|-|-|-|/*/ 扫描方法三: 06.8.16 添加 4X4 矩阵键盘行扫描识别法函数(只返回 4 个识别码)/ 硬件连接 : / | | | | / / | / | / | / |7778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114/ P X.7 -/-|-/-|-/-|-/-| 通用识别码: 0x07,0x0b,0x0d,0x0e/ | | | |/ / | / |

6、 / | / |/ P X.6 -/-|-/-|-/-|-/-| 0x07,0x0b,0x0d,0x0e/ | | | |/ / | / | / | / |/ P X.5 -/-|-/-|-/-|-/-| 0x07,0x0b,0x0d,0x0e/ | | | |/ / | / | / | / |/ P X.4 -/-|-/-|-/-|-/-| 0x07,0x0b,0x0d,0x0e/ | | | |/ | | | |/ P X.3 -| | | |/ | | |/ | | |/ P X.2 -|-| | |/ | |/ | | / P X.1 -|-|-| |/ |/ |/ P X.0 -|-

7、|-|-|/115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152/*#include#include/*/ 扫描方法一 : 4X4 矩阵按键逐行扫描 (一次 )识别法函数/ 函数假设硬件接在 P1 口,及 “说明 “中 X=1/ 返回的是识别码,调用函数根据识别码动作/ 说明:算法稍烦,进阶使用 unsigned char uc_Line_Scan_Send16(void) unsigned char uc_Temp_1

8、,uc_Temp_2;P1=0x0f; /先将所有行线拉低if(P1 /延迟一段时间。if((P1 /用变量保存下第一次发送的扫描码 0111,1111while(uc_Temp_1 /给 P1 口赋扫描码 ,每次只拉低一行if(P1 /计算识别码的算法,灵活性很大。 return (uc_Temp_1)+(uc_Temp_2); /返回识别码,识别码是根据上一条语句的算法计算好的,每个识别码对应一个按键,一共有 16 个识别码。else /否则依次将第二,第三,第四行拉低 uc_Temp_1=1; 01111111 00111111uc_Temp_1|=0x80; 10111111 1101

9、1111 11101111 11110111 *0*153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 /*/ 扫描方法二: 4X4 矩阵键盘线翻转识别法函数/ 函数假设硬件接在 P1 口,及 “说明 “中 X=1/ 返回的是识别码,调用函数根据识别码动作/ 说明 :算法简单易懂,初级使用unsigned char uc_Line_Turn(void)unsigned char uc_Temp_1,uc_Temp_2;

10、P1=0xff; /P1 口置高电平,准备输入P1=0x0f; /P1 口高 4 位作为输出,输出 0,低四位作为输入 if(P1 /延时去抖if(P1 /把这时 P1 口状态保存在一个变量中 00001110 P1=0xf0; /把 P1 口高四位置输入,低四位作为输出,注意 :这就是 线翻转 (即输入输出翻转 )的本质所在 uc_Temp_2=P1; /把这时 P1 口状态保存在一个变量中 01110000return uc_Temp_1|uc_Temp_2; /或 操作,返回识别码 01111110 10000001 /*/ 扫描方法三: 4X4 矩阵键盘行扫描识别法函数( 4 个识别码

11、 )/ 函数假设硬件接在 P1 口,及 “说明 “中 X=1/ 说明:个人不推荐使用这种方法,代码比较长,占用大量 CPU 时间,按键有时反应不够灵敏/ void Line_Scan_Send4(void)P1=0xff; /P1 口置高,低四位准备接收输入P1_7=0; /把 P1 口低四位作为输入,高四位作为输出,先扫描第一行, P17 发送 0。之前要把高四位进行位定义,这里只是作说明用。下同。if(P1 /延迟去抖if(P1 /这里的动作根据实际要求添加,也可以作为返回值使用。break; case 0x0b:/*动作 */;break;case 0x0d:/*动作 */;break;

12、case 0x0e:/*动作 */;break;default:break; /不动作 while(P1 /等待按键跳起 /P1=0xff; /P1 口置高,低四位准备接收输入P1_6=0; if(P1 /延迟去抖if(P1 /这里的动作根据实际要求添加,也可以作为返回值使用。break; case 0x0b:/*动作 */;break;229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266case 0x0d:/*动作 *

13、/;break;case 0x0e:/*动作 */;break;default:break; /不动作 while(P1 /等待按键跳起 /P1=0xff; /P1 口置高,低四位准备接收输入P1_5=0; if(P1 /延迟去抖if(P1 /这里的动作根据实际要求添加,也可以作为返回值使用。break; case 0x0b:/*动作 */;break;case 0x0d:/*动作 */;break;case 0x0e:/*动作 */;break;default:break; /不动作 while(P1 /等待按键跳起 2672682692702712722732742752762772782

14、79280281/P1=0xff; /P1 口置高,低四位准备接收输入P1_4=0; if(P1 /延迟去抖if(P1 /这里的动作根据实际要求添加,也可以作为返回值使用。break; case 0x0b:/*动作 */;break;case 0x0d:/*动作 */;break;case 0x0e:/*动作 */;break;default:break; /不动作 while(P1 /等待按键跳起 /*uchar keyscan(void) /键盘扫描函数,使用行列反转扫描法.uchar cord_h, cord_l; /行列值中间变量.P2 = 0x0f; /高四位全输出 0cord_h = P2 /读入低四位.if(cord_h != 0x0f) /如果行不等于 0f,就是有键按下 . delay(100); /去抖cord_h = P2 /再次读入低四位.if(cord_h != 0x0f) /如果仍未有按键. P2 = cord_h | 0xf0; /把读入的低电平在低四位输出 .cord_l = P2 /现在是读入高四位.return(cord_h + cord_l); / /组合后,为键盘码值 .Speak(); / 接蜂鸣器return(0xff); /无键按下,返回 255

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报