直接进入正题!
今天开始我们要学习一个新的模块:独立按键!
先说独立按键的内部结构:
它相当于一种电子开关,按下时开关接通,松开时开关断开,实现原理是通过轻触按键内部的金属弹片受力弹动来实现接通和断开。
它主要由四个部分组成:
将底座再详细破拆一下,看看里面的结构:
不管按键有没有按下,左边两个引脚都通过一个金属片连接起来,然后再向中间伸出两个接触点,右边两个引脚也是通过一个金属片连接起来,并向中间伸出一个接触点,如上图红色标识。
那么金属弹片就在中间,如果松手时,它就凸起来,不接触,如果按压,弹片会被压扁,就开始接触,这三个接触点就会被连接。
再看原理图
右边连接负极(接地),左边连接的是单片机的这些IO口上
我们知道单片机的所有IO口默认都是高电平,如果按键没有按下,IO保持的就是高电平,按键按下后,IO就变成低电平了。(高电平是1,低电平是0)
接下来新建一个工程演示一下
创建工程的步骤以后不再赘述,并且会慢慢省略,大家一定要变得越来越熟练,如果忘记了可以翻看一下前几篇的笔记。
先写下以下代码,编译无错误后下载程序
这些中间步骤以后会省略,如果忘记了可以翻看前面的笔记。
现在重启板子,看看效果
第一个LED点亮了
这个其实是通过控制寄存器来实现的,寄存器是8个为一组的,如果直接操作这个P2的话,需要同时给8个赋值,但是我们现在只想操作最低位的第一个LED,那我们要怎么做才能只操作最低位的第一个LED,而不影响其他位呢?
我们可以先把P2=0xFE注释掉,然后写成P2_0=0;就可以只操作P2的其中一个口了,而这个口是0口,所以写成P2_0
操作一个寄存器8位的时候,我们要给8位的数据,那操作一位的时候,我们只给0或者1,给2也相当于是1,总之,非0即是1
以上这段代码0错误0警告,接下来下载下来看看效果
结果同样只点亮了第一个LED,其他的保持不亮。
如果加上P2_0=1;它就是会熄灭
我们要实现的效果是第一个按键控制就是按下的时候,执行P2_0=0;
松开的时候,执行P2_0=1;
那么怎么实现呢?
给寄存器写一个状态,它就会把这个状态送给IO口,如果IO口产生电平,它也会把IO口产生的电平送回到寄存器。
根据原理图,我们知道K1这个按键实际上是接在P31这个口
想要直接读这个口,怎么办呢?
代码这样写:
编译一下没有错误就下载程序,重启板子看看效果
重启板子后,我们没有看到灯亮,我们就按一下K1这个键,D1号LED就亮了
松开K1键,LED就灭了。
以上就实现了一个按键控制一个LED的功能。
我们也可以用两个按键控制一个LED
代码这样写:
只有当K1和K2同时按下的时候才会亮
如果将代码改成:
K1或者K2按下它就是会亮
按下K1:
按下K2:
只有K1和K2同时松开才不会亮。
今天就学到这里!
如果还看不懂代码的伙伴,要先把C语言学习到指针那里再学单片机会事半功倍。