STM32溫濕度環境監控系統DHT11 帶仿真proteus 8.12版本
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
溫濕度控溫溫度低加熱
單片機源程序如下:
- //頭文件
- #include <stm32f10x.h>
- #include "GPIOLIKE51.h"
- #include "1602.h"
- #include <dht11.h>
- #include "ADC.h"
- #include "delay.h"
- #include "stdio.h"
- #include "usart.h"
- #define uchar unsigned char
- #define uint unsigned int
-
- #define key1 PBin(6)
- #define key2 PBin(1)
- #define key3 PBin(2)
- #define key4 PBin(3)
- #define beep PBin(7)
- #define led PBout(4)
- #define led1 PBout(5)
- uchar DHT[5];
- uchar str[12];
- uchar st=30;
- uchar sh=40;
- //函數聲明
- void GPIO_Configuration(void);
- void key_process(void);
- //=============================================================================
- //文件名稱:Delay
- //功能概要:延時
- //參數說明:nCount:延時長短
- //函數返回:無
- //=============================================================================
- void Delay(uint32_t nCount)
- {
- for(; nCount != 0; nCount--);
- }
- float valus;
- uint16_t AD_Val;
- uint8_t vals;
- uint16_t AD;
- uint16_t temp;
- u16 gz;
- //=============================================================================
- //文件名稱:main
- //功能概要:主函數
- //參數說明:無
- //函數返回:int
- //=============================================================================
- int main(void)
- {
-
- char str[100];
- GPIO_Configuration();
- Adc_Init();
- LCD_Init(); //液晶初始化
- // uart_init(9600);
- LCD_Write_String(0,0,"ST: SH:");
- LCD_Write_String(0,1,"T: H: ");
- LCD_Write_String(10,1,"Lx: %");
- while(1)
- {
- temp++;
- if(temp%10)
- {
-
- AD_Val = ADC_GetConversionValue(ADC1);
- AD=4095-AD_Val;
- AD=(AD*99/4095);
- sprintf(str,"%d",AD);
- temp=0;
- }
- LCD_Write_String(12,1,str);
- if(AD>80)
- {
- beep=1;
- }
- else{beep=0;}
- key_process();
- DHT_Start();
- DHT_ByteRead(DHT);
-
- DHT[0]=DHT[0]/2;
- DHT[2]=DHT[2]/2;
- str[0] = (DHT[0]/10)%10+0x30; //十位轉為ASCII碼
- str[1] = (DHT[0]%10)+0x30; //個位轉為ASCII
- LCD_Write_Char(2,1,str[0]);
- LCD_Write_Char(3,1,str[1]);
- str[0] = (DHT[2]/10)%10+0x30; //十位轉為ASCII碼
- str[1] = (DHT[2]%10)+0x30; //個位轉為ASCII
- LCD_Write_Char(7,1,str[0]);
- LCD_Write_Char(8,1,str[1]);
-
-
- str[0] = st/10+0x30; //十位轉為ASCII碼
- str[1] = st%10+0x30; //個位轉為ASCII
- LCD_Write_Char(3,0,str[0]);
- LCD_Write_Char(4,0,str[1]);
- str[0] = sh/10+0x30; //十位轉為ASCII碼
- str[1] = sh%10+0x30; //個位轉為ASCII
- LCD_Write_Char(10,0,str[0]);
- LCD_Write_Char(11,0,str[1]);
-
-
- if(DHT[0]>=st) led=0;
- else led=1;
-
- if(DHT[2]<=sh) led1=0;
- else led1=1;
-
- }
- }
-
- //=============================================================================
- //文件名稱:GPIO_Configuration
- //功能概要:GPIO初始化
- //參數說明:無
- //函數返回:無
- //=============================================================================
- void GPIO_Configuration(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
-
- RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB , ENABLE);
- //=============================================================================
- //LED -> PC13
- //=============================================================================
- 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;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_Init(GPIOA, &GPIO_InitStructure);
-
-
- 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;
- GPIO_Init(GPIOB, &GPIO_InitStructure);
-
- // GPIO_Write(GPIOA, 0xffff);
-
- GPIO_Write(GPIOB, 0xffff);
- GPIO_ResetBits(GPIOB,GPIO_Pin_7);
- }
- void key_process(void)
- {
-
- if(key1==0) //??1
- {
- delay_ms(10);
- if(key1==0)
- {
-
- while(!key1);
- st++;
- if(st>=35) st=35;
-
- }
- }
-
-
- if(key2==0) //??1
- {
- delay_ms(10);
- if(key2==0)
- {
-
- while(!key2);
- st--;
- if(st<=25) st=25;
-
- }
- }
-
- if(key3==0) //??1
- {
- delay_ms(10);
- if(key3==0)
- {
-
- while(!key3);
- sh++;
- if(sh>=45) sh=45;
-
- }
- }
-
-
- if(key4==0) //??1
- {
- delay_ms(10);
- if(key4==0)
- {
-
- while(!key4);
- sh--;
- if(sh<=35) sh=35;
-
- }
- }
- }
- /*
- GPIO的八種模式
- 4種輸入模式:
- ① 輸入浮空 GPIO_Mode_IN_FLOATING
- ② 輸入上拉 GPIO_Mode_IPU
- ③ 輸入下拉 GPIO_Mode_IPD
- ④ 模擬輸入 GPIO_Mode_AIN
- ◆ 4種輸出模式:
- ① 開漏輸出 GPIO_Mode_Out_OD
- ② 開漏復用功能 GPIO_Mode_AF_OD
- ③ 推挽式輸出 GPIO_Mode_Out_PP
- ④ 推挽式復用功能 GPIO_Mode_AF_PP
- ————————————————
- */
復制代碼
Keil代碼與Proteus8.13仿真下載:
仿真程序.7z
(235.54 KB, 下載次數: 439)
2023-1-2 01:22 上傳
點擊文件名下載附件
|