把主函数里的break都改成continue![]() |
虽然看不懂,但是还是感觉很NB |
rozzzzz 发表于 2021-12-13 11:31 那改的还挺多,延时函数、串口初始化参数、GetData 里的 t 值。搞台示波器一会就搞定了,没有示波器或者逻辑分析仪估计要折腾好久。 |
感谢楼主,如果我的晶振是11.0592的要改那些地方呢![]() ![]() |
感谢楼主 |
stc89c52rclpz 发表于 2020-4-20 23:25 如果通过了累加校验应该不会出错啊……检查传感器附近是不是有热源,也不能有阳光直射;检查算法,手动输入数据让LCD显示看看数据有没有变;最后再拿水银温度计对照一下看看……如果都不行,试试别的传感器,比如LM75、DS18B20什么的,看看读数是不是还不正常。(如果这些都试过了还是不行,建议以后不要看天气预报 ![]() |
用LCD显示的数据特别不准咋办。。是这东西本来就误差大,还是时间没取好导致数据有误差啊?或者算法?不能直接高位/10,%10?太离谱了家里温度显示27摄氏度,天气预报也就15摄氏度![]() |
sasafair 发表于 2020-3-21 19:56 文本接收时发送的数字需要进行ASCII编码,比如发送0,实际发送的字节是0x30;发送1,实际发送的字节是0x31,依次类推。 实现的方法有很多,可以自己写转换函数,转换要发送的数据的每个十进制位;也可以用sprintf函数把数据转换成字符串然后发送字符串;还可以重定向printf然后直接用printf。 你这个情况的话,推荐使用sprintf。如果为了学习ASCII编码,建议自己写个转换函数。 祝好运~ ![]() |
你这个思路比较好 相当于软件示波器了 借鉴你这个思路调了408AS 的dht11 数据出来了 !! 另外问个问题 : 串口接收时 开文本接收时 数据一直是字符乱码 怎么解决 ? SendString("\r\n湿度:"); SendData(dat_r[0]); //湿度整数 SendString("\r\n温度:"); SendData(dat_r[2]); //温度整数 ///////////////////////////////////////// 我的串口函数 : /****************************************************************************** ****************************************************************Author:Liming**/ void SendData(unsigned char dat) { while (B_TX1_Busy); //等待前面的数据发送完成 B_TX1_Busy = 1; SBUF = dat; //写数据到UART数据寄存器 } /******************************************************************************* * @brief None * @param None * @retval None ****************************************************************Author:Liming**/ void SendString(char *s) { while (*s) //检测字符串结束标志 { SendData(*s++); //发送当前字符 } } |
谢谢大侠, 高手。已经用你的程序做出来通过…… ![]() http://www.51hei.com/bbs/dpj-182291-1.html |
值得參考學習,謝謝分享. |
谢谢分享 |
感谢楼主的程序,麻烦咨询下楼主,你的STC52程序中 #define JUDGE 4 //用于判断通信的0和1,与单片机速度和晶振频率有关 这是起啥作用。 我看在程序里调用时: if(t >JUDGE) //高电平持续时间较长(70us) dat8 += 1; //传输值为1 能解答一下为什么t>JDGE是与70us进行比较呢?新手不太明白,谢谢了。 还有dat8 += 1;是不是就是把dat8最后一位给“1”的意思哈? |
yechuan220 发表于 2020-1-31 17:23 没……现在我大概明白,提出这些问题的老哥们是没有示波器什么的,那就串口调试吧。DHT11这东西不是把信号全发过去才返回的,通信的过程就是反馈的过程,比如主机发一个开始信号,然后DHT11就会响应一个低电平信号,检测这个信号,就知道之前的开始信号正不正常。类似于打电话,得听到对方的声音,才知道信号没问题,对吧。 |
楼主,有没有在STC15f2k60s上测试过DHT11? 找了很多网上的代码,根本就读不出来。 |
梦在夏天 发表于 2019-12-15 20:16 没有……盲调主要看人品,最好想办法搞个示波器或者逻辑分析仪。 ![]() |
我测试成功了,谢谢楼主的帮助![]() |
楼主,有没有在IAP15W4K58S4测试过DHT11? 求分享~ |
zeki520kiki 发表于 2019-11-12 09:11 我没试过……如果实在调不出来,强烈建议用示波器或者逻辑分析仪看看波形。 |
楼主,有没有在STC15F408AD测试过DHT11? 找了很多网上的代码,根本就读不出来。 |
最近在研究dht11,多谢分享 |
ontheroad 发表于 2019-3-1 17:29 这是STC89C52RC的程序,晶振频率11.0592MHz,接口还是P1.0,刚刚测试成功了。 |
35.33 KB, 下载次数: 80, 下载积分: 黑币 -5
11.0592MHz
ontheroad 发表于 2019-3-1 17:29 没有诶,不过我手上有元件,我可以帮你试试~ |
楼主,有没有在STC89C52上测试过DHT11? 找了很多网上的代码,根本就读不出来。 |
谢谢楼主 |
值得学习!!! |
代码很有用 |
本帖最后由 王朗的诱惑 于 2017-11-18 11:03 编辑 njzyg 发表于 2017-11-18 09:55 DHT11是单总线器件,驱动的时候时序容易出问题,但是环节太多不知道问题出在哪,调试的时候就费劲。不断检测错误就是想知道问题出在哪个环节,然后有针对性地解决。那个自加的具体时间不知道,和单片机速度有关系,先把前面调试好了,然后记录下来0和1对应的t值通过串口发上来,取平均值就可以了。 |
楼主好,感谢分享。请问为什么要检测那么多次错误呢。另外 while(DATA && ++t); 语句检测时间t自加一次需要多久时间,谢谢楼主 |
cp66 发表于 2017-8-24 13:41 写个发送字符串函数,把数据的十位和个位分开发,串口助手用文本模式接收。 |
我在stc15上用的,仿真软件上串口输出时十六进制,怎么才能输出的是十进制呢? |
aiait 发表于 2017-5-26 11:06 把数据送到1602屏幕上就行了吧?只是这样的话不用串口。串口可以用来调试,看看有没有数据读出来。 |
smallriver 发表于 2017-5-25 13:13 单总线一般都是时序问题,最好是能有台示波器看看。 |
请问大神,要用1602显示的话,还要用到串口吗? |
请问大神,有没有DHT11加1602显示的综合程序? |
这两天一直在研究,开始初始化都失败,然后呢却却读出来数据,真是闹心,借鉴一下程序看有没有效果 |
感谢分享,学习了。 |
学习了 |