4.2.第十个实验--检测键值并使用数码管显示

原创 2016年06月01日 16:34:17

第十个实验–检测键值并使用数码管显示

预备知识:
(1)什么是键值:给每一个按键一个编码值,通过编码值来判断是哪个按键被按下了。
(2)在大程序中,键值的检测和处理事分开独立的。这样可以提高安全性。
(3)再次理解什么是键值,总共有8个按键,当第1个被按住,其对应的一个IO引脚变为低电平,那么接按键的8个按键的IO端口对应的二进制数就是1111 1110.以此类推,通过IO端口对应的八位二进制数来判断哪一个按键被按下。

实验过程分析:
(1)每一个按键设置一个键值keynum,当按键1被按下,keynum = 1,以此类推。
(2)测试八个按键分别被按下的键值
(3)编写按键处理函数

实验代码:

#include<reg51.h>

int  dm[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc7,0xa1,0x86,0x8e};
    //独立数码管的段码表,显示从0到f

void display(unsigned char);        //按键处理函数声明

void main(void)
{
    unsigned char i=0;
    unsigned char j = 0;
    unsigned char keynum = 0;   //keynum保存每一个按键的键值

/*******************解决不能同时按住两个按键的问题**************************/
    for(i=0;i<8;i++)
    {                           //假设原来是第五个按键 1110 1111
        if(P1 & (0x1<<i)==0)    //再按第六个按键   1101 1111  这时候那一个0 第5位跑到了第6位    
        {                       //这里的0x1左移了5位跑到了第6位上,所以键值keynum = i + 1
            keynum = i+1;
        }
    }

/***********************************按键检测****************************/
while(1)
    {

        if(P1==0xfe)        //P1端口接独立按键
        {           
            keynum = 1;
        }
        if(P1==0xfd)
        {
            keynum = 2;
        }
        if(P1==0xfb)
        {           
            keynum = 3;
        }
        if(P1==0xf7)
        {
            keynum = 4;
        }       
        if(P1==0xef)
        {           
            keynum = 5;
        }
        if(P1==0xdf)
        {
            keynum = 6;
        }       
        if(P1==0xbf)
        {           
            keynum = 7;
        }
        if(P1==0x7f)
        {
            keynum = 8;
        }       

/******************下面是按键的处理*********************************/

          display(keynum);  //按键的处理函数
    }
}
/******************************独立数码管显示***********************/

void display(unsigned char keynum)
{
    P0 =dm[keynum];     //P0接数码管
}

实验总结:
这个实验把之间的实验结合在了一起,随着学习的深入,代码也会越来越长,难度也越来越大。多总结多回顾。

版权声明:本文为博主原创文章,转载请注明出处。

4.6.第十一个实验--使用数码管显示矩阵按键的键值

实验目的:使用数码管显示矩阵按键的键值之前我们学过了独立按键,先回顾一下,今天我们要了解的是矩阵按·键, 预备知识: (1)什么是矩阵按键 1. 横向纵向分割 2. 案件的两端...

液晶与数码管同步显示键值

  • 2012年04月19日 20:48
  • 11KB
  • 下载

7.矩阵键盘读取键值 数码管显示

/*  ***********************************************************************************************...

矩阵键盘键值在数码管上显示

  • 2014年07月24日 19:08
  • 29KB
  • 下载

数码管显示实验

实验目的: 通过实验,掌握如何通过74HC595扩展IO口,掌握如何运用动态扫描的方法驱动多位数码管; 实验内容: 判断按键SW8(INT1)是否按下,并对按键次数计数,显示在数码管之上;(单片机...

verilog HDL +UART实验+数码管动态显示

功能:板子接受通过RS232接受串口调试助手发送的一个字节数据,然后将其转化成0~~255的十进制数,在4位数码管上,显示出来(只用到了3位),不用的位熄灭,只有有数字的位才显示。 说明:U...
  • kele_6
  • kele_6
  • 2013年03月19日 14:54
  • 2974

2.3.第八个实验--使用38译码器驱动数码管

2.7.第八个实验–使用38译码器驱动数码管实验目的:使用38译码器来驱动数码管来节省IO端口预备知识:(1)什么是38译码器? 38译码器有3个输入端口A、B、C和8个...

PLC实验五(LED数码管显示控制)

PLC实验五(LED数码管显示控制)
  • YZ_51
  • YZ_51
  • 2017年05月10日 14:16
  • 393

数码管显示动态检测结果

  • 2013年11月06日 16:54
  • 22KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:4.2.第十个实验--检测键值并使用数码管显示
举报原因:
原因补充:

(最多只允许输入30个字)