//=====================================================================需要定时器
1,配置时针,SYS;
2,开启I2C1,串口1,并开启其中断;
3,开启计时器2,开启中断;(72-1,65535)
4,添加oled文件,引入头文件:
#include "oled.h"
#include "DHT11.h"
#include "stdio.h"
#include "main.h"
5,全局变量:
uint16_t temperature=0;
uint16_t humidity=0;
char dispBuff1[20];
char dispBuff2[20];
6,串口打印函数:
int fputc(int ch,FILE *f)//===========================================printf打印
{
size_t count = 1;
char chtemp = (char)ch;
HAL_UART_Transmit_IT(&huart1,(uint8_t*)&chtemp,count);
return count;
}
7,屏幕显示函数:
void DHT11_show(void)//==================================================================显示内容
{
unsigned int temperature=temperature;
unsigned int humidity=humidity;
OLED_ShowString(1,6,(uint8_t*)dispBuff1,20);//=================================字体大小控制无效!!
OLED_ShowString(1,7,(uint8_t*)dispBuff2,20);//=============左右距离,上下距离
}
8,初始化:
OLED_Init();
OLED_Clear();
uint8_t a[12]="Hello World";
9,只加载一次:
OLED_ShowCHinese(20,1,7);
OLED_ShowCHinese(50,1,8);
OLED_ShowCHinese(80,1,9);
OLED_ShowString(20,4,a,3);
10,主函数:
DHT11_OLED();
HAL_UART_Transmit_IT(&huart1,(uint8_t*)&dispBuff1,20);
HAL_Delay(200);//===========================================防止串口卡死
HAL_UART_Transmit_IT(&huart1,(uint8_t*)&dispBuff2,20);//=====================蓝牙间隔发送
11自定义函数:(注意声明)
void DHT11_OLED(void)
{
printf("Temp:%d.%d degree\r\n",temperature>>8,temperature&0xff);//========蓝牙打印
printf("Humi:%d.%d% % \r\n",humidity>>8,humidity&0xff);//==========================蓝牙打印
DHT11_Read_Data(&temperature,&humidity);
sprintf(dispBuff1,"Temp:%d.%d'",temperature>>8,temperature&0xff);
sprintf(dispBuff2,"Humi:%d.%d%%",humidity>>8,humidity&0xff);
HAL_Delay(500);
DHT11_show();
}
//========================================================================无需定时器
1,选择一个output,高速,默认上拉,重命名为DATA;
2,添加DHT11文件(无需定时器),注意默认是GPIOB;
3,注意没有连接DHT11模块,将导致初始化卡死
uint8_t DHT11_DATA[2]; //存放数组
HAL_Delay(500);
DHT11_Init();
HAL_Delay(1500);
DHT11_ReadData(DHT11_DATA);
printf("Humi:%d Temp:%d\r\n",DHT11_DATA[0],DHT11_DATA[1]); // 循环
HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_13);
HAL_Delay(500);