找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

有大佬能帮我看看51的温度和ph测不出来是怎么回事

查看数: 345 | 评论数: 1 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2025-4-21 16:22

正文摘要:

#include <reg51.h> #include <intrins.h> // DS18B20???? sbit DS18B20_DQ = P3^7; // ADC0832???? sbit ADC_CLK = P1^0; sbit ADC_DO  = P1^1; sbit ADC_CS  = P1^2; / ...

回复

ID:404160 发表于 2025-4-22 15:42
电路图底部那三只按键分别连在 P3.2、P3.3、P3.4 上(INT0、INT1、T0)
代码中却写成:
sbit KEY_SET = P3^1;
sbit KEY_ADD = P3^2;
sbit KEY_SUB = P3^3;
应该改为:
sbit KEY_SET = P3^2;
sbit KEY_ADD = P3^3;
sbit KEY_SUB = P3^4;

电路图上 ADC0832 的 DI、DO 是分开的两根线:

DI(写入控制位) 接在 P1.1

DO(读出 A/D 数据) 接在 P1.3

代码中却只定义了一个 ADC_DO = P1^1;,既用来写又用来读:

sbit ADC_CLK = P1^0;
sbit ADC_DO  = P1^1;   // 实际应是 ADC_DI
sbit ADC_CS  = P1^2;
// 缺少: sbit ADC_DO = P1^3;
改法:

sbit ADC_CLK = P1^0;
sbit ADC_DI  = P1^1;    // 写控制位
sbit ADC_DO  = P1^3;    // 读数据位
sbit ADC_CS  = P1^2;
同时,ADC0832 的数据输出前还有两个“空”位需要丢弃(datasheet 要求在 SGL/ODD 之后再时钟两次),你的 for(i=0;i<8;i++) 开始读时实际上少跑了这两个时钟,把数据错排了。
pH 阈值没有被显示出来
你在 Key_Process() 里调整了 ph_high/ph_low,但主循环里并没有把它们用 LCD_ShowValue() 打出来,用户按键调节时屏幕看不到反馈。

建议在第二行或第三行再加两处 LCD_ShowValue(),把当前的 pH 高低阈值实时显示。

(次要)DS18B20 的时序延时过长
你的 Delayms(1) 是约 1 ms,但 DS18B20 写“1”位用的是低电平保持 1~15 μs(而你保持了 1 ms)、写“0”位要保持 60~120 μs(1 ms 也 OK)。

虽然过长的延时通常设备“能通用”,但如果后面出现不稳定,建议改成用us 级的延时子函数更精准。

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表