【毕业设计】基于 stm32 的病房呼叫系统 - 物联网 嵌入式 单片机

article/2025/4/8 7:55:08

文章目录

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


1 简介

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

基于 stm32 的病房呼叫系统

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


单片机-嵌入式毕设选题大全及项目分享:

https://blog.csdn.net/m0_71572576/article/details/125409052


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=64VS_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://blog.csdn.net/m0_71572576/article/details/125409052


4 最后


http://chatgpt.dhexx.cn/article/4312eS2F.shtml

相关文章

嵌入式物联网软件开发实战系列(STM32+FreeRTOS)

一、使用STM32CubeMx 创建物联网项目软件工程 二、STM32CubeMx 配置时钟 三、STM32CubeMx 配置GPIO 及 GPIO 相关接口在软件工程中的形式及使用 四、STM32CubeMx 配置USART 串口 五、USART 串口在物联网项目中的使用之不定长数据接收(DMA空闲中断方式&#xff0…

【毕业设计】基于单片机的智能饮水控制系统 - 物联网 嵌入式 stm32 c51

文章目录 1 简介2 功能要求3 相关器件4 实现效果5 部分实现代码6 最后 1 简介 Hi,大家好,这里是丹成学长,今天向大家介绍一个学长做的单片机项目,不过这个项目是帮助企业研发的 基于单片机的智能饮水控制系统 大家可用于 毕业设…

对嵌入式开发方向的一些思考:在物联网方向

学习知识就是为了应用,我们学习了嵌入式硬件和软件、具备一定的基础之后,是不是很想找一些简单的项目练练手?如果你有这种非常强烈的感觉的话,我相信你已经具备一定的嵌入式开发技术基础了。 接下来,你可能要犯愁了&am…

毕业设计 基于stm32的居民小区火灾检测报警系统 - 物联网 嵌入式

基于stm32的居民小区火灾检测报警系统 由 STM32F103C8T6单片机最小系DHT11LCD1602显示模块蜂鸣器MQ-2ESP8266噪声模块按键3个。 系统内可以通过1602来显示温湿度值和烟雾浓度和噪声值和它们的阈值,可以通过按键设置阈值,当任意一个实际值大于阈值时蜂鸣…

物联网嵌入式系统开发应用软件公司怎么选择

软件开发已经不是新鲜词汇,而成为当下智能科技新潮流,对于不同的企业,嵌入式软件开发会有更针对性的需求,纵观整个软件开发行业,做APP小程序网站开发的多如牛毛,而物联网应用嵌入式技术开发公司并不多&…

聊一聊物联网嵌入式芯片的内容结构

摘要:物联网嵌入式芯片,存储是数据核心之一,这个对于编程和设计的人来说又比较陌生,今天来说说MCU中的内存结构。 本文分享自华为云社区《漫谈嵌入式系统的内存》,作者:o0龙龙0o 。 前言 物联网嵌入式芯片…

5G+边缘计算 物联网嵌入式边缘计算平台

伴随着5G的来临,物联网技术的发展趋势让互连机器设备和信息量猛增,调研机构Gartner公司预测,到2025年,75%的企业生成的数据将在边缘计算设施而不是在传统数据中心创建和处理。 为满足市场对高性能边缘计算平台的应用需求&#xff…

嵌入式物联网软件开发实战

一、使用STM32CubeMx 创建物联网项目软件工程 二、STM32CubeMx 配置时钟 三、STM32CubeMx 配置GPIO 及 GPIO 相关接口在软件工程中的形式及使用 四、STM32CubeMx 配置USART 串口 五、USART 串口在物联网项目中的使用之不定长数据接收(DMA空闲中断方式) 六…

视频教程-物联网嵌入式技术应用-物联网技术

物联网嵌入式技术应用 10年计算机网络行业经验,精通计算机网络;孰悉C、C、Java、C#等语言,熟悉tcp/IP协议结构;精通华为产品,思科产品,熟悉Linux操作平台,讲解条理清晰,对知识有自己独到见解,善于发散学生的…

物联网嵌入式STM32资料大全,超100G

物联网嵌入式 STM32资料大全,超100G 本文是提供物联网,嵌入式, stm32等资料大全的,都是各类资料大全,下面图片只是网盘链接的截图,已经是有生之年系列了,别要求那么高了,自己到…

物联网嵌入式开发人员面临的5大挑战

​  开发嵌入式软件并不像以前那样“简单”。对于许多开发团队来说,创建一个独立的设备仍然经常是具有挑战性的。在物联网时代,我们开始将一切都连接起来,系统的复杂性正在飙升,传统的嵌入式开发人员发现,他们面临着…

嵌入式与物联网的特点分析,它们有什么关系?

虽然嵌入式系统已经有30多年的历史,但是原来一直隐藏在背后的,自从物联网上升为国家战略后,嵌入式系统也从后台走到前台。本文主要介绍的是嵌入式与物联网之间的关系,其次介绍了嵌入式及物联网的特点及特征,具体的跟随…

嵌入式物联网系统软硬件基础知识大全

关注、星标公众号,直达精彩内容 来源:网络素材 本文主要介绍嵌入式系统的基础知识,涉及嵌入式软件和硬件的方方面面,希望对各位有帮助。 嵌入式系统基础 1、嵌入式系统的定义 (1)定义:以应用为中…

嵌入式系统与物联网的关系

嵌入式系统与物联网的关系 一、物联网与嵌入式的基本概念物联网定义定义 1定义 2定义 3定义 4 嵌入式定义IEEE 的定义 嵌入式与物联网的区别和联系 二、从构成模型看物联网与嵌入式三、物联网时代嵌入式系统的华丽转身从计算机的历史说起嵌入式应用环境物联应用本质 从单片机到…

PHP反序列化笔记

目录 文章目录 目录private变量与protected变量序列化后的特点序列化后的字段长度前面可以加 题目解题步骤 CVE-2016-7124漏洞介绍演示代码题目解题步骤 PHP Session 反序列化PHP的3种序列化处理器安全问题当 session.auto_start=Off 时测试Demo 题目解题步骤 phar反…

2022/3/28 PHP反序列化

小迪 参考: https://www.bilibili.com/video/BV1JZ4y1c7ro?p36&spm_id_from333.880.my_history.page.click https://blog.csdn.net/Hardworking666/article/details/122373938 https://blog.csdn.net/Hardworking666/article/details/112725423 补充&#xff…

PHP反序列化漏洞-从入门到提升

目录 第一章 PHP序列化基础 1.1 PHP序列化 1.1.1 PHP序列化概述 1.1.2 标准序列化 1.1.3 自定义序列化 1.1.4 序列化存储和转发 1.2 PHP反序列化 1.2.1 标准反序列化 1.2.2 未定义类的反序列化 1.2.3 Protected、Private属性反序列化 1.3 PHP序列化相关magic函数 1…

php反序列化及__toString()

思路&#xff1a; 1./?sdata://text/plain,XXXXXX 2.include …php 3._tostring() echo unserialize(pass) echo file_get_content($this-file&#xff09; 把反序列化属性的值读取并输出 主要两个文件 index.php <?php $user $_GET["user"]; $file $_GET[…

PHP反序列化字符串逃逸

例题可看&#xff1a;https://www.cnblogs.com/v2ish1yan/articles/16118319.html 今天才学的&#xff0c;做个记录。 字符串逃逸分为两种&#xff0c;减少和增多。 主要是通过一个preg_replace()函数来进行字符串的减少和增多。 首先要知道逃逸的原理&#xff0c;就是反序…

浅析php反序列化原生类的利用

浅析php反序列化原生类的利用 如果在代码审计或者ctf中&#xff0c;有反序列化的功能点&#xff0c;但是却不能构造出完整的pop链&#xff0c;那这时我们应该如何破局呢&#xff1f;我们可以尝试一下从php原生类下手&#xff0c;php有些原生类中内置一些魔术方法&#xff0c;如…