基于单片机的病房呼叫系统设计
学号:[1**********]
本科毕业论文
题 目: 基于单片机的病房呼叫系统的设计 院 系: 专 业: 班 级: 学生姓名: 导师姓名: 生命科学技术学院 生物医学工程 2009级1班 宋攀婷 李中伟
二○一三年六月
新乡医学院生命科学技术学院毕业设计(论文) 毕业设计(论文)诚信声明书
本人声明:本人所提交的毕业论文《 基于单片机的病房呼叫系统的设计》是本人在指导教师指导下独立研究、写作的成果,论文中所引用他人的无论以何种方式发布的文字、研究成果,均在论文中加以说明;有关教师、同学和其他人员对本文的写作、修订提出过并为我在论文中加以采纳的意见、建议,均已在我的致谢辞中加以说明并深致谢意。
本论文和资料若有不实之处,本人承担一切相关责任。
论文作者: (签字) 时间: 年 月 日 指导教师已阅: (签字) 时间: 年 月 日
新乡医学院生命科学技术学院毕业设计(论文) 目录
摘要 ............................................................................................................................................... I Abstract . ...................................................................................................................................... I I
第1章 引言 ................................................................................................................................ 1
1.1课题背景及研究意义 ...................................................................................................... 1
1.2 国内外现状 .................................................................................................................... 1
1.3 课题的设计目的 . ............................................................................................................ 2
1.4 课题设计的基本要求 ..................................................................................................... 2
第2章 系统总体方案及模块设计 ............................................................................................... 3
2.1 系统总体方案及框图 ..................................................................................................... 3
2.2 时钟电路设计 . ................................................................................................................ 3
2.3 系统复位电路设计 ......................................................................................................... 4
2.4 键盘扫描电路设计 ......................................................................................................... 4
2.4.1 矩阵式键盘 .......................................................................................................... 4
2.4.2 键的识别 . ............................................................................................................. 5
2.5 LED数码管显示部分 .................................................................................................... 6
2.6 响铃报警电路设计部分 ................................................................................................. 9
2.7 系统总体硬件电路图 ................................................................................................... 10
第3章 单片机AT89C51简介 ................................................................................................... 11
3.1 AT89C51的基本结构 .................................................................................................. 11
3.2 AT89C51的指令系统 .................................................................................................... 13
3.3 AT89C51单片机的定时/计数器 . .................................................................................. 13
第4章 系统软件设计 ................................................................................................................ 14
4.1 单片机C 语言程序设计步骤 . ....................................................................................... 14
4.2 系统主程序流程图 ....................................................................................................... 14
4.3 显示程序流程图 . .......................................................................................................... 15
4.4 键盘扫描流程图 . .......................................................................................................... 16
第5章 电路的仿真及调试 ....................................................................................................... 17
5.1 软件的仿真 .................................................................................................................. 17
5.2 硬件调试分析 . .............................................................................................................. 18
5.3 调试问题分析与总结 ................................................................................................... 18
第6章 问题与总结 .................................................................................................................. 19
参考文献 . ..................................................................................................................................... 20
致谢 ............................................................................................................................................. 21
附录 ............................................................................................................................................. 22
摘要
随着无线技术的发展,无线应用技术已经渗透到生活的各个领域,无线传输技术也越来越成熟,本设计是将无线传输技术应用到临床上的研究型课题,实现基于单片机AT89C5l 和无线传输系统构成的无线多路病床呼叫系统。本设计是以AT89C51单片机为核心,辅以矩阵键盘、LED 显示电路和部分简单模拟和数字电路组成的能够实现病人与医护人员的远距离沟通。在此设计中每个病房都有一个按键,,按下按键,此时值班室的显示屏上会显示相应病房号,指示灯亮,声音报警,医护人员按下复位键取消当前呼叫。从硬件和软件方面阐述了该控制系统的设计方法,并经过调试和运行使该系统达到预期目标,通过对病区的的数据采集,实现医院医疗人员值班室与病人室之间的通信呼叫联系,是无线网络技术在临床上的大胆应用,具有反应快、功能齐全、实用性强的特点。
关键词:AT89C51;数码管;呼叫系统;矩阵键盘;
Abstract
As wireless application technology has penetrated all aspects of life, wireless transmission technology is more and more sophisticated .This design is the wireless transmission technology to the clinical research on the subject, and the realization of wireless transmission based on single chip AT89C5l modules consisting of multiple beds call system. The system is award call system based on the 51 series micro-chip design. The system uses AT89CS1 micro-controller as the core, supplemented by matrix keyboard, LED dot matrix display of a simple circuit and some analog and digital circuits to achieve the transfer of information between patients and health care. In this design, each ward has a button, when patients in need, press the button, the display of the duty room to display the number of beds in this patient, people use to achieve circular display, press the medical staff "response" to cancel the current call. The design was introduced according to hardware and software. And through the commissioning and operation to achieve the desired goals .Based on data collection, ward hospital medical personnel duty and patient rooms of communication between the connect .The system is bold application of the wireless network technology in the clinical it has fast response, functional and practical features.
Keywords:AT89C51 , Digital pipe ,Calling system , Matrix keyboard
第1章 引言
1.1课题背景及研究意义
随着新技术的不断开发与应用,近年来单片机发展十分迅速,一个以微机应用为主的新技术革命浪潮正在蓬勃兴起,单片机的应用已经渗透到电力、冶金、化工、建材、机械、食品、石油等各个行业。
本设计使用单片机作为核心的多路病房呼叫系统,分为矩阵键盘部分、数码管显示部分、单片机部分、晶振电路与声音报警部分。单片机具有集成度高,通用性好,功能强,特别是体积小,重量轻,耗能低,可靠性高,抗干扰能力强和使用方便等独特优点,在数字、智能化方面有广泛的用途。本系统通过无线电实现信号的传递,单片机作为控制部件协调处理整个系统的工作,实现无线信号的远距离传输,减少了材料的耗费,安装简单,使医患沟通更加灵活,是无线网络技术在医学临床上的大胆应用,具有创新性。
1.2 国内外现状
病房呼叫系统是医院的必备设备,在国内外各行各业的应用已经十分广泛,为方便患者和医护人员的及时联系,提高医疗服务质量起着重要的作用。目前医院使用的病房呼叫系统多为有线呼叫系统, 存在布线费用较高、易出故障、维修不方便、明显不雅观等诸多缺陷。随着医疗条件的不断提高,越来越多的医院采用无线呼叫系统,它不仅施工和维护方便、呼叫操作简单,而且医护人员可以随时接受病人的呼叫信息,及时处理各种突发事件,但同日本、美国、德国等先进国家相比,仍然有着较大的差距。随着我国经济的发展及加入WTO ,我国政府及企业对此都非常重视,对相关医院资源进行了重组,相继建立了一些国家、企业的研发中心,开展创新性研究,使我国无线病房呼叫系统得到了迅速的发展。
早期的单片机都是8位或4位的。其中最成功的是INTEL 的8031。此后在8031上发展出了MCS51系列单片机系统。基于这一系统的单片机系统直到现在还在广泛使用。随着工业控制领域要求的提高,开始出现了16位单片机。随着INTEL i960系列特别是后来的ARM 系列的广泛应用,32位单片机迅速取代16位单片机的高端地位,并且进入主流市场。当代单片机系统已经不再只在裸机环境下开发和使用,大量专用的嵌入式操作系统被广泛应用在全系列的单片机上。而在作为掌上电脑和手机核心处理的高端单片机甚至可以直接使用专用的Windows 和Linux 操作系统。
1.3 课题的设计目的
1. 巩固、加深和扩大单片机应用的知识面和专业理论知识的应用,提高综合及灵活运用所学知识解决工业控制的能力。
2. 熟悉单片机专业软件Proteus 与软件调试器软件Keil uVision4的使用方法,并能熟练的运用两者结合达到模拟仿真的效果;
3. 通过对课题设计方案的分析、选择、比较、熟悉单片机用系统开发、研制的过程,软硬件设计的方法、内容及步骤。
1.4 课题设计的基本要求
设计出稳定高效的运行系统,并且有一定的抗干扰能力,能够实现多路呼叫且互不干扰。距离在100m 范围内,实现多路无线病床呼叫,并留有扩展空间。
每个病房有一个按钮,当按下一个按钮时,数码管显示病床号,指示灯闪烁,报警电路报警。 当护士按复位键应答,数码显示管显示消失,取消当前呼叫。
未按复位键时,再按下另一按钮,数码管显示相应病房号,指示灯闪烁,报警电路报警。 单片机复位时,系统清零。
第2章 系统总体方案及模块设计
2.1 系统总体方案及框图
无线病房呼叫系统在工作过程中,为了知道是哪个房间的病人发出呼叫信号,必须设计一个系统来完成此任务。此系统能显示呼叫房间号,并发出报警声。系统框图如下图所示:
图2-1 系统框图
2.2 时钟电路设计 单片机必须在时钟的控制下才能工作,在单片机内部有一个用于构成振荡器的高增益反相放大器,时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机系统的稳定性。
此设计中的时钟电路选用内部时钟方式的石英晶体振荡器,它的输入端为芯片引脚
XTAL1,在加电大约延迟10ms 后振荡器起振;输出端为XTAL2,产生幅度为3V 左右的正弦波时钟信号。这两个引脚跨接石英晶体和微调电容,构成一个稳定的自激振荡器,其振荡频率主要由石英晶振的频率确定。电路中两个电容 C1、C2的作用有两个:一是帮助振荡器起振; 二是对振荡器的频率进行微调。C1、C2的典型值为30PF 。
单片机执行的指令均是在CPU 控制器的时序控制电路的控制下进行的,各种时序均与时钟周期有关。单片机在工作时, 由内部振荡器产生或由外直接输入的送至内部控制逻辑单元的时钟信号的周期称为时钟周期。其大小是时钟信号频率的倒数, 常用f 表示,是单片机时钟控制信号的基本时间单位。如时钟频率为6MHz, 即f=6MHz,则时钟周期为1/6µs。
图2-2 时钟频率电路
2.3 系统复位电路设计
AT89C51的复位是由外部的复位电路实现的,复位电路通常采用上电自动复位和按钮复位两种方式本设计采用按钮手动电平复位,该设计是通过RST 端经电阻与电源Vcc 接通来实现的,当时钟频率选用6MHz 时,C 的典型取值为10uf ,R 的取值为2K Ω,具体电路图如图2-3所示。
图2-3 复位电路
2.4 键盘扫描电路设计
2.4.1 矩阵式键盘
键盘具有向单片机输入数据,命令等功能,是人与单片机对话的主要手段。在单片机中应用最多的是独立式键盘和矩阵式键盘。本设计采用矩阵式键盘,也称为行列式键盘,用于按键数目较多的场合。与独立式键盘相比,要节省较多的I/O 口。它由行线和列线组成,一组为行线,一组为列线,按键位于行列的交叉点上。
矩阵键盘中无按键按下时,行线位于高电平状态;当有键按下时,行线电平状态将由与此行线相连的列线的电平决定。列线的电平如果为低,则行线电平为低;列线电平如果为高,
则行线的电平也为高,这一点是识别矩阵式键盘按键是否按下的关键所在。由于矩阵式键盘
中行、列线为多键共用,各按键彼此将相互影响,所以必须将行、列信号配合,才能确定闭
合键的位置。本设计中采用4*4矩阵键盘电路设计,其电路图如下图所示:
图 2-4 4*4矩阵键盘电路图
2.4.2 键的识别
为了识别键盘上的闭合键,通常采用两种方法,一种为扫描法,另一种为线发转法。 1 扫描法原理:识别键盘有无键按下,可分两部进行:第1步,识别键盘有无键按下;第2步,如有键按下,识别出具体的键位。下面以4*4行、列结构中键3被按下为例说明扫描法识别此键的过程。
第1步,识别键盘有无键按下。首先把所有列线均置为0电平,然后检查各行线电平是否为高电平,如果不全为高电平,说明有键按下,否则说明无键被按下。例如,当键3按下时,第1行线电平为低电平,但还不能确定是键3被按下,
第2步,识别那个键被按下。采用扫描法,在某一时刻只让1条列线处于低电平,其余所有列线处于高电平。当第1列为低电平,其余各列为高电平时,因为是键3被按下,所以第1列的行线仍处于高电平;而当第2列为低电平,其余各列为高电平时,同样也会发现第1行的行线仍处于高电平状态;直到让第4列为低电平,其余各列为高电平时,此时第1行的行线电平变为低电平,据此,可判断第1行与第4列交叉点处的按键,即键3被按下。 去除键抖动:用软件延时来消除按键抖动,基本思想是:在检测到有键按下时,该键所对应的行线为低电平,执行一段延时10ms 的子程序后,确认该行线电平是否仍为低电平,如果仍为低电平,则确认该行确实有键按下。
线反转法原理:线反转法需3步,即可确定按键所在的行和列,从而识别出所按的键。
第1步:执行程序使行线均为低电平,此时读取各列线的状态即可知道是否有键按下。当无键按下时,各行线与各列线相互断开,各列线仍保持为高电平;当有键按下时,则相应的行线与列线通过该按键相连,该列线就变为低电平,此时读取列线的状态,得到列码。
第2步,执行程序使列线均为低电平,当有键按下时,行线中有一条为低电平,其余行线为高电平,读取行线的状态,得到行码。
第3步,将第一步得到的列码和第二步得到的行码拼合成被按键的位置码,即为所得(因为行线和列线各有一条为低电平,其余为高电平,所以位置码低四位和高四位分别只有一位低电平,其余为高电平)。
也就是说,当某个键按下时,该键两端所对应的行线和列线为低电平,其余行线和列线为高电平。
全部矩阵键盘的位置码如下表2-1所示:
表2-1 矩阵键盘位置码
本设计中采用扫描法。其综合思想是:先把某一列置为低电平,其余各列置为高电平,检查各行线电平的变化,如果某行线电平为低电平,则可确定此行此列交叉点处的按键被按下。
2.5 LED数码管显示部分
LED发光器件一般常用的有两类:数码管和点阵。7段数码管属于LED 发光器件的一种。
为适用于不同的驱动电路,有共阴极共阳极两种,为了使LED 数码管显示不同的符号和数字,要把某些段的发光二极管点亮,这样就要为LED 数码管提供代码,因为这些代码可使LED 相应的段发光,从而显示不同字形,因此改代码段也称为段码或字型码。
图2-5 LED显示器的两种结构
LED 数码管共计8段。因此提供给LED 数码管的段码正好是一个字节。在使用时,一般习惯上还是以a 段对应段码字节的最低位。各段与字节中各位对应关系见表2-2
表 2-2 段码与字节中各位对应关系
LED 数码管有静态显示和动态显示两种显示方式。
静态显示:指无论多少位LED 数码管,同时处于显示状态,静态显示方式的显示无闪烁,亮度都较高,软件控制比较容易。
动态显示:指无论在任何时刻只有一个LED 数码管处于显示状态,即单片机采用“扫描方式”控制各个数码管轮流显示。显示亮度不如静态显示的亮度高,如果扫描速率较低,会
出现闪烁现象。
本设计中采用动态显示,利用74LS373和显示器组成显示系统。LED 不同位显示的时间间隔(扫描间隔)应根据实际情况而定。发光二极管从导通发光有一定的延时,导通时间太短,发光太弱,人眼无法看清;时间太长,要受限于临界显烁频率,而且此时间越长,占用单片机的时间也越多。因此动态显示的实质是以牺牲单片机时间来换取I/O端口的减少。
用AT89C51自身接口实现数码管动态显示和键盘扫描,使用AT89C51单片微机外加地址锁存用的2块8三态锁存器74LS373。
74LS373是常用的地址锁存芯片,它实质是一个带三态缓冲输出的8D 触发器。其引脚图如下图2-6所示:
图2-6 74ls373引脚图
其功能介绍如下:
1脚是输出使能(OE),是低电平有效, 当1脚是高电平时, 不管输入3、4、7、8、13、14、17、18如何, 也不管11脚(锁存控制端,G) 如何, 输出2(Q0)、5(Q1)、6(Q2)、9(Q3)、12(Q4)、15(Q5)、16(Q6)、19(Q7)全部呈现高阻状态(或者叫浮空状态);
当1脚是低电平时, 只要11脚(锁存控制端,G) 上出现一个下降沿, 输出2(Q0)、5(Q1)、6(Q2)、9(Q3)、12(Q4)、15(Q5)、16(Q6)、19(Q7)立即呈现输入脚3、4、7、8、13、14、17、18的状态.
锁存端LE 由高变低时,输出端8 位信息被锁存,直到LE 端再次有效。 当三态门使能信号OE 为低电平时,三态门导通,允许Q0~Q7输出,OE 为高电平时,输出悬空。
1D~8D为8个输入端。1Q~8Q为8个输出端。其在电路图中的连接如图2-6所示
图2-7 74LS373锁存器及数码管显示电路
2.6 响铃报警电路设计部分
用三极管加限流电阻作为控制开关,用单片机P2.3口控制,利用三极管当做开关电路可以保护单片机,还可以起到放大电流的作用,当三极管基极为低电平时,发射极截止,为高电平时,发射极导通。显示器显示床号同时发出报警声。通过编程令单片机执行中断程序。
其电路图2-8如:
图2-8 响铃报警电路
2.7 系统总体硬件电路图
本系统利用AT89C51作为呼叫系统的核心,外围电路有:晶振电路、系统复位电路、响铃报警电路和LED 数码显示电路以及其他各应用电路。系统总体硬件如图2-9所示。
图2-9 系统总体硬件电路图
第3章 单片机AT89C51简介
3.1 AT89C51的基本结构
AT89C51是一种带4K 字节闪存可编程可擦除只读存储器(FPEROM —Flash Programmable and Erasable Read Only Memory )的低电压,高性能CMOS 8位微处理器,俗称单片机。AT89C2051是一种带2K 字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL 高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU (Cenctral Processing Unit)和闪烁存储器组合在单个芯片中,ATMEL 的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C 系列单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。其管脚图如3-1所示:
图3-1 89C51管脚图
部分引脚说明:
1. 时钟电路引脚XTAL1 和XTAL2:
XTAL2(18 脚) :接外部晶体和微调电容的一端;在8051 片内它是振荡电路反相放大器的输出端,振荡电路的频率就是晶体固有频率。若需采用外部时钟电路时,该引脚输入外部时钟脉冲。
要检查8051/8031 的振荡电路是否正常工作,可用示波器查看XTAL2 端是否有脉冲信号输出。
XTAL1(19 脚) :接外部晶体和微调电容的另一端;在片内它是振荡电路反相放大器的输入端。在采用外部时钟时,该引脚必须接地。 控制信号引脚RST,ALE,PSEN 和EA :
RST/VPD(9 脚) :RST 是复位信号输入端,高电平有效。
ALE/PROG(30 脚) :地址锁存允许信号端。当8051 上电正常工作后,ALE 引脚不断向外输出正脉冲信号,此频率为振荡器频率fOSC 的1/6。CPU 访问片外存储器时,ALE 输出信号作为锁存低8 位地址的控制信号。
ALE 端的负载驱动能力为8 个LS 型TTL(低功耗甚高速TTL) 负载。
此引脚的第二功能PROG 在对片内带有4KB EPROM 的8751 编程写入(固化程序) 时,作为编程脉冲输入端。
PSEN(29 脚) :程序存储允许输出信号端。在访问片外程序存储器时,此端定时输出负脉冲作为读片外存储器的选通信号。此引肢接EPROM 的OE 端(见后面几章任何一个小系统硬件图) 。PSEN 端有效,即允许读出EPROM /ROM 中的指令码。PSEN 端同样可驱动8 个LS 型TTL 负载。要检查一个8051/8031 小系统上电后CPU 能否正常到EPROM /ROM 中读取指令码,也可用示波器看PSEN 端有无脉冲输出。如有则说明基本上工作正常。 EA/Vpp(31 脚) :外部程序存储器地址允许输入端/固化编程电压输入端。 2. 输入/输出端口P0/P1/P2/P3:
P0口(P0.0~P0.7,39~32 脚) :P0口是一个漏极开路的8 位准双向I/O口。作为漏极开路的输出端口,每位能驱动8 个LS 型TTL 负载。当P0 口作为输入口使用时,应先向口锁存器(地址80H) 写入全1, 此时P0 口的全部引脚浮空,可作为高阻抗输入。作输入口使用时要先写1, 这就是准双向口的含义。在CPU 访问片外存储器时,P0口分时提供低8 位地址和8 位数据的复用总线。在此期间,P0口内部上拉电阻有效。
P1口(P1.0~P1.7,1~8 脚) :P1口是一个带内部上拉电阻的8 位准双向I/O口。P1口每位能驱动4 个LS 型TTL 负载。在P1口作为输入口使用时,应先向P1口锁存地址(90H)写入全1, 此时P1口引脚由内部上拉电阻拉成高电平。
P2口(P2.0~P2.7,21~28 脚) :P2口是一个带内部上拉电阻的8 位准双向I/O口。P 口每位能驱动4个LS 型TTL 负载。在访问片外EPROM/RAM 时,它输出高8 位地址。
P3口(P3.0~P3.7,10~17 脚) :P3口是一个带内部上拉电阻的8 位准双向I/O口。P3口每位能驱动4个LS 型TTL 负载。P3口与其它I/O 端口有很大的区别,它的每个引脚都有第二功能,如下:
P3.0:(RXD)串行数据接收。 P3.1:(RXD)串行数据发送。 P3.2:(INT0#)外部中断0输入。 P3.3:(INT1#)外部中断1输入。
P3.4:(T0)定时/计数器0的外部计数输入。 P3.5:(T1)定时/计数器1的外部计数输入。 P3.6:(WR#)外部数据存储器写选通。 P3.7:(RD#)外部数据存储器读选通。 3.2 AT89C51的指令系统
AT89C51的指令系统是一种简明、易掌握、效率较高的指令系统,它共有7种寻址方式,111条指令,按其功能可分为五大类:
1.数据传送类指令(28条); 2.算术运算类指令(24条); 3.逻辑操作类指令(25条); 4.控制转移类指令(17条); 5.位操作类指令(17条)。
指令的表示方法称为指令格式。一条指令通常有两部分组成:操作码和操作数。大多数指令在执行时都需要使用操作数。寻址方式就是在指令中说明操作数所在地址的方法,一般来说,寻址方式越多,单片机的功能就越强,灵活性则越大,指令系统则就越复杂,AT89C51单片机的指令系统有7中寻址方式。分别是:寄存器寻址方式、直接寻址方式、寄存器间接寻址方式、立即数寻址方式、基址寄存器加变址寄存器间接寻址方式、相对寻址方式和位寻址方式。
3.3 AT89C51单片机的定时/计数器
在单片机应用系统中,常常会有定时控制需求,如定时输出、定时检测、定时扫描等;也经常要对外部事件进行计数。80C51单片机内集成有两个可编程的定时/计数器:T0和T1,它们既可以工作于定时模式,也可以工作于外部事件计数模式,此外,T1还可以作为串行口的波特率发生器。
第
4.1 单片机C 语言程序设计步骤
4章 系统软件设计
程序设计步骤包括绘制程序流程图,编写程序,运行调试,仿真模拟等步骤。
病房呼叫系统软件设计均采用模块化设计,整个程序主要包括主程序、键盘扫描程序、显示程序。所有程序均采用单片机C 语言编写。病房呼叫系统的软件设计思路说明如下:主程序的作用为程序初始化,显示病房编号(病房号的获得在键盘扫描程序中实现) 。通过不断的扫描,检查是否有病人呼叫。显示程序通过扫描16个病床的判断标志截来决定是否需要显示床号。键盘扫描程序是重要组成部分,它的功能是判困是否有按键并进一步确认是哪个按键按下或释放,同时修改相应的标志位,以运用到显示程序中。 4.2 系统主程序流程图
主程序流程图给出了系统工作的基本过程,,描述了信号的基本流向,起到了一个向导的作用。
图4-1主程序流程图
主程序描述:首先对各存储单元初始化,设定定时初值,清零键,然后继续扫描键盘, 若已经按下,则不响应,否则显示病床号。最后,返回扫描键值程序,准备下一次的判断。 4.3 显示程序流程图
显示程序主要是来判断是否需要显示,以及如何去显示,是十分重要的程序之一。设计流程图如4-2图所示。
如扫描到键盘有键按下,则进而判断是嘟个床位按下,进而显示病床号时,要判断标志位,
图 4-2 显示程序流程图
显示程序描述:设定床号标志为, 令n 从1开始,判断床号是否为0,若不为0,表示有病房呼叫,则显示床号,继续扫描键值判断是否有别的病房呼叫,若n 为0,表示无呼叫,则继续扫描下一病床号。
4.4 键盘扫描流程图
键盘电路设计为4*4矩阵式,在程序中可以先判断按键编码,然后在显示子程序中通过程序进行译码,再显示。设计流程图如图4-3所示:
图4-3 键盘扫描程序流程图
第5章 电路的仿真及调试
5.1 软件的仿真
启动电源,显示屏无显示,在按下2号键时,界面部分显示02,指示灯闪烁,声音报警;未按按复位键,再按下6号键时,界面显示06,指示灯闪烁,声音报警。依次按下各按键,相应病房号会相应显示。该设计反映了控制电路的可行性。综上所述,本系统实现了主要功能:显示病床号,指示灯闪烁,声音报警提醒值班人员。通过Proteus 软件仿真,能达到上述结论,满足课题目目的,达到要求。采用Proteus 进行图形绘制仿真,Keil 进行编程,然后放入单片机中,实现应有的功能。
5.2 硬件调试分析
由于时间有限,没有做出电路板,只在单片机学习板上做了硬件仿真,以下是关于硬件仿真图:
5.3 调试问题分析与总结
本设计采用七段数码管显示功能,最初在软件上进行仿真时按键个位数字是1和4时,数码管不能正常显示,将程序中数码管显示位数处进行了相应修改,能正常显示。
按下一个按键时,数码管显示按键号,有声音报警,再按下另一个按键,却不能正常显示,必须在按下复位键的前提下,按下另一个按键才能重新显示。之后对程序进行了相应的修改,将while(key!=0)改成if(key!=0)后,数码管就能在按下按键后显示相应按键号,指示灯闪烁,声音报警。
由于软件仿真的延时问题,数码管显示相应病床号时会不稳定。
第6章 问题与总结
随着毕业日子的临近,毕业设计也接近了尾声,经过两个月的奋战,我的毕业设计终于完成了。在李中伟老师的耐心指导下,对此课题进行了思考和探究,巩固了自己对专业课知识的理解与掌握,全面提高了自己的综合能力。
此次我毕业设计的课题是《基于单片机的病房呼叫系统的设计》。刚拿到这个课题的时候,感觉这个设计应该不会很难,因为目前大多数医院都在使用这种呼叫系统,可是真到自己开始动手做的时候,才发现存在许多自己无法克服的问题。通过这次设计我才明白,学习是一个不断积累的过程,自己所学的专业知识不能仅仅停留在表面,要把它运用的实践之中。 在刚开始着手做毕业设计时,发现自己的专业课知识学得不是很扎实,于是我把单片机的相关知识进行了系统的复习,进一步了解了我的毕设中涉及到的电路设计,比如时钟电路、复位电路、LED 数码显示电路和矩阵键盘电路。另外我查阅相关文献资料,在原先积累的知识上,画出了电路图。其次就是关于软件编程部分,我使用的语言的单片机C 语言,具有汇编语言所不可比拟的优势。而我的C 语言学的不是很精,于是又花一段时间对C 语言进行了相关了解。在进行硬件调试过程中也出现一些大大小小的问题,比如当按键编号个位数字是1和4时,数码管不能正常显示;未按复位键的前提下,按下另一按键无反应等相关问题,于是我就上网查阅相关信息,并在同学的热心帮助下,对程序部分进行了相关修改,基本上实现了自己的要求。
最后,我要感谢在此次毕业设计中帮助我的老师和同学。在此设计中,我学到了很多知识,也培养了我独立工作的能力,树立了对自己工作能力的信心,使我充分体会到在创作过程中探索的艰辛和成功的喜悦。虽然这个设计自己做的并不是很好,但在完成过程中自己所学到的知识是自己最大的收获和财富,使我终身受益!
参考文献
[1] 张毅刚.M 新编CS-51单片机应用系设计[M].哈尔滨:哈尔滨工业大学出版社,2003,8-82
[2] 周航慈. 单片机应用程序设计技术(修订版)[M].北京:北京航空航天大学出版社,2002, 40-60
[3] 张为民,等.CS-51系列单片机系统及其应用[M].北京:高等教育出版社,2004,10-100
[4] 白驹珩,雷晓平著.单片计算机及其应用.成都:电子科技大学出版社,1997.
[5] 沈美明,温冬婵. 汇编语言程序设计[M].北京:清华大学出版社,2001,35-299
[6] 李朝青. 单片机原理及接口技术(简明修订版). 杭州:北京航空航天大学出版社,1998
[7] 张刚毅. 单片微机原理及应用. 西安:西安电子科技大学出版社,1993,20-50
[8] 丁元杰、吴大伟.单片微机实题集与实验指导书[M].北京:机械工业出版社, 2004.P124~125.
[9] 余锡存. 曹国华. 单片机原理与接口技术[M].西安:西安电子科技大学出版社.2002.
[10] 孙俊逸. 盛秋林. 单片机原理与应用[M].北京:北京清华大学出版社.2006.
致谢
通过这一阶段的努力,我的毕业设计《基于单片机的病房呼叫系统》告一段落,使我获得了丰富的理论知识,极大地提高了实践能力。在大学阶段,我在学习上和思想上都受益非浅,这除了自身的努力外,与各位老师、同学和朋友的关心、支持和鼓励是分不开的。 在准备毕业设计的这段时间里,由衷地感谢我的指导老师李中伟老师及几位热心同学,他们给了我许多帮助和精心指导,同时也给了我许多宝贵的意见,使我受益匪浅,并对实践中出现的问题给予耐心的解答,完稿之后在百忙之中仔细阅读,给出修改意见。在李老师耐心的指导下,已基本完成毕业设计的任务,并且熟悉了单片机以及Proteus 与Keil 软件。 大学四年匆匆而过,真诚的感谢生命科学技术学院的所有老师,由于老师们的传道、授业、解惑,我学到了许多知识,并从他们身上学到了如何求知治学。我也要感谢我的母校新乡医学院,是她给我们提供了良好的学习环境和生活环境,使我的大学生活丰富多彩,在我的人生成长路程中留下了精彩的一笔。还有感谢我的家人、朋友和同学在这四年的成长之路上给予我的支持和帮助。
最后,再一次向所有关心和帮助过我的老师、同学们和朋友们表示我最诚挚的谢意!
附录
#include
#define uint unsigned int
#define uchr unsigned char
sbit led0=P2^2;
sbit buzzer=P2^3;
sbit dula=P2^6;
sbit wela=P2^7;
sbit clear=P3^4;
uchr key,shi,ge,count;
uchr code tab[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,
0x76,0x79,0x38,0x3f};
/*延时子函数,xms 为形参*/
void delay(uint xms)
{
uint x,y;
for(x=xms;x>0;x--)
for(y=110;y>0;y--);
}
/*矩阵键盘扫描子程序*/
void matrixkeyscan()
{
uint temp;
P3=0xf7;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
temp=P3;
//声明段选线选通端 //声明位选线选通端 //给P3口赋值 //检测是否有键按下 //延时去抖
temp=temp&0xf0;
if(temp!=0xf0) //再次检测是否有键按下 {
temp=P3;
switch(temp)
{
case 0x77:
key=1;
break;
case 0xb7:
key=2;
break;
case 0xd7:
key=3;
break;
case 0xe7:
key=4;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
P3=0xfb;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
//判断按下的是哪个键 //等待按键释放
case 0x7b:
key=5;
break;
case 0xbb:
key=6;
break;
case 0xdb:
key=7;
break;
case 0xeb:
key=8;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
P3=0xfd;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0x7d:
key=9;
break;
case 0xbd:
key=10;
break;
case 0xdd:
key=11;
break;
case 0xed:
key=12;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
P3=0xfe;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0x7e:
key=13;
break;
case 0xbe:
key=14;
break;
case 0xde:
key=15;
break;
case 0xee:
key=16;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
}
/*主函数*/
void alarm()
{
buzzer=~buzzer;
led0=~led0;
delay(100);
}
void display(uchr num)
{
if(key!=0)
{
dula=1;
P0=tab[num/10];
dula=0;
P0=0x00;
wela=1;
P0=0xfe;
wela=0;
delay(100);
dula=1;
P0=tab[num%10];
dula=0;
P0=0x00;
wela=1;
P0=0xfd;
wela=0;
delay(100);
alarm();
//若有键按下,则进入该循环进行处理
} } void main(){ P0=0x00; while(1) { matrixkeyscan(); display(key); } }