【TB作品】温湿度监控系统设计,ATMEGA16单片机,Proteus仿真

题2:温湿度监控系统设计

功能要求:

1)开机显示时间(小时、分)、时分可修改;

2)用两个滑动变阻器分别模拟温度传感器(测量范

围0-100度)与湿度传感器(0-100%),通过按键

可以在数码管切换显示当前温度值、湿度值;

3)当温度低于20度时,红灯长亮;

4)当湿度高于70%时,黄灯长亮;

5)当湿度正常时,绿灯亮;温度正常时蓝灯亮。

硬件调试:实现以上功能

温湿度监控系统设计实验报告


一、实验背景及目的

本实验旨在设计一个温湿度监控系统,通过模拟温度和湿度传感器来测量环境参数,并根据设定的阈值控制不同颜色的指示灯。同时,系统还具备时间显示与修改功能,以满足基本的时钟需求。


二、系统功能需求
  1. 时间显示与修改:系统开机后显示当前时间(小时、分钟),并允许用户通过按键修改时间。
  2. 温湿度显示:通过两个滑动变阻器分别模拟温度传感器(0-100度)和湿度传感器(0-100%),用户可通过按键在数码管上切换显示当前温度值和湿度值。
  3. 指示灯控制 :
    • 温度低于20度时,红灯长亮。
    • 湿度高于70%时,黄灯长亮。
    • 湿度在正常范围(≤70%)时,绿灯亮。
    • 温度在正常范围(≥20度)时,蓝灯亮。

三、系统设计原理
1. 硬件设计

系统硬件主要由微控制器、数码管显示模块、滑动变阻器、按键矩阵和指示灯组成。

  • 微控制器:负责读取传感器数据、处理逻辑并控制显示和指示灯。
  • 数码管显示模块:用于显示时间、温度和湿度值。
  • 滑动变阻器:模拟温度和湿度传感器,通过AD转换获取模拟量值。
  • 按键矩阵:用于用户输入,修改时间和切换显示内容。
  • 指示灯:根据温湿度值进行指示。
2. 软件设计

软件设计主要分为以下几个模块:

  1. 初始化模块:初始化各个端口、设置定时器、初始化显示内容。
  2. 按键检测模块:检测用户按键输入,并对时间进行修改或切换显示模式。
  3. AD转换模块:获取滑动变阻器的模拟量值,转换为温度和湿度值。
  4. 显示模块:根据当前模式,显示时间、温度或湿度值。
  5. 指示灯控制模块:根据温湿度值,控制对应的指示灯状态。

四、电路原理
  • 数码管连接到微控制器的输出端口,用于显示数值。
  • 滑动变阻器连接到AD转换器通道,用于模拟传感器输入。
  • 按键矩阵连接到微控制器的输入端口,用于用户交互。
  • 指示灯通过微控制器的输出端口控制,显示当前环境状态。

五、程序原理

程序采用C语言编写,主要功能模块说明如下:

1. 初始化模块

初始化各个端口、设置定时器并初始化显示内容:

c 复制代码
void main( void ) {
    DDRA = 0XFF - 0X03;
    DDRC |= 0X03;
    DDRD = 0XFF;
    DDRB = 0X00;
    disp[0] = LED_Disbuf[rtc_hour % 100 / 10];
    disp[1] = LED_Disbuf[rtc_hour % 10];
    disp[2] = LED_Disbuf[rtc_min % 100 / 10];
    disp[3] = LED_Disbuf[rtc_min % 10];
    SREG = 0x80;
    TIMSK |= (1 << TOIE0);
    TCCR0 = 0x03;
    TCNT0 = 0;
    while (1) {
        // 主循环
    }
}
2. 按键检测模块

检测用户按键输入,用于修改时间和切换显示模式:

c 复制代码
int get_key( void ) {
    if (PINB != 0XFF) {
        if (PINB == 0xff - 0x01) return(1);
        if (PINB == 0xff - 0x02) return(2);
        // 检测其他按键
    }
    return(0);
}
3. AD转换模块

获取滑动变阻器的模拟量值,并转换为温度和湿度值:

c 复制代码
void AD_GetData( void ) {
    ADMUX = (1 << REFS0);
    ADCSRA |= (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1);
    ADCSRA |= (1 << ADSC);
    while (!(ADCSRA & (1 << ADIF)));
    ADCSRA |= (1 << ADIF);
    ADData0 = ADC;
    ADData0 = ((long) ADData0 * 5010 / 1024) / 50;
    // 处理湿度传感器数据
}
4. 显示模块

根据当前模式,显示时间、温度或湿度值:

c 复制代码
if (mode == 0) {
    disp[0] = LED_Disbuf[rtc_hour % 100 / 10];
    disp[1] = LED_Disbuf[rtc_hour % 10];
    disp[2] = LED_Disbuf[rtc_min % 100 / 10];
    disp[3] = LED_Disbuf[rtc_min % 10];
} else if (mode == 1) {
    disp[1] = LED_Disbuf[ADData0 / 100];
    disp[2] = LED_Disbuf[ADData0 % 100 / 10];
    disp[3] = LED_Disbuf[ADData0 % 10];
} else if (mode == 2) {
    disp[1] = LED_Disbuf[ADData1 / 100];
    disp[2] = LED_Disbuf[ADData1 % 100 / 10];
    disp[3] = LED_Disbuf[ADData1 % 10];
}
5. 指示灯控制模块

根据温湿度值,控制指示灯的状态:

c 复制代码
if (ADData0 < 20) {
    PORTA &= ~0x10;  // 红灯亮
    PORTA |= 0x20;   // 蓝灯灭
} else {
    PORTA &= ~0x20;  // 红灯灭
    PORTA |= 0x10;   // 蓝灯亮
}

if (ADData1 > 70) {
    PORTA &= ~0x40;  // 黄灯亮
    PORTA |= 0x80;   // 绿灯灭
} else {
    PORTA &= ~0x80;  // 黄灯灭
    PORTA |= 0x40;   // 绿灯亮
}

六、实验结果

通过调试和运行,系统实现了预期的功能。开机后显示当前时间,并能通过按键修改时间;模拟温度和湿度传感器的数据,并能在数码管上切换显示当前温度和湿度值;根据温湿度值控制指示灯的状态,温度低于20度红灯长亮,湿度高于70%黄灯长亮,湿度正常绿灯亮,温度正常蓝灯亮。


七、总结

本实验通过设计一个温湿度监控系统,结合了AD转换、按键检测、数码管显示和指示灯控制等多项技术,全面锻炼了硬件和软件设计能力。系统在实际运行中表现稳定,达到了预期效果。

资源
复制代码
https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?u=bdf8eeb84961492ba2b62f7bfee641ea&tab=BB08J2
相关推荐
女神下凡6 小时前
芯参谋(38):NAND_MCP_电路设计指南
arm开发·单片机·嵌入式硬件·设计规范
嵌入式学习菌6 小时前
FreeRTOS 中断管理实战:BASEPRI 寄存器实验
单片机·嵌入式硬件
HRTOS7 小时前
HRTOS:一个名字背后的目标——不断逼近硬实时
经验分享·单片机·系统架构·51单片机
UrSpecial9 小时前
GPIO 是什么?
单片机·嵌入式硬件
修船大队长11 小时前
配置接受报文每个报文对应一个mailbox配置流程记录
网络·单片机·mcu
搁浅小泽13 小时前
二极管选型技术规范
单片机·嵌入式硬件·汽车
搁浅小泽13 小时前
电感选型技术规范
单片机·嵌入式硬件·汽车
..Dauntless..14 小时前
【stm32】串口——在MCU内部的工作过程
stm32·单片机·嵌入式硬件
lzqrzpt14 小时前
临沂LED驱动电源工程选型标准与工艺对比解析
python·单片机·嵌入式硬件·物联网
小黄蚁14 小时前
使用LVGL模拟示波器创建正弦函数波形
单片机·学习