冰楓論壇
標題:
STM8S105K4智能水族箱
[打印本頁]
作者:
洪嵐峰
時間:
2023-4-4 06:12
標題:
STM8S105K4智能水族箱
包括水循環、溫度控制、誤操作提示、遠程控制、數據記錄、人機交互等功能的實現。
零件清單:
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);
}
}
歡迎光臨 冰楓論壇 (https://bingfong.com/)
Powered by 冰楓