• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

单片机矩阵键盘扫描

武飞扬头像
嵌入式硬件与代码
帮助1

本讲任务:

      了解矩阵键盘检测原理及如何获得键盘扫描值。

逐行扫描:

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

例程:

/*************************矩阵键盘扫描**************************

*单片机型号:STC89C52RC

*开发环境:KEIL

*功能:当按下一个按键后,在数码管进行数值的显示

******************************************************************/

#include<reg51.h>

sbit BEEP=P2^3;

sbit LE1=P2^6;

sbit LE2=P2^7;

void delay(int In,int Out);

unsigned char buffer,key_num;

unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

void delay(int In,int Out)                       //定义延时函数 

{

 int i,j;

 for(i=0;i<In;i )

 {for(j=0;j<Out;j ){;}}

}

void display(unsigned char num)         //数码管显示

{

 P0=table[num];  LE1=1;LE1=0;

 P0=0x00; LE2=1;LE2=0;

}

void main()

{

 LE1=0;LE2=0;

 while(1)

 {

  /**************************************************************/

  P3=0xfe;                                            //扫描S3,S4,S5,S6;

  buffer=P3;          

  buffer=buffer&0xf0; 

  if(buffer!=0xf0)

  {

   delay(5,10);

   if(buffer!=0xf0)

   {

    buffer=P3;               

    switch(buffer)

    {

     case 0xee:{key_num=0;}break;

     case 0xde:{key_num=1;}break;

     case 0xbe:{key_num=2;}break;

     case 0x7e:{key_num=3;}break;

    }

    while(buffer!=0xf0)    

    {

     buffer=P3;          

     buffer=buffer&0xf0;    

     BEEP=0;

    }

    BEEP=1;

    display(key_num);

   }

  }

  /**************************************************************/

  P3=0xfd;                                            //扫描S8,S9,S10,S11

  buffer=P3;

  buffer=buffer&0xf0;

  if(buffer!=0xf0)

  {

   delay(5,10);

   if(buffer!=0xf0)

   {

    buffer=P3;

    switch(buffer)

    {

     case 0xed:{key_num=4;}break;

     case 0xdd:{key_num=5;}break;

     case 0xbd:{key_num=6;}break;

     case 0x7d:{key_num=7;}break;

    }

    while(buffer!=0xf0)

    {

     buffer=P3;

     buffer=buffer&0xf0;

     BEEP=0;

    }

    BEEP=1;

    display(key_num);

   }

  }

  /**************************************************************/

  P3=0xfb;                                             //扫描S13,S14,S15,S16

  buffer=P3;          

  buffer=buffer&0xf0;       

  if(buffer!=0xf0)

  {

   delay(5,10);

   if(buffer!=0xf0)

   {

    buffer=P3;     

    switch(buffer)

    {

     case 0xeb:{key_num=8;}break;

     case 0xdb:{key_num=9;}break;

     case 0xbb:{key_num=10;}break;

     case 0x7b:{key_num=11;}break;

    }

    while(buffer!=0xf0)

    {

     buffer=P3;

     buffer=buffer&0xf0;

     BEEP=0;

    }

    BEEP=1;

    display(key_num);

   }

  }

  /***************************************************************/

  P3=0xf7;                                            //扫描S18,S19,S20,S21

  buffer=P3;

  buffer=buffer&0xf0;

  if(buffer!=0xf0)

  {

   delay(5,10);

   if(buffer!=0xf0)

   {

    buffer=P3;

    switch(buffer)

    {

     case 0xe7:{key_num=12;}break;

     case 0xd7:{key_num=13;}break;

     case 0xb7:{key_num=14;}break;

     case 0x77:{key_num=15;}break;

    }

    while(buffer!=0xf0)

    {

     buffer=P3;

     buffer=buffer&0xf0;

     BEEP=0;

    }

    BEEP=1;

    display(key_num);

   }

  }

 }

}

对应电路图:

学新通

最后,求求看到的此文的小伙伴点赞关注支持一下下哦。毕竟,码字不容易哦,您的支持是我最大的动力呀!!!呜呜呜~~~

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhhaeekf
系列文章
更多 icon
同类精品
更多 icon
继续加载