找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2981|回复: 6
收起左侧

STM32单片机DHT11温湿度环境监控系统Proteus仿真代码 带电机风扇

  [复制链接]
ID:1059945 发表于 2023-1-1 23:41 | 显示全部楼层 |阅读模式
STM32温湿度环境监控系统DHT11 带仿真proteus 8.12版本
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
51hei.gif

温湿度控温温度低加热

温湿度控温温度低加热


单片机源程序如下:
  1. //头文件
  2. #include <stm32f10x.h>
  3. #include "GPIOLIKE51.h"
  4. #include "1602.h"
  5. #include <dht11.h>
  6. #include "ADC.h"
  7. #include "delay.h"
  8. #include "stdio.h"
  9. #include "usart.h"        

  10. #define uchar unsigned char
  11. #define uint unsigned int
  12.         
  13. #define key1 PBin(6)
  14. #define key2 PBin(1)
  15. #define key3 PBin(2)
  16. #define key4 PBin(3)
  17. #define beep PBin(7)
  18. #define led PBout(4)
  19. #define led1 PBout(5)

  20. uchar DHT[5];        
  21. uchar str[12];
  22. uchar st=30;
  23. uchar sh=40;                                       
  24. //函数声明
  25. void GPIO_Configuration(void);
  26. void key_process(void);
  27. //=============================================================================
  28. //文件名称:Delay
  29. //功能概要:延时
  30. //参数说明:nCount:延时长短
  31. //函数返回:无
  32. //=============================================================================

  33. void Delay(uint32_t nCount)
  34. {
  35.   for(; nCount != 0; nCount--);
  36. }


  37. float valus;
  38. uint16_t AD_Val;
  39. uint8_t vals;        
  40. uint16_t AD;
  41. uint16_t temp;
  42. u16 gz;
  43. //=============================================================================
  44. //文件名称:main
  45. //功能概要:主函数
  46. //参数说明:无
  47. //函数返回:int
  48. //=============================================================================
  49. int main(void)
  50. {
  51.         
  52.         char str[100];
  53.         GPIO_Configuration();
  54.         Adc_Init();
  55.         LCD_Init();    //液晶初始化
  56. //        uart_init(9600);

  57.         LCD_Write_String(0,0,"ST:    SH:");
  58.         LCD_Write_String(0,1,"T:   H:  ");
  59.         LCD_Write_String(10,1,"Lx:  %");        

  60.   while(1)
  61. {

  62.                 temp++;        
  63.                 if(temp%10)
  64.                 {
  65.                         
  66.                 AD_Val = ADC_GetConversionValue(ADC1);        
  67.                 AD=4095-AD_Val;
  68.                 AD=(AD*99/4095);               
  69.                 sprintf(str,"%d",AD);
  70.                 temp=0;
  71.                 }        
  72.                 LCD_Write_String(12,1,str);
  73.                         if(AD>80)
  74.         {
  75.                 beep=1;
  76.         }
  77.         else{beep=0;}        
  78.                 key_process();
  79.                 DHT_Start();
  80.                 DHT_ByteRead(DHT);


  81.                 DHT[0]=DHT[0]/2;
  82.                 DHT[2]=DHT[2]/2;        

  83.                    str[0] = (DHT[0]/10)%10+0x30;  //十位转为ASCII码
  84.            str[1] = (DHT[0]%10)+0x30;  //个位转为ASCII
  85.                    LCD_Write_Char(2,1,str[0]);
  86.                    LCD_Write_Char(3,1,str[1]);

  87.                    str[0] = (DHT[2]/10)%10+0x30;  //十位转为ASCII码
  88.            str[1] = (DHT[2]%10)+0x30;  //个位转为ASCII
  89.                    LCD_Write_Char(7,1,str[0]);
  90.                    LCD_Write_Char(8,1,str[1]);
  91.                         
  92.                         
  93.                         str[0] = st/10+0x30;  //十位转为ASCII码
  94.            str[1] = st%10+0x30;  //个位转为ASCII
  95.                    LCD_Write_Char(3,0,str[0]);
  96.                    LCD_Write_Char(4,0,str[1]);

  97.                    str[0] = sh/10+0x30;  //十位转为ASCII码
  98.            str[1] = sh%10+0x30;  //个位转为ASCII
  99.                    LCD_Write_Char(10,0,str[0]);
  100.                    LCD_Write_Char(11,0,str[1]);
  101.                
  102.         
  103.                         if(DHT[0]>=st) led=0;
  104.                         else led=1;
  105.                         
  106.                         if(DHT[2]<=sh) led1=0;
  107.                         else led1=1;
  108.                

  109.                    }
  110. }                        
  111.                         


  112. //=============================================================================
  113. //文件名称:GPIO_Configuration
  114. //功能概要:GPIO初始化
  115. //参数说明:无
  116. //函数返回:无
  117. //=============================================================================
  118. void GPIO_Configuration(void)
  119. {
  120.   GPIO_InitTypeDef GPIO_InitStructure;
  121.   
  122.   RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB , ENABLE);                                                  
  123. //=============================================================================
  124. //LED -> PC13
  125. //=============================================================================                        
  126.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
  127.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  128.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  129.   GPIO_Init(GPIOA, &GPIO_InitStructure);
  130.         
  131.         
  132.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
  133.   GPIO_Init(GPIOB, &GPIO_InitStructure);
  134.         
  135. //        GPIO_Write(GPIOA, 0xffff);
  136.         
  137.           GPIO_Write(GPIOB, 0xffff);
  138.                 GPIO_ResetBits(GPIOB,GPIO_Pin_7);
  139. }
  140. void key_process(void)
  141. {
  142.         
  143. if(key1==0)             //??1
  144.    {
  145.     delay_ms(10);


  146.         if(key1==0)
  147.          {
  148.                
  149.           while(!key1);
  150.           st++;
  151.                  if(st>=35) st=35;

  152.          
  153.           }
  154.    }         
  155.         
  156.         
  157. if(key2==0)             //??1
  158.    {
  159.     delay_ms(10);


  160.         if(key2==0)
  161.          {
  162.                
  163.           while(!key2);
  164.         st--;
  165.                  if(st<=25) st=25;

  166.          
  167.           }
  168.    }

  169.          
  170.          if(key3==0)             //??1
  171.    {
  172.     delay_ms(10);


  173.         if(key3==0)
  174.          {
  175.                
  176.           while(!key3);
  177.         sh++;
  178.                  if(sh>=45) sh=45;

  179.          
  180.           }
  181.    }         
  182.         
  183.         
  184. if(key4==0)             //??1
  185.    {
  186.     delay_ms(10);


  187.         if(key4==0)
  188.          {
  189.                
  190.           while(!key4);
  191.         sh--;
  192.                  if(sh<=35) sh=35;

  193.          
  194.           }
  195.    }
  196. }        


  197. /*
  198. GPIO的八种模式

  199. 4种输入模式:
  200. ① 输入浮空 GPIO_Mode_IN_FLOATING
  201. ② 输入上拉 GPIO_Mode_IPU
  202. ③ 输入下拉 GPIO_Mode_IPD
  203. ④ 模拟输入 GPIO_Mode_AIN

  204. ◆ 4种输出模式:
  205. ① 开漏输出 GPIO_Mode_Out_OD
  206. ② 开漏复用功能 GPIO_Mode_AF_OD
  207. ③ 推挽式输出 GPIO_Mode_Out_PP
  208. ④ 推挽式复用功能 GPIO_Mode_AF_PP
  209. ————————————————

  210. */
复制代码

Keil代码与Proteus8.13仿真下载:
仿真程序.7z (235.54 KB, 下载次数: 382)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:850421 发表于 2023-3-10 16:58 | 显示全部楼层
写的很好,待我测试一下
回复

使用道具 举报

ID:1066092 发表于 2023-3-25 02:41 | 显示全部楼层
兄弟,你这个keil下使用的插件是哪个?vdmagdi在keil5里我一直都无法正常使用,它指向了系统临时文件夹无法指向编译目录,装载不了编译后的文件无法一起联调啊。
回复

使用道具 举报

ID:291668 发表于 2023-3-26 17:55 | 显示全部楼层
这个仿真功能不错,应该学习学习!
回复

使用道具 举报

ID:737490 发表于 2023-4-30 12:36 | 显示全部楼层
请问,仿真的时候DHT11测试一直不变都是温湿度27,AD也测不出来是为什么啊。管脚控制风扇、喇叭、灯也不听使唤
回复

使用道具 举报

ID:914036 发表于 2023-5-7 13:37 | 显示全部楼层
楼主蜂鸣器那里的宏定义有点问题,应该是PBout(7)
回复

使用道具 举报

ID:1015682 发表于 2023-5-9 13:28 | 显示全部楼层
小琪不想学习 发表于 2023-4-30 12:36
请问,仿真的时候DHT11测试一直不变都是温湿度27,AD也测不出来是为什么啊。管脚控制风扇、喇叭、灯也不听 ...

是的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

Powered by 单片机教程网

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