自己在第一次使用温度传感器DHT11时,想不用正点原子的源程序的那个引脚,就自己改了,但是一直没有成功,自己也移植很多次,但是都没有成功,今天我来回给大家说说怎么改吧首先
//#define DHT11_IO_IN() {GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=8<<0;}
//#define DHT11_IO_OUT() {GPIOA->CRL&=0XFFFFFFF0;GPIOA->CRL|=3<<0;}
#define DHT11_IO_IN() {GPIOA->CRL&=0xFFFFF0FF;GPIOA->CRL|=0x00000800;}
#define DHT11_IO_OUT() {GPIOA->CRL&=0XFFFF0FF;GPIOA->CRL|=0x00000300;}
在这里一定要改,因为你这里一旦没有改变,就算后面你改了引脚那些,都不会起作用,所以还请多注意
其次这里的写法使用的时寄存器,需要对着寄存器一步步的来改
单片机源程序如下:
- #include "led.h"
- #include "delay.h"
- #include "sys.h"
- #include "usart.h"
- #include "lcd.h"
- #include "ds18b20.h"
- #include "dht11.h"
-
- int main(void)
- {
- u8 t=0;
- u8 temperature;
- u8 humidity;
- u8 key = 0;
- SystemInit();
- delay_init(); //延时初始化
- // NVIC_Configuration();
- uart_init(9600);
- LED_Init();
- KEY_Init();
- LCD_Init();
- TIM3_PWM_Init(899,0); //不分频。PWM频率=72000000/900=80Khz
-
- POINT_COLOR=RED;//设置字体为红色
- LCD_ShowString(60,50,200,16,16,"Mini STM32");
- LCD_ShowString(60,70,200,16,16,"DHT11 TEST");
- LCD_ShowString(60,90,200,16,16,"ATOM@ALIENTEK");
- LCD_ShowString(60,200,200,16,16,"modified by Leon");
- LCD_ShowString(60,110,200,16,16,"2018/7/22");
- while(DHT11_Init()) //DHT11初始化
- {
- LCD_ShowString(60,130,200,16,16,"DHT11 Error");
- delay_ms(200);
- LCD_Fill(60,130,239,130+16,WHITE);
- delay_ms(200);
- }
- LCD_ShowString(60,130,200,16,16,"DHT11 OK");
- POINT_COLOR=BLUE;//设置字体为蓝色
- LCD_ShowString(60,150,200,16,16,"Temp: . C");
- LCD_ShowString(60,170,200,16,16,"Humi: %");
- while(1)
- {
- if(t%10==0)//每100ms读取一次
- {
- DHT11_Read_Data(&temperature,&humidity); //读取温湿度值
- LCD_ShowNum(60+40,150,temperature,2,16); //显示温度
- LCD_ShowNum(60+40,170,humidity,2,16); //显示湿度
- }
-
-
-
- key=KEY_Scan(0); //得到键值
- switch(key)
- {
- case KEY0_PRES:
- LED0=!LED0;
- break;
- case KEY1_PRES:
- LED1=!LED1;
-
- break;
- case WKUP_PRES:
- LED0=!LED0;
- LED1=!LED1;
- break;
- default:
- delay_ms(10);
- }
-
- }
- }
复制代码
所有资料51hei提供下载:
mini stm32 f103rDHT11温湿度实验.7z
(229.45 KB, 下载次数: 109)
|