at89c51温度显示
时间: 2023-11-01 17:06:41 浏览: 34
要使用AT89C51微控制器来显示温度,您需要使用一个温度传感器,例如LM35。该传感器可以将温度转换为电压信号,然后通过AT89C51的ADC(模拟数字转换器)将其读取。
以下是一个简单的AT89C51温度显示程序的示例:
```
#include <reg51.h>
sbit RS = P2^0; //连接到LCD的RS引脚
sbit EN = P2^1; //连接到LCD的EN引脚
void delay(unsigned int); //延迟函数
void lcd_cmd(unsigned char); //发送LCD命令
void lcd_data(unsigned char); //发送LCD数据
void lcd_init(void); //初始化LCD
void lcd_string(unsigned char *); //发送字符串到LCD
void display_temp(void); //显示温度函数
void main()
{
lcd_init(); //初始化LCD
while(1)
{
display_temp(); //显示温度
delay(1000); //延时1秒钟
}
}
void display_temp(void)
{
unsigned int temp; //存储读取的温度值
unsigned char str[4]; //存储温度字符串
ADCON0 = 0x81; //使用ADC1通道和Fosc/8时钟
delay(10); //等待ADC电压稳定
ADCON0 |= 0x04; //启动ADC转换
while(ADCON0 & 0x04); //等待ADC转换完成
temp = ADRESH; //读取高8位
temp = (temp << 8) | ADRESL; //读取低8位
temp = temp * 0.4887; //将ADC值转换为摄氏温度
str[0] = temp / 100 + '0'; //计算百位数
str[1] = (temp / 10) % 10 + '0'; //计算十位数
str[2] = temp % 10 + '0'; //计算个位数
str[3] = 0; //字符串结尾
lcd_cmd(0x80); //将光标移到第一行
lcd_string("Temp: "); //显示温度标签
lcd_string(str); //显示温度值
lcd_string("C"); //显示温度单位
}
void lcd_init(void)
{
lcd_cmd(0x38); //初始化LCD
lcd_cmd(0x0c); //打开光标
lcd_cmd(0x06); //设置光标移动方向
lcd_cmd(0x01); //清屏
}
void lcd_cmd(unsigned char cmd)
{
P1 = cmd; //将命令发送到LCD
RS = 0; //设置RS为0
EN = 1; //设置EN为1
delay(1); //延时
EN = 0; //设置EN为0
}
void lcd_data(unsigned char dat)
{
P1 = dat; //将数据发送到LCD
RS = 1; //设置RS为1
EN = 1; //设置EN为1
delay(1); //延时
EN = 0; //设置EN为0
}
void lcd_string(unsigned char *str)
{
while(*str)
{
lcd_data(*str++); //将字符串发送到LCD
}
}
void delay(unsigned int time)
{
unsigned int i, j;
for(i = 0; i < time; i++)
{
for(j = 0; j < 100; j++);
}
}
```
该程序使用ADC转换读取LM35传感器的电压值,并将其转换为摄氏温度。然后,它将温度值显示在连接到AT89C51的LCD上。