1. 从“亮起来”到“动起来”:为什么需要按键控制?
上次我们一起用STM32F103C8T6在Proteus里点亮了流水灯,看着那几个小灯按顺序一闪一闪的,是不是挺有成就感的?但玩过几次之后,你可能会觉得有点“傻”:程序一跑起来,灯就只能按写死的节奏走,想让它停一下,或者换个速度,都得重新改代码、编译、下载,太麻烦了。
这就引出了嵌入式系统里一个非常核心的概念:人机交互。一个只会自顾自运行的设备,就像一台没有方向盘的汽车,功能再强也谈不上“智能”。而按键,就是我们与单片机“对话”最直接、最基础的桥梁。通过按键,我们可以给单片机下达指令,让它根据我们的意图来改变行为。
所以,这次我们的目标就是让流水灯“活”起来,给它装上“开关”和“调速器”。具体来说,我们要实现三个功能:
- 启动/停止:按下一个键,流水灯开始跑;再按一下,它就乖乖停下。
- 加速/减速:按下另外的按键,可以控制流水灯闪烁的快慢,想让它像心跳一样慢,还是像警报一样快,都由你说了算。
- 模式切换(可选进阶):甚至可以设计一个按键,让流水灯在“从左到右流”和“从右到左流”或者“两边向中间汇流”等不同模式间切换。
听起来是不是比单纯的点亮更有趣了?这背后其实就是GPIO输入功能的应用。上一节我们只用到了GPIO的输出功能,去控制LED的亮灭。这一次,我们要让GPIO的某些引脚“竖起耳朵”,时刻准备检测外部按键按下的信号(高电平或低电平),这就是输入功能。一个完整的嵌入式控制小系统就这样初具雏形了:输入(按键) -> 处理(STM32程序逻辑) -> 输出(LED流水灯)。在Proteus仿真环境里完成这一切,既安全又直观,不用担心烧芯片,可以大胆尝试各种逻辑。
2. 硬件原理图设计:给系统加上“手脚”
在动手写代码之前,我们得先在Proteus里把电路搭好。这次除了STM32主控和LED,我们还需要新的主角:按键。
2.1 核心元件:按键与上拉电阻
在Proteus的元件库中搜索 BUTTON,就能找到按键。按键的原理很简单:不按时,两脚断开;按下时,两脚接通。
但这里有个关键问题需要理解:单片机GPIO引脚作为输入时,最怕的就是状态“悬空”。想象一下,引脚既没接到明确的电源(高电平),也没接到明确的地(低电平),就像一根天线,很容易受到周围电磁干扰,读到的电平值会乱跳(这种现象叫“浮空输入”)。这会导致程序误判为按键被频繁按下。
为了解决这个问题,我们需要引入 “上拉电阻” 或 “下拉电阻”。这是数字电路设计中非常基础且重要的一环。
- 上拉电阻:将一个电阻连接在引脚和电源(VCC,通常是3.3V)之间。当按键没有按下时,引脚通过这个电阻被“拉”到了高电平;当按键按下时,引脚直接连接到地(GND),变为低电平。此时,我们称这个按键电路为 “低电平有效”。
- 下拉电阻:将一个电阻连接在引脚和地(GND)之间。当按键没有按下时,引脚被“拉”到了低电平;按下时连接到VCC,变为高电平。此时按键是 “高电平有效”。
在STM32的芯片内部,其实已经集成了可软件配置的上拉和下拉电阻,这给我们带来了很大的方便。但为了把原理讲透,我们在原理图里仍然可以画上外部的上拉电阻,这样理解起来更直观。在Proteus里搜索 RES 放置电阻,阻值一般选用10kΩ(在电阻属性里将 Resistance 改为 10k)。
2.2 绘制我们的控制电路
我们计划用三个按键来实现功能:
- KEY1 (连接PA0):用于启动/停止流水灯。
- KEY2 (连接PA1):用于降低流水速度(减速)。
- KEY3 (连接PA2):用于提高流水速度(加速)。
LED流水灯我们沿用上一节的设计,比如继续使用PC13、PC14、PC15三个引脚。
绘制步骤:
- 放置STM32F103C8、LED、电阻、按键、电源和地。
- 连接LED电路:PC13~PC15每个引脚串联一个220Ω的限流电阻后接


2003

被折叠的 条评论
为什么被折叠?



