STM32智能叫号系统

目录

一、前言

二、项目简介

1.功能详解

2.主要器件

三、原理图设计

四、PCB硬件设计

PCB图

五、程序设计

[六、实验效果 ​编辑](#六、实验效果 编辑)

七、包含内容

项目分享

一、前言

项目成品图片:

哔哩哔哩视频链接:

【STM32智能叫号系统】 https://www.bilibili.com/video/BV1z67G6LEtg/?share_source=copy_web&vd_source=097fdeaf6b6ecfed8a9ff7119c32faf2

(资料分享见文末)

二、项目简介

1.功能详解

基于STM32智能叫号系统

功能如下:

  1. STM32F103C8T6单片机作为主控芯片
  2. 主机显示:当前取号数、当前状态(xx号/空闲/休息)、前方剩余数、请XX号准备,每按一下按键1即取一个号,当前状态、前方剩余数、请XX号准备等数据来源于从机
  3. 从机显示:当前取号数、当前状态(xx号/空闲/休息)、前方剩余数、请XX号准备,当前取号数来源于主机
  4. 语音播报:JR6001自动播报下一个号进入
  5. 按键控制:主机按键:取号
    从机按键1:开始接待患者,
    从机按键2:代表当前患者已看完,下一位患者可以进入,
    从机按键3:跳号(下一位)
    从机按键4:暂停接诊(休息)系统不再接入新患者

2.主要器件

  • STM32F103C8T6单片机
  • OLED 屏幕
  • BT04A蓝牙模块
  • HC05蓝牙模块
  • JR6001语音模块
  • 有源蜂鸣器
  • LED灯

三、原理图设计

四、PCB硬件设计

PCB图

主机

从机

五、程序设计

cpp 复制代码
#include "stm32f10x.h"                 
#include "oled.h"
#include "led.h"
#include "key.h"
#include "tim2.h"   
#include "tim3.h"     
#include "Modules.h"
#include "flash.h"
#include "usart2.h"                    
#include "usart.h"                     
#include "beep.h"
#include "delay.h"
#include "adcx.h"
#include "string.h"
#include "usart3.h"                    

/****************异方辰电子工作室******************
					   STM32
											
 * 项目			:	    智能叫号系统-主机(蓝牙版)                  
 * 版本			:       V1.0
 * 日期			:       2026.6.25
 * MCU			:	    STM32F103C8T6
 * 接口			:	    见代码		
 * IP账号		:	    异方辰电子/辰哥单片机设计(同BILIBILI|抖音|快手|小红书|CSDN|公众号|视频号等)
 * 作者			:	    辰哥 
 * 工作室		:       异方辰电子工作室
 * 授权IP	 	:	    辰哥单片机设计、异方辰电子、YFC电子、异方辰系列 
 * 官方网站	    :	    www.yfcdz.cn	

**********************BEGIN***********************/


uint8_t dakai = 0;         
uint8_t Flag_dakai = 0;    

// 主机同步来的取号总数
uint16_t total_num = 0;
// 当前正在看诊的号码
uint16_t current_num = 0;
// 已经完成患者数量(代码中未直接使用,可能预留)
uint16_t finish_num = 0;
// 等待人数
uint16_t wait_num = 0;

// 是否正在接诊标志
uint8_t work_flag = 0;

// 医生休息标志
uint8_t pause_flag = 0;
// 下一位号码
uint16_t next_num = 0;
// 蓝牙发送缓冲区
char tx_buf[32];
// 用于语音播报去抖的变量
uint16_t last_play_num = 0; // 上一次播报的号码
uint8_t play_init = 0;      // 未使用

// 用于检测显示数据是否变化
uint16_t last_current = 0;
uint16_t last_wait = 0;
uint16_t last_next = 0;
// 休息标志
uint8_t rest_flag = 0;  
// 未使用的变量
//uint16_t last_num = 0;

/**
 * @brief  主函数
 */
int main(void)
{
    SystemInit();                  
    delay_init(72);                
    ADCx_Init();                   
    OLED_Init();                   
    LED_Init();                    
    BEEP_Init();                   
    Key_Init();                    
    USART2_Init();                 
    TIM2_Init(72-1, 1000-1);       
    KeyNum = 0;                    
    delay_ms(1000);
    OLED_Clear();                  
    USART1_Config();               
    USART3_Config();               

    USART3_SendString("AF:30");     // 设置音量30
    delay_ms(500);
    USART3_SendString("A7:00012");  // 播放"欢迎"或其他提示音
    delay_ms(1000);

    // 主循环
    while (1)
    {
        USART2_ProcessCmd();        // 处理蓝牙命令
        CallControl();              // 处理按键操作

        // 如果当前就诊号发生变化,触发语音播报
        if(current_num != last_play_num)
        {
             last_play_num = current_num;
    // 只有在工作状态且当前号有效时才播报
    if(work_flag && current_num != 0)
    {
        Voice_PlayNum(current_num);
    }
        }

        Bluetooth_SendStatus();     // 定时向主机发送状态

        // 检测显示数据是否变化,更新显示"上次值"
        if(current_num != last_current ||
           wait_num != last_wait ||
           next_num != last_next)
        {
            last_current = current_num;
            last_wait = wait_num;
            last_next = next_num;
           
        }

        // 刷新OLED显示(固定文字+动态数据)
        OLED_autoPage1();
        SensorDataDisplay1();
        OLED_Refresh();             // 将显存内容更新到OLED
				AutoControl();
    }
}


/***************************************************/


#include "stm32f10x.h"                 
#include "oled.h"
#include "led.h"
#include "key.h"
#include "tim2.h"   
#include "tim3.h"     
#include "Modules.h"
#include "flash.h"
#include "usart2.h"
#include "usart.h"
#include "beep.h"
#include "delay.h"
#include "adcx.h"
#include "string.h"

/****************异方辰电子工作室******************
					   STM32
											
 * 项目			:	        智能叫号系统-从机(蓝牙版)                  
 * 版本			:           V1.0
 * 日期			:           2026.6.25
 * MCU			:	        STM32F103C8T6
 * 接口			:	        见代码		
 * IP账号		:	        异方辰电子/辰哥单片机设计(同BILIBILI|抖音|快手|小红书|CSDN|公众号|视频号等)
 * 作者			:	        辰哥 
 * 工作室		:           异方辰电子工作室
 * 授权IP	 	:	        辰哥单片机设计、异方辰电子、YFC电子、异方辰系列 
 * 官方网站    	:	        www.yfcdz.cn	

**********************BEGIN***********************/


SensorModules sensorData;	//声明传感器数据结构体变量



uint16_t current_num = 0;   //正在看诊号码
uint16_t wait_num = 0;      //等待人数

uint8_t work_flag = 0;      //0暂停 1接诊
uint8_t pause_flag = 0;     //暂停接诊
uint16_t last_num = 0;

char tx_buf[64];

uint16_t now;
uint16_t wait;
uint16_t next;
uint16_t rest;  



int main(void)
{
	SystemInit();
	delay_init(72); 
	ADCx_Init();
	OLED_Init();
	LED_Init();
	BEEP_Init();
	Key_Init();
  USART2_Init();
  TIM2_Init(72-1,1000-1);  
  KeyNum = 0;
	delay_ms(1000);
	OLED_Clear();
	USART1_Config();
		

	
while (1)
{
	
	if(KeyNum ==1)
{
    KeyNum = 0;
    sensorData.num++;
}


	if(KeyNum ==2&sensorData.num>0)
{
    KeyNum = 0;
    sensorData.num--;
}


//检测数据变化
if(sensorData.num != last_num)
{
    last_num = sensorData.num;
    Bluetooth_SendNum(sensorData.num);
}
	
    USART2_ProcessCmd();
    SensorScan();
    OLED_autoPage1();
    SensorDataDisplay1();         
    AutoControl();

  
   // OLED_Refresh();   // 统一刷新一次
  }
}

六、实验效果

七、包含内容

项目分享