关闭

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

134人阅读 评论(0) 收藏 举报
分类:

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

预备知识:
(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接数码管
}

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

0
0

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:15071次
    • 积分:716
    • 等级:
    • 排名:千里之外
    • 原创:58篇
    • 转载:3篇
    • 译文:0篇
    • 评论:1条