目录
之前简单讲了GPIO,所以把GPIO输入穿插在程序中讲,完成两个程序(参考B站上的)
第一个程序
按键点灯(LED、key库函数在后面)
代码:
#include "LED.h"
#include "Key.h"
uint8_t KeyNum;
int main(void)
{
LED_Init();
Key_Init();
while(1)
{
KeyNum=Key_GetNum();
if(KeyNum==1)
{
LED1_Turn();
}
if(KeyNum==2)
{
LED2_Turn();
}
}
}
(LED和KEY的库函数在最后面)
运行结果:按一下按键,灯亮,再按一下灯灭。一个按键控制一个灯。
第二个程序
光敏电阻控制蜂鸣器(Buzzer和LightSensor也在最后面)
代码:
#include "stm32f10x.h" // Device header
#include "Delay.h"
#include "Buzzer.h"
#include "LightSensor.h"
int main(void)
{
Buzzer_Init();
LightSensor_Init();
while(1)
{
if(LightSensor_Get()==1)
{
Buzzer_ON();
}
else
{
Buzzer_OFF();
}
}
}
运行结果:遮光时,蜂鸣器响;不遮光时,蜂鸣器不响
先来简单讲一下完成程序所用的基础知识
1.有关程序的基础知识
⑴按键介绍
stm32的按键与51单片机的一样,按键按下会有抖动(因为按键内使用的是机械式弹簧),5~10ms对单片机来说时间很长,如果不进行消抖,会出现重复执行程序的情况。
(按键按下是低电平,没按是高电平)
而最常用的方法是通过软件编程消抖,加一段延时。
⑵传感器模块
①简单了解
光敏电阻 热敏电阻 对射式红外 反射式红外
(后面的“传感器”省略了,名字一一对应图片)
这些传感器模块都是利用传感器元件的阻值随外界变化而变化,但是,因为电阻的变化不直接观察,所以一般都把它和定值电阻串联,这样就可以得到模拟电压输出,电路检测电压就会更容易。它还可以通过电压比较器进行二值化得到数字电压输出。
②硬件介绍
(VCC正极,GND负极)
N1是传感器模块代表的可变电阻,R1是定值电阻,它俩串联分压,旁边的C2是滤波电容,用来过滤干扰,保证输出电压的平滑