勘误:手写代码那里矩阵按键笔者写成用S6和S7,也就是P30和P31来判断了,不过原理没变;第二处就是短按应该为S5,short嘛,但是笔者跟长按标反了,也可以自行修改。
一、代码知识回顾
题目中要分别用独立按键和矩阵按键分别实现实验现象,所以这俩种我们都复习一下,因为江科大的板子跟我们的不太一样,那就看小蜜蜂的代码,学习一下基本操作吧,就当复习。
基本操作:
原理图部分
既然是作一下演示,那笔者直接就在main文件里面copy一下吧。基本操作第一步就是根据原理图部分作引脚定义。
第二步就是俩个嵌套的判断来实现清除干扰和完成独立按键按下灯亮,松手熄灭的功能。
实验现象:S4按下时就是L4灯亮,松手熄灭。这就是基本操作。
下面这个小蜜蜂的训练题就涉及到状态机编程的思想,对于这个思想,大家可以去看国一学长的帖子(蓝桥杯单片机快速教程5——利用状态机思想编程-优快云博客)
我们待会要做的题目就会用到该编程思想,大家学习完看代码理解起来会容易些。
框架基本不变,仍然是基本操作里面的代码。
实验现象:实现了训练要求,但是不灵敏,会出现要按多下6或者7键才能点亮或者熄灭的不良体验,优化方法留给你们去寻找(其实是笔者不会)。
接下来回顾矩阵按键:
注意:1.跳线帽接1~2引脚;2.发现有触发信号不做去抖动
原理图部分(注意变化)
扫描原理:
说明:1.右上这张图,独立按键(四个引脚但是俩俩短接)一边接地一边接上拉电阻和I/O口,那按下就会输出低电平;
2.右下这张图就是矩阵按键的接法左边I/O口高低电平都有可能,那按键按下时输出的电平与输入一致;
3.那扫描思路就是一行一行扫描,一列一列得读取,如下面,第一行给0,读取列,发现所有都是没有按下,那就没有导通,另一边仍然是高电平;换第二行,就可以读取到一个低电平就是检测到按键按下;
但是我还是觉得江科大这种形式写起来更简洁一点。
下面是笔者的练习回顾代码:
实验现象:第四列有点奇怪的问题,代码放第一列前面才能用,其中笔者的按键8是按下就会发乱码给上位机,不知道啥情况,其余按键都是按下时会卡死,松手就会向上位机发送键码值。
至此,俩种键盘我们都回顾过了,接下来就是尝试实现我们的实验题目了。
二、题目
三、手写代码
(由于笔者水平有限,着实看不懂状态机的使用,只能写出一个能近似完成实验现象的代码)
框架和基础
我们仍然要用到数码管的动态显示,那我们可以在上一章的代码基础下修改和写键盘扫描函数。
今天的主角扫描兼逻辑判断函数
(使用的是S7和S6按键)
结尾
实验现象:(带这种数码管的实验代码在下载时不会有蜂鸣器鸣叫,很舒服)
(按的时候灵敏度没有那么高,所以按下时用点力,然后手速慢一点)
1.在下载完之后,数码管默认全部熄灭,因为此时没有返回值,就不会对应到四种模式之一;
2.按键按下S4,数码管(从左往右)第一位显示4;
3.长按S5俩秒或两秒以上,数码管显示直接切换为55,表示S5,长按模式;
4.按S5一秒左右,数码管显示直接切换为C5,短按模式;
5.两根手指分别放在S4和S5按键上,一起按下时,数码管显示45,双按模式;
第五点说明:不会要求你在时间上一定同时按下,如果你一直按住S4,由于水平有限,笔者只能让代码卡死,直到你松手才会解开;不过你一直按住S4时,再按一下S5,数码管就会立刻显示45,表示双按模式;
下面是用独立按键来实现实验现象,修改处可以对照着矩阵按键实验代码来看,修改地方并不多。
至此,按键部分总算是有所回顾了,但是只能算是一点新知识都没学到,此节课的代码,大家要是有更好的写法或者说有真正意义上用状态机思想完成实验现象的,也可以分享和探讨,要是像笔者这样为了现象写代码,也可以看看我这个,双按识别的成功率还是可以的。