首页 理论教育用按键控制数码管显示

用按键控制数码管显示

【摘要】:显示系统用4位LED显示器,参见任务5.2的电路图5-18。图6-4 任务6.1仿真效果图

1.任务要求

用独立式按键输入不同键值,在程序中定义一个变量“keynum”,并给其赋值100,数码管实时显示“keynum”的值。当按下K1或K3键时,“keynum”的值减1,当按下K2或K4键时,“keynum”的值加1,“keynum”的值在0~255变化。

2.任务目的

(1)学习掌握独立式键盘的工作原理及编程应用。

(2)深入学习C语言的判断语句(if、if-else、case)。

3.任务分析

常用的按键电路有两种形式,独立式按键和矩阵式按键。独立式按键比较简单。它们各自与独立的输入线相连接,如图6-1所示。

图6-1 独立式按键原理图

4条输入线接到单片机的I/O口上,当按键K1按下时,+5 V电源通过电阻R1,然后再通过按键K1最终进入GND形成一条通路,那么这条线路的全部电压都加到了R1这个电阻上,KeyIn1这个引脚就是个低电平。当松开按键后,线路断开,就不会有电流通过,那么KeyIn1和+5 V电源就应该是等电位,是一个高电平。我们就可以通过KeyIn1这个I/O口的高低电平来判断是否有按键按下。

电路中按键的原理我们清楚了,但是实际上在单片机I/O口内部也有一个上拉电阻的存在。我们的按键是接到了P1口上,P1口上电默认是准双向I/O口,电路如图6-2所示。

图6-2方框内的电路都是指单片机内部部分,方框外的就是外接的上拉电阻和按键。注意,当要读取外部按键信号时,单片机必须先给该引脚写“1”,也就是高电平,这样才能正确读取到外部按键信号,这一点项目4中有介绍,现结合这个实例再来分析一下缘由。

图6-2 准双向I/O口结构图(P1端口)

当内部输出是高电平,经过反向器变成低电平,V2不会导通,那么单片机I/O口从内部来看,由于上拉电阻R的存在,所以是一个高电平。如果外部没有按键按下将电平拉低,VCC 也是+5 V,它们之间虽然有2个电阻,但是没有压差,就不会有电流,线上所有的位置都是高电平,这个时候我们就可以正常读取到按键的状态。

当内部输出是个低电平,经过反相器变成高电平,V2导通,那么单片机的内部I/O口就是个低电平,这个时候,外部虽然也有上拉电阻的存在,但是两个电阻是并联关系,不管按键是否按下,单片机的I/O口上输入到单片机内部的状态都是低电平,我们就无法正常读取到按键的状态。(www.chuimin.cn)

这个和水流其实很类似的,内部和外部,只要有一边是低电位,那么电流就会顺流而下,由于只有上拉电阻,下边没有电阻分压,直接接到GND上,不管另外一边是高还是低,电平肯定就是低电平。

从上面的分析可以得出一个结论,这种具有上拉的准双向I/O口,如果要正常读取外部信号的状态,必须首先得保证自己内部输出的是1,如果内部输出0,则无论外部信号是1还是0,这个引脚读进来的都是0。

4.电路设计

根据任务分析和结合前面已经学过的知识,设计如下电路图,如图6-3所示。显示系统用4位LED显示器,参见任务5.2的电路图5-18。

图6-3 独立按键解码电路图

这个电路图是在任务5.2的基础上增加键盘部分设计的。

5.源程序设计

显示函数和延时函数参见任务5.2的程序清单。

6.Proteus仿真

在Proteus仿真环境下,当按下K1或K3时,显示数减少,当按下K2或K4时,显示数增大,显示初值为100,达到设计效果。当两次按下K1时效果如图6-4所示。

图6-4 任务6.1仿真效果图