标题:
STM32单片机测温湿度和紫外线程序,原创
[打印本页]
作者:
15773896335
时间:
2019-2-16 18:46
标题:
STM32单片机测温湿度和紫外线程序,原创
stm32单片机测温湿度和紫外线程序,原创。
#include "stm32f10x.h"
#include "bsp_SysTick.h"
#include "bsp_am2302.h"
#include "bsp_usart.h"
#include "bsp_led.h"
#include "bsp_i2c_gpio.h"
#include "bsp_adc.h"
#include "OLED_I2C.h"
/***********温湿度结构体声明************/
AM2302_Data_TypeDef AM2302_Data;
/*************湿度值,温度值************/
unsigned int RH_Value,TEMP_Value;
/*湿度高八位,低八位,温度高八位,低八位*/
unsigned char RH_H,RH_L,TP_H,TP_L,UV;
uint16_t i=0,n=0,m=0;
/********传感器传回来的值****************/
extern __IO uint16_t ADC_getvalue;
/**********传感器转化后的值*************/
float ADC;
/*******温湿度、紫外处理函数声明********/
void Temp_RH_deal(void);
void ADC_Deal(void);
/********OLED处理函数声明*************/
void OLED_deal(void);
void KaiJi_Init(void);
int main(void)
{
/* 配置SysTick 为1us中断一次 */
SysTick_Init();
LED_Init();
USARTx_Init();//初始化串口1
printf("\r\n***野火STM32 AM2302温湿度传感器实验***\r\n");
AM2302_Init ();
ADCx_Init();
i2c_Init();/*I2C总线的GPIO初始化*/
OLED_Init();
KaiJi_Init();
while(1)
{
Temp_RH_deal();
ADC_Deal();
OLED_deal();
}
}
/***********************************************************************************************************
************ ******** ******* **
** * * * * **
** * * * * **
** * * * **
** * * * ** *
** * ****** ******* * * ******* ** *
** * * * * * * * * * ** *
** * * * * * * * * * * ** *********
** * * * * * * * * * * ** *
** * * * * * * * * * * * ** *
** * * *** * * * ***** ******* ** *****
************ ******
*****************************************************************************************************************/
void KaiJi_Init(void)
{
for(i=3;i<7;i++){OLED_ShowCN((i-1)*16,0,i);}
OLED_ShowStr(12,3,(unsigned char*)"Name:",2);
for(i=0;i<3;i++){OLED_ShowCN((i+4)*16,3,i);}
OLED_ShowStr(12,6,(unsigned char*)"Date:",2);
OLED_ShowStr(52,6,(unsigned char*)"2019/2/14",2);
Delay_s(1);
OLED_CLS();
}
void OLED_deal(void)
{
//定义三个数组,作为传感器值缓冲
char buffer1[5]={0},buffer2[5]={0},buffer3[5]={0};
//用sprintf函数将测量值转换为字符形式
sprintf(buffer1,"%.2f",(float)TEMP_Value/10);
sprintf(buffer2,"%.2f",(float)RH_Value/10);
sprintf(buffer3,"%.0f",(float)UV);
//显示中文字符,源码在codetab.h文件,
for(i=7;i<15;i++)
{
OLED_ShowCN((i-7)*16,0,i);
}
//显示TEMP:
OLED_ShowStr(0,2,(unsigned char*)"Temp:",2);
//显示温度测量值
OLED_ShowStr(40,2,buffer1,2);
//显示“℃”符号
for(i=15;i<16;i++)
{OLED_ShowCN((i-10)*16,2,i);}
//显示Rh:
OLED_ShowStr(0,4,(unsigned char*)"Rh:",2);
//显示湿度测量值
OLED_ShowStr(40,4,buffer2,2);
//显示“%”符号
OLED_ShowStr(82,4,(unsigned char*)"%",2);
//显示Uv:
OLED_ShowStr(0,6,(unsigned char*)"Uv:",2);
//显示紫外线测量值
OLED_ShowStr(40,6,buffer3,2);
//显示紫外线强度单位
OLED_ShowStr(64,6,(unsigned char*)"UVIndex",2);
}
void Temp_RH_deal(void)
{
/*调用DHT11_Read_TempAndHumidity读取温湿度,若成功则输出该信息*/
if( AM2302_Read( &AM2302_Data) == SUCCESS)
{
RH_Value= AM2302_Data.humi_int*256+ AM2302_Data.humi_deci;
RH_H=RH_Value/10;//读取整数部分
RH_L=RH_Value%10;//读取小数部分
//计算出实际温度值的10倍,这是传感器手册上注明的
TEMP_Value= AM2302_Data.temp_int*256+ AM2302_Data.temp_deci;
TP_H=TEMP_Value/10;//读取整数部分
TP_L=TEMP_Value%10;//读取小数部分
printf("\r\n读取AM2302成功!%d\r\n\r\n湿度为%d.%d%RH\
,温度为%d.%d℃\r\n",n,RH_H,RH_L,TP_H,TP_L);//“\”表示转向下一行
n++;
}
else
{
printf("\nRead AM2302 ERROR!%d\n",m);
m++;
}
Delay_ms(1000);
}
void ADC_Deal(void)
{
int adc=0;
ADC=(float) ADC_getvalue/4096*3.3*1000;
ADC+=5;
if(ADC>0)
{
if(0<ADC&ADC<50)
adc=0;
else if(200<=ADC&ADC<=260)
adc=1;
else if(290<=ADC&ADC<=350)
adc=2;
else if(380<=ADC&ADC<=440)
adc=3;
else if(380<=ADC&ADC<=540)
adc=4;
else if(580<=ADC&ADC<=640)
adc=5;
else if(670<=ADC&ADC<=730)
adc=6;
else if(770<=ADC&ADC<=830)
adc=7;
else if(850<=ADC&ADC<=910)
adc=8;
else if(950<=ADC&ADC<=1010)
adc=9;
else if(950<=ADC&ADC<=1110)
adc=10;
}
switch(adc)
{
case 0:UV=0;break;
case 1:UV=1;break;
case 2:UV=2;break;
case 3:UV=3;break;
case 4:UV=4;break;
case 5:UV=5;break;
case 6:UV=6;break;
case 7:UV=7;break;
case 8:UV=8;break;
case 9:UV=9;break;
case 10:UV=10;break;
}
printf("当前电压为 = %3.0f mV \n",ADC);
printf("当前紫外线指数等级为%d级\r\n",UV);
}
复制代码
全部资料51hei下载地址:
原创-AM2302.7z
(210.68 KB, 下载次数: 69)
2019-2-17 03:29 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
SwanTdd
时间:
2020-12-7 20:15
您好!!我想请问一下,您还保存得有这个的电路图麽?想要参考一下。
作者:
单片机爱好者223
时间:
2021-7-14 22:19
紫外线程序是个什么?
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1