GPIO输入

按键介绍

674bdcc1b7294010acbaa241488b8e2e.jpeg

传感器模块介绍

2cc96abd93784cc9979411205273b126.jpeg

第三个图是滤波电容,为了给中间的输出电压滤波,滤除干扰,保证输出电压波形的平滑。遇到一端接地,一端在电路中的电容,可以先忽略。就是定值电阻和传感器电阻的分压电路,用上下拉电阻分析,N1阻值减小,下拉电阻增强,AO端电压减低,当N1为0时,AO输出0V,AO是模拟电路输出,通过排针4输出。

        模块也支持数字输出,对AO进行二值化输出(通过LM393完成,是电压比较器芯片,(涉及运放),当这个同相输入端的电压大于反相输入端的电压时,输出就会瞬间升高为最大值也就是输出接VCC,反之当同相输入端的电压小于反相输入端的电压时,输出就会瞬间降低为最小值也就是输出接GND)IN+接到AO(模拟电压端),IN-接到一个电位器(分压电阻的原理)(拧到电位器,IN-可以生产一个可调的阈值电压),比较IN+与IN-,输出DO,接到输出端。

        右边还有两个指示灯电路,左边电源指示灯,通电就亮,右边 DO输出指示灯,指示DO输出电平,低电平点亮,旁边的R5上拉电阻,保证默认输出高电平)

按键和传感器的硬件电路

aea593ed12114fa7ae48e75ce42b09ba.jpeg

左边按键:

一般用上面的方式。

第一个图:按键按下,PA0下拉到GND,读PA0为低电平,松手时,PA0悬空(引脚电压不确定),要求PA0上拉,高电平。

第二个图:松手高电平,按下低电平,不会出现悬空状态。PA0可以可配置三种模式。

第三个图:配置下拉模式,一般单片机不一定有下拉模式

右边传感器:

接地、VCC,DO数字输出随便接一个端口,用于读取数字量。

C语言数据类型

数据类型

340e549590d9423ca452bda5eb6a395e.jpeg

右边是C语言提供的头文件,新名字,(最后一列不用管,是兼容老版本的)

宏定义

cf59a6a9235c422780589e95df0ff183.jpeg

4ef58eb07e89445ab35d344844672d53.jpeg

GPIO也是宏定义的类型。不加分号

typedef

b0dc5ae6b5c74ec6b9fa960c498f99e2.jpeg

要加分号,一般对变量类型重命名,原名字也可以用

结构体

3b9fe862d4744988a970490c5be9fff4.jpeg

c.x='A'(引用)。先创造,再定义,再赋值。

de9951bc1e9f4362872f54c5eb131066.jpeg

枚举

6ed6482cbc654cf5b539670eba3a5415.jpeg

enum中如果赋值递增,可以不用写后面的,系统自动按顺序加上去

模块化编程

函数主体放到.c文件中,.h放的是.c需要被外部调用的接口(进行声明),主函数进行声明。

7355be52bc5d40288d1f90dbe7c8c9b9.jpeg

372af37d88ac4e749d9772aa1d24c3eb.jpeg

.h文件中其他代码是只让它编译一次6

0f679a36b2d949458ad29b00761b840f.jpeg

预编译

680ca8d054cc4665b79e7a503216bfd9.jpeg

电路图

f8e3f82e600b4e1e92bea77998e01e5c.jpeg

第一种按键接法。LED低电平点亮。

按下按键1,LED1点亮,按2,LED熄灭

(GPIO配置好默认低电平)LED

新建hardware文件夹,(存放硬盘驱动),在工程中添加此文件夹,再放到头文件路径列表中。在hardware工程下建立.c(主体代码)和.h(声明)文件,用于封装LED的驱动程序。对两个文件要进行操作。

.c文件:打开时钟,配置端口模式(推挽输出)

9eda526532e549e19afbcd22a4433ef4.png

.c中包含四个初始化、LED1和2的分别两个状态,都需要在.h文件中声明

91299b8d46f74351954f269c3e2ae47f.png

按键

上拉输入

按键读取:

5510bc0a6609455b977b7d3e8c3a3074.png

第一个是读取输入寄存器某一个端口的输入值,返回值代表端口的高低电平;

第二个是读取整个输入数据寄存器的,返回16位数据,每一位代表一个端口值

第三个:读取输出寄存器的某一位,用于输出模式下,看自己输出的是什么

第四个读取整个输出数据寄存器的,返回16位数据,每一位代表一个端口值

.c包括按键初始化和返回按键读取的数值(按下按键1后返回1,按下2返回2),写到.h文件中。

13c26fb699514ae48729a1a96cc0296a.png

42f7f923e9b44ea697dc360c10f62500.png

main函数

69343df741dc4267a7f57bdf30d79c79.png

按下按键,LED状态取反

读取LED寄存器的状态,取反操作(加一个新的函数,在LED模式中分别加取反函数)

9317277eeb6a4e559b0282c8d8117ca6.png

61694752d9994ef3a5b313548c87ab1c.png

光敏传感器控制蜂鸣器

9a6ac3f4dec3430fb4f74ecff9a7a13d.jpeg

遮住光线,输出指示灯灭,输出高电平(可以调电阻,改变阈值)

1.蜂鸣器模块

复制上个工程,封装蜂鸣器代码(打开,关闭,反转),与LED类似,改一改端口就可以。

a231bbeb8bfb4a03bc8a511d0db9dd7f.png

2.光敏传感器模块

是输入,可以复制按键的代码,初始化之后要接收数据,返回端口值,用char接受,在主函数在把接受值进行判断,控制蜂鸣器。

1451743a28224f17bbcbcb93f51530ee.png

3.写主函数

7258532923c647df8e15f3caada7dfd4.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值