单片机之温度 光照测试及报警 光敏开关

我们的STC板能实现的东西真的很多呢,但是我们还有一些功能没有测试过,那就是温度和光照传感器

我们以几个例子来测试并学习一下这两个传感器

  • 温度光照测试
  • 光照报警器
  • 光敏开关

温度光照测试
实验现象

单片机根据测量地、时间等不同因素,相应的温度信息(包含零下温度值)将显示在数码管左边三位,相应光数据显示在右侧三位

实验原理

LED数码管电路我们前面已经接触过了,这里就不再做阐述

光敏和热敏电阻电路
在这里插入图片描述
(注意,最右侧的数码管上面的Rt是热敏电阻,Rop是光敏电阻)

  • 热敏电阻随温度呈线性变化
  • 光敏电阻电流随光强线性变化
  • 通过AD采集光敏电阻和热敏电阻的输出值,输出对应的AD值,光照值直接为AD值,而采集的温度AD值,首先把10位转换成8位AD值,然后再通过查找对应的表来获取温度
代码解析

设计流程图如下:
在这里插入图片描述

  • 涉及到的变量定义
    在这里插入图片描述
  • 子函数部分
    我们可以知道,我们需要变量用来判断是否按下K1键,从而确定不同的报警方式,同时我们也需要使用按键消抖
    一些函数声明如下:
    在这里插入图片描述
    同时我们也需要一个温度对应表
    在这里插入图片描述
    也需要设置不同的时间来使我们的不同块有不同的显示效果
    AD转换部分代码可参照导航按键,我们只需要修改其中如何显示我们的数值即可
    只是考虑情况复杂了一些而已,因为我们需要分别考虑上限和下限,利用变量,不停地判断条件即可

光照报警器
实验现象

key1改变光照警报器的模式
(1)当模式为警报下限时,通过用遮光板或者手指改变光敏电阻的光照强度,低于下限警报值时,蜂鸣器发声。
(2)按下Key1,当模式为警报上限时,通过用手电筒或闪光灯改变光敏电阻的光照强度,高于上限警报值时,蜂鸣器发声。

实验原理

电路图如下:
在这里插入图片描述
通过AD采集光敏电阻的值,检测AD求其平均值,这样可以达到稳定性。根据实际需要,设定警报上限和下限值,比较检测值与警报值,如果超过警报值,beep取反,产生方波,蜂鸣器发声

代码解析

设计流程图如下:

在这里插入图片描述

主函数应该包含下述部分

  • 设置P0为推挽模式,设置P2^ 3为推挽模式,设置P3^4为推挽模式其它为准双向口模式
  • 开定时器中断和AD中断
  • 循环调用SEG_Display()方法显示检测值。

其中 void SEG_Display() 要设置

  • 5、6、7号数码管分别用于显示当下值。

  • 0、1、2号数码管显示警报值。

其余就主要是中断和AD转换的代码了


光敏开关
实验现象

当手指触摸到光敏电阻时,通过光照强度变化来控制开关标志位flag,进而控制led灯的亮灭。

实验原理

电路图如下:
在这里插入图片描述

  • 通过AD采集光敏电阻的值,检测AD求其平均值,这样可以达到稳定性。
  • 这个实验的关键就是确定合适的光照阀值,经过多次尝试摸索后将(light_old/light_new)>1.30,作为光照的阀值,此时默认为手指按下状态,flag取反,控制led灯的亮灭,实现开关功能
代码解析

设计流程图如下:
在这里插入图片描述
主函数中的主体框架为:

  • 设置P0为推挽模式,设置P2^3为推挽模式,其它为准双向口模式

  • 开AD中断

  • 循环调用SEG_Display()方法显示datelight。

  • 利用flag控制P0的数值,来控制led灯的亮灭。

其代码要比报警器要简单很多
最重要的就是初始化光照AD转换结果寄存器及控制寄存器
其余的中断,AD转换与上面的类似

发布了78 篇原创文章 · 获赞 181 · 访问量 8707

猜你喜欢

转载自blog.csdn.net/qq_44790423/article/details/100081057