久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1970|回復: 0
打印 上一主題 下一主題
收起左側

stm32f1+ds18b02+bh1750+loed+water sensor+APP接收數據

[復制鏈接]
跳轉到指定樓層
樓主
ID:819146 發表于 2022-6-9 15:19 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#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

202.62 KB, 下載次數: 41, 下載積分: 黑幣 -5

手機APP接收.7z

3.15 MB, 下載次數: 28, 下載積分: 黑幣 -5

評分

參與人數 1黑幣 +40 收起 理由
admin + 40 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品久久二区 | 免费a级毛片在线播放 | 天堂av中文 | 国产日韩欧美在线播放 | 中文字幕在线观看视频网站 | 91伊人网| 91精品国产一区二区在线观看 | 久久久精品一区二区三区四季av | 欧美网站一区二区 | 亚洲精品丝袜日韩 | aaa在线观看 | 中国三级黄色录像 | 国产高清一区二区三区 | 日韩欧美视频 | 日本高清视频网站 | 欧美成视频 | 超碰在线播 | 欧美日韩在线精品 | 久久亚洲欧美日韩精品专区 | 国产成人精品a视频 | 国产成人免费 | 欧美一区二区视频 | 99re国产| 最新免费黄色网址 | av免费网站在线 | 色婷婷精品久久二区二区蜜臂av | 神马福利 | 国产在线不卡 | 亚洲一区视频在线 | 亚洲国产一区二区在线 | 中文字幕第一页在线 | 久久99国产精品 | 欧美精品日韩精品 | 日韩一二区在线观看 | 国产1区2区3区 | 精品1区2区 | 精品一区二区三区四区五区 | 中文字幕一区二区三区四区五区 | 欧美日韩一区二区在线 | 欧美日韩一区在线观看 | 欧美日韩中文字幕在线 |