欢迎来到天天文库
浏览记录
ID:8910011
大小:48.73 KB
页数:3页
时间:2018-04-11
《关于矩阵键盘行列扫描的测试实验》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、关于矩阵键盘行列扫描的测试实验 我会时常分享一些51的程序编写方法,有一定基础的可以来看看。如有不当之处,欢迎大家指正,一同进步。 矩阵键盘无非就是两种扫描方式,一为逐行扫描,二为行列一起扫描读取键值。先确定行后确定列的读取方法没有什么可讲的,我针对行列一起扫描来总结一下我常用的一些方法。 学习嵌入式或者说硬件一定是从硬件原理开始,因为矩阵键盘电路原理简单,网上讲解较多,我只附上原理图,重点跟大家交流一下程序部分。 下图就是矩阵键盘由P1口控制,P10~P13为列P14~P17为行。 矩阵
2、键盘电路原理图 高四位输出低电平,低四位输出高电平,检测低四位不全为高可确定列;反过来高四位输出高电平,低四位输出高电平,高四位不全为高确定行,行列交叉即可获得按键键值。废话不多说,直接上程序,我已经详细注解过了,不懂多看看哈。 /******************************************************************************* *函数名:KeyDown *函数功能:检测有按键按下并读取键值 *输入:无 *输出:无 *作者:I
3、NK *日期地点:NANKING *******************************************************************************/ voidKeyDown(void) { chara=0; GPIO_KEY=0x0f;//位定义的引脚 if(GPIO_KEY!=0x0f)//读取按键是否按下 { Delay10ms();//延时10ms进行消抖 if(GPIO_KEY!=0x0f)//再次检测键盘是否按下 { /
4、/测试列 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;//按键第四列
5、} //测试行确定了列以后需要翻转确定行交叉确定键值 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扫描第三行 cas
6、e(0Xe0):KeyValue=KeyValue+12;break;//键值13扫描第四行 }//其实最终返回的键值就是进行过加法运算的 while((a<50)&&(GPIO_KEY!=0xf0))//检测按键松手检测松手按键就是f0 { Delay10ms(); a++;//防止程序死在while循环里利用a的值跳出循环,比较不错的双重保险办法 } } } }
此文档下载收益归作者所有