基于at89c51单片机的温度计设计 上限30度下限10度 报警 精度0.1 四位数码管
时间: 2024-04-06 20:34:42 浏览: 172
好的,相比之前的设计,你需要增加一个报警功能,即当温度超过上下限范围时,数码管需要显示报警提示。下面给出一个基于at89c51单片机的温度计设计,包括上限30度下限10度报警功能、精度0.1和四位数码管的设计方案:
1. 硬件设计
硬件设计和之前的设计方案基本一致,需要增加一个蜂鸣器和一个LED灯,用于报警提示。硬件材料列表如下:
- AT89C51单片机
- 4位共阴数码管
- 温度传感器(例如DS18B20)
- 电位器
- 电容
- 电阻
- 杜邦线
- 面包板
- 蜂鸣器
- LED灯
硬件连接图如下:
![硬件连接图](https://img-blog.csdnimg.cn/20220328194707875.png)
2. 软件设计
软件设计需要增加报警功能,即当温度超过上下限范围时,数码管需要显示报警提示,并且蜂鸣器和LED灯需要发出报警声音和闪烁。以下是软件设计方案:
```c
#include<reg52.h> // 引入单片机头文件
// 定义数码管显示位选数组和段选数组
unsigned char code wei[4] = {0xfe, 0xfd, 0xfb, 0xf7};
unsigned char code duan[16] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x67, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71};
// 定义温度传感器引脚
sbit DQ = P3^7;
// 定义蜂鸣器和LED灯引脚
sbit beep = P1^7;
sbit led = P1^6;
// 定义上下限温度值
unsigned int temp_high = 300;
unsigned int temp_low = 100;
// 函数声明
void delay(unsigned int time);
void display(unsigned char num);
void init();
unsigned char read_temp();
void main()
{
init(); // 初始化
while(1)
{
unsigned char temp = read_temp(); // 读取温度值
if (temp > temp_high || temp < temp_low)
{
// 温度超过上下限,报警
display(0x0c); // 数码管显示"AL"
beep = 0; // 蜂鸣器响
led = 0; // LED灯亮
}
else
{
// 温度正常,显示温度值
display(temp); // 数码管显示温度值
beep = 1; // 蜂鸣器停止响
led = 1; // LED灯熄灭
}
delay(500); // 延时0.5秒
}
}
// 初始化程序
void init()
{
// ...
}
// 延时程序
void delay(unsigned int time)
{
// ...
}
// 显示程序
void display(unsigned char num)
{
// ...
}
// 读取温度程序
unsigned char read_temp()
{
// ...
}
```
需要注意的是,以上代码中需要定义上下限温度值temp_high和temp_low,并在主程序中判断温度是否超过上下限范围,从而实现报警功能。
3. 仿真程序
仿真程序需要在Proteus中导入新的元件,即蜂鸣器和LED灯。需要在Proteus中将蜂鸣器和LED灯与单片机相应的引脚进行连接,并进行仿真测试。
下面是一个简单的仿真图:
![仿真图](https://img-blog.csdnimg.cn/20220328195050961.png)
希望这个回答能够帮到你!
阅读全文