|
之前做的項目整理了一下,基于STM32(HAL庫)簡易光控溫控系。相互學習,資料僅供參考 謝謝。
本設計系統(tǒng)雖然是一個簡易桌面系統(tǒng),而且其中硬件功能比較單一,但是其中開發(fā)流程還是比較齊全的,過程涉及到軟件比較通用,對于想入門的stm32的初學者也是比較友好的。其中涉及,硬件電路設計,程序設計,HAL庫使用,STM32CubeMX軟件使用。
作品還有許多可以地方可以完善的,由于個人能力和經(jīng)驗的不足,作品還存在著或多或少的缺陷,比如可添加攝像頭功能用于檢測坐姿或者是家長監(jiān)督等。若是與語音模塊結合可起到監(jiān)督小孩坐姿不端正等好處。還可以添加無線模塊,能起到遠程控制功能等。程序可以加入算法,能更好的達到自動控制效果,程序繼續(xù)優(yōu)化可以使作品更穩(wěn)定些。
制作出來的實物圖如下:
Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件)
主程序流程圖
單片機源程序如下:
- #include "task_list/task_list.h"
- //創(chuàng)建一個任務結構類型的數(shù)組,用于存放不同的任務,方便時間片的計時處理
- //在這里添加你需要增加的任務
- TASK_StatusTypeDef TaskComps[TASK_NUM] =
- {
- {0,50,50,DS18B20_Update}, //更新DS18B20的數(shù)據(jù)
- {0,500,500,Brightness_Update}, //更新亮度的數(shù)據(jù)
-
- //{0,100,100,Temperature_Set}, //更新溫度調節(jié)
- //{0,100,100,Brightness_Set}, //更新亮度調節(jié)
-
- {0,50,50,Dis_Mark}, //更新界面的數(shù)據(jù)
- // {0,200,200,Beep_Toggle}, //更新蜂鳴器翻轉狀態(tài)
- {0,500,500,LED1_Toggle} //翻轉LED1,確認程序一直在工作
- // {0,500,500,LED2_Toggle}
- //在這里添加需要執(zhí)行的任務,請根據(jù)任務的數(shù)量修改TASK_NUM的值
- };
- /*
- 函數(shù)名稱:Init_Sys()
- 函數(shù)功能:將所有外設需要的初始化放到這個函數(shù)底下,方便統(tǒng)一管理
- 本函數(shù)在主函數(shù)中被調用
- 輸入?yún)?shù):無
- 輸出參數(shù):無
- 備 注 :
- */
- void Init_Sys(void)
- {
-
- delay_init(84); //初始化滴答時鐘,使用內部時鐘這里設置成84,如果使用外部時鐘,這里可設置成12
-
- OLED_Init(); //初始化OLED,先初始化OLED用于顯示初始化的進度
- Flip_Screnn(1);
-
- LED_Init(); //LED端口初始化
- LED_PWM_Init();
-
- DS18B20_Init();
- Moto_Init(); //電機初始化
- Beep_GPIO_Init();
-
- Beep_Pwm_Init(); //初始化蜂鳴器PWM控制
- // Regulation_Init(); //調控值初始化
-
- Mark_Sign.Interface_Mark = Main_Interface;
- }
復制代碼
- #include "architecture/architecture.h"
- /*
- 函數(shù)名稱:Time_Slice()
- 函數(shù)功能:任務標志位的處理,也是時間片的計時,
- 本函數(shù)在計時器中斷中被調用,實現(xiàn)
- 一個時間梯度進行一次遞減
- 輸入?yún)?shù):無
- 輸出參數(shù):無
- 備 注 :
- */
- void Time_Slice(void)
- {
- uint8_t i; //定義一個變量用于循環(huán)計數(shù)來處理不同任務的時間記錄
- for(i=0;i<TASK_NUM;i++) //逐個任務時間處理
- {
- if(TaskComps[i].Timer) //判斷當前任務的時間片不為0
- {
- TaskComps[i].Timer--; //減去一個節(jié)拍
- if(TaskComps[i].Timer==0) //如果時間片減到0
- {
- TaskComps[i].Timer = TaskComps[i].ItvTime; //恢復時間片值,從新下一次計算
- TaskComps[i].Run = 1; //使能任務運行
- }
- }
- }
- }
- /*
- 函數(shù)名稱:Task_Process()
- 函數(shù)功能:任務處理函數(shù),在主函數(shù)中被調用,用于判斷各個任務是否需要被運行
- 輸入?yún)?shù):無
- 輸出參數(shù):無
- 備 注 :
- */
- void Task_Process(void)
- {
- uint8_t i; //創(chuàng)建一個變量,用于循環(huán)任務的計數(shù)
- for(i=0;i<TASK_NUM;i++) //逐個任務處理
- {
- if(TaskComps[i].Run) //如果運行標志位不為0
- {
- TaskComps[i].TaskHook(); //運行任務
- TaskComps[i].Run = 0; //清除標志位
- }
- }
- }
- /*
- 函數(shù)名稱:
- 函數(shù)功能:
- 輸入?yún)?shù):
- 輸出參數(shù):
- 備 注 :
- */
復制代碼 51hei附件下載,僅供參考:
|
-
-
-
程序設計.7z
2022-5-3 03:14 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
6.78 MB, 下載次數(shù): 30, 下載積分: 黑幣 -5
程序
-
-
硬件設計.rar
2022-5-2 21:14 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
4.06 MB, 下載次數(shù): 27, 下載積分: 黑幣 -5
硬件
-
-
文檔 僅供參靠.7z
2022-5-3 03:14 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
7.1 MB, 下載次數(shù): 21, 下載積分: 黑幣 -5
文件
評分
-
查看全部評分
|