基于STM32单片机的智能药盒带语音播报原理图程序
功能:
0.本项目采用STM32F103C8T6作为单片机系统的控制MCU
1.该设计具备四个功能按键可设置时钟和用药时间
2.系统具备三组用药时间,可通过按键设置某时间对应多少药片
3.一旦时间达到,系统会驱动继电器打开药盒,本设计采用的是5V的电磁铁来模拟演示药盒打开的过程
4.采用DC002作为电源接口可直接输入5V给整个系统供电
5.本系统同时具备了WiFi模块,可通过手机端监测该系统的运行情况
原理图:
PCB :
主程序:
#define __MIAN_C
#include "main.h"// 局部变量,用于保存转换计算后的电压值
CreatByte Flag;
enum _MODE_DF_ dispMode;char dis[16];
volatile u8 setIndex = 0;
volatile u8 dosage[3][3] = {{1,1,1},{2,2,2},{3,3,3}}; //用药量
volatile u8 timeLimit[3][2] = {{9,0},{12,0},{18,0}};
volatile u8 medicineFlag = 0;int main(void)
{relayFlag1 = 0; //开锁标志1relayFlag2 = 0; //开锁标志2// 使用HSI,SYSCLK = 4M * RCC_PLLMul_x, x:[2,3,...16],最高是64MHHSI_SetSysClock(RCC_PLLMul_2); //使用内部8MHz晶振,并设置PLL输出为8MHz// 端口初始化GPIO_Config();GENERAL_TIM_Init();USART1_Config();USART3_Config();DelayMs(1000);Usart_SendString(DEBUG_USART3, "AT+CIPMUX=1\r\n");//打开多连接DelayMs(1000);Usart_SendString(DEBUG_USART3, "AT+CIPSERVER=1,8080\r\n");//建立服务 端口号为8080DelayMs(1000);Key_GPIO_Config();DelayMs(200);DS1302_Init();DelayMs(200);LCD_GPIO_Init();LCD12864_Init();LCD12864_Clear();DelayMs(200);while (1){if (refreshFlag == 1){refreshFlag = 0;if (dispMode == NORMAL){DS1302_ReadTime();RelayCtrl();DispNormal(medicineFlag);}}KeyProcess();}
}void RelayCtrl(void)
{if ((timeBufDec[4] == timeLimit[0][0]) && (timeBufDec[5] == timeLimit[0][1]) && timeBufDec[6] == 0) //用药时间0到{relayFlag1 = 1;medicineFlag = 1;}else if ((timeBufDec[4] == timeLimit[1][0]) && (timeBufDec[5] == timeLimit[1][1]) && timeBufDec[6] == 0) //用药时间1到{relayFlag1 = 1;medicineFlag = 2;}else if ((timeBufDec[4] == timeLimit[2][0]) && (timeBufDec[5] == timeLimit[2][1]) && timeBufDec[6] == 0) //用药时间2到{relayFlag1 = 1;medicineFlag = 3;}// else// {// // relayFlag1 = 0;// medicineFlag = 0;// }if (relayFlag1 == 1 || relayFlag2 == 1) // relay打开{RELAY_ON;relayFlag1 = 0;relayFlag2 = 0;}else{RELAY_OFF;}
}void DispNormal(u8 i)
{static unsigned int cnt = 0;if (i != 0) //吃药时间到{LCD12864_DrawHz(0, 0, "该吃药了! ");LCD12864_DrawHz(0, 1, "药物一: ");sprintf(dis, "%2d", dosage[i-1][0]);LCD12864_DrawNum(4, 1, dis);LCD12864_DrawHz(5, 1, "片 ");LCD12864_DrawHz(0, 2, "药物二: ");sprintf(dis, "%2d", dosage[i-1][1]);LCD12864_DrawNum(4, 2, dis);LCD12864_DrawHz(5, 2, "片 ");LCD12864_DrawHz(0, 3, "药物三: ");sprintf(dis, "%2d", dosage[i-1][2]);LCD12864_DrawNum(4, 3, dis);LCD12864_DrawHz(5, 3, "片 ");cnt++;if (cnt > 60){medicineFlag = 0;cnt = 0;}else if (cnt == 1 || cnt == 20 || cnt == 40){printf("该吃药了 药物一 %d 片 药物二 %d 片 药物三 %d 片", dosage[i-1][0], dosage[i-1][1], dosage[i-1][2]); //语言播报}}else{LCD12864_DrawHz(0, 0, " 当前时间 ");sprintf(dis, " 20%02d/ %02d/ %02d ", timeBufDec[1], timeBufDec[2], timeBufDec[3]);LCD12864_DrawNum(0, 1, dis);sprintf(dis, " %02d: %02d: %02d ", timeBufDec[4], timeBufDec[5], timeBufDec[6]);LCD12864_DrawNum(0, 2, dis);LCD12864_DrawHz(0, 3, " ");}
}void DispSetRealTime(u8 setIndex)
{LCD12864_DrawHz(0, 0, " 更改时间 ");sprintf(dis, " 20%02d/ %02d/ %02d ", timeBufDec[1], timeBufDec[2], timeBufDec[3]);LCD12864_DrawNum(0, 1, dis);sprintf(dis, " %02d: %02d: %02d ", timeBufDec[4], timeBufDec[5], timeBufDec[6]);LCD12864_DrawNum(0, 2, dis);LCD12864_DrawHz(0, 3, " ");if (setIndex == 0){LCD12864_Cursor(0);}else{LCD12864_Cursor(1);}switch (setIndex){case 1: LCD12864_SetXY(2, 1); break;case 2: LCD12864_SetXY(4, 1); break;case 3: LCD12864_SetXY(6, 1); break;case 4: LCD12864_SetXY(2, 2); break;case 5: LCD12864_SetXY(4, 2); break;case 6: LCD12864_SetXY(6, 2); break;default: ;}
}void DispSetMedicationTime(u8 i, u8 setIndex)
{LCD12864_DrawHz(0, 0, "用药时间:");sprintf(dis, "%02d: %02d", timeLimit[i-1][0], timeLimit[i-1][1]);LCD12864_DrawNum(5, 0, dis);LCD12864_DrawHz(0, 1, "药物一: ");sprintf(dis, "%2d", dosage[i-1][0]);LCD12864_DrawNum(4, 1, dis);LCD12864_DrawHz(5, 1, "片");LCD12864_DrawHz(0, 2, "药物二: ");sprintf(dis, "%2d", dosage[i-1][1]);LCD12864_DrawNum(4, 2, dis);LCD12864_DrawHz(5, 2, "片");LCD12864_DrawHz(0, 3, "药物三: ");sprintf(dis, "%2d", dosage[i-1][2]);LCD12864_DrawNum(4, 3, dis);LCD12864_DrawHz(5, 3, "片");if (setIndex == 0){LCD12864_Cursor(0);}else{LCD12864_Cursor(1);}switch (setIndex){case 1: LCD12864_SetXY(5 , 0); break;case 2: LCD12864_SetXY(7 , 0); break;case 3: LCD12864_SetXY(4 , 1); break;case 4: LCD12864_SetXY(4, 2); break;case 5: LCD12864_SetXY(4 , 3); break;default: ;}
}/*********************************************END OF FILE**********************/
实物演示视频:
https://www.bilibili.com/video/BV1kT4y1z7S6/
基于STM32单片机的智能药盒带语音播报原理图程序相关推荐
- 基于stm32单片机的智能鱼缸设计(实物+原理图+源码)
资料编号:059 功能如下: 1.采用stm32单片机作为控制CPU,OLED显示万年历和温度 2.智能加热.加氧.加二氧化碳 3.采用智能自动开灯 具体功能请看下方演示视频 59-基于stm ...
- 基于STM32单片机水质PH值电导率TDS检测原理图程序
功能: 0.本项目采用STM32F103C8T6作为单片机系统的控制MCU 1.本系统具备PH值测量.TDS电导率测量,两部分的测量模块均是我们自己设计的,测量精度经实际测试反馈不错. 2.系统采用的 ...
- 基于STM32单片机的智能停车场车位管理系统设计
摘 要 通过调查发现,现有的许多公共场所的停车位管理落后,智能化程度不高.为顺应现代自动化狂潮的发展趋势,本项目以STM32单片机为主控芯片,基于RFID智能识别技术,设计了一个具有IC识别的智能停 ...
- 基于STM32单片机的智能家居测量系统设计
当今的家庭生活面临着各种环境和健康问题,周围的生活参数存在潜在的隐患,包括室温.气体中有害物质的浓度等.在新时代,人们越来越关注健康及其相关因素.随着微电子技术的应用,电器的普及,以及单片机和传感器性 ...
- 基于STM32单片机的智能手环设计(OLED显示)(Proteus仿真+程序+报告)
编号8 基于STM32单片机的智能手环设计(OLED显示) 功能描述: 由 STM32单片机+按键模拟计步+RTC时钟模块+DS18B20温度传感器模块+心率采集模块+串口模块+OLED显示模块+键盘 ...
- 基于STM32单片机的智能加湿器(Proteus仿真+程序)
标号:11 基于STM32单片机的智能加湿器 功能描述: 11.基于STM32单片机的智能加湿器 本设计由STM32F103单片机最小系统+DHT11温湿度传感器+1602液晶显示模块+声光报警模块+ ...
- 基于单片机串口远程多路温湿度采集仿真-基于单片机ADC0809八路电压采集系统设计-基于单片机16x32点阵多模式显示仿真设计-基于单片机餐厅呼叫控制系统仿真设计-基于STM32单片机的智能水杯设计
1220基于单片机ADC0809八路电压采集系统设计-毕设课设资料 数码管显示,测量八路电压表. #define addo (5.0/255.0) #define zero 0.005 //用于校准A ...
- 基于STM32单片机的智能家居烟雾温度火灾防盗报警的设计与实现
功能介绍 以STM32单片机作为主控系统: LCD1602液晶显示屏来显示显示测得的值: SR501人体红外感应是否有人进行防盗: 通过烟雾传感器MQ-2获取前的烟雾值: 通过DHT11温湿度传感器来 ...
- 基于STM32物联网WiFi智能家居控制系统设计(原理图+源代码+系统资料)
基于STM32物联网WiFi智能家居控制系统设计(原理图+源代码+系统资料) 原理图:Altium Designer 程序编译器:keil 5 编程语言:C语言 设计编号:C0053 主要功能: 1. ...
- 基于51单片机的智能鱼缸设计。 有原理图,程序,原文,可代做实物。 才用STC12C5A60S2,最新款国产51单片机
基于51单片机的智能鱼缸设计. 有原理图,程序,原文,可代做实物. 才用STC12C5A60S2,最新款国产51单片机. 本系统设计的主要是基于单片机为核心,设计一款集温度检测.恒温控制.步进电机控制 ...
最新文章
- mysql+dump+选项_详解MySQL数据备份之mysqldump使用方法
- MySQL 优化实战记录
- 美团点评数据产品专家冷戈:如何利用数据提高用户体验
- python 九宫重排_[蓝桥杯][历届试题]九宫重排 (Python代码)(bfs+集合)
- hello-world
- python代码加密cython_python通过cython实现加密
- access做mysql前端,ASP+ACCESS留言板制作详细教程
- 矩阵分析及应用(1-2章)
- IEEE 1588-PTP简介
- java基本数据类型存放在哪?
- android apk参数错误,Android adb安装apk时出现报错Invalid APK file如何解决
- 火狐浏览器找不到书签了
- 笔耕不辍 elementUI el-tree实现懒加载和直接查询实现
- SuperMap webgl 中使用的gltf模型制作方法
- 仿京东图片放大镜动效
- [XCTF-Reverse] 入门1-6
- 阿里云ECS服务器+WordPress快速搭建个人博客
- [Error] iostream.h: No such file or directory解决办法
- 蜜罐诱捕——KFSensor
- WebSocket和socket介绍