C51单片机利用温度检测芯片进行温度测量并显示在数码管
时间: 2024-03-23 15:39:34 浏览: 113
C51单片机可以通过连接温度检测芯片来实现温度测量。常用的温度检测芯片包括DS18B20、LM35等。以下是一个使用LM35进行温度测量并在数码管上显示温度的示例代码:
```c
#include <reg51.h>
// 数码管显示函数
void display(unsigned char num) {
unsigned char code table[] = {
0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,
0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E
};
P2 = table[num];
}
// LM35模块引脚定义
sbit LM35_OUT = P1^0; // 输出
// 读取LM35输出电压对应的温度值
unsigned char read_lm35() {
unsigned int adc_value;
float temp;
// 读取ADC值
ADC_CONTR = 0x90; // 启动ADC转换
while (ADC_CONTR & 0x10); // 等待转换完成
adc_value = ADC_RES;
adc_value |= ADC_RESL << 8;
// 计算温度值
temp = adc_value * 5.0 / 1024.0; // 转换为电压值
temp = temp * 100.0; // 转换为摄氏度
return (unsigned char)temp; // 返回整数部分
}
void main() {
unsigned char temp;
// 初始化ADC
ADC_RES = 0;
ADC_RESL = 0;
ADC_CONTR = 0x88; // 设置ADC转换时钟为OSC/12
// 初始化数码管显示
P2 = 0xFF; // 所有数码管关闭
while (1) {
// 读取温度值
temp = read_lm35();
// 显示温度值
display(temp / 10);
P0 = 0x7F; // 选择第一个数码管
delay(1); // 稍作延时
P0 = 0xFF; // 关闭数码管
display(temp % 10);
P0 = 0xBF; // 选择第二个数码管
delay(1); // 稍作延时
P0 = 0xFF; // 关闭数码管
}
}
```
需要注意的是,LM35输出的电压值与摄氏度的关系为10mV/摄氏度,因此在代码中需要进行一定的计算。另外,由于LM35的输出电压范围是0到1.5V,因此需要使用ADC来将其转换为数字量进行处理。以上代码中使用的ADC是C51单片机自带的ADC。如果您使用的是外部ADC芯片,需要根据芯片的具体规格来编写相应的驱动程序。
阅读全文