温度传感器DS18B20采集环境模拟信号,其输出送入 AT89C51,单片机在程序的控制下,将处理过的数据送到移位寄存器74LS164,经74LS164输出后驱动三位数码管显示。当被测温度高于18℃时,单片机发出控制信号使降温电扇以自然风的形式旋转,温度越高转速越快,温度36℃以上时风扇全速工作,点亮此功能指示灯。其中的51单片机应该如何编程
时间: 2024-03-18 18:38:56 浏览: 112
下面是一个简单的AT89C51程序,用于实现采集温度传感器DS18B20的模拟信号,并将处理过的数据输出到移位寄存器74LS164,最后通过74LS164驱动三位数码管显示,并控制降温电扇的转速:
```
#include <reg52.h> // AT89C51寄存器定义头文件
#include <ds18b20.h> // DS18B20驱动头文件
#include <delay.h> // 延时函数头文件
sbit fan=P3^0; // 风扇控制信号
sbit led=P3^1; // 指示灯控制信号
sbit ds=P1^6; // DS18B20控制信号
void main()
{
unsigned char temp; // 存储温度值
unsigned char high, mid, low; // 存储三位数码管显示值
while(1)
{
temp=ds18b20_read_temp(ds); // 读取温度值
high=temp/100; // 计算百位数码管显示值
mid=temp%100/10; // 计算十位数码管显示值
low=temp%10; // 计算个位数码管显示值
P2=0x00; // 移位寄存器清零
P2=low; // 输出个位数码管显示值
P2=mid; // 输出十位数码管显示值
P2=high|0x80; // 输出百位数码管显示值,并打开数码管的最高位
if(temp>36) // 如果温度大于36℃
{
fan=1; // 风扇全速工作
led=1; // 点亮指示灯
}
else if(temp>18) // 如果温度在18℃到36℃之间
{
fan=1; // 风扇自然风工作
led=0; // 关闭指示灯
}
else // 如果温度小于18℃
{
fan=0; // 风扇停止工作
led=0; // 关闭指示灯
}
delay_ms(100); // 延时100ms
}
}
```
这个程序中,使用了DS18B20驱动程序和延时函数。DS18B20驱动程序中的`ds18b20_read_temp`函数用于读取温度值,返回值为一个8位无符号整数。延时函数中的`delay_ms`函数用于延时指定的毫秒数。
程序中还定义了三个变量`high`、`mid`和`low`,用于存储三位数码管显示的百位、十位和个位值。在主循环中,首先读取温度值,并根据读取到的温度值计算出三位数码管需要显示的值。然后使用移位寄存器74LS164输出这些显示值,并控制风扇和指示灯的状态。
在具体编写时,需要根据实际硬件连接情况进行调整。
阅读全文