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

发布于:2024-07-02 ⋅ 阅读:(12) ⋅ 点赞:(0)

题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. 初始化模块

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

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. 按键检测模块

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

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

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

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. 显示模块

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

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. 指示灯控制模块

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

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