基于单片机的病房呼叫系统设计Word格式.docx
《基于单片机的病房呼叫系统设计Word格式.docx》由会员分享,可在线阅读,更多相关《基于单片机的病房呼叫系统设计Word格式.docx(17页珍藏版)》请在冰豆网上搜索。
4.Proteus软件仿真......................................18
4.1仿真步骤及运行效果图:
............................18
5课程设计体会..........................................20
参考文献:
................................错误!
未定义书签。
附1:
源程序代码........................................22
附2:
系统原理图.........................错误!
第一章.概述
病房呼叫系统主要是指当呼叫源有呼叫信号时,在系统上有相应的声、光呼叫信号指示,并能显示出呼叫号码。
此系统主要由89C51单片机,24个按键,2个数码管,1个喇叭组成。
每个病人要呼叫可以按键,同时会有喇叭响,数码管显示不同床位号,相应的指系统的目的就是能够满足这个要求,且实际意义在于能够为医院提供一个成本低、不复杂、生产和安装方便的简单快捷病房呼叫系统,方便病人更快找到医生,以节约病人的宝贵时间。
系统主要用于医院、.
门疹、养老院等场所。
可大大降低护理成本,增强护理的及时性和有效性,安装极其简便。
以前当病人需要服务时就不得不亲自到值班室去叫。
安装该呼叫系统后,可在减少护理人员的同时,保证病员随时能够得到服务,让每个病人及时得到最佳护。
1.2病房呼叫系统的主要功能:
1)可容纳24张床位的病房呼叫系统。
此功能通过设置24个按钮组成一键盘电路对病人的呼叫信息读入。
2)每个床位都有一个按钮,当患者需要呼叫护士时,按下按钮。
此时护士值班室内的呼叫系统板上显示该患者的床位号,并振铃3秒。
此功能通过单片机反复对键盘电路扫描,检测到有键按下时立即将床号读入送LED显示,并启动定时器利用中断振铃3秒。
3)当护士按下“响应”键时,取消当前呼叫。
此功能通过外部中断使管灭铃停。
1.3病床呼叫系统的总体框图:
上电按键复位单数码管显示电路(复位电路)片振铃响应电路3*按键电路AT89C(键盘电路)按键响应电路
系统总体方案及硬件设计第二章.:
设计基本要求2.1
张床位的病房呼叫系统。
)设计一个可容241按下按钮。
要求每个床位都有一个按钮,当患者需要呼叫护士时,2)并振铃此时护士值班室内的呼叫系统板上显示该患者的床位号,3秒。
当护士按下“响应”键时,取消当前呼叫。
3)
:
2.2系统总体方案对于该设计的实现方案:
显示。
单片机上电运行进入键盘扫描主程序即通LED采用静态
过循环判断键盘是否有键按下,一旦有键按下,立即调用键值读入子程序主要是通过以列为单位逐行扫描按钮,后经简单加法运算得出键值。
该键值被单片机读入后立即通过串行口采用静态LED显示,接着单片机启动定时器后返回主程序即进入判断是否有键按下的循环。
此时定时器正在计时,预先设计10ms中断一次,在中断服务程序中将P1.0取反使扬声器发声并判断3s是否到,若到则关定时器同时将P1.0清零使扬声器停止发声返回主程序,若不到3s再返回主程序。
护士响应请求将键按下时,则产生外部中断,在中断服务程序中灭管停铃再返回主程序。
2.3硬件电路
图2-1硬件电路
1.硬件电路描述如下:
利用74LS373锁存器将89C51的数据线和地址线(低8位)分离出来从而使89C51具有与一般CPU相类似的三总线。
74LS164移位寄存器与共阳极LED构成静态显示电路。
74LS164移位寄存器的时钟信号由89C51的TXD提供,显示数据由89C51的RXD串行输出到74LS164由其显示,由于串行发送数据时先发送数据的低位所以显示床号个位的74LS164移位寄存器的输入由显示床号十位的74LS164移位寄存器的最低位数据线提供。
INT0接到按钮供护士响应病人请求灭管停铃之用。
50HZ的方波从P1.0S输出,经简单的放大电路后驱动扬声器发声。
2.硬件键盘电路工作原理:
单片机上电运行即进入判断键盘是否有键按下主程序,P2口输出全1则证明键盘无键按下,若其值不全为1则证明24个键中有一键按下。
单片机随机键盘扫描子程序,本设计首先将第0列送0其它列送1,然后通过对ACC各位的判断来识别键值。
若第0列无键按下则转判下一列,最后返回。
键值通过:
列值=键值行首键号+
其按键序号对应如下:
000102
030405
080706
111009
141312
171615
20
19
18
212223
图2-2按键序号图
图2-3键盘硬件电路
3.复位电路:
RST引脚是复位信号输入端,高电平有效。
采用上电加按钮复位,因为本系统设计考虑到该系统比较重要,所以除了采用上电复位的方式外,应该还有按钮复位备用复位方式以防止系统死机时能。
图2-4上电加复位电路
4.时钟电路:
时钟是时序的基础,8951核片内由一个反相放大器构成振荡器,可以由它产生时钟,时钟可以由两种方式产生内部方式和外部方式。
本系统采用内部方式,在XTAL1和XTAL2端外接石英晶体作为定时元件,内部反相放大器自激振荡,产生时钟。
时钟发生器对振荡脉冲二分频。
电容采用22pF
2-5时钟电路
图2-6振铃电路
第三章.软件设计
3.1软件流程图
开始
初始化并启动定时
是否有呼等
扫描键
键值处理送缓冲
初始化显示、铃延
响应复初始化显示停止铃
返回
3.2程序说明
1)判断是否有键按下源程序:
KS1:
MOVDPTR,#0FFFCH;
取A口地址
MOVA,#FFH
MOVX@DPTR,A;
A口送全0
INCDPL
INCDPL;
取C口地址
MOVXA,@DPTR;
读C口
程序返回通过JNZLK2指令若有键按下则跳到LK2执行键盘扫描程序,检测哪一个键按下。
2)键盘扫描源程序:
LK2:
MOVR2,#0FEH;
从第0列扫描
MOVR4,#00H;
列值计数器清零
LK4:
MOVDPTR,#0FFFCH;
MOVA,R2
开始扫描第0列
JBACC.0,L1;
第0行无键按下转第1行
MOVA,#00H;
第0行有键按下取行首键值
LJMPLKP;
转识别键值
L1:
JBACC.1,L2;
第1行无键按下转第2行
;
第1MOVA,#03H行有键按下取行首键值
转识别键值LJMPLKP
第2行无键按下转第L2:
JBACC.2,L33行
第2行有键按下取行首键值MOVA,#06H
第3行无键按下转第4,L3:
JBACC.3L4行
第3行有键按下取行首键值MOVA,#09H
第4行无键按下转第5L4:
JBACC.4,L5行
第MOVA,#124行有键按下取行首键值
第5行无键按下转第6行L5:
JBACC.5,L6
第5行有键按下取行首键值MOVA,#15
第6行无键按下转第L6:
JBACC.6,L77行
第6行有键按下取行首键值MOVA,#18
第;
L7:
JBACC.7,NEXT7行无键按下转下一列
7MOVA,#21行有键按下取行首键值;
第=键值LKP:
ADDA,R4列值;
行首键号+;
键值进栈保存PUSHACC
)键值显示源程序:
3;
键值保存L8:
MOV15H,A
MOVB,#0AH;
10送B
DIVAB;
键值拆分
MOV50H,A;
键值十位送内存显示缓冲区50H
MOV51H,B;
键值个位送内存显示缓冲区51H
SETBRS0;
保存第0组工作寄存器
MOVR2,#02;
显示位数计数
MOVR0,#51H;
取个位显示缓冲区地址
DL0:
MOVA,@R0;
键值个位送A
取显示数码表首地址MOVDPTR,#TAB
得显示码MOVCA,@A+DPTR
送显个位MOVSBUF,A
等待发送完一帧DL1:
JNBTI,DL1
清发送中断标志CLRTI
指向下一显示单元DECR0
2DJNZR2,DL0位未显示完重复
0组寄存器;
显示完后恢复第CLRRS0
1中断源程序:
定时器)4
INT1:
MOVTH1,#0D8H中断一次;
定时器1送初值10MSMOVTL1,#0F0H
1SDJNZ52H,TT1;
到否?
MOV52H,#100;
1S到重新赋秒计数值秒到否?
3;
DJNZ53H,TT1
TT23S;
LJMPTT2到转
TT1:
CPLP1.0;
输出取反;
中断返回RETI
TT2:
CLRTR1;
关定时器;
输出低电平CLRP1.0
RETI;
中断返回
5)外部中断0源程序
;
关定时器INT0:
CLRTR1
0;
串口工作方式MOVSCON,#00H
LEDMOVSBUF,#0FFH;
灭DL2:
JNBTI,DL2
CLRTI
MOVSBUF,#0FFH
DL3:
JNBTI,DL3
中断返回RETI
6)延时源程序
DELAY:
MOVR7,#3
DL4:
MOVR6,#20
DL5:
MOVR5,#250
DL6:
DJNZR5,DL6
DJNZR6,DL5
DJNZR7,DL4
RET
软件仿真.Proteus第四章4.1仿真步骤及运行效果图:
ASM
)建立程序文件,保存程序文件,后缀名为1.
2)用WAVE软件进行编译。
具体步骤是先建立好程序文件项目,设定好仿真器。
在仿真器语言栏选择伟福汇编器,在目标文件栏选择生成BIN文件和生成HEX文件。
在仿真器栏选择仿真器G6W,仿真头选择POD-51,CPU选择89C51。
选择好以后单击工具栏上的编译工具,这时回生成目标文件HEX和BIN。
3)利用PROTEUS进行仿真。
将上一步生成的HEX文件下载到80C51单片机上。
点击开始按钮进行预定功能的仿真。
运行效果见下图:
图4-2护士响应呼叫
5课程设计体会
通过此次设计,我进一步加深了对单片机的理解,使我的编程思想更趋于成熟,编程思路更加开阔,比如当选定病房呼叫系统课题时我发现是24张床位,由于这么多的床位得占用大量的I/O线,这给我的第一直觉就是得采用静态显示因为它只需用到RXD和TXD两个端口即可完成显示任务。
编完程序编译时系统提示有一指令跳转出范围如JNZLK3此时我想到将以LK3为标号的程序在不影响原程序的情况下向JNZLK3移近些,或在这两者之间再设置一跳转分两次跳到以LK3为标号的程序。
画完硬件电路图后我将编译好的程序载入单片机后我屏住呼吸怀着激动的心情按下了运行键,然而我并没看到我期望看到的结果,心情很是失落。
于是我开始认真排查错误,我发现:
1)后面几行以行为单位的键值显示有重复。
2)两个LED只有十位能显示而个位刚上电时亮待有键按下时熄灭。
3)有键按下时扬声器并不发声。
4)护士按钮不能使外部中断起作用。
5)键盘有键按下时键盘扫描动作迟缓。
对第5个问题我首先想到可能是我的延时程序延时时间太长,于果真不出所料单片机对键盘的扫描迅速了。
是我将延时时间变短些,
但是其它四个问题还是老样子。
对第4个问题当我反复按护士按钮时发现单片机的INT0引脚始终是高电平不变。
此时我顿然想到可能时上拉电阻阻值过大使开关失去了作用,于是我将电阻值改小点,成功的给INT0引脚送入低电平,令我兴奋的是外部中断居然起作用了,它可以将亮的那个LED熄灭。
对第1个问题我对照图2-1按键序号图发现显示重复原来是正常现象因为键值的十位都有十个数是一样的。
对第2个问题,显示床号个位的74LS164移位寄存器的输入由显示床号十位的74LS164移位寄存器的最低位数据线提供,我将该最低位数据线不通向LED时,居然发现显示床号个位的LED也能正常工作,但是显示床号十位的LED显示就出现了残缺。
此问题我最终通过给显示床号十位的74LS164移位寄存器的最低位数据线接上电阻后再输入到显示床号个位的74LS164移位寄存器得以解决。
对第3个问题是扬声器驱动电路没有起作用,我用一个三极管加一个电阻将此问题解决。
当听到我做的系统发出定时3S的声音时,我激动不已,心想我成功的将该课题完成了。
然而好事多磨,又一个拦路虎出现了,我发现我做的键盘第1、3、5、列按键待第二次有键按下时自动锁死不起作用了,我知道我的主程序有问题,最后经过认真排查我发现我将MOVA,#00H写成了MOVA,00H,MOVA,00H可能将00H单元的不确定数送给A显然会后至此我的课程设计MOVA,#00H改为MOVA,00H引起错误。
将.
已完满完成。
在我解决以上问题的过程中,我提高了理论分析水平,更提高了我的心理承受能力,这是我受益非浅,更坚定了我学好后续课程的信心。
:
源程序代码1附.
ACALLKS1
ORG0000HJNZLK2
LJMPMAINAJMPNI
ORG0003HLK2:
MOVR2,#0FEH
LJMPINT0MOVR4,#00H
ORG001BHLK4:
MOVDPTR,#0FFFCH
LJMPINT1MOVA,R2
ORG0100H
MOVX@DPTR,A
MAIN:
SETBEAINCDPL
SETBEX0INCDPL
SETBET1MOVXA,@DPTR
MOVSCON,#00HJBACC.0,L1
MOVMOVA,#00H
DPTR,#0FFFFFHLJMPLKP
MOVA,#89HL1:
JBACC.1,L2
MOVX@DPTR,AMOVA,#03H
KEY:
ACALLKS1LJMPLKP
LK1JNZL2:
JBACC.2,L3
NI:
ACALLDELAYMOVA,#06H
AJMPKEYLJMPLKP
LK1:
ACALLDELAYL3:
JBACC.3,L4
MOVA,#09H
ACALLDELAY
LJMPLKPRLA
MOVR2,AL4:
JBACC.4,L5
AJMPLK4MOVA,#12
KND:
AJMPKEY
LJMPLKP
MOVDPTR,#0FFFCHL5:
MOVA,#15MOVA,#00H
LJMPLKPMOVX@DPTR,A
L6:
JBACC.6,L7INCDPL
MOVA,#18INCDPL
LJMPLKPMOVXA,@DPTR
JBACC.7,NEXTCPLA
MOVA,#21
LKP:
ADDA,R4RET
PUSHACC
L8:
MOV15H,ALK3:
ACALLDELAY
MOVB,#0AHACALLKS1
DIVABJNZLK3
MOV50H,APOPACC
LJMPL8MOV51H,B
SETBRS0NEXT:
INCR4
MOVA,R2MOVR2,#02
MOVR0,#51H
JNBACC.7,KND
MOVA,@R0DJNZ52H,TT1
MOVDPTR,#TABMOV52H,#100
MOVCA,@A+DPTRDJNZ53H,TT1
MOVSBUF,ALJMPTT2
DL1:
TT1:
CPLP1.0CLRTI
RETI
DECR0
DJNZR2,DL0CLRTR1
CLRRS0CLRP1.0
MOVTMOD,#10H
INT0:
CLRTR1MOVTH1,#0D8H
MOVTL1,#0F0HCLRP1.0
MOVSCON,#00HSETBEA
SETBET1MOVSBUF,#0FFH
DL2:
JNBTI,DL2SETBTR1
MOV52H,#100CLRTI
MOV53H,#3MOVSBUF,#0FFH
JNBTI,DL3LJMPMAIN
MOVTH1,#0D8HCLRTI
RETI
MOVTL1,#0F0H
DBTAB:
0C0H,0F9H,0A4H,0B0H,99H;
DB
92H,82H,0F8H,80H,90H;
MOVR7,#3
DL4:
MOVR6,#20
DL5:
MOVR5,#250
DL6:
DJNZR6,DL5
DJNZR7,DL4
RET
END