51单片机04矩阵按键逐行扫描,行列扫描代码

51单片机04矩阵按键逐行扫描,行列扫描代码

ID:47323728

大小:121.50 KB

页数:9页

时间:2020-01-10

51单片机04矩阵按键逐行扫描,行列扫描代码_第页
预览图正在加载中,预计需要20秒,请耐心等待
资源描述:

《51单片机04矩阵按键逐行扫描,行列扫描代码》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、矩阵键盘扫描原理 方法一:             逐行扫描:我们可以通过高四位轮流输出低电平来对矩阵键盘进行逐行扫描,当低四位接收到的数据不全为1的时候,说明有按键按下,然后通过接收到的数据是哪一位为0来判断是哪一个按键被按下。 方法二:             行列扫描:我们可以通过高四位全部输出低电平,低四位输出高电平。当接收到的数据,低四位不全为高电平时,说明有按键按下,然后通过接收的数据值,判断是哪一列有按键按下,然后再反过来,高四位输出高电平,低四位输出低电平,然后根据接收到的高四位的值

2、判断是那一行有按键按下,这样就能够确定是哪一个按键按下了。 //行列扫描#include#define GPIO_KEY P0#define GPIO_LCD P2unsigned char code a[17]={~0xfc,~0x60,~0xda,~0xf2,~0x66,~0xb6,~0xbe,~0xe0,~0xfe,~0xf6,~0xee,~0x3e,~0x9c,~0x7a,~0xde,~0x8e,~0x00};//按位取反的用法void delay10ms();void k

3、eydown();//要与下面的定义一致void main(){  GPIO_LCD=a[16];//初始化数码管  while(1)  {       keydown();  }}void delay10ms(){  unsigned char a,b;  for(a=38;a>0;a--)    for(b=130;b>0;b--);}void keydown()//检测按下,按下时需要消抖,检测松开,返回按键值//没有按键时保持{  unsigned char n=0,key;  GPIO_K

4、EY=0x0f;  if(GPIO_KEY!=0x0f)//读取按键是否按下  {    delay10ms();      //延时10ms消抖    if(GPIO_KEY!=0x0f)//再次检测按键是否按下    {      GPIO_KEY=0x0f;//测试列      switch(GPIO_KEY)      {        case 0x07: key=0;break;        case 0x0b: key=1;break;        case 0x0d: key=2

5、;break;        case 0x0e: key=3;break;        default : GPIO_LCD=a[16];      }      GPIO_KEY=0xf0;//测试行      switch(GPIO_KEY)      {        case 0x70: key=key;break;        case 0xb0: key=key+4;break;        case 0xd0: key=key+8;break;        case 0xe0

6、: key=key+12;break;        default : GPIO_LCD=a[16];      }      GPIO_LCD=a[key];      while(++n<5&&GPIO_KEY!=0xf0)//检测按键是否松开      {        delay10ms();      }          }  }}//逐行扫描#include#define GPIO_KEY P0#define GPIO_LED P2unsigned char cod

7、e a[17]={~0xfc,~0x60,~0xda,~0xf2,~0x66,~0xb6,~0xbe,~0xe0,~0xfe,~0xf6,~0xee,~0x3e,~0x9c,~0x7a,~0xde,~0x8e,~0x00};//按位取反的用法void delay10ms();void keydown1();//要与下面的定义一致void main(){  GPIO_LED=a[16];//初始化数码管  while(1)  {       keydown1();  }}void keydown1()

8、{  unsigned char n=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)        {       

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。