标题: Proteus+stm32f103+DHT11+LCD1602显示程序Proteus仿真 [打印本页]

作者: _q_zj    时间: 2020-4-29 16:56
标题: Proteus+stm32f103+DHT11+LCD1602显示程序Proteus仿真
本人新学proteus,经过网上搜索,找到了一些代码。然后经过修改。变成了现在的文件。可以实现在LCD1602上显示温湿度。但是通过串口显示的数据确是乱码。之后附上文件代码,希望各位大佬能够给我一些建议。万分感谢。因为代码一样是从网上下载的。如果有哪些代码有异议,请联系我,谢谢。ps:proteus上面的dht11,最好使用我文件里面的那个。我之前用的是proteus8.8里面的dht11,一直不显示数据。不知道原因。

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. #include "stm32f10x.h"
  2. #include "bsp-lcd1602.h"
  3. #include "delay.h"
  4. #include "led.h"
  5. #include "sys.h"
  6. #include "DTH11.h"
  7. #include "stdlib.h"
  8. #include "stdio.h"
  9. #include "usart.h"
  10. int main(void)
  11. {
  12.          u8 temperature,humidity;
  13.         unsigned char display[10] ;
  14.                 RCC_ClocksTypeDef     RCC_Clocks;
  15.         u8 a=7,b=8;
  16.         RCC_Configuration();
  17.         
  18.   RCC_GetClocksFreq(&RCC_Clocks);

  19.         USART1_Init(9600);
  20.   LCD1602_Init();
  21.         delay_init();
  22.         LED_Init();
  23.         DHT11_Init();
  24.         LCD1602_ShowStr(2,0,"stm32f103R6",11);
  25.         delay_s(10);
  26.         LCD1602_Clear();
  27.         while(1)
  28.         {
  29.                 DHT11_Read_Data(&temperature,&humidity) ;
  30.                
  31.                 sprintf((char *)display,"temp:%d ",temperature) ;        
  32.                                  LCD1602_ShowStr(0,0,display,11) ;
  33.                
  34.                 sprintf((char *)display,"humi:%d ",humidity) ;        
  35.                                  LCD1602_ShowStr(1,1,display,11) ;
  36.                
  37.                 printf("temp:%c \r\n",temperature);
  38.                 printf("humidity:%c \r\n",humidity);
  39.                 LED0 = 0;
  40.                 LED1 = 1;
  41.                 delay_s(2);
  42.                 LED0 = 1;
  43.                 LED1 = 0;
  44.                 delay_s(2);
  45.                 USART1_printf("STM32 %d %d ",a,b);
  46.         }
  47.         
  48. }
复制代码

所有资料51hei提供下载:
LCD+LED+USART.7z (221.02 KB, 下载次数: 699)



作者: nishis    时间: 2020-4-30 19:24
老哥,无法显示温湿度啊,显示都是0
作者: _q_zj    时间: 2020-5-1 15:43
nishis 发表于 2020-4-30 19:24
老哥,无法显示温湿度啊,显示都是0

你看一下你的芯片晶振选的是多少,当时8M的时候可以显示正常温湿度,如果是其他的就显示的是0
作者: _q_zj    时间: 2020-5-1 15:47
之前忘记说了,当芯片晶振是8M的时候,才可以显示正确的温湿度数据,但串口输出的数据不对;40M的时候,串口可以显示正常的数据,但dht11读取数据有问题。原因别问我,我自己也是小白。如果有大佬能够解决这个问题,望不吝留言。谢谢
作者: nishis    时间: 2020-5-2 08:03
_q_zj 发表于 2020-5-1 15:43
你看一下你的芯片晶振选的是多少,当时8M的时候可以显示正常温湿度,如果是其他的就显示的是0

就是8M,方便留个联系方式请教一下吗‘

作者: fengye615    时间: 2020-5-3 17:38
这么好的东西一定要下载保存,同时谢谢作者。
作者: Hover_liu    时间: 2020-5-7 23:25
加大了时钟频率   HT11  延时delay要加大,我调试lcd1602的时候就遇见了类似问题,8M能正常显示,频率加大就不行了,后来把通讯时序delay加大就可以了,你可以试试!
作者: sygg    时间: 2020-5-8 18:50
你好  为啥你的程序和仿真图我都不能打开

作者: _q_zj    时间: 2020-5-9 14:06
sygg 发表于 2020-5-8 18:50
你好  为啥你的程序和仿真图我都不能打开

你好,这个问题我也不知道。我在我的电脑上是可以的。我用的软件是keil5还有proteus8.8。
作者: zyy1100    时间: 2020-5-14 10:29
楼主是说lcd显示正确但是传感器读取的有问题吗

作者: lgs8317    时间: 2020-5-19 17:15
找了好久的资料,希望可以下载,
作者: weiai123    时间: 2020-5-19 21:01
十分感谢楼主分享,加了一点判断循环,变成了温度检测
作者: 爱骞骞    时间: 2020-5-19 23:01
楼主你好,DHT11可以改成DHT22吗
作者: 爱骞骞    时间: 2020-5-19 23:09
我用的Proteus8.9为啥打不开呀
作者: 爱骞骞    时间: 2020-5-19 23:29
weiai123 发表于 2020-5-19 21:01
十分感谢楼主分享,加了一点判断循环,变成了温度检测

我的为啥打不开呢?我用的Proteus8.9
作者: 爱骞骞    时间: 2020-5-21 16:08
sygg 发表于 2020-5-8 18:50
你好  为啥你的程序和仿真图我都不能打开

我也打不开,不知道咋回事,我用的Proteus8.9好像不行
作者: c山水    时间: 2020-5-23 22:27
我设置了8M,但是温湿度还是现实0,不知道什么问题 啊
作者: sfdsl1    时间: 2020-5-25 15:29


楼主的程序,有些问题。
        sprintf((char *)display,"T:%d ",temperature) ;          这种函数还是不要在  protues这种虚拟方正中出现;
按照图片上的更改,老老实实的单个字符显示,
温湿度显示改变困难的bug ,即可解决
作者: wen20302    时间: 2020-6-16 14:52
各位大佬们     LED等和按键是干嘛的

作者: rnrnnr    时间: 2020-6-26 20:22
我也在综合学习,感谢楼主
作者: 2954573287    时间: 2021-5-13 17:06
为什么仿真发打不开呢





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1