高中生
最后登录1970-1-1
在线时间 小时
注册时间2018-10-20
|
#include "stm32f4xx.h"
#include "usart.h"
#include "SysTick.h"
#include "ds18b20.h"
#include "oled.h"
#include <stdio.h>
#include "led.h"
#include "dh11.h"
#include "key.h"
//用于存储格式化后字符串的数组
unsigned char cStr [ 10 ]; //ds18b20
unsigned char cStr1 [ 10 ]; //dh11 湿度
unsigned char cStr2 [ 10 ];//dh11 温度
//按键温度格式化存储数组
unsigned char WDcStr [ 10 ]; //dh11 湿度
unsigned char SDcStr [ 10 ];//dh11 温度
unsigned char key [10];
unsigned char SDtemp1=0 ;
unsigned char temp=0;
float temperature; //ds18b20
//dh11
float temperature1;
float temperature2;
int uctemp ;
int untemp1;
DHT11_Data_TypeDef DHT11_Data;
int main(void)
{
uint8_t uc,DS18B20Id[8];
/*初始化USART,配置模式为 115200 8-N-1*/
Debug_USART_Config();
/* 系统定时器初始化 */
SysTick_Init();
LED_GPIO_Config();
Key_GPIO_Config();
I2C_Configuration();//配置CPU的硬件I2C
OLED_Init(); //初始化OLED
OLED_CLS();//清屏
if(DS18B20_Init()==0)
{
printf("DS18B20初始化成功\n");
}
else
{
printf("DS18B20初始化失败\n");
printf("请将传感器正确插入到插槽内\n");
/* 停机 */
while(1)
{}
}
DS18B20_ReadId ( DS18B20Id ); // 读取 DS18B20 的序列号
printf("\r\nDS18B20的序列号是: 0x");
for ( uc = 0; uc < 8; uc++ ) // 打印 DS18B20 的序列号
printf ( "%.2x", DS18B20Id[uc]);
printf("\n");
while(1)
{
temperature=DS18B20_Get_Temp();
printf("DS18B20读取到的温度为:%0.3f\n",temperature);
sprintf ( (char*)cStr, "%0.3f", temperature);
/*调用DHT11_Read_TempAndHumidity读取温湿度,若成功则输出该信息*/
if( Read_DHT11 ( & DHT11_Data ) == SUCCESS)
{
printf("\r\n读取DHT11成功!\r\n\r\n湿度为%d.%d %RH ,温度为 %d.%d℃ \r\n",\
DHT11_Data.humi_int,DHT11_Data.humi_deci,DHT11_Data.temp_int,DHT11_Data.temp_deci);
temperature1=DHT11_Data.humi_int+DHT11_Data.humi_deci;
temperature2=DHT11_Data.temp_int+DHT11_Data.temp_deci;
sprintf ( (char*)cStr1, "%0.2f ", temperature1);
sprintf ( (char*)cStr2, "%0.2f", temperature2);
}
else
{
printf("Read DHT11 ERROR!\r\n");
}
//sprintf把temperature的值格式化到字符串里的%d位置,格式化的结果存储在cStr中
//要转换浮点型变量可以使用 %f
//显示字符串,把cStr作为输入进行显示。以下函数是液晶的字符串显示函数,可根据自己的液晶驱动修改
//显示汉字程序
//当前温度
OLED_ShowCN(0,0,0);
OLED_ShowCN(1*16,0,1);
OLED_ShowCN(2*16,0,2);
OLED_ShowCN(3*16,0,3);
//动态显示温度
OLED_ShowStr(5*16,0,cStr,2);
//当前湿度
OLED_ShowCN(0,2,0);
OLED_ShowCN(1*16,2,1);
OLED_ShowCN(2*16,2,4);
OLED_ShowCN(3*16,2,5);
OLED_ShowStr(5*16,2,cStr1,2);
OLED_ShowCN(0,4,11);
OLED_ShowCN(1*16,4,12);
OLED_ShowCN(2*16,4,13);
OLED_ShowCN(3*16,4,14);
OLED_ShowCN(4*16,4,15);
OLED_ShowCN(0,6,11);
OLED_ShowCN(1*16,6,12);
OLED_ShowCN(2*16,6,4);
OLED_ShowCN(3*16,6,5);
OLED_ShowCN(4*16,6,15);
if ( Key_Scan(KEY1_GPIO_PORT,KEY1_GPIO_PIN) == KEY_ON)
{
temp++;
if(temp==40)
{
temp=0;
OLED_CLS();//清屏
}
uctemp=temp;
printf(":%0.3d\n",uctemp);
sprintf ( (char*)WDcStr, "%d",uctemp );
OLED_ShowStr(6*16,4,WDcStr,2);
}
//设置key2
if ( Key_Scan(KEY2_GPIO_PORT,KEY2_GPIO_PIN) == KEY_ON)
{
SDtemp1++;
if(SDtemp1==30)
{
SDtemp1=0;
OLED_CLS();//清屏
}
untemp1=SDtemp1;
sprintf ( (char*)SDcStr, "%d", untemp1 );
OLED_ShowStr(6*16,6,SDcStr,2);
}
Delay_ms(100);
}
}
|
-
按键+oled 动态设定温度
|