51单片机04矩阵按键逐行扫描行列扫描代码_第1页
51单片机04矩阵按键逐行扫描行列扫描代码_第2页
51单片机04矩阵按键逐行扫描行列扫描代码_第3页
51单片机04矩阵按键逐行扫描行列扫描代码_第4页
51单片机04矩阵按键逐行扫描行列扫描代码_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

矩阵键盘扫描原理方法一:逐行扫描:我们可以通过高四位轮流输出低电平来对矩阵键盘进行逐行扫描,当低四位接收到的数据不全为1的时候,说明有按键按下,然后通过接收到的数据是哪一位为0来判断是哪一个按键被按下。方法二:行列扫描:我们可以通过高四位全部输出低电平,低四位输出高电平。当接收到的数据,低四位不全为高电平时,说明有按键按下,然后通过接收的数据值,判断是哪一列有按键按下,然后再反过来,高四位输出高电平,低四位输出低电平,然后根据接收到的高四位的值判断是那一行有按键按下,这样就能够确定是哪一个按键按下了。//行列扫描#include<reg51.h>#defineGPIO_KEYP0#defineGPIO_LCDP2unsignedcharcodea[17]={~0xfc,~0x60,~0xda,~0xf2,~0x66,~0xb6,~0xbe,~0xe0,~0xfe,~0xf6,~0xee,~0x3e,~0x9c,~0x7a,~0xde,~0x8e,~0x00};//按位取反的用法voiddelay10ms();voidkeydown();//要与下面的定义一致voidmain(){GPIO_LCD=a[16];//初始化数码管while(1){keydown();}}voiddelay10ms(){unsignedchara,b;for(a=38;a>0;a--)for(b=130;b>0;b--);}voidkeydown()//检测按下,按下时需要消抖,检测松开,返回按键值//没有按键时保持{unsignedcharn=0,key;GPIO_KEY=0x0f;if(GPIO_KEY!=0x0f)//读取按键是否按下{delay10ms();//延时10ms消抖if(GPIO_KEY!=0x0f)//再次检测按键是否按下{GPIO_KEY=0x0f;//测试列switch(GPIO_KEY){case0x07:key=0;break;case0x0b:key=1;break;case0x0d:key=2;break;case0x0e:key=3;break;default:GPIO_LCD=a[16];}GPIO_KEY=0xf0;//测试行switch(GPIO_KEY){case0x70:key=key;break;case0xb0:key=key+4;break;case0xd0:key=key+8;break;case0xe0:key=key+12;break;default:GPIO_LCD=a[16];}GPIO_LCD=a[key];while(++n<5&&GPIO_KEY!=0xf0)//检测按键是否松开{delay10ms();}}}}//逐行扫描#include<reg51.h>#defineGPIO_KEYP0#defineGPIO_LEDP2unsignedcharcodea[17]={~0xfc,~0x60,~0xda,~0xf2,~0x66,~0xb6,~0xbe,~0xe0,~0xfe,~0xf6,~0xee,~0x3e,~0x9c,~0x7a,~0xde,~0x8e,~0x00};//按位取反的用法voiddelay10ms();voidkeydown1();//要与下面的定义一致voidmain(){GPIO_LED=a[16];//初始化数码管while(1){keydown1();}}voidkeydown1(){unsignedcharn=0,key;GPIO_KEY=0x0f;//检测按键是否按下if(GPIO_KEY!=0x0f){delay10ms();//延时10ms消抖if(GPIO_KEY!=0x0f)//再次检测{//高四位轮流输出低电平GPIO_KEY=0x7f;if(GPIO_KEY!=0x7f){switch(GPIO_KEY){case0x77:key=0;gotoAA;case0x7b:key=1;gotoAA;case0x7d:key=2;gotoAA;case0x7e:key=3;gotoAA;}}GPIO_KEY=0xbf;if(GPIO_KEY!=0xbf){switch(GPIO_KEY){case0xb7:key=4;gotoAA;case0xbb:key=5;gotoAA;case0xbd:key=6;gotoAA;case0xbe:key=7;gotoAA;}}GPIO_KEY=0xdf;if(GPIO_KEY!=0xdf){switch(GPIO_KEY){case0xd7:key=8;gotoAA;case0xdb:key=9;gotoAA;case0xdd:key=10;gotoAA;case0xde:key=11;gotoAA;}}GPIO_KEY=0xef;if(GPIO_KEY!=0xef){switch(GPIO_KEY){case0xe7:key=12;gotoAA;case0xeb:key=13;gotoAA;case0xed:key=14;gotoAA;case0xee:key=15;gotoAA;}}GPIO_LED=a[16];gotoBB;AA:GPIO_LED=a[key];BB:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论