文章目录

  • 1 简介
  • 2 绪论
    • 2.1 课题背景
  • 3 系统设计
    • 3.1 系统架构
    • 3.2 主程序设计
    • 3.3 语音模块程序设计
    • 3.4 显示模块程序设计
    • 3.5 键盘模块程序设计
    • 3.6 无线传输模块程序设计
    • 3.7 部分实现代码

1 简介

Hi,大家好,今天向大家介绍一个学长做的单片机项目

基于 stm32 的病房呼叫系统

大家可用于 课程设计 或 毕业设计

选题指导,项目分享:

https://gitee.com/yaa-dc/warehouse-1/blob/master/iot/README.md

2 绪论

2.1 课题背景

随着全球老龄化进程的加快,全球生存环境的恶化,以及人类对健康关注的增加,医疗行业正快速膨胀。人们对医疗水平的要求不断提高,特别是突发情况下病人请求值班医生或护士进行及时诊断或护理这一环节,对提高医院的管理服务质量显得尤其重要。因此通过病房呼叫系统完成向医生的求助是一种极为方便有效的手段,相关的应用设计正逐步推出。目前病房呼叫系统主要有两种,一种是有线式,一种是无线式。而在我国,大多数医院都是采用的传统的有线式病房呼叫系统。这种设计很难做到隐蔽和美观,而且安装与维护都不方便,抗电气干扰能力也不强。因此学长采用无线wifi来设计病房呼叫系统。

病房呼叫系统是为了提高医院的服务质量而提出的, 它能使病人及时快捷的进行呼叫, 以方便医院能快速准确的了解病人情况, 并能及时施以救助。 系统是基于无线网络开发的、 以单片机stm32为核心的医院无线病房呼叫系统, 利用无线网传输信号和语音信息, 远程控制部分接收无线网发送来的信号, 由stm32对其进行解码, 解码后由数码管和灯屏显示, 语音信息由话筒传出。

3 系统设计

3.1 系统架构

病房呼叫系统的开发方案是参照国内外相关技术的发展状况,在前人的基础上稍加修改,并借鉴现在一些科研机构的最新研究成果,同时根据我国医院病房监护建设的实际情况,为满足患者的要求,并充分考虑其经济性和可靠性,能真正实现智能化呼叫的要求来确定的。根据系统拟达到的总体功能,将其划分为以下功能模块:显示电路(LED灯屏、数码管)、语音录放电路(手柄)、键盘电路、报警电路、呼叫分机、无线网卡等。系统组成框图如图2-1所示。本设计采用主机和从机相分离的模式。从机安装于各个病房,主机安装于护士站,多个从机处于等待外部呼叫信号的状态,主机则时刻处于等待接受从机呼叫信号的状态,并且从机和主机之间采用无线数据传输通信。

3.2 主程序设计

病房呼叫系统程序设计使用的是 STM32 本身的固件库。 系统开始运行后, 首先检测电源状态, 对 STM32、 数码管和 LED 灯屏等进行初始化, 一切正常后等待中断的发生, 主控制器开始检测是否有呼叫传入, 当呼叫出传入后, 运行子程序。

3.3 语音模块程序设计

语音模块采用的VS1053b,它是通过一个串行输入总线来接收它的输入比特流,数据流被解码后会通过数字音量控制器送到一个高精度DAC,其中的解码器是通过一个串行控制总线来控制的。它控制整个系统完成语音录入,存储,发送,接受,播放等功能。

开机的时候先检测字库,然后初始化VS1053,进行RAM测试和正弦测试,之后,检测SD卡根目录是否存在RECORDER文件夹,如果不存在则创建,如果创建失败,则报错。在找到SD卡的RECORDER文件夹后,即设置VS1053进入录音模式,开始录音,如果有TPAD按下,则开始播放录音。

3.4 显示模块程序设计

数码管动态显示程序包括数字的显示、 小数点的显示、 数码管的闪烁和数码管的消隐等。 显示的字符跟数据对应关系如下表所示: 根据人的视觉暂留现象,一个数码管每秒必须点亮 50 次以上, 才能达到稳定显示数据的目的。

3.5 键盘模块程序设计

键盘模块的程序首先需要进行初始化, 初始化延时函数, 初始化 LED 端口,初始化与按键连接的硬件接口。 然后软件对按键去抖, 写明每个按键的功能。

3.6 无线传输模块程序设计

当数据从 CPU 经过串行端口发送出去时, 字节数据转换为串行的位, 在接收数据时, 串行的位被转换为字节数据。 无线网卡与 stm32 直接就是使用的串口通信。

3.7 部分实现代码

#include "led. h"
#include "delay. h"
#include "key. h"
#include "tpad. h"
#include "sys. h"
#include "lcd. h"
#include "usart. h"
#include "flash. h"
#include "sram. h"
#include "malloc. h"
#include "string. h"
#include "mmc_sd. h"
#include "ff. h"
#include "exfuns. h"
#include "fontupd. h"
#include "text. h"
#include "piclib. h"
#include "string. h"
#include "usmart. h"
#include "fattester. h"
#include "piclib. h"
#include "vs10xx. h"
#include "mp3player. h"
#include "audiosel. h"
#include "recorder. h"
int main(void)
{delay_init() ; //延时函数初始化
NVIC_Configuration() ; //设置NVIC中断分组2: 2位抢占优先级, 2位响应优先级
uart_init(9600) ; //串口初始化为9600
LED_Init() ; //LED端口初始化
TPAD_Init() ; //初始化触摸按键
LCD_Init() ; //LCD初始化
KEY_Init() ; //按键初始化
Audiosel_Init() ; //初始化音源选择
usmart_dev. init(72) ; //usmart初始化
mem_init(SRAMIN) ; //初始化内部内存池
VS_Init() ;
录音程序
#include "recorder. h"
#include "delay. h"
#include "usart. h"
#include "key. h"
#include "led. h"
#include "lcd. h"
#include "vs10xx. h"
#include "malloc. h"
#include "ff. h"
#include "exfuns. h"
#include "text. h"
#include "tpad. h"
//VS1053的WAV录音有bug, 这个plugin可以修正这个问题
const u16 wav_plugin[40] =/* Compressed plugin */
{0x0007, 0x0001, 0x8010, 0x0006, 0x001c, 0x3e12, 0xb817, 0x3e14, /* 0 */
0xf812, 0x3e01, 0xb811, 0x0007, 0x9717, 0x0020, 0xffd2, 0x0030, /* 8 */
0x11d1, 0x3111, 0x8024, 0x3704, 0xc024, 0x3b81, 0x8024, 0x3101, /* 10 */
0x8024, 0x3b81, 0x8024, 0x3f04, 0xc024, 0x2808, 0x4800, 0x36f1, /* 18 */
0x9811, 0x0007, 0x0001, 0x8028, 0x0006, 0x0002, 0x2a00, 0x040e,
} ;
//激活PCM 录音模式
//agc:0, 自动增益. 1024相当于1倍, 512相当于0. 5倍, 最大值65535=64倍
void recoder_enter_rec_mode(u16 agc)
{//如果是IMA ADPCM, 采样率计算公式如下:
//采样率=CLKI/256*d;
//假设d=0, 并2倍频, 外部晶振为12. 288M. 那么Fc=(2*12288000) /256*6=16Khz
//如果是线性PCM, 采样率直接就写采样值
VS_WR_Cmd(SPI_BASS, 0x0000) ;
VS_WR_Cmd(SPI_AICTRL0, 8000) ; //设置采样率, 设置为8Khz
VS_WR_Cmd(SPI_AICTRL1, agc) ; //设置增益, 0, 自动增益. 1024相当于1倍, 512相当于
0. 5倍, 最大值65535=64倍
VS_WR_Cmd(SPI_AICTRL2, 0) ; //设置增益最大值, 0, 代表最大值65536=64X
VS_WR_Cmd(SPI_AICTRL3, 6) ; //左通道(MIC单声道输入)
VS_WR_Cmd(SPI_CLOCKF, 0X2000) ; //设置VS10XX的时钟, MULT:2倍频; ADD: 不允
许; CLK: 12. 288MhzVS_WR_Cmd(SPI_MODE, 0x1804) ; //MIC, 录音激活
delay_ms(5) ; //等待至少1. 35ms
VS_Load_Patch((u16*) wav_plugin, 40) ;//VS1053的WAV录音需要patch
}
//初始化WAV头.
void recoder_wav_init(__WaveHeader* wavhead) //初始化WAV头
{wavhead->riff. ChunkID=0X46464952; //"RIFF"
wavhead->riff. ChunkSize=0; //还未确定, 最后需要计算
wavhead->riff. Format=0X45564157; //"WAVE"
wavhead->fmt. ChunkID=0X20746D66; //"fmt"
wavhead->fmt. ChunkSize=16; //大小为16个字节
wavhead->fmt. AudioFormat=0X01; //0X01, 表示PCM; 0X01, 表示IMA ADPCM
wavhead->fmt. NumOfChannels=1; //单声道
wavhead->fmt. SampleRate=8000; //8Khz采样率 采样速率
wavhead->fmt. ByteRate=wavhead->fmt. SampleRate*2; //16位, 即2个字节
wavhead->fmt. BlockAlign=2; //块大小, 2个字节为一个块
wavhead->fmt. BitsPerSample=16; //16位PCM
wavhead->data. ChunkID=0X61746164; //"data"
wavhead->data. ChunkSize=0; //数据大小, 还需要计算
}

作品展示,实现效果:

选题指导,项目分享:

https://gitee.com/yaa-dc/warehouse-1/blob/master/iot/README.md

物联网毕业设计 STM32智能病房呼叫系统 - 嵌入式相关推荐

  1. 毕业设计 STM32智能路灯系统 - 物联网 嵌入式 单片机

    文章目录 1 简介 2 绪论 2.1 项目背景 2.2 需求分析 3 系统设计 3.1 功能设计 3.1.1 系统角色分析 3.1.2 开发环境 3.2 总体设计 3.3 硬件部分 3.3.1 整体架 ...

  2. 毕业设计 单片机智能鱼缸系统 - 嵌入式 物联网

    文章目录 1 简介 1 课题背景意义 2 课题研究方法 3 智能鱼缸系统功能要求 4 系统结构 5 硬件模块 5.1 单片机最小系统 5.2 温度检测模块 5.3 继电器模块 5.4 显示模块 6 实 ...

  3. 毕业设计 Arduino智能灌溉系统 - 嵌入式 单片机 物联网

    文章目录 1 简介 1 硬件要求 2 项目背景 3 实现功能 4 OLDE显示屏 5 IO扩展器 6 系统构建 7 完整代码 8 最后 1 简介 Hi,大家好,学长今天向大家介绍一个 单片机项目,大家 ...

  4. 物联网毕业设计 单片机智能路灯系统

    文章目录 1 简介 2 绪论 2.1 项目背景 2.2 需求分析 3 系统设计 3.1 功能设计 3.1.1 系统角色分析 3.1.2 开发环境 3.2 总体设计 3.3 硬件部分 3.3.1 整体架 ...

  5. 单片机毕业设计 stm32智能婴儿床系统

    文章目录 1 简介 2 项目背景 3 设计概要 4 设计方案 5 硬件清单 5.1 stm32主控 5.2 OLED显示屏 5.3 继电器模块 5.4 L298N电机驱动板模块 5.5 MAX声音传感 ...

  6. 毕业设计 stm32智能电子秤系统 - 物联网 嵌入式 单片机

    文章目录 0 前言 1 简介 2 主要器件 3 实现效果 4 设计原理 4.1 STM32F103C8T6 4.2 HX711压力传感器 5 部分核心代码 6 最后 0 前言

  7. 物联网毕业设计 stm32自动泊车系统

    文章目录 1 简介 1 背景 2 设计概要 3 硬件选型 3.1 主控 - STM32 3.2 电机驱动 3.3 红外遥控设计 3.4 传感器部分 3.4.1 循迹模块 3.4.2 红外避障模块 3. ...

  8. 毕业设计 stm32智能语音垃圾分类系统(项目开源)

    文章目录 1 简介 2 绪论 2.1 课题背景与目的 3 系统设计 3.1 系统架构 3.2 硬件部分 3.2.1 传感器模块 3.2.2 语音模块 3.2.3 电机及其驱动模块 3.2.4 稳压模块 ...

  9. 【毕业设计】66-基于物联网技术的智能家居系统的研究(仿真工程+原理图+源代码+答辩论文+答辩PPT)

    [毕业设计]66-基于物联网技术的智能家居系统的研究(仿真工程+原理图+源代码+答辩论文+答辩PPT) 文章目录 [毕业设计]66-基于物联网技术的智能家居系统的研究(仿真工程+原理图+源代码+答辩论 ...

最新文章

  1. 崛起于Springboot2.X之Mybatis-全注解方式操作Mysql(4)
  2. p8大佬告诉你JSR - 133 都解决了哪些问题?
  3. Mysql之count(*),count(1),count(field)区别、性能差异
  4. python笔记:断言assert
  5. 委托学习总结(一)浅谈对C#委托理解
  6. Lucene学习总结之七:Lucene搜索过程解析
  7. java中重载 参数顺序_Java方法中的参数太多,第4部分:重载
  8. 自动化测试--实现一套完全解耦的简单测试框架(二)
  9. golang导入包的理解
  10. Springboot使用Filter以及踩过的坑
  11. 超简单直观理解懒加载(Lazyload)
  12. 《如何阅读一本书》读后
  13. 你肯定用过手机护眼模式, 但你知道怎么将电脑Win10窗口背景色修改为护眼的淡绿色吗?(附带如何备份注册表)
  14. InnoDB 数据页结构
  15. python 加载DLL动态链接库
  16. 【华为机试真题 JAVA】分班问题-100
  17. 小程序 【头像昵称填写能力】使用
  18. 如何区分嵌入式系统和嵌入式操作系统
  19. cocos creator (四)构建android项目
  20. 浏览器插件沙拉查词无法正常翻译,配置词典

热门文章

  1. 用户认知的苏醒,极客先行
  2. 软件工程基础-个人项目-数独
  3. FreeRTOS信号量详解第二讲(全网最全)——二值信号量
  4. 航空发动机适航考题梳理(仅供参考)
  5. C#上位机与PLC通讯源码 C#与三菱PLC通讯MC协议
  6. 手把手教python project_《手把手教你》系列练习篇之9-python+ selenium自动化测试 -番外篇 - 最后一波啊!!!(详细教程)...
  7. rar压缩包解密wps,rar压缩包复制打印限制怎么解除?
  8. 如何做一名合格的甲方项目经理
  9. 击剑,格斗中的“古典芭蕾”
  10. 计算机毕业设计Javavue学习视频课程网站(源码+系统+mysql数据库+lw文档)