您的位置:首页 > 其它

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

2016-06-01 16:34 369 查看

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

预备知识:

(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接数码管
}


实验总结:

这个实验把之间的实验结合在了一起,随着学习的深入,代码也会越来越长,难度也越来越大。多总结多回顾。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: