冰楓論壇

 找回密碼
 立即註冊
搜索
查看: 515|回覆: 0
打印 上一主題 下一主題

[討論] STM8S105K4智能水族箱

[複製鏈接]

2609

主題

0

好友

987

積分

高級會員

Rank: 4

UID
373967
帖子
8535
主題
2609
精華
0
積分
987
楓幣
44
威望
965
存款
32735
贊助金額
0
推廣
0
GP
1205
閱讀權限
50
在線時間
443 小時
註冊時間
2023-1-12
最後登入
2024-9-28

2023端午節紀念勳章 2023中秋節紀念勳章 2023聖誕節紀念勳章

跳轉到指定樓層
1
發表於 2023-4-4 06:12:43 |只看該作者 |倒序瀏覽
包括水循環、溫度控制、誤操作提示、遠程控制、數據記錄、人機交互等功能的實現。

零件清單:

STM8S105K4微控制器
16x2字符LCD顯示器
溫度傳感器
水泵
水位傳感器
水箱加熱器
時鐘芯片
遙控器
蜂鳴器
按鈕開關
LED燈
程序代碼:
#include <iOStm8s105k4.h>

#define PUMP_PIN            PA1   //水泵引腳
#define HEATER_PIN          PA2   //水箱加熱器引腳
#define TEMP_SENSOR_PIN     PC3   //溫度傳感器引腳
#define WATER_SENSOR_PIN    PC4   //水位傳感器引腳
#define LCD_RS_PIN          PC5   //LCD顯示器RS引腳
#define LCD_RW_PIN          PD2   //LCD顯示器RW引腳
#define LCD_EN_PIN          PD3   //LCD顯示器EN引腳
#define LCD_DATA_PORT       PD    //LCD顯示器數據口引腳
#define REMOTE_PIN          PD4   //遙控器接收器引腳
#define BUZZER_PIN          PD5   //蜂鳴器引腳
#define BUTTON_PIN          PD6   //按鈕開關引腳
#define LED_PIN             PD7   //LED燈引腳

#define TEMP_HIGH           28    //溫度上限(攝氏度)
#define TEMP_LOW            26    //溫度下限(攝氏度)
#define WATER_LOW           10    //水位下限(毫米)
#define BUZZER_FREQ         1000  //蜂鳴器頻率(赫茲)

#define PUMP_ON             GPIOA->ODR |= (1 << PUMP_PIN)          //打開水泵
#define PUMP_OFF            GPIOA->ODR &= ~(1 << PUMP_PIN)        //關閉水泵
#define HEATER_ON           GPIOA->ODR |= (1 << HEATER_PIN)        //打開水箱加熱器
#define HEATER_OFF          GPIOA->ODR &= ~(1 << HEATER_PIN)      //關閉水箱加熱器
#define BUZZER_ON           GPIOB->ODR |= (1 << BUZZER_PIN)        //打開蜂鳴器
#define BUZZER_OFF          GPIOB->ODR &= ~(1 << BUZZER_PIN)      //關閉蜂鳴器
#define LED_ON              GPIOB->ODR |= (1 << LED_PIN)           //打開LED燈
#define LED_OFF             GPIOB->ODR &= ~(1 << LED_PIN)         //關閉LED燈

unsigned int water_level = 0;     //水位
unsigned int temperature = 0;     //溫度

void delay_ms(unsigned int ms)    //延時函數
{
    unsigned int i, j;
    for(i = 0; i < ms; i++)
        for(j = 0; j < 1000; j++);
}

void LCD_init()                   //初始化LCD顯示器
{
    GPIOC->DDR |= (1 << LCD_RS_PIN) | (1 << LCD_RW_PIN) | (1 << LCD_EN_PIN);
    LCD_DATA_PORT->DDR |= 0xFF;
    delay_ms(15);
    LCD_RS_PIN = 0;
    LCD_RW_PIN = 0;
    LCD_EN_PIN = 0;
    LCD_DATA_PORT->ODR = 0x30;
    LCD_EN_PIN = 1;
    delay_ms(5);
    LCD_EN_PIN = 0;
    delay_ms(1);
    LCD_DATA_PORT->ODR = 0x30

//主函數
int main(void)
{
    //初始化
    init();

    //循環執行
    while(1)
    {
        //獲取傳感器數據
        get_sensor_data();

        //檢測水位
        check_water_level();

        //檢測溫度
        check_temperature();

        //檢測遙控器
        check_remote();

        //檢測按鈕
        check_button();

        //更新LCD顯示
        update_lcd();

        //延時1秒
        delay_ms(1000);
    }
}
收藏收藏0 推0 噓0


把本文推薦給朋友或其他網站上,每次被點擊增加您在本站積分: 1彩票
複製連結並發給好友,以賺取推廣點數
簡單兩步驟,註冊、分享網址,即可獲得獎勵! 一起推廣文章換商品、賺$$
高級模式
B Color Image Link Quote Code Smilies |上傳

廣告刊登意見回饋關於我們管群招募本站規範DMCA隱私權政策

Copyright © 2011-2024 冰楓論壇, All rights reserved

免責聲明:本網站是以即時上載留言的方式運作,本站對所有留言的真實性、完整性及立場等,不負任何法律責任。

而一切留言之言論只代表留言者個人意見,並非本網站之立場,用戶不應信賴內容,並應自行判斷內容之真實性。

小黑屋|手機版|冰楓論壇

GMT+8, 2024-9-28 06:15

回頂部