这是一个基于单片机的pt100热敏电阻数字温度计,电压采集芯片为ADC0804,求以此为基础编写的LCD1602显示代码,管脚定义为RS = P2^2; RW = P2^1; EN = P2^0;
LCD1602显示代码编写
这是一个基于单片机的pt100热敏电阻数字温度计,电压采集芯片为ADC0804,求以此为基础编写的LCD1602显示代码,管脚定义为RS = P2^2; RW = P2^1; EN = P2^0;
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
3条回答 默认 最新
关注 引自免费微信小程序:皆我百晓生
要实现基于51单片机的PT100热敏电阻数字温度计,并在LCD1602上显示温度,我们需要结合ADC0804的读取和LCD1602的显示功能。以下是整合了AD转换、温度计算以及LCD显示的完整代码示例。
定义管脚和初始化LCD
首先,定义单片机管脚和LCD初始化子程序。管脚定义如下:
RS = P2^2
,RW = P2^1
,EN = P2^0
。#include <reg51.h> #define RS P2_2 #define RW P2_1 #define EN P2_0 // LCD1602初始化子程序 void lcd_init() { // 初始化指令 lcd_cmd(0x38); lcd_cmd(0x0C); lcd_cmd(0x01); // 延时 _delay_ms(2); } // 发送命令到LCD void lcd_cmd(unsigned char cmd) { P0 = cmd; RS = 0; RW = 0; EN = 1; _delay_ms(1); EN = 0; } // 在LCD上显示字符 void lcd_display_char(unsigned char data) { P0 = data; RS = 1; RW = 0; EN = 1; _delay_ms(1); EN = 0; } // 在指定位置显示字符串 void lcd_display_string(unsigned char x, unsigned char y, char *str) { lcd_move(x, y); while (*str != '\0') { lcd_display_char(*str++); } } // 移动光标位置 void lcd_move(unsigned char x, unsigned char y) { unsigned char addr; if (y == 0) { addr = 0x80 + x; } else if (y == 1) { addr = 0xC0 + x; } lcd_cmd(addr); }
AD转换和温度计算
接下来,使用ADC0804进行AD转换并计算温度。
// ADC0804相关管脚定义 sbit CS = P2^4; sbit RD = P2^7; sbit WR = P2^6; sbit INTR = P2^5; // 启动AD转换子程序 void start_ad() { CS = 0; WR = 0; _nop_(); WR = 1; while(INTR); CS = 1; } // 读取AD转换后的数据 unsigned int read_ad() { unsigned int ad_data; CS = 0; RD = 0; _nop_(); ad_data = P0; RD = 1; CS = 1; return ad_data; } // 数据处理函数 void data_shout(unsigned int ad_data) { float temp; unsigned int T; if (ad_data < 79) { temp = 614.422 - 7.811 * ad_data; } else if (ad_data <= 204) { temp = 7.990 * ad_data - 628.491; } else { temp = 8.124 * ad_data - 655.742; } T = (unsigned int)temp; static unsigned char dat_AD[4]; dat_AD[0] = T / 1000; dat_AD[1] = T % 1000 / 100; dat_AD[2] = T % 100 / 10; dat_AD[3] = T % 10; } // 主函数 void main() { lcd_init(); while(1) { start_ad(); unsigned int ad_data = read_ad(); data_shout(ad_data); // 显示温度 char str[10]; sprintf(str, "Temp: %d.%d%d", dat_AD[0], dat_AD[1], dat_AD[2]); lcd_display_string(0, 0, str); } }
这个代码示例包含了从ADC0804读取数据、计算温度并最终在LCD1602上显示温度的过程。注意,
_delay_ms()
是一个延时函数,用于确保LCD和AD转换器有足够的反应时间。这个函数的具体实现可能需要根据你的开发环境来调整。解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
- ¥15 安装quartus II18.1时弹出此error,怎么解决?
- ¥15 keil官网下载psn序列号在哪
- ¥15 想用adb命令做一个通话软件,播放录音
- ¥30 Pytorch深度学习服务器跑不通问题解决?
- ¥15 部分客户订单定位有误的问题
- ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
- ¥15 Bug traq 数据包 大概什么价
- ¥15 在anaconda上pytorch和paddle paddle下载报错
- ¥25 自动填写QQ腾讯文档收集表