- 1、本文档共4页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
关于矩阵键盘行列扫描的测试实验 我会时常分享一些51的程序编写方法,有一定基础的可以来看看。如有不当之处,欢迎大家指正,一同进步。 矩阵键盘无非就是两种扫描方式,一为逐行扫描,二为行列一起扫描读取键值。先确定行后确定列的读取方法没有什么可讲的,我针对行列一起扫描来总结一下我常用的一些方法。 学习嵌入式或者说硬件一定是从硬件原理开始,因为矩阵键盘电路原理简单,网上讲解较多,我只附上原理图,重点跟大家交流一下程序部分。 下图就是矩阵键盘 由P1口控制,P10~P13为列 P14~P17为行。 矩阵键盘电路原理图 高四位输出低电平,低四位输出高电平,检测低四位不全为高可确定列;反过来高四位输出高电平,低四位输出高电平,高四位不全为高确定行,行列交叉即可获得按键键值。废话不多说,直接上程序,我已经详细注解过了,不懂多看看哈。 /******************************************************************************* * 函数名 : KeyDown * 函数功能 : 检测有按键按下并读取键值 * 输入 : 无 * 输出 : 无 * 作者 : INK * 日期地点 : NANKING *******************************************************************************/ void KeyDown(void) { char a=0; GPIO_KEY=0x0f; // 位定义的引脚 if(GPIO_KEY!=0x0f) //读取按键是否按下 { Delay10ms(); //延时10ms进行消抖 if(GPIO_KEY!=0x0f) //再次检测键盘是否按下 { //测试列 GPIO_KEY=0X0F; switch(GPIO_KEY) { //此段程序只是为了确定列的值 方便在后面进行测试行的时候加减运算 获得具体案件的行列值 从而转换为按键值 case(0X07): KeyValue=0;break;//扫描第一列 case(0X0b): KeyValue=1;break;//按键第二列 是keyValue=1 case(0X0d): KeyValue=2;break;//按键第三列 case(0X0e): KeyValue=3;break;//按键第四列 } //测试行 确定了列以后需要翻转 确定行 交叉确定键值 GPIO_KEY=0XF0; //屏蔽高四位 switch(GPIO_KEY) { //已经进行过 case(0X70): KeyValue=KeyValue;break;//自己去看为什么是 0X70 列的时候又为什么是0X07 硬件相结合 case(0Xb0): KeyValue=KeyValue+4;break; //键值是5 扫描第二行 case(0Xd0): KeyValue=KeyValue+8;break; //键值是9 扫描第三行 case(0Xe0): KeyValue=KeyValue+12;break; //键值13 扫描第四行 } //其实最终返回的键值就是进行过加法运算的 while((a50)(GPIO_KEY!=0xf0)) //检测按键松手检测 松手 按键就是 f0 { Delay10ms(); a++;//防止程序死在 while循环里 利用a的值跳出循环,比较不错的双重保险办法 } } } }
文档评论(0)