单片机矩阵键盘扫描

这篇具有很好参考价值的文章主要介绍了单片机矩阵键盘扫描。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本讲任务:

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

逐行扫描:

      我们可以通过高四位轮流输出低电平来对矩阵键盘进行逐行扫描,当低四位接收到的数据不全为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);

   }

  }

 }

}

对应电路图:

单片机按键扫描,单片机,矩阵,嵌入式硬件

最后,求求看到的此文的小伙伴点赞关注支持一下下哦。毕竟,码字不容易哦,您的支持是我最大的动力呀!!!呜呜呜~~~文章来源地址https://www.toymoban.com/news/detail-629396.html

到了这里,关于单片机矩阵键盘扫描的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 蓝桥杯单片机学习日记3-矩阵键盘的使用,线反转法,三步消抖,按键长按与短按

    此片文章用于记录蓝桥杯单片机的学习 篮球杯单片机上的矩阵按键原理图如下:   使用矩阵键盘时,要将跳线帽J5跳至KBD模式。   值得注意的是,若开发板上的单片机使用的为STC15,那么以上原理图适用。如果单片机为IAP15,则在上述原理图中,要将P36换成P42,P37换成P44。  

    2023年04月10日
    浏览(49)
  • C51单片机-按下K0至K15,显示按键标号(4x4矩阵键盘电路,1个数码管)

    keil uVision4界面: proteus仿真界面:

    2024年02月04日
    浏览(48)
  • 单片机独立按键扫描程序

    为了方便,写一些方便的程序片段以便以后使用 首先是定时器扫描按键给两个例子: 一: 二:

    2024年02月16日
    浏览(49)
  • 32单片机按键扫描 实现长短按

    key.c key.h

    2024年02月03日
    浏览(44)
  • 51单片机——秒表(定时器扫描独立按键和数码管)

            这次实验主要是用定时器来定时扫描独立按键和数码管,代替两个模块函数中的延时函数。用定时器定时扫描的好处就是,主函数中的延时并不会影响按键的检测和数码管的扫描,只会影响响应速度。因为定时器是溢出就会执行中断程序,是定时的扫描。 改进的

    2024年02月10日
    浏览(64)
  • 单片机——矩阵按键模块

    主要目的 学会按键扫描 1.延时函数 延时函数部分详见链接: 单片机控制一盏灯的亮与灭程序解释 这个程序里面的延时函数的目的是按键消抖。 2.按键扫描模块 这是本次实验的重点,将详细介绍。 先来观察矩阵按键模块的连接 总共8个口。 先实现关于列的扫描,设置初始值(

    2024年02月08日
    浏览(39)
  • 【51单片机】矩阵按键

    参考:普中 51 单片机开发攻略 main.c 只有第一个数码管量,并且按第几个键,就显示第几(0-F)。

    2024年01月21日
    浏览(61)
  • 51单片机 | 矩阵按键实验

      开发板上板载了一个 4*4 矩阵键盘。本节所要实现的功能是:通过开发板上的矩阵键盘控制静态数码管显示对应的键值 0-F 。   独立按键与单片机连接时,每一个按键都需要单片机的一个 I/O 口,若某单片机系统需较多按键,如果用独立按键便会占用过多的 I/O 口资源。

    2024年02月05日
    浏览(50)
  • 蓝桥杯单片机学习4——独立按键&矩阵按键

    上期学习了数码管的静态显示,这次我们来学习独立按键矩阵按键 原理很简单,当作为独立按键使用时, 跳线帽的23接在一起 ,此时按键如果按下,则按键连接的IO口电平会被拉低,通过捕获IO的电平变化,就可以判断按键是否按下。 什么是按键消抖?按键为什么会有抖动?

    2023年04月15日
    浏览(67)
  • 五、51单片机控制矩阵按键

    1.1、矩阵按键原理分析 这里矩阵按键为4*4的矩阵按键。 (1)矩阵按键横向和纵向分割。 (2)按键两端分别接不同的IO引脚。 (3)按键物理作用不变:按下按键两端接通,弹起按键两端断开。 1.2、矩阵按键的工作过程 JP4接P3端口,JP4_8接P3^7...JP4_1接P3^0。 (1)IO端口(P3)先输出0x0f,按键列

    2023年04月20日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包