接下来是第二部分51单片机的学习综合,这篇文章包括了三个小实验:独立按键控制LED亮暗、独立按键控制LED二进制亮灭以及独立按键控制LED移位。
在笔者使用的电路板中p30~p33代表的k1、k2、k3、k4独立按键。在实验开始之前,我们需要了解按键的抖动:对于机械按键来说,当我们按下它的时候,并不会马上接通,会有很微小时间内的抖动。同时因为单片机的响应时间极短,这就会导致LED会有极短时间内的不稳定。
鉴于此种情况,在我们编写代码的时候,我们就需要写一段延长时间的代码以度过这段时间。
下面是独立按键以及LED的电路图:
第一个实验:独立按键控制LED亮暗
上面是实现这一过程的代码,Delay函数的作用就是解决按键抖动的问题,该实验难度不大笔者不多做赘述。
实验现象如下:
独立按键控制LED亮灭
第二个实验:独立按键控制LED二进制亮灭
我们知道,在LED灯在不亮的时候处于高电平(1),亮的时候则处于低电平(0)。所以在初始时刻,LED灯的情况为1111 1111。由此我们可以想到只要减去一,就会变成1111 1110,也就是第一个灯会亮,以此类推,成为零的位置所代表的灯就会亮,所以我们可以设计以下代码:
同时笔者也可以提供第二种思路:定义一个新的数num,数字的类型为 unsigned char(对于unsigned char,它用于定义无符号字节数据或字符,可以存放一个字节的无符号数,其取值范围为0~255。unsigned char可以用来存放无符号数,也可以存放西文字符,一个西文字符占一个字节。)而且255正好等于二进制中的1111 1111。
同时我们也要知道取反符号的应用,在一串二进制的数字前加上“~”可以将0变为1,1变为0。
将num的初始值设置为0x00(十六进制的0000 0000),每当我们按下一次独立按键的时候,num就加一,再取反后就和上一种方法是一样的了。代码如下:
实验现象如下:
独立按键控制LED二进制亮灭
第三个实验:独立按键控制LED移位
在实验开始之前,我们需要认识位移符号,”<<“的含义是二进制数字中的1向左移一位。
我们可以定义一个类型为unsigned char的数字num=0x01。每当我们按一次独立按键的时候,num就通过”<<“改变一次,同时我们再次将num取反赋值给P2(LED灯)就可以完成LED的顺序点亮了,代码如下:
实验结果如下:
独立按键控制LED移位
以上就是第二章51单片机有关独立按键的部分基础学习了,希望可以帮助到大家!