1. 系统总体设计概述

点击链接下载protues仿真设计资料:https://download.csdn.net/download/m0_51061483/92081521

1.1 课题背景与设计意义

随着医疗服务水平的不断提升,医院对病房管理系统的智能化、自动化要求越来越高。传统的人工巡视方式不仅效率低,而且无法在第一时间响应患者的紧急需求。因此,设计一套结构简单、成本低廉、响应迅速、运行稳定的病房呼叫系统具有重要的现实意义。

本系统以AT89S51单片机为核心控制器,构建一个基于51单片机的12路病房呼叫系统。系统可实现12个病床独立呼叫,护士站实时显示具体病床号,并通过指示灯与蜂鸣器进行声光报警提示。系统结构清晰,扩展性良好,适用于中小型病房管理场景。


2. 系统功能设计

2.1 系统主要功能

本系统主要实现以下功能:

  1. 采用AT89S51单片机作为核心控制单元;

  2. 使用3×4矩阵键盘构成12个独立呼叫按键;

  3. 每个按键对应一个具体病床编号;

  4. 当病人按下呼叫键时:

    • 显示屏实时显示对应病床号;
    • 对应指示灯点亮;
    • 蜂鸣器持续鸣叫报警;
  5. 护士按下“清除键”后:

    • 当前呼叫状态清除;
    • 指示灯熄灭;
    • 蜂鸣器停止;
    • 显示屏清空;
  6. 系统响应时间短,具备按键消抖功能,确保运行稳定可靠。


2.2 系统整体结构

系统整体结构包括以下几个部分:

  1. 单片机最小系统模块
  2. 矩阵键盘输入模块
  3. 显示模块
  4. 指示灯显示模块
  5. 蜂鸣器报警模块
  6. 电源电路模块

系统采用模块化设计,硬件结构清晰,程序结构分层实现,便于调试与扩展。


3. 系统电路设计

3.1 单片机最小系统模块设计

3.1.1 AT89S51单片机简介

AT89S51是ATMEL公司生产的一款低功耗、高性能CMOS 8位单片机,兼容MCS-51指令系统,内部资源包括:

  1. 4KB Flash程序存储器
  2. 128B数据存储器
  3. 32个可编程I/O口
  4. 2个16位定时器
  5. 串行通信接口

其结构简单,稳定性高,适用于嵌入式控制系统。


3.1.2 时钟电路设计

单片机工作必须依赖外部晶振电路。系统采用12MHz晶振:

  • 晶振两端连接到XTAL1和XTAL2;
  • 两侧分别接30pF电容至地;
  • 提供稳定的时钟频率。

12MHz晶振是51单片机常用频率,便于软件延时计算。


3.1.3 复位电路设计

复位电路采用RC上电复位方式:

  • R:10kΩ电阻
  • C:10μF电容
  • 上电瞬间产生高电平脉冲
  • 确保系统可靠复位

复位电路连接至RST引脚。


3.2 矩阵键盘输入模块设计

3.2.1 3×4矩阵键盘结构

矩阵键盘由:

  • 3行
  • 4列

共12个按键,连接方式如下:

  • 行线连接P1.0~P1.2
  • 列线连接P1.4~P1.7

通过行列扫描方式判断按键位置。


3.2.2 键盘扫描原理

扫描步骤:

  1. 将行线设为低电平;
  2. 逐列读取状态;
  3. 若某列为低电平,说明对应按键按下;
  4. 计算行列编号得到床位编号。

为防止按键抖动,程序中加入延时消抖处理。


3.3 显示模块设计

本系统采用数码管显示病床号。

3.3.1 显示原理

  • 使用两位数码管;
  • 显示范围:01~12;
  • 采用动态扫描方式显示。

3.3.2 动态扫描方式

步骤:

  1. 送入段码;
  2. 打开对应位选;
  3. 延时;
  4. 切换下一位;

动态扫描可以节省I/O口资源。


3.4 指示灯模块设计

12个LED分别对应12个病床。

  • 连接至P2口;
  • 当某床呼叫时,对应LED点亮;
  • 清除后熄灭。

LED串联限流电阻(约220Ω),防止电流过大损坏器件。


3.5 蜂鸣器报警模块设计

蜂鸣器采用有源蜂鸣器。

工作原理:

  • 单片机输出高电平;
  • 三极管导通;
  • 蜂鸣器发声。

加入限流电阻与NPN三极管驱动,提高驱动能力。


3.6 电源电路设计

系统使用+5V直流供电。

主要包括:

  1. 变压器降压;
  2. 整流桥整流;
  3. 滤波电容平滑;
  4. 7805稳压芯片输出稳定5V。

保证系统稳定运行。


4. 程序设计

4.1 程序总体结构

程序采用模块化设计,包括:

  1. 主程序
  2. 键盘扫描模块
  3. 显示模块
  4. LED控制模块
  5. 蜂鸣器控制模块
  6. 清除功能模块

主程序循环扫描按键,实现实时响应。


4.2 主程序设计

主程序流程:

  1. 初始化系统;

  2. 循环扫描键盘;

  3. 判断是否有按键;

  4. 若有:

    • 显示病床号;
    • 点亮LED;
    • 启动蜂鸣器;
  5. 检测清除键;

  6. 清除当前状态。

主程序代码

#include <reg52.h>

#define uchar unsigned char
#define uint unsigned int

sbit BEEP = P3^7;
sbit CLEAR_KEY = P3^6;

uchar bed_number = 0;

void Delay_ms(uint ms);
uchar KeyScan();
void Display(uchar num);
void LED_Show(uchar num);
void Clear_All();

void main()
{
    while(1)
    {
        bed_number = KeyScan();
        if(bed_number != 0)
        {
            Display(bed_number);
            LED_Show(bed_number);
            BEEP = 1;
        }

        if(CLEAR_KEY == 0)
        {
            Delay_ms(10);
            if(CLEAR_KEY == 0)
            {
                Clear_All();
            }
        }
    }
}

4.3 键盘扫描模块设计

uchar KeyScan()
{
    uchar row, col;
    P1 = 0xF0;

    for(row = 0; row < 3; row++)
    {
        P1 = ~(0x01 << row);
        col = P1 & 0xF0;

        if(col != 0xF0)
        {
            Delay_ms(10);
            col = P1 & 0xF0;
            if(col != 0xF0)
            {
                if(col == 0xE0) return row*4 + 1;
                if(col == 0xD0) return row*4 + 2;
                if(col == 0xB0) return row*4 + 3;
                if(col == 0x70) return row*4 + 4;
            }
        }
    }
    return 0;
}

4.4 显示模块设计

uchar code seg_code[] = {0x3f,0x06,0x5b,0x4f,0x66,
                         0x6d,0x7d,0x07,0x7f,0x6f};

void Display(uchar num)
{
    uchar shi, ge;
    shi = num / 10;
    ge  = num % 10;

    P0 = seg_code[shi];
    P2 = 0x01;
    Delay_ms(5);

    P0 = seg_code[ge];
    P2 = 0x02;
    Delay_ms(5);
}

4.5 LED显示模块设计

void LED_Show(uchar num)
{
    P2 = ~(0x01 << (num-1));
}

4.6 清除模块设计

void Clear_All()
{
    P2 = 0xFF;
    P0 = 0x00;
    BEEP = 0;
}

4.7 延时函数

void Delay_ms(uint ms)
{
    uint i,j;
    for(i=0;i<ms;i++)
        for(j=0;j<120;j++);
}

5. 系统性能分析

5.1 响应速度分析

系统采用循环扫描方式,键盘扫描时间小于20ms,能够实现快速响应,满足病房呼叫系统实时性要求。

5.2 抗干扰能力

  1. RC复位电路增强稳定性
  2. 软件消抖避免误触发
  3. 稳压电源保障供电稳定

5.3 系统扩展性

系统可扩展:

  1. 增加呼叫数量
  2. 增加无线传输模块
  3. 加入语音播报功能
  4. 接入上位机管理系统

6. 总结

本设计基于AT89S51单片机构建了一套完整的12路病房呼叫系统。系统采用3×4矩阵键盘实现12个病床呼叫输入,通过数码管实时显示床位号,配合LED与蜂鸣器实现声光报警提示。系统结构清晰,程序逻辑严谨,响应迅速,运行稳定,具备较高的实用价值。

通过本系统设计,不仅巩固了对51单片机硬件结构与I/O控制原理的理解,还掌握了矩阵键盘扫描、动态显示、模块化程序设计等关键技术,为后续嵌入式系统开发奠定了良好基础。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐