怎么登录甘肃省建设厅网站,济宁网站建设哪家便宜,最新的网络营销方式,爱站seo查询软件文章目录 前置知识按键介绍传感器模块硬件电路按键硬件电路传感器模块硬件电路 C语言数据类型在Keil中的对应写法C语言枚举 按键控制LED接线图Hardware文件夹#xff08;模块化编程#xff09;LED驱动程序封装Key(按键)驱动程序封装 main.c源文件 光敏传感器控制蜂鸣器接线图… 文章目录 前置知识按键介绍传感器模块硬件电路按键硬件电路传感器模块硬件电路 C语言数据类型在Keil中的对应写法C语言枚举 按键控制LED接线图Hardware文件夹模块化编程LED驱动程序封装Key(按键)驱动程序封装 main.c源文件 光敏传感器控制蜂鸣器接线图Hardware文件夹Buzzer(蜂鸣器)驱动程序封装LightSensor(光敏传感器)驱动程序封装 main.c源文件 前置知识
按键介绍
按键常见的输入设备按下导通松手断开按键抖动由于按键内部使用的是机械式弹簧片来进行通断的所以在按下和松手的瞬间会伴随有一连串的抖动 传感器模块 传感器元件光敏电阻/热敏电阻/红外接收管等的电阻会随外界模拟量的变化而变化通过与定值电阻分压即可得到模拟电压输出再通过电压比较器进行二值化即可得到数字电压输出
【注意】传感器元件长得很相似要注意辨别我当时刚开始做的时候就搞混了导致实验现象出问题
传感器原件电路原理图 【补充分析】
当 N1 阻值变小时下拉作用增强中间 AO 端电压被拉低极端情况下N1阻值为 0AO 输出被完全下拉输出 0V 当 N1 阻值增大时下拉作用减弱中间 AO 端电压由于 R1 的上拉作用升高极端情况下N1阻值为无穷大相当于断路AO 输出被 R1 拉高至 VCC 得到的 AO模拟电压输出通过排针直接输出
硬件电路
按键硬件电路
下接按键方式 【分析】 选取一个 GPIO 接口通过 K1 接地 按键按下时PA0 被直接下拉到 GND此时读取 PA0 口的电压就是低电平 按键松开时PA0 被悬空PA0 引脚电压不确定所以在这种接法下必须要求 PA0 是上拉输入模式默认 PA0 口为高电平 【分析】 相比于上一种接法这种接法在外部接了一个上拉电阻 按键按下时PA0 被直接下拉到 GND此时读取 PA0 口的电压就是低电平 按键松开时引脚由于上拉作用自然保持为高电平
在这种状态下引脚不会出现悬空状态所以此时 PA0 引脚可以配置为浮空输入或者上拉输入
上接按键方式 【分析】 选取一个 GPIO 接口通过 K1 接到 3.3V 按键按下时PA0 被直接上拉到 3.3V此时读取 PA0 口的电压就是高电平 按键松开时PA0 被悬空PA0 引脚电压不确定所以在这种接法下必须要求 PA0 是下拉输入模式默认 PA0 口为低电平但是一般的单片机不一定有下拉输入模式 【分析】 相比于上一种接法这种接法在外部接了一个下拉电阻 按键按下时PA0 被直接上拉到 3.3V此时读取 PA0 口的电压就是高电平 按键松开时引脚由于下拉作用自然保持为低电平
在这种状态下引脚不会出现悬空状态所以此时 PA0 引脚可以配置为浮空输入或者下拉输入
推荐使用下接按键的方式原因和LED接法类似因为很多单片机和芯片都使用了高电平弱驱动低电平强驱动的规则
传感器模块硬件电路 因为使用的是模块方案所以电路非常简单传感器详细的内部硬件电路上面已经简单介绍过了
C语言数据类型在Keil中的对应写法
关键字位数表示范围stdint关键字ST关键字char8-128 ~ 127int8_ts8unsigned char80 ~ 255uint8_tu8short16-32768 ~ 32767int16_ts16unsigned short160 ~ 65535uint16_tu16int32-2147483648 ~ 2147483647int32_ts32unsigned int320 ~ 4294967295uint32_tu32long32-2147483648 ~ 2147483647unsigned long320 ~ 4294967295long long64-( 2 64 2^{64} 264)/2 ~ ( 2 64 2^{64} 264)/2-1int64_tunsigned long long640 ~ ( 2 64 2^{64} 264)-1uint64_tfloat32-3.4e38 ~ 3.4e38double64-1.7e308 ~ 1.7e308
C语言枚举 关键字enum 用途定义一个取值受限制的整型变量用于限制变量取值范围宏定义的集合 定义枚举变量 enum{FALSE 0, TRUE 1} EnumName; 因为枚举变量类型较长所以通常用 typedef 更改变量类型名 引用枚举成员 EnumName FALSE;EnumName TRUE;
按键控制LED
接线图 Hardware文件夹模块化编程 LED驱动程序封装
LED.c LED.h Key(按键)驱动程序封装
Key.c 【说明】 Key_GetNum 的作用是读取某个硬件按钮按键的状态并返回一个对应的数字表示哪个按键被按下 函数返回一个 uint8_t 类型的值无符号8位整数用于表示按键的编号 初始化 KeyNum 为 0表示默认没有按键被按下 通过 GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) 检查 GPIOB 的引脚1 的输入状态如果该引脚的值为 0表示按钮被按下则进行以下操作 调用 Delay_ms(20)延迟20毫秒消除按键抖动进入一个 while 循环直到按钮被释放即引脚不再为 0再次延迟20毫秒进一步消除抖动将 KeyNum 设置为 1表示第一个按键被按下 读取第二个按键GPIO_Pin_11和第一个引脚类似 如果该引脚的值为 0执行相同的去抖动和状态读取逻辑然后将 KeyNum 设置为 2表示第二个按键被按下 函数返回 KeyNum如果没有按键被按下返回值为 0如果第一个按键被按下返回 1如果第二个按键被按下返回 2
Key.h main.c源文件 光敏传感器控制蜂鸣器
接线图 Hardware文件夹 Buzzer(蜂鸣器)驱动程序封装
Buzzer.c Buzzer.h LightSensor(光敏传感器)驱动程序封装
LightSensor.c LightSensor.h main.c源文件 STM32 专栏文章均参考 《STM32入门教程-2023版 细致讲解 中文字幕》教程视频