|
之前做的项目整理了一下,基于STM32(HAL库)简易光控温控系。相互学习,资料仅供参考 谢谢。
本设计系统虽然是一个简易桌面系统,而且其中硬件功能比较单一,但是其中开发流程还是比较齐全的,过程涉及到软件比较通用,对于想入门的stm32的初学者也是比较友好的。其中涉及,硬件电路设计,程序设计,HAL库使用,STM32CubeMX软件使用。
作品还有许多可以地方可以完善的,由于个人能力和经验的不足,作品还存在着或多或少的缺陷,比如可添加摄像头功能用于检测坐姿或者是家长监督等。若是与语音模块结合可起到监督小孩坐姿不端正等好处。还可以添加无线模块,能起到远程控制功能等。程序可以加入算法,能更好的达到自动控制效果,程序继续优化可以使作品更稳定些。
制作出来的实物图如下:
Altium Designer画的原理图和PCB图如下:(51hei附件中可下载工程文件)
主程序流程图
单片机源程序如下:
- #include "task_list/task_list.h"
- //创建一个任务结构类型的数组,用于存放不同的任务,方便时间片的计时处理
- //在这里添加你需要增加的任务
- TASK_StatusTypeDef TaskComps[TASK_NUM] =
- {
- {0,50,50,DS18B20_Update}, //更新DS18B20的数据
- {0,500,500,Brightness_Update}, //更新亮度的数据
-
- //{0,100,100,Temperature_Set}, //更新温度调节
- //{0,100,100,Brightness_Set}, //更新亮度调节
-
- {0,50,50,Dis_Mark}, //更新界面的数据
- // {0,200,200,Beep_Toggle}, //更新蜂鸣器翻转状态
- {0,500,500,LED1_Toggle} //翻转LED1,确认程序一直在工作
- // {0,500,500,LED2_Toggle}
- //在这里添加需要执行的任务,请根据任务的数量修改TASK_NUM的值
- };
- /*
- 函数名称:Init_Sys()
- 函数功能:将所有外设需要的初始化放到这个函数底下,方便统一管理
- 本函数在主函数中被调用
- 输入参数:无
- 输出参数:无
- 备 注 :
- */
- 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"
- /*
- 函数名称:Time_Slice()
- 函数功能:任务标志位的处理,也是时间片的计时,
- 本函数在计时器中断中被调用,实现
- 一个时间梯度进行一次递减
- 输入参数:无
- 输出参数:无
- 备 注 :
- */
- void Time_Slice(void)
- {
- uint8_t i; //定义一个变量用于循环计数来处理不同任务的时间记录
- for(i=0;i<TASK_NUM;i++) //逐个任务时间处理
- {
- if(TaskComps[i].Timer) //判断当前任务的时间片不为0
- {
- TaskComps[i].Timer--; //减去一个节拍
- if(TaskComps[i].Timer==0) //如果时间片减到0
- {
- TaskComps[i].Timer = TaskComps[i].ItvTime; //恢复时间片值,从新下一次计算
- TaskComps[i].Run = 1; //使能任务运行
- }
- }
- }
- }
- /*
- 函数名称:Task_Process()
- 函数功能:任务处理函数,在主函数中被调用,用于判断各个任务是否需要被运行
- 输入参数:无
- 输出参数:无
- 备 注 :
- */
- void Task_Process(void)
- {
- uint8_t i; //创建一个变量,用于循环任务的计数
- for(i=0;i<TASK_NUM;i++) //逐个任务处理
- {
- if(TaskComps[i].Run) //如果运行标志位不为0
- {
- TaskComps[i].TaskHook(); //运行任务
- TaskComps[i].Run = 0; //清除标志位
- }
- }
- }
- /*
- 函数名称:
- 函数功能:
- 输入参数:
- 输出参数:
- 备 注 :
- */
复制代码 51hei附件下载,仅供参考:
|
-
-
-
程序设计.7z
6.78 MB, 下载次数: 30, 下载积分: 黑币 -5
程序
-
-
硬件设计.rar
4.06 MB, 下载次数: 27, 下载积分: 黑币 -5
硬件
-
-
文档 仅供参靠.7z
7.1 MB, 下载次数: 21, 下载积分: 黑币 -5
文件
评分
-
查看全部评分
|