(完整版)病房呼叫系统
单片机课程设计课题:
系别:电气与信息工程学院
专业:电子信息工程
姓名:
学号:
华南理工
2014年01月01日
成绩评定·
一、指导教师评语(根据学生设计报告质量、答辩情况及其平时表现综合评定)。
二、评分
课程设计成绩评定
目录
一、设计目的 (2)
二、设计要求 (2)
三、总体设计 (1)
四、各部分电路设计 (2)
五、整体电路图 (5)
六、设计总结 (7)
参考文献 (10)
附1 源程序代码 (11)
- 1 -
一、设计目的
病房呼叫系统是病人请求值班医生或护士进行诊断或护理的紧急呼叫工具。它的实际意义在于能够为医院提供一个成本低、不复杂、生产和安装方便的简单快捷病房呼叫系统,方便病人更快找到医生,以节约病人的宝贵时间。它主要用于协助医院病员在病床上方便地呼叫医务人员,可将病人的请求快速传送给值班医生或护士,是提高医院和病房护理水平的必备设备之一。医院的竞争越来越激烈,商业医院的生存是第一位的,提升档次和服务质量迫在眉睫,陪护问题一直是医患矛盾的主体,也是长期困扰卫生系统服务质量的大问题。使用病房呼叫系统,可以方便病人更快地找到医生,以节约病人的宝贵时间。因此该系统具有很大的应用前景和广阔的市场发展空间。
本设计是基于51系列的单片机设计的病房呼叫系统。在该设计中每个患者床头都有一个按键,当患者有需要的时候,按下按键,此时,值班室的系统板上会显示此患者的床位号,并且为了提醒效果更好会震铃3秒。此时,值班室的护士会看到哪个病房的患者又需要,然后护士按下“响应”键取消当前呼叫。
本系统是一个64个床位的的病房呼叫系统,核心部件选择内部存储资源丰富的AT89C51单片机,输入采用8×8矩阵键盘。显示采用2位7段共阴极LED 动态显示,复位电路采用上电加按钮复位,时钟采用12MHz晶体振荡电路。编程语言方面针对病房呼叫系统程序比较简单,接口可以不通过扩展而实现,而且考虑到汇编的语言对端口的操作比较直观,故采用汇编语言,由于采用AT89C51单片机内部有充足的程序存储单元和数据存储单元,因此不需要进行外围存储扩展。又采用了直观的汇编语言,故该系统具有安装方便,成本低等特点.
二、设计要求
(1)设计一个可容64张床位的病房呼叫系统。
(2)要求每个床位都有一个按钮,当患者需要呼叫护士时,按下按钮。此时护士值班室内的呼叫系统板上显示该患者的床位号,并振铃3秒。
(3)当护士按下“响应”键时,取消当前呼叫。
三、总体设计
1、总体框图
2、框架模块功能描述
(1)上电按键复位(复位电路):该部分包括晶振和复位,需要时对控制器发出中断信号,以对系统进行调节。
(2)8*8按键电路(键盘电路):键盘电路输入相当于一个外界的干扰信号,用于向单片机传输命令或数据。
(3)单片机AT89C51:总体电路的控制核心,通过软件编程,对实时采集的信息进行处理,同时也对调节电路进行驱动和控制。
(4)数码管显示电路:将从键盘上输入的信号显示出来,给人以直观的印象。(5)振铃响应电路:用于LED数码管上显示按键数值,同时振铃。
(6)按键响应电路:用于对数码管上显示的数值复位,对单片机程序清零。
因该系统需要比较多的输入、输出口,所以采用内部存储资源和I/O口比较多的MCS-51指令系列的AT89C51单片机,2位LED动态显示,需要8根数据线,采用P0口作为数据线,P3口的P3.0,P3.1作为线选,相当于地址线,选择其中一位显示,P3.2口作为中断1的专门接口外接一个接地的按钮以实现护士响应该患者的请求产生中断。
根据要求至少有64个病房的输入要求的,采用8×8矩阵键盘,采用矩阵键盘也是利用软件节省硬件,利用内部ROM,进行循环查询。扬声器可以用一个准I/O口,这里采用P0的第八口P3.7 。采用AT89C51作为运算和控制单元完全满足系统的需求。
四、各部分电路设计
1、复位电路
RST引脚是复位信号输入端,高电平有效。采用上电加按钮复位,因为本系统设计考虑到该系统比较重要,所以除了采用上电复位的方式外,应该还有按钮复位备用复位方式以防止系统死机时能。如下图1所示。
图1 上电加按钮复位电路
2、时钟电路
时钟是时序的基础,AT89C51核片内由一个反相放大器构成振荡器,可以由它产生时钟,时钟可以由两种方式产生内部方式和外部方式。本系统采用内部方式,在XTAL1和XTAL2端外接石英晶体作为定时元件,内部反相放大器自激振荡,产生时钟。时钟发生器对振荡脉冲二分频。电容采用33pF电容。如下图2所示。
图2 时钟电路
3、显示电路
LED即发光二极管,它是一种由某种半导体材料制成的PN结,由于掺杂浓度很高,当正相偏置时,会产生大量的电子-空穴复合,把多余的能量释放为光能。LED显示器具有工作电压低、体积小、寿命长(约十万小时)、响应速度快,颜色丰富(红、黄、绿等)等特点,是智能仪器最常使用的显示器。LED 显示器有单个、七段和点阵式几种类型,本设计将使用2位8段共阴极LED显示器。P0口作为LED显示码输出端,P3.0、P3.1口接线选端,电路连接图如图3所示。
图3 LED显示器
4、报警电路
采用发光二极管和蜂鸣器相串联,用三极管加限流电阻作为控制开关,用单片机P3.7端口控制,当有高电平导通,显示器显示床号的同时蜂鸣器发出“嘀嘀”声作为呼叫提示。电路连接图如图4所示。
图4 报警电路
5、键盘电路
采用P3口与矩阵8*8键盘连接。键盘的选用方面,在程序调试时经过橡胶键盘与按钮键盘进行比较,虽然橡胶键盘的正确率较高,易用性较强,但是由于购买困难最终制作实物时选用经济、已购买的按钮开关。仿真图如图5。
图5 键盘电路
6、控制电路
控制按键接p3.3端口,当有呼叫发出时,值班室人员收到相应信息后,可
按下“响应按钮”,通过编程令单片机执行中断程序。
五、整体电路图
1、整体电路图
2、系统初始化及呼叫过程
启动系统后,系统进行初始化,此时,单片机执行
SETB EA
SETB EX0
SETB IT0
CLR P3.7
MOV 30H,#0FFH
LCALL DISPLED
当执行以上程序后,进行系统初始化,此时LED数码管显示00,等待呼叫,如下图6所示。
图6 等待呼叫图
之后,进入键盘扫描,端口P2进行键盘横向扫描,初始化后输出高电平。P0端口扫描键盘列向,当有患者按下呼叫键按钮时,按钮左右电路接通,有信号输入。此时显示对应的病房号,如图7为按下18号键。
图7 LED显示
此时,接通LED的端口输出相应信号,连接响铃spesker的P3.7端置位,LED显示按钮所代表的病床位,响铃发出报警响声,提醒值班室人员有病人出现紧急情况。如图8所示:
图8 呼叫振铃
3、响应过程
当有呼叫发出时,值班室人员收到相应信息后,可按下“响应按钮”,单片机执行中断程序,程序如下:
INTR_0: MOV 30H,#0FFH
图9 护士看到呼叫时的响应(按下按钮)
六、设计总结
1、设计过程中遇到的问题及解决方法
首先选择这个课题之后,在设计中首先考虑到键盘的设计问题,由于这个题目的键盘设计是所有题目中最多的,达到了64个按键,想到我们刚学习的键盘设计知识,没有采用独立式键盘,因为如果采用这种方案的话I/O口是远远不够用的,于是采用按钮构造的矩阵式键盘,但是矩阵式键盘对程序编写的要求多而且也很麻烦,这也就是考验我们对所学知识有比较透彻的了解和我们的耐心。
当然在设计的过程中遇到了很多问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,如对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说wave仿真不熟练,Proteus仿真知识及操作、对单片机汇编语言掌握得不好……不过通过这次课程设计之后,也学到了很多知识,更重要的是一定把以前所学过的知识重新温故,学好用好,学以致用。
最后在百般努力下,这次课程设计终于完成了,在设计中遇到了很多编程问题,最后在崔立志老师的辛勤指导下,终于实现了设计的要求。同时,在老师的身上也让我学得到很多实用的知识,在次我表示感谢!同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!
2、设计体会
通过此次设计,我进一步加深了对单片机的理解,使我的编程思想更趋于成熟,编程思路更加开阔。画完硬件电路图后我将编译好的程序载入单片机后我屏住呼吸怀着激动的心情按下了运行键,然而我并没看到我期望看到的结果,心情很是失落。于是我开始认真排查错误,我发现:
(1)后面几行以行为单位的键值显示有重复。
(2)两个LED只有十位能显示而个位刚上电时亮待有键按下时熄灭。
(3)有键按下时扬声器并不发声。
(4)护士按钮不能使外部中断起作用。
(5)键盘有键按下时键盘扫描动作迟缓。
对第5个问题我首先想到可能是我的延时程序延时时间太长,于是我将延时时间变短些,果真不出所料单片机对键盘的扫描迅速了。但是其它四个问题还是老样子。
对第4个问题当我反复按护士按钮时发现单片机的INT0引脚始终是高电平不变。此时我顿然想到可能时上拉电阻阻值过大使开关失去了作用,于是我将电阻值改小点,成功的给INT0引脚送入低电平,令我兴奋的是外部中断居然起作用了,它可以将亮的那个LED熄灭。
对第2个问题,显示床号个位的74LS164移位寄存器的输入由显示床号十位的74LS164移位寄存器的最低位数据线提供,我将该最低位数据线不通向LED 时,居然发现显示床号个位的LED也能正常工作,但是显示床号十位的LED显示就出现了残缺。此问题我最终通过给显示床号十位的74LS164移位寄存器的最低位数据线接上电阻后再输入到显示床号个位的74LS164移位寄存器得以解决。
对第3个问题是扬声器驱动电路没有起作用,我用一个三极管加一个电阻将此问题解决。当听到我做的系统发出定时3S的声音时,我激动不已,心想我成功的将该课题完成了。
然而好事多磨,又一个拦路虎出现了,我发现我做的键盘第1、3、5、列按键待第二次有键按下时自动锁死不起作用了,我知道我的主程序有问题,最后经过认真排查我发现我将MOV A,#00H写成了MOV A,00H ,MOV A,00H可能将
00H单元的不确定数送给A显然会引起错误。将MOV A,00H改为MOV A,#00H 后至此我的课程设计已完满完成。
在我解决以上问题的过程中,我提高了理论分析水平,更提高了我的心理承受能力,这是我受益非浅,更坚定了我学好后续课程的信心。
参考文献
[1] 王意岗.病房呼叫系统[J].建筑电气,2004(23):179-182.
[2] 朱艳华,田行军,李夏青.基于PL3105的病床呼叫系统设计[J].北京石油化工学院学报,2009,17(2):40-43.
[3] 邬春明,王艳茹.基于低压线载波技术的病床呼叫系统[J].电子技术应用,2005,31(9):60-63
[4] 何立民.《单片机初级教程-单片机基础》[M].北京:北京航空航天大学出版社,2006,82(1):2-3
[5] 李朝青.单片机原理及接口技术[M].北京:北京航空航天大学出版社,2005
[6] 康华光《电子技术基础》[M]. 北京:高等教育出版社, 2000:17-23
[7] 康华光《电子技术基础(模拟部分)》[M]. 北京:高等教育出版社, 1999:112-119
[8] 丁元杰.《单片微机原理及应用》[M].北京:机械工业出版社, 1996:256-276
[9] 何立民.《单片机应用技术选编》[M].北京:北京:航空航天大学出版社, 1996.218~224
[10]张培仁等.《MCS-51单片机原理与应用》[M]. 北京.清华大学出版社, 2003:130~145
[11]李伯成《单片机及嵌入式系统》[M]. 北京:清华大学出版社, 2005:337-346
[12]肖金球《单片机原理与接口技术》[M]. 北京:清华大学出版社, 2004:153-159
[13]王环,张亚宁《单片机程序设计实例》[M] 北京:清华大学出版社, 2003:520-524
[14]治刚.《单片机应用技术与实训》[M]. 北京:清华大学出版社, 2004:130-133
[15]胡汉才.《单片机原理及接口技术》[M]. 北京:清华大学出版社, 1995:111-123
[16]徐淑华等.《单片机微机原理及应用》[M]. 哈尔滨工业大学出版社, 1994:336-351
附1 源程序代码
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP INTR_0
ORG 0030H
MAIN: SETB EA ;初始化系统,EA/EXO/IT0置位 SETB EX0
SETB IT0
MAIN1: CLR P3.7 ;P3.7清零
MOV 30H,#0FFH
LCALL DISP
DP1: LCALL KEY
LCALL DISP
LJMP DP1
KEY:
LCALL KS
JNZ K1
LCALL DELAY2 ;延时消抖
RET
K1: LCALL DELAY2
JNZ K2
LJMP KEY
K2: MOV R2,#0FEH
MOV P1,#0FFH ;使P1口置高电平
MOV R4,#00H
K3: MOV P2,R2
LOOP0: JB P1.0,LOOP1 ;扫描按钮键盘
MOV A,#00H
LJMP LOOPK
LOOP1: JB P1.1,LOOP2
MOV A,#08H
LJMP LOOPK
LOOP2: JB P1.2,LOOP3
MOV A,#10H
LJMP LOOPK
LOOP3: JB P1.3,LOOP4
MOV A,#18H
LJMP LOOPK
LOOP4: JB P1.4,LOOP5
MOV A,#20H
LJMP LOOPK
LOOP5: JB P1.5,LOOP6
MOV A,#28H
LJMP LOOPK
LOOP6: JB P1.6,LOOP7
MOV A,#30H
LJMP LOOPK
LOOP7: JB P1.7,NEXT
MOV A,#38H
LOOPK: ADD A,R4 ;移位扫描行 PUSH ACC
K4: LCALL KS
JNZ K4
POP ACC
MOV 30H,A
SETB P3.7
LCALL DELAY3
CLR P3.7
RET
NEXT: INC R4
MOV A,R2
JNB ACC.7,RET0 RL A
MOV R2,A
LJMP K3
KS: MOV P2,#0FFH
MOV P1,#00H
MOV A,P2
XRL A,#0FFH
RET0:RET DELAY2: MOV R5,#08H
D7: MOV R6,#0FAH
D8: DJNZ R6,D8
DJNZ R5,D7
RET
DISP:
LCALL HBCD PLAY: CLR P3.0
MOV DPTR,#DSEG1 MOV A,31H
MOVC A,@A+DPTR MOV P0,A
LCALL DL1
SETB P3.0
CLR P3.1
MOV DPTR,#DSEG1 MOV A,32H
MOVC A,@A+DPTR MOV P0,A
LCALL DL1
SETB P3.1
RET
DL1: MOV R7,#05H
DL: MOV R6,#0FFH
DL6: DJNZ R6,$
DJNZ R7,DL
RET
DSEG1:DB 3FH,06H,5BH,4FH,66H ;输入LED显示段 DB 6DH,7DH,07H,7FH,6FH
HBCD:
MOV A,30H
INC A
MOV B,#100
DIV AB
MOV R5,A
MOV A,#10
XCH A,B
DIV AB
MOV 31H,A
MOV 32H,B
RET
INTR_0: MOV 30H,#0FFH ;响应中断
CLR P3.7 ;清零P3.7
RETI
DELAY3:
DDL1: MOV 41H,#220
DDL2: MOV 42H,#250
DDL3:
DJNZ 42H,DDL3
LCALL DISP
DJNZ 41H,DDL2
RET
END