|
#include "stm32f10x.h"
#include "bsp_iic.h"
#include "bsp_systick.h"
#include "bsp_oled.h"
#include "bsp_bh1750.h"
#include "bsp_usart.h"
#include "bsp_ds18b20.h"
#include "bsp_default.h"
#include "bsp_exti.h"
#include "bsp_beep.h"
#include "bsp_led.h"
#include "bsp_adc.h"
void Start_Display (void); //開機顯示函數
void Display (void); //顯示函數 (溫度,光強度,液位)
void Display_T (float avl); //顯示函數 (溫度預設值)
void Display_I (float avl); //顯示函數 (光強度預設值)
void Display_L (float avl); //顯示函數 (液位預設值)
void LY_SentData (USART_TypeDef* pUSARTx); //藍牙發送函數
extern float result_lx;
extern float val;
float temp = 0;
extern float TempPresets; //預設溫度
extern float IlluPresets; //預設光照度
extern float LevelPresets; //預設液位
extern uint8_t flag; //加標志位
extern uint8_t flag1; //減標志位
uint8_t T_flag = 0; //溫度預設標志位
uint8_t I_flag = 0; //光強度預設標志位
uint8_t L_flag = 0; //液位預設標志位
uint8_t uc, ucDs18b20Id [8];
int main(void)
{
I2C_GPIO_Config(); //I2C初始化
OLED_Init(); //OLED初始化
BEEP_Config (); //蜂鳴器初始化
LED_GPIO_Config(); //LED初始化
USART_Config(); //串口初始化
EXTI_Key_Config(); //按鍵中斷初始化
ADCx_Init(); //ADC初始化
OLED_Fill(0xFF); //全屏點亮
SysTick_Delay_ms(20);
OLED_Fill(0x00); //全屏滅
SysTick_Delay_ms(20);
Start_Display (); //開機顯示函數
while(DS18B20_Init())
printf("\r\n no ds18b20 exit \r\n");
printf("\r\n ds18b20 exit \r\n");
DS18B20_ReadId ( ucDs18b20Id ); // 讀取 DS18B20 的序列號
printf("\r\nDS18B20的序列號是: 0x");
for ( uc = 0; uc < 8; uc ++ ) // 打印 DS18B20 的序列號
printf ( "%.2x", ucDs18b20Id [ uc ] );
GY_30_Write_Cmd (0x01);
GY_30_Write_Cmd (0x10);
SysTick_Delay_ms(120);
while(1)
{
Display (); //顯示函數 (溫度,光強度,液位)
LY_SentData (USART1); //數據發送函數
/*-------------------- 報警處理 -------------------*/
Alarm_T_LED_Config (DS18B20_GetTemp_SkipRom (), TempPresets);
Alarm_I_LED_Config (result_lx, IlluPresets);
Alarm_L_LED_Config (Level_read(), LevelPresets);
Alarm_BEEP_Config ();
/*-------------------------------------------------*/
/*-------------------- 設置預設值 -------------------*/
if (T_flag == 1) Display_T (TempPresets);
if (I_flag == 1) Display_I (IlluPresets);
if (L_flag == 1) Display_L (LevelPresets);
/*---------------------------------------------------*/
}
}
/**
* @brief 開機顯示函數
* @param 無
* @retval 無
*/
void Start_Display (void)
{
static uint8_t ch[] = "Welcome to the monitoring system:";
static uint8_t ch1[] = "Loading";
while(1)
{
OLED_ShowStr(0, 0,ch,1);
OLED_ShowStr(0, 3,ch1,2);
for (uint8_t i=0;i<6;i++)
{
SysTick_Delay_ms(500);
OLED_ShowStr(56+i*8, 3, (unsigned char*)".",2);
}
OLED_CLS(); break;
}
}
/**
* @brief 顯示函數 (溫度,光強度,液位值)
* @param 無
* @retval 無
*/
void Display (void)
{
extern float result_lx;
extern float temp;
float result_De;
/*-------------------顯示讀取的光照值---------------------*/
OLED_ShowStr(0, 0, (unsigned char*)"Illu:", 2);
OLED_ShowStr(100, 0, (unsigned char*)"Lx", 2);
GY_30_ReadByte ();
Convert_GY_30 (); //取出光照強度值
OLED_ShowInteger(0, result_lx);
OLED_ShowPoint(0);
result_De = Float_Decimal(result_lx);
OLED_ShowDecimal(0, result_De);
/*--------------------------------------------------------*/
/*--------------------顯示讀取的溫度值--------------------*/
OLED_ShowStr(0, 3, (unsigned char*)"Temp:", 2);
OLED_ShowCN(100, 3, 0);
temp = DS18B20_GetTemp_SkipRom (); //取出讀取的溫度值
OLED_ShowInteger(3, temp);
OLED_ShowPoint(3);
temp = Float_Decimal(temp);
OLED_ShowDecimal(3, temp);
/*--------------------------------------------------------*/
/*---------------------顯示讀取的液位值-------------------*/
OLED_ShowStr(0, 6, (unsigned char*)"Leve:", 2);
OLED_ShowStr(100, 6, (unsigned char*)"mm", 2);
Level_read(); //取出讀取的液位值
OLED_ShowInteger(6, val);
OLED_ShowPoint(6);
val = Float_Decimal(val);
OLED_ShowDecimal(6, val);
/*--------------------------------------------------------*/
SysTick_Delay_ms(500); //間隔1s刷新
}
/**
* @brief 顯示函數 (溫度預設值)
* @param avl:溫度值
* @retval 無
*/
void Display_T (float avl)
{
OLED_CLS(); //清屏
while (1)
{
Default_Value_T(avl);
if (flag == 1 || flag1 == 1)
{
flag = 0; flag1 = 0; //清除中斷標志位
OLED_Show2Number(6, TempPresets);
SysTick_Delay_s(1);
if (flag==1|flag1==1) continue;
else break;
}
}
T_flag = 0; //清除KEY1中斷標志位
OLED_CLS();
}
/**
* @brief 顯示函數 (光強度預設值)
* @param avl:光強度值
* @retval 無
*/
void Display_I (float avl)
{
OLED_CLS(); //清屏
while (1)
{
Default_Value_I(avl);
if (flag == 1 || flag1 == 1)
{
flag = 0; flag1 = 0;//清除中斷標志位
OLED_ShowInteger(6, IlluPresets);
SysTick_Delay_s(1);
if (flag==1||flag1==1) continue;
else break;
}
}
I_flag = 0; //清除KEY4中斷標志位
OLED_CLS();
}
/**
* @brief 顯示函數 (液位預設值)
* @param avl:液位值
* @retval 無
*/
void Display_L (float avl)
{
OLED_CLS(); //清屏
while (1)
{
Default_Value_L(avl);
if (flag == 1 || flag1 == 1)
{
flag = 0; flag1 = 0;//清除中斷標志位
OLED_Show2Number(6, LevelPresets);
SysTick_Delay_s(1);
if (flag==1||flag1==1) continue;
else break;
}
}
L_flag = 0; //清除KEY4中斷標志位
OLED_CLS();
}
/**
* @brief 藍牙發送函數
* @param 無
* @retval 無
*/
void LY_SentData (USART_TypeDef* pUSARTx)
{
Usart_Send5Num(pUSARTx, DS18B20_GetTemp_SkipRom ()); //溫度
Usart_Send5Num(pUSARTx, result_lx); //光照度
Usart_Send5Num(pUSARTx, Level_read()); //液位
Usart_Send5Num(pUSARTx, TempPresets); //預設溫度
Usart_Send5Num(pUSARTx, IlluPresets); //預設光照度
Usart_Send5Num(pUSARTx, LevelPresets); //預設液位
}
|
-
-
代碼.7z
2022-6-9 15:46 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
202.62 KB, 下載次數: 41, 下載積分: 黑幣 -5
-
-
手機APP接收.7z
2022-6-9 15:12 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
3.15 MB, 下載次數: 28, 下載積分: 黑幣 -5
評分
-
查看全部評分
|