【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 小时前
基于单片机的多路热电偶温度监测与报警器
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
tianyue10011 小时前
STM32G431 ADC 多个channel 采集
stm32·单片机·嵌入式硬件
清风66666612 小时前
基于单片机的水泵效率温差法测量与报警系统设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
z203483152014 小时前
定时器练习报告
单片机·嵌入式硬件
zk0014 小时前
内容分类目录
单片机·嵌入式硬件
安生生申14 小时前
STM32 ESP8266连接ONENET
c语言·stm32·单片机·嵌入式硬件·esp8266
广药门徒14 小时前
电子器件烧毁的底层逻辑与避坑指南
单片机·嵌入式硬件
点灯小铭19 小时前
基于单片机的社区医院小型高压蒸汽灭菌自动控制器设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
youcans_19 小时前
【动手学STM32G4】(3)STM32G431之定时器
stm32·单片机·嵌入式硬件·定时器
悠哉悠哉愿意19 小时前
【嵌入式学习笔记】AD/DA
笔记·单片机·嵌入式硬件·学习