| P3_5在温度读取期间应该置1,不然就会读取出错 |
|
t=t*0.625+0.5; 这在单片机上无法运算呀? |
| 在我的51学习板上,却是运行正常 |
来了来了噗 发表于 2022-6-9 17:38 请问解决了吗 |
lkc8210 发表于 2022-6-5 15:07 那如果是LCD屏直接不显示应该是怎么办呀? |
1218829816 发表于 2022-1-10 18:10 应该叫局部变量和全局变量 |
|
分两步来做,每一步,查看18B20能不能读出数据 第二步,LCD1602以膛能正常显示 这两个驱动解决后,你需要将18B20读出来的数值化为相应的字符,显示到1602相应的位置上 就是这么简单 |
wqy12345 发表于 2022-6-5 10:50 参考我5楼的回贴 |
| 楼主是怎么解决的呀 |
lkc8210 发表于 2022-1-10 18:05 可以了,太谢谢大佬了,我再去多了解下区域变数和全域变数 ![]() |
温xyz 发表于 2022-1-10 17:04 大佬,18B20读写字节部分在总线拉低后都进行了延时,但还是一样,是不是还有其他问题。 |
|
unsigned char ReadOneChar(void) { unsigned char i=0; unsigned char dat = 0; for (i=8;i>0;i--) { DQ = 1; // 给脉冲信号<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<先拉高 DQ = 0; // 给脉冲信号 dat>>=1; DQ = 1; // 给脉冲信号 if(DQ) dat|=0x80; delay(4); } return(dat); } /*****写一个字节*****/ void WriteOneChar(unsigned char dat) { unsigned char i=0; for (i=8; i>0; i--) { DQ = 1; // 给脉冲信号<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<先拉高 DQ = 0; DQ = dat&0x01; delay(4); DQ = 1; dat>>=1; } delay(4); } /*****************************************主函数*************************************************/ void main() { Init_DS18B20(); init_1602(); while(1) { t = ReadTemperature();//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<取得反回值 write_sfm3_18B20(2,4,t); } } 你的ReadTemperature();中已有一个区域变数t 混肴了全域变数t 其实全域变数t由始致终都是0 LCD才会显示000 命名变数时不要贪方便只用单字 特别是全域变数 |
| 参与人数 1 | 黑币 +30 | 收起 理由 |
|---|---|---|
|
| + 30 | 赞一个! |
1218829816 发表于 2022-1-10 10:30
|