找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2405|回复: 0
打印 上一主题 下一主题
收起左侧

单片机矩阵按键设计源码

[复制链接]
跳转到指定楼层
楼主
ID:271398 发表于 2018-3-7 14:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
方法一:
         逐行扫描:我们可以通过高四位轮流输出低电平来对矩阵键盘进行逐行扫描,当低四位接收到的数据不全为1的时候,说明有按键按下,然后通过接收到的数据是哪一位为0来判断是哪一个按键被按下。
方法二:
        行列扫描:我们可以通过高四位全部输出低电平,低四位输出高电平。当接收到的数据,低四位不全为高电平时,说明有按键按下,然后通过接收的数据值,判断是哪一列有按键按下,然后再反过来,高四位输出高电平,低四位输出低电平,然后根据接收到的高四位的值判断是

单片机源程序如下:
  1. /**************************************************************************************
  2. *                              静态数码管显示实验                                                                                                  *
  3. 实现现象:下载程序后数码管静态显示0。
  4. 注意事项:                                                                                                                                                                  
  5. ***************************************************************************************/

  6. #include "reg52.h"                         //此文件中定义了单片机的一些特殊功能寄存器

  7. typedef unsigned int u16;          //对数据类型进行声明定义
  8. typedef unsigned char u8;
  9. #define GPIO_DIG P0
  10. #define GPIO_KEY P1
  11. u8 KeyValue;
  12. u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  13.                                         0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值
  14. void delay(u16 i)
  15. {
  16.    while(i--);

  17. }

  18. void keydown()
  19. {
  20. char a=0;
  21. GPIO_KEY=0x0f;
  22. if(GPIO_KEY!=0x0f)
  23.    { delay(1000);
  24.    if(GPIO_KEY!=0x0f)
  25.     {

  26.            switch(GPIO_KEY)
  27.      {
  28.    case(0x07):KeyValue=0;break;
  29.    case(0x0b):KeyValue=1;break;
  30.    case(0x0d):KeyValue=2;break;
  31.    case(0x0e):KeyValue=3;break;  
  32.     }
  33.     GPIO_KEY=0xf0;
  34.             switch(GPIO_KEY)
  35.    {
  36.    case(0x70):KeyValue=KeyValue;break;
  37.    case(0xb0):KeyValue=KeyValue+4;break;
  38.    case(0xd0):KeyValue=KeyValue+8;break;
  39.    case(0xe0):KeyValue=KeyValue+12;break;
  40.         }
  41.   while((a<50)&&(GPIO_KEY!=0Xf0))
  42.          {
  43.           delay(1000);
  44.           a++;
  45.          }
  46.    }
  47.    
  48.    
  49.    }
  50. }
  51. /*******************************************************************************
  52. * 函; 数 名       : main
  53. * 函数功能                 : 主函数
  54. * 输    入       : 无
  55. * 输    出             : 无
  56. *******************************************************************************/
  57. void main()
  58. {       
  59.         while(1)
  60.          {
  61.           keydown();
  62.           GPIO_DIG=~smgduan[KeyValue];
  63.          }

  64. }
复制代码

所有资料51hei提供下载:
矩阵按键.rar (204.52 KB, 下载次数: 11)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表