您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文化 > STM32-湿度传感器程序
1湿度传感器程序以下是C文件#includestm32f10x_lib.h#includedht11.h//复位DHT11voidDHT11_Rst(void){DHT11_IO_OUT();//SETOUTPUTDHT11_DQ_OUT=0;//拉低DQdelay_ms(20);//拉低至少18msDHT11_DQ_OUT=1;//DQ=1delay_us(30);//主机拉高20~40us}//等待DHT11的回应//返回1:未检测到DHT11的存在//返回0:存在u8DHT11_Check(void){u8retry=0;DHT11_IO_IN();//SETINPUTwhile(DHT11_DQ_IN&&retry100)//DHT11会拉低40~80us{retry++;delay_us(1);};if(retry=100)return1;elseretry=0;while(!DHT11_DQ_IN&&retry100)//DHT11拉低后会再次拉高40~80us{retry++;delay_us(1);};if(retry=100)return1;return0;}//从DHT11读取一个位//返回值:1/0u8DHT11_Read_Bit(void){u8retry=0;while(DHT11_DQ_IN&&retry100)//等待变为低电平2{retry++;delay_us(1);}retry=0;while(!DHT11_DQ_IN&&retry100)//等待变高电平{retry++;delay_us(1);}delay_us(40);//等待40usif(DHT11_DQ_IN)return1;elsereturn0;}//从DHT11读取一个字节//返回值:读到的数据u8DHT11_Read_Byte(void){u8i,dat;dat=0;for(i=0;i8;i++){dat=1;dat|=DHT11_Read_Bit();}returndat;}//从DHT11读取一次数据//temp:温度值(范围:0~50°)//humi:湿度值(范围:20%~90%)//返回值:0,正常;1,读取失败u8DHT11_Read_Data(u8*temp,u8*humi){u8buf[5];u8i;DHT11_Rst();if(DHT11_Check()==0){for(i=0;i5;i++)//读取40位数据{buf[i]=DHT11_Read_Byte();}if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4]){3*humi=buf[0];*temp=buf[2];}}elsereturn1;return0;}//初始化DHT11的IO口DQ同时检测DHT11的存在//返回1:不存在//返回0:存在u8DHT11_Init(void){RCC-APB2ENR|=12;//使能PORTA口时钟GPIOA-CRH&=0XFFFF0FFF;//PA11推挽输出GPIOA-CRH|=0X00003000;GPIOA-ODR|=111;//输出1DHT11_Rst();returnDHT11_Check();}//湿度显示voidHumidity_display(void){uchartable0[]={Temp:00.00C};uchartable1[]={Humi:00.00%};u8t=0;u8temperature,tem;u8humidity,hum;intnum;if(t%10==0)//每100ms读取一次{DHT11_Read_Data(&temperature,&humidity);//读取温湿度值//显示温度值table0[5]=temperature/10+0x30;table0[6]=temperature%10+0x30;tem=temperature*100;table0[8]=tem/10%10+0x30;table0[9]=tem%10+0x30;//显示湿度值table1[5]=humidity/10+0x30;table1[6]=humidity%10+0x30;hum=humidity*100;table1[8]=hum/10%10+0x30;table1[9]=hum%10+0x30;4write_1602_com(0x80);for(num=0;num16;num++){write_1602_dat(table0[num]);delay_ms(8);}write_1602_com(0x80+0x40);for(num=0;num16;num++){write_1602_dat(table1[num]);delay_ms(8);}}delay_ms(10);t++;if(t==10){t=0;}}以下是H文件#ifndef__DHT11_H#define__DHT11_H#includesys.h#defineuintunsignedint#defineucharunsignedchar//IO方向设置#defineDHT11_IO_IN(){GPIOA-CRH&=0XFFFF0FFF;GPIOA-CRH|=812;}#defineDHT11_IO_OUT(){GPIOA-CRH&=0XFFFF0FFF;GPIOA-CRH|=312;}////IO操作函数#defineDHT11_DQ_OUTPAout(11)//数据端口PA11#defineDHT11_DQ_INPAin(11)//数据端口PA11u8DHT11_Init(void);//初始化DHT11u8DHT11_Read_Data(u8*temp,u8*humi);//读取温湿度u8DHT11_Read_Byte(void);//读出一个字节u8DHT11_Read_Bit(void);//读出一个位5u8DHT11_Check(void);//检测是否存在DHT11voidDHT11_Rst(void);//复位DHT11voidHumidity_display(void);//湿度显示#endif
本文标题:STM32-湿度传感器程序
链接地址:https://www.777doc.com/doc-1433933 .html