按键介绍
- 按键:常见的输入设备,按下导通,松手断开;
- 按键抖动:由于按键内部使用的是机械式弹簧片来进行通断的,所以在按下和松手的瞬间会伴随有一连串的抖动,最简单的过滤方法就是加一段延时,把抖动时间耗过去;
传感器模块介绍
- 传感器模块:传感器元件(光敏电阻/热敏电阻/红外接收管等)的电阻会随外界模拟量的变化而变化,通过与定值电阻分压即可得到模拟电压输出,再通过电压比较器进行二值化即可得到数字电压输出;
N1即为随环境条件变化而变化的电阻,R1是与N1进行分压的定值电阻,构成基本分压电路;
C2时滤波电容,作用是对中间电压输出进行滤波,保证输出电压波形的平滑,确保电路稳定,对电路基本框架无影响;
二值化输出:通过芯片LM393完成,有两个独立的电压比较器电路,即为运算放大器,当同相输入端电压大于反相输入端电压时,输出瞬间升高为最大值即输出接VCC,当同相输入端电压小于反相输入端电压时,输出瞬间降低为最小值即输出接GND,由此进行二值化输出;
硬件电路
- 按键的硬件电路:通常使用上面两种电路;(上拉输入模式,按下时引脚为低电平,松开时引脚为高电平)
- 传感器硬件电路:DO数字输出用于读取数字量;
C语言相关知识
数据类型
右边的是C语言stdint.h文件和ST对变量的重命名,即int8_t就是char的新名字,表示8位整型数据,uint8_t就是unsigned char的新名字,表示无符号8位整型数据;【ST关键字是旧版库函数的使用方式,推荐使用stdint关键字】
宏定义
- 关键字:#define
- 用途:用一个字符串替代一个数字,便于理解;提取程序中经常出现的参数,便于快速修改;
- 定义宏定义:#define ABC 12345
- 引用宏定义:int a=ABC; //等效于int a=12345;
typedef
- 关键字:typedef
- 用途:将一个比较长的变量类型换个名字,便于使用;
- 定义typedef: typedef unsigned char uint8_t;(后面必须加分号)
- 引用typedef: uint8_t a;//等效于unsigned char a;
结构体
-
关键字:struct;
-
用途:数据打包,不同类型变量的集合;
-
定义结构体变量:
struct {char x;int y; float z;} structName;
因为结构体变量类型较长,所以通常用typedef更改变量类型名; -
引用结构体成员:StructName.x=‘A’ 或者用指针引用;
枚举
- 关键字:enum
- 用途:定义一个取值受限制的整形变量,用于限制变量取值范围,即变量取值只能是括号内的值;宏定义的集合;
- 定义枚举变量:enum{FALSE=0,TRUE=1}EnumName;
因为枚举变量类型较长,通常用typedef更改变量类型名; - 引用枚举成员:EnumName=FALSE;
代码部分
-尽量把每个硬件的驱动电路封装出来,便于后续操作,简化主函数的逻辑;