将温度显示在数码管上,当温度高于 25 摄氏度时,串口发送当前温度,蜂鸣器发出响声,同时打开风扇,并且可以三个按键实现风扇的档位调节

将温度显示在数码管上,当温度高于 25 摄氏度时,串口发送当前温度,蜂鸣器发出响声,同时打开风扇,并且可以三个按键实现风扇的档位调节


#include <reg52.h>
#include <stdio.h>

#define TEMPERATURE_HIGH 25 // 温度高于25摄氏度

unsigned char temperature; // 温度
unsigned char fan_speed; // 风扇档位

sbit buzzer = P3^2; // 蜂鸣器
sbit fan = P3^3; // 风扇
sbit button1 = P3^4; // 按键1
sbit button2 = P3^5; // 按键2
sbit button3 = P3^6; // 按键3

void delay(unsigned int time) {
    unsigned int i, j;
    for (i = 0; i < time; i++)
        for (j = 0; j < 125; j++);
}

void main() {
    while (1) {
        // 读取温度
        temperature = read_temperature();
        // 显示温度
        display_temperature(temperature);
        // 温度高于25摄氏度
        if (temperature > TEMPERATURE_HIGH) {
            // 串口发送当前温度
            send_temperature(temperature);
            // 发出响声
            buzzer = 1;
            // 打开风扇
            fan = 1;
            // 按键1控制风扇档位
            if (button1 == 0) {
                delay(10);
                if (button1 == 0) {
                    fan_speed = 1;
                }
            }
            // 按键2控制风扇档位
            if (button2 == 0) {
                delay(10);
                if (button2 == 0) {
                    fan_speed = 2;
                }
            }
            // 按键3控制风扇档位
            if (button3 == 0) {
                delay(10);
                if (button3 == 0) {
                    fan_speed = 3;
                }
            }
            // 根据风扇档位调节风速
            adjust_fan_speed(fan_speed);
        } else {
            // 温度低于25摄氏度
            // 关闭蜂鸣器
            buzzer = 0;
            // 关闭风扇
            fan = 0;
        }
    }
}

// 模拟读取温度
unsigned char read_temperature() {
    return 30; // 模拟温度为30摄氏度
}

// 串口发送温度
void send_temperature(unsigned char temperature) {
    // 串口发送温度数据
    // ...
}

// 调节风扇速度
void adjust_fan_speed(unsigned char speed) {
    // 根据风扇档位调节风速
    // ...
}

// 延时函数
void delay(unsigned int time) {
    unsigned int i, j;
    for (i = 0; i < time; i++)
    for (j = 0; j < 125; j++);
}