前言:发现STC板子上的按键不够用了,想着用导航键,但无奈在网上找了很久都没有任何一个字眼是关于STC学习板导航按键的使用和详细的代码。今天下午我帅帅的学长教会了我如何去使用导航键,为了更好的巩固和理解,特写博客一篇,希望能帮到有需要的人。
本篇博客构成:
目录
先来看导航键的结构图:
1.首先可以看到左边有多个不同阻值的电阻,然后是分别是1、2、3、4、5、6共6个接口。
2.图片中间是一个开关,可以接到不同的接口上;
3.图片右上角KEY3是输出;
以上便是我们需要关注的,下面的K3、K2、K1就板子上的三个开关啦。这个不用管。
导航键如何确定被按下是哪个方向呢?哈哈相信聪明的你想到了,导航键的开关接到不同接口上由于总阻值不一样,所以加在这两点的电压肯定不同。比如当我向上按导航键,这个时候会有一个电压,假如0.5v吧,那么我们如何去拿到这个电压数据呢?刚刚说KEY3是输出,所以当然是从输出去接收啦。但这是模拟信号,需要转成数字才行。这个时候就需要用到我们的A/D转换啦,这个过程叫ADC,亦即模拟转数字。所以配置好端口和启动A/D转换器就好啦。
二、STC学习板结构简单介绍:
这张图标注了STC板子上每一个接口的名称,当你想用这个某个端口的时候就在这张图上面找对应的名字就好。
比如我们现在要用KEY3这个口,发现它对应的名称是P1.7,当我们要在代码里用它的时候,将引脚别名为P1^7就好,也就是声明你这个引脚是这个端口。你会发现前面还有一些字母是干嘛呢?比如ADC7,说明这个端口可以作为A/D转换的输入。如图:
不懂就多翻数据手册啊,要什么有什么!
三、A/D转换的使用:
强行插一张图:
核心原理就在我圈的红圈里面。这一部分会不停的比较转换得到的数字值,直到差值无限逼近0才会向结果寄存器输出精度很高的数字值。
1.IO口初始化:
设置推挽输出:
P0M0 = 0xFF;
P0M1 = 0x00;
P2M0 |= 0x08; //0000 1000
P2M1 &= 0xF7; //1111 0111
P0口为什么这么设置,不用我说了吧?数码管显示数字都需要这样设置。
P2为什么是这样设置呢?由于数码管是共阴极的(咱们的板子),所以数码管点亮需要led_sel为1,所以P2M0 就是 0000 1000啦,也就是0x08呗。P2M1我就不说了吧,查看STC结构图都可以看懂,还有M0M1不同组合对应的工作模式。推挽是10。 因此设置P2.3为推挽只需为M0M1为10就好,其它口不适用,设置为高阻输入。详情看图: