欢迎来到天天文库
浏览记录
ID:45313354
大小:110.06 KB
页数:6页
时间:2019-11-11
《史上最详细矩阵键盘原理》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、史上最详细单片机矩阵键盘原理广东阳西福达名苑梁智钧20180131一、矩阵按键扫描原理方法一:逐行扫描:我们可以通过高四位轮流输出低电平来对矩阵键盘进行逐行扫描,当低四位接收到的数据不全为1的时候,说明有按键按下,然后通过接收到的数据是哪一位为0来判断是哪一个按键被按下。方法二:行列扫描:我们可以通过高四位全部输出低电平,低四位输出高电平。当接收到的数据,低四位不全为高电平时,说明有按键按下,然后通过接收的数据值,判断是哪一列有按键按下,然后再反过来,高四位输出高电平,低四位输出低电平,然后根据接收到的高四位的值判断是那一行有按键按下,这样就能够确定是哪一个按键按下了。二、原理图:#inc
2、lude"reg52.h"//此文件中定义了单片机的一些特殊功能寄存器typedefunsignedintu16;//对数据类型进行声明定义,最值范围0-65535//typedefunsignedcharu8;//对数据类型进行声明定义,最值范围0-255//#defineGPIO_DIGP0//定义P0口//#defineGPIO_KEYP1//定义P1口//sbitLSA=P2^2;//用于控制3-8译码器,位选信号//sbitLSB=P2^3;//用于控制3-8译码器,位选信号//sbitLSC=P2^4;//用于控制3-8译码器,位选信号//u8codesmgduan[17]={
3、0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值voiddelay(u16i)//延时函数,i=1时,大约延时10us//{while(i--);}voidKeyDown(void)//按键检测函数//{chara=0;//赋初值给a//GPIO_KEY=0x0f;//P1=0x0f//if(GPIO_KEY!=0x0f)//判断按键是否按下//{delay(1000);//延时10ms进行消抖//if(GPIO_KEY!=0x0f)//再次检测键盘是否按下,
4、当有按键按下,条件成立//{GPIO_KEY=0X0F;//再次赋值,检测列,赋初值给P1.由上图可知,P1.0-P1.3为列//switch(GPIO_KEY)//将P1口读回来的值作为switch的选择条件//00000P1.7{00000P1.600000P1.5case(0X07):KeyValue=0;break;00000P1.411101P1.3case(0X0b):KeyValue=1;break;11011P1.210111P1.1case(0X0d):KeyValue=2;break;01111P1.0按键0按下按键0按下按键1按下按键0按下无按值按下case(0X0e
5、):KeyValue=3;break;0X0e0X0d0X0b0X070X0F}GPIO_KEY=0XF0;//接下来赋值给P1,检测行,赋初值给P1。由上图可知,P1.4-P1.7为行//switch(GPIO_KEY)//此处是在检测了列的基础上,再进行行检测,所以这里的KeyValue的值是上面的0.1.2.3中的其中一个//{case(0X70):KeyValue=KeyValue;break;case(0Xb0):KeyValue=KeyValue+4;break;case(0Xd0):KeyValue=KeyValue+8;break;case(0Xe0):KeyValue=K
6、eyValue+12;break;}while((a<50)&&(GPIO_KEY!=0xf0))//检测按键松手检测{delay(1000);a++;//a的作用是用于去抖动,重复检测50次//}}}}voidmain(){LSA=0;//给一个数码管提供位选//LSB=0;//给一个数码管提供位选//LSC=0;//给一个数码管提供位选//while(1)//无限循环//{KeyDown();//调用按键判断函数//GPIO_DIG=smgduan[KeyValue];//将按键数值赋给P0口,控制锁存器//}}
此文档下载收益归作者所有