应急呼叫服务器的设计论文Word下载.docx
《应急呼叫服务器的设计论文Word下载.docx》由会员分享,可在线阅读,更多相关《应急呼叫服务器的设计论文Word下载.docx(21页珍藏版)》请在冰豆网上搜索。
必须仔细分析课题要求、性能、指标及应用环境等,广开思路,构思出各种总体方案,绘制结构框图。
2.确定合理的总体方案。
以电路的先进性、结构的繁简、成本的高低及制作的难易等方面作综合比较,并考虑器件的来源,敲定可行方案。
3.设计各单元电路。
总体方案化整为零,分解成若干子系统或单元电路,逐个设计。
4.组成系统。
在一定幅面的图纸上合理布局,通常是按信号的流向,采用左进右出的规律摆放各电路,并标出必要的说明。
指导教师评语及成绩
平时成绩:
(20%)
论文成绩:
(50%)
答辩成绩:
(30%)
总成绩:
指导教师签字:
学生签字:
年月日
注:
成绩:
平时20%论文质量50%答辩30%以百分制
摘要
本文介绍了一种以AT89C52单片机设计的医院病房有线应急呼叫服务器。
该服务器由单片机系统、光电耦合器、功能开关、12864液晶显示器等单元电路组成。
它的核心控制器采用价格低廉,性能可靠的AT89C52单片机。
该系统主要工作原理是分机按键呼叫,主机声光报警,同时显示呼叫的房间号和病床号。
研究表明该系统使用方便、快捷、性能安全可靠,可应用于医院各类病房,能提高医院工作效率,提高服务形象,带来更好的经济效益,可作为电子产品进行开发研制,具有很好的推广价值。
猫虿驢绘燈鮒诛髅貺庑。
关键词:
单片机技术光电耦合器12864液晶屏
第1章设计方案论证
1.1设计的应用意义
一款新的能满足人们要求,适合服务性行业的有线呼叫服务器对医院单位而言,在同类行业中,安静清雅的环境更具有竞争优势,快而准的服务极大地提高了工作人员的办事效率,便捷的呼叫系统节约了大量的人力,财力。
对医务人员而言,不需要时刻去查房、巡逻,更不需要高声应答病人或家属,免去了无数次的来回奔波,维护了医院良好的安静环境,及时而准确的给病人带来需要和服务。
对病人及其家属而言,不必在医院大声喧哗地呼叫医务人员,也不用亲自走到护士房告知护士,更不用在各个病房到处寻找护士。
即使病人在没有家属陪伴的情况下,也能及时呼叫得到护理。
只需轻轻一按从机的按钮,无论是在床上还是走廊,还是厕所,都能传达呼叫的信号。
护士只要在总机旁观察就能看到呼叫的房间,呼叫的病床号。
该系统的设计主要分主机和从机按键两部分,集有线四路数据发送,光电耦合器电流电压转换,12864液晶显示于一体,具有施工快捷、简单、故障率低,使用有线呼叫器的病人,无需四处张望寻找,也无需高声喊叫,只需轻松地按一下呼叫器的按钮,所需要的服务就会得到及时的解决。
锹籁饗迳琐筆襖鸥娅薔。
1.2设计方案选择
应急呼叫服务器是一种能对病人呼叫实现远程监控控制的仪器。
本文对单片机控制的呼叫按键和显示电路进行了硬件和软件两大部分的设计。
在硬件部分,本文在详细说明了单片机控制的呼叫按键电路和显示电路的设计原理及其构造的基础上,对其各个部分进行了设计。
即分别对电源电路、CPU最小系统、光电耦合器、独立按键电路、12864液晶显示电。
CPU最小系统由单片机、片外时钟电路、键盘/显示接口、复位电路构成。
其中CPU选用的是美国ATMEL公司生产的AT89C52单片机。
在软件部分采用了模块化的设计方法。
本系统的程序设计主要包括主程序流程图和C语言程序。
構氽頑黉碩饨荠龈话骛。
1.3总体设计方案框图及分析
整个系统包括以单片机为主体由以下模块组成:
单片机最小系统、12864液晶显示、独立按键、以及光电耦合器。
单片机不停循环检测按键是否按下,然后通过光电耦合器把微弱电流信号转换为电压信号供单片机识别,然后在12864液晶屏上面显示相应的病房号和病床号。
整体机构框图如图1.1所示。
輒峄陽檉簖疖網儂號泶。
AT89S52
单片机
功能按键
12864液晶显示器
光电耦合器
图1.1总体方案框图
第2章硬件电路设计
2.1复位电路的设计
复位电路的设计在整个原理的设计中非常重要,并且要结合本项目的功能要求进行复位电路的设计。
复位操作可以使单片机初始化,也可以使死机状态下的单片机重新启动,因此非常重要。
单片机的复位都是靠外部复位电路来实现的,在时钟电路工作后,只要在单片机的RESET引脚上出现24个时钟振荡脉冲(两个机器周期)以上的高电平单片机就能实现复位。
尧侧閆繭絳闕绚勵蜆贅。
复位电路如图2.1所示。
2.2时钟电路的设计
计算机工作时,是在统一的时钟脉冲控制下一拍一拍地进行的,这个脉冲是由单片机控制器中的时序电路发出的。
时钟电路用于产生单片机所需的时钟信号,时钟信号可以由两种方式产生:
内部时钟方式和外部时钟方式。
本设计使用外部时钟方式,如图2.2所示。
识饒鎂錕缢灩筧嚌俨淒。
2.3CPU的选择
本系统采用AT89C52单片机,此芯片是一种带4KBFlashROM程序存储器的低电压、高性能的8位微处理器。
凍鈹鋨劳臘锴痫婦胫籴。
外型及管脚如图2.3所示:
图2.3AT89C52单片机芯片
(1)基本特性
与MCS—51系列单片机兼容;
片内有4KB可重新编程的Flash程序存储器,可擦/写1000次以上;
全静态逻辑,工作频率范围:
0~24Hz;
三级程序存储器加密;
128B字节片内RAM;
32个可编程I/O口;
提供待机和掉电两种省电工作方式;
两个16位定时/计数器;
有5个中断矢量,允许6个中断源;
一个全双工串行口;
具有与工业标准80C51一致的指令集和引脚布置。
AT89C52是低功耗高性能COMS8位单片机。
它除了具有与MCS—51完全兼容的若干特性外,最为突出的优点就是片内集成了4K字节FlashPEROM(ProgramableErasableReadOnlyMemory),可存放应用程序,这个Flash程序存储器允许用一般的编程器离线编程外,还允许在应用系统中实现在线编程,并且还提供了对程序进行三级加密保护的功能。
AT89C52的另一个特点是工作速度更高,晶振频率可高达24MHz,一个周期仅500μs,比MSC—51快了一倍。
恥諤銪灭萦欢煬鞏鹜錦。
(2)AT89C52增加的功能
AT89C52引脚布置和定义与MCS—51完全兼容,电脑由于它具有片内Fla程序存储器,一些引脚在编程时能提供专门的用途。
鯊腎鑰诎褳鉀沩懼統庫。
P0口在编程时接受程序代码,校验时输出程序代码。
校验时要求将P0口由外部电路上拉(尽管所有的I/O端口都具有内置上拉电路);
硕癘鄴颃诌攆檸攜驤蔹。
P1口在编程期间有内部多路开关切换到地址总线,接受编程器送来的低8位地址信息;
P2口在编程期间接受编程器送来的高4位地址信息,同时P2口的另外两个引脚(P2.6,P2.7)还接受编程与校验的有关控制信息;
阌擻輳嬪諫迁择楨秘騖。
P3口除了具有与MCS—51相同的双功能外,在编程期间,P3.6,P3.7两端口线还接受有关的控制信息;
氬嚕躑竄贸恳彈瀘颔澩。
ALE/PROG端除了输出地址锁存允许(ALE)脉冲外,在编程期间还作为编程脉冲输入端,参与控制对Flash存储器的读、写、加密、擦除等工作。
一般情况下,ALE端输出频率为fose/6的脉冲,可作为一个要求并不很严格的时钟源去控制其它芯片和设备。
该(ALE)脉冲串仅在每次外部数据存储器存取周期仅有一个ALE周期被跳过。
如果需要,AT89C52的ALE脉冲输出可以禁止,只要对特殊寄存器区域8EH单元的bit0写入1就禁止了ALE,这时仅当单片机处于MOVX或MOVC指令周期时ALE才生效,否则该引脚呈现弱上拉逻辑状态。
如果AT89C52构成的系统使用外部存储器,即处于外部程序执行模式,对8EH的bit置1将是无效的,不会对系统的正常工作产生影响;
釷鹆資贏車贖孙滅獅赘。
/EA/Vpp端在寻址片内4KBFlash程序存储器(000H——FFFH)时,必须连到Vcc,如果将此端连到GND端,将迫使单片机寻址外部000H——FFFH范围的程序存储器。
如果加密位被编程了,AT89C52的CPU将对/EA的状态不得与实际使用的内部或外部程序存储器的状态发生矛盾。
对那些需要12V编程电压的器件。
这个端子还接受12V编程使用电压(Vpp)。
怂阐譜鯪迳導嘯畫長凉。
2.4CPU最小系统图
图2.4单片机最小系统
2.5电源电路的设计
因为单片机工作电压为直流+5V,且底层电路功耗很小。
电源的设计的好坏决定了电压输出的稳定性,它主要解决的是整流,滤波问题。
本电源的设计采用一个输出+9V的变压器,经过4个稳压二极管IN5408桥型连接整流,便可得到比较稳定的直流电压,使用4700uF的大电容除去直流电压的低频噪声(原则上电容越大越好),低频滤波后采用7805三端稳压片稳压,稳压以后再进行一次高频滤波,以便除去电压的高频噪音和纹波,可采用0.1u或0.01u的小电容解决。
具体电路如图2.5所示:
谚辞調担鈧谄动禪泻類。
图2.5电源电路
2.612864液晶显示电路
液晶屏显示模块与数码管相比,它显得更为专业,外观更漂亮,更节约电能,显示功能也更强大,因而设计选用液晶显示器。
液晶显示屏以其微功耗、体积小、显示内容丰富、超薄轻巧、使用方便等诸多优点,在仪器仪表、电子设备、家用电器等低功耗应用系统中得到越来越广泛的应用。
嘰觐詿缧铴嗫偽純铪锩。
本设计中用到的液晶为12864液晶,这是个点阵无字库型液晶模块,一种常用的4行32个字的液晶模块,它的显示功能比较丰富,通过不同的地址编码,既可以显示出不同的阿拉伯数字、英文字母的大小写,还可以显示出常用的符号和日文假名等。
熒绐譏钲鏌觶鷹緇機库。
它的电路设计比较简单,八个数据线口DB0-DB7可以直接和单片机的P0口相连,用它的第5脚V0口接一个20K的精密滑动变阻器便可以对它的亮度进行调节,使显示的字符更清晰。
典型的结构如图2.6所示。
鶼渍螻偉阅劍鲰腎邏蘞。
图2.612864液晶显示电路
2.7人机对话接口电路的设计
在单片机应用系统中,为了控制其运行状态,需要向系统输入一些命令或数据,因此应用系统中应设有键盘,这些键或键盘都是以开关状态来设置控制功能或输入数据的。
但是,这些开关绝不仅仅是简单的电平输入。
纣忧蔣氳頑莶驅藥悯骛。
当所设置的功能键按下时,单片机应用系统应完成该按键所设定的功能,因此,键盘信息输入是与软件结构密切相关的。
对于任何一个单片机应用系统,键盘总要有其相应的接口电路与CPU相连,通过软件了解键盘输入的信息。
本系统设置了四个独立按键A1、A2、B1、B2,分别代表不同房间不同病床号,通过光电耦合器与单片机的P3口的低四位相连接,电路如图2.7所示。
颖刍莖蛺饽亿顿裊赔泷。
图2.7按键电路
第3章程序设计
3.1程序流程图
图3.1主程序流程图
开始
数据初始化
判断A1是否为0
判断A2是否为0
判断B2是否为0
判断B1是否为0
12864液晶显示数据
Yes
No
本设计主程序主要完成系统参数的初始化、按键扫描、键值处理、电流电压转换和扫描显示等,其主程序流程图如图3.1所示。
濫驂膽閉驟羥闈詔寢賻。
3.2源程序清单
#include<
reg51.h>
intrins.h>
#defineucharunsignedchar
#defineuintunsignedint
//下面是点阵数据,一个汉字有32字节数据组成
unsignedcharcodeyi[]=//一
{
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,銚銻縵哜鳗鸿锓謎諏涼。
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,挤貼綬电麥结鈺贖哓类。
};
unsignedcharcodehao[]=//号
0x80,0x80,0x80,0xBE,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xA2,0xBE,0x80,0x80,0x80,0x00,赔荊紳谘侖驟辽輩袜錈。
0x00,0x00,0x00,0x06,0x05,0x04,0x04,0x04,0x44,0x84,0x44,0x3C,0x00,0x00,0x00,0x00,塤礙籟馐决穩賽釙冊庫。
unsignedcharcodebing[]=//病
0x10,0x60,0x00,0xFC,0x04,0x24,0x24,0x24,0x25,0xE6,0x24,0x24,0x24,0x24,0x04,0x00,裊樣祕廬廂颤谚鍘羋蔺。
0x84,0x42,0x31,0x0F,0x00,0xFF,0x11,0x09,0x05,0x03,0x05,0x59,0x81,0x7F,0x00,0x00,仓嫗盤紲嘱珑詁鍬齊驁。
unsignedcharcodefang[]=//房
0x00,0x00,0xFC,0x24,0x24,0x24,0x25,0x66,0xA4,0x24,0x24,0x24,0x24,0x3C,0x00,0x00,绽萬璉轆娛閬蛏鬮绾瀧。
0x40,0x30,0x0F,0x81,0x41,0x31,0x0F,0x09,0x09,0x09,0x49,0x89,0x79,0x01,0x00,0x00,骁顾燁鶚巯瀆蕪領鲡赙。
unsignedcharcodeer[]=//二
0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x00,瑣钋濺暧惲锟缟馭篩凉。
0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,鎦诗涇艳损楼紲鯗餳類。
unsignedcharcodechuang[]=//床
0x00,0x00,0xFC,0x04,0x44,0x44,0x44,0x45,0xF6,0x44,0x44,0x44,0x44,0x44,0x04,0x00,栉缏歐锄棗鈕种鵑瑶锬。
0x40,0x30,0x0F,0x20,0x10,0x08,0x06,0x01,0xFF,0x01,0x06,0x08,0x10,0x20,0x20,0x00,辔烨棟剛殓攬瑤丽阄应。
unsignedcharcodewei[]=//位
0x00,0x80,0x60,0xF8,0x07,0x10,0x90,0x10,0x11,0x16,0x10,0x10,0xD0,0x10,0x00,0x00,峴扬斕滾澗辐滠兴渙藺。
0x01,0x00,0x00,0xFF,0x40,0x40,0x41,0x5E,0x40,0x40,0x70,0x4E,0x41,0x40,0x40,0x00,詩叁撻訥烬忧毀厉鋨骜。
sbitCS1=P2^4;
//片选1,低电平有效,CS1=0开左屏幕,CS1=1关左屏幕
sbitCS2=P2^3;
//片选2,低电平有效,CS2=0开右屏幕,CS2=1关右屏幕
sbitRS=P2^2;
//数据,指令选择信号,RS=1为数据操作,RS=0为写指令或读状态(一般为读忙标志)则鯤愜韋瘓賈晖园栋泷。
sbitRW=P2^1;
//读写选择信号,RW=1为读选通,RW=0为写选通
sbitEN=P2^0;
//读写使能信号
sbitA1=P3^0;
sbitA2=P3^1;
sbitB1=P3^2;
sbitB2=P3^3;
voidbusy()//忙检测函数
P0=0X00;
//这句不能少
RS=0;
RW=1;
EN=1;
while(P0&
0X80);
//P0&
0X80结果为真则一直执行空操作,也就是说P0&
0X80为0则结束循环胀鏝彈奥秘孫戶孪钇賻。
EN=0;
}
voidwcmd(ucharcmd)
busy();
//每次写入指令或数据之前都进行忙检测
RW=0;
P0=cmd;
_nop_();
//在EN下降沿写入数据和指令
voidwdata(uchardat)//写命令和写数据只在RS=0或RS=1上不同,其余都相同鳃躋峽祷紉诵帮废掃減。
RS=1;
P0=dat;
voidset_page(ucharpage)//设置页,12864LCD共有8页,每页有8行点阵点。
稟虛嬪赈维哜妝扩踴粜。
page=0xb8|page;
//首页地址为0XB8
wcmd(page);
//page取值范围为0~7,表示第1到8页
voidset_line(ucharline)//设置显示的起始行,共有0--63行,一般从0行开始显示陽簍埡鲑罷規呜旧岿錟。
line=0xc0|line;
//起始行地址0XC0
wcmd(line);
//line取值范围为0~63,表示第1到64行
voidset_column(ucharcolumn)//设置显示的列
//column=column&
0x3f;
//列的最大值为0X3F,即64
column=0x40|column;
//列的首地址为0X40,
wcmd(column);
//column的取值范围为0~63,共64列
voidset_onoff(ucharonoff)//设置显示开关,onoff取值为0或1
onoff|=0x3e;
//0X3E是关显示,0X3F是开显示
wcmd(onoff);
//所以若onoff为0,则表示关显示,onoff为1,则表示开显示
voidselect_screen(ucharscreen)//选屏,screen取值范围为0,1,2沩氣嘮戇苌鑿鑿槠谔應。
switch(screen)
{
case0:
CS1=0;
CS2=0;
break;
//全屏
case1:
CS2=1;
//左半屏
case2:
CS1=1;
//右半屏
default:
}
voidclear_screen(ucharscreen)//清屏
uchari,j;
select_screen(screen);
//先选屏
for(i=0;
i<
8;
i++)//控制页数0--7,共8页
set_page(i);
//设置页
set_column(0);
//设置列,每页都从第1列开始,共64列
for(j=0;
j<
64;
j++)//控制列数0--63,共64列
wdata(0x00);
//写入0,列地址指针会自动加1
voidinit()//LCD初始化
//忙检测
select_screen(0);
//选屏,全屏
set_onoff(0);
//关显示
//选屏,全屏
set_onoff
(1);
//开显示
clear_screen(0);
//清屏
set_line(0);
//起始行:
voidshow(ucharscreen,ucharpage,ucharcolumn,uchar*p)//显示一个汉字,一个汉字有32字节数据钡嵐縣緱虜荣产涛團蔺。
uchari;
//screen表示选择屏幕,page表示页,column表示列,*p表示汉字的数组
//选屏
set_page(page);
//设置页,写上半页
set_column(column);
//设置列
16;
i++)//控制16列的数据输出
wdata(p[i]);
//汉字的上半部分
set_page(page+1);
//写下半页
//控制列
wdata(p[i+16]);
//汉字的下半部分
voidoneroom1()
//1表示左屏显示,0表示从0页开始显示。
因为一页只有8行点,
//而显示一个汉字需要16行点(整屏有64行点),所以显示一个汉字需要2页
//第0页显示"
一"
字的上半部分,第1页显示"
汉字的下半部分
//2*16表示从第32列开始显示,前面空出0~31列(即2个字的位置)
show(1,0,0*16,yi);
//一
show(1,0,1*16,hao);
//号
show(1,0,2*16,bing);
//病
show(1,0,3*16,fang);
//房
show(2,0,0*16,yi);
//一
show(2,0,1*16,hao);
show(2,0,2*16,chuang);
//床
show(2,0,3*16,wei);
//位
voidoneroom2()
show(1,2,0*16,yi);
show(1,2,1*16,hao);
show(1,2,2*16,bing);
show(1,2,3*16,fang);
show(2,2,0*16,er);
//二
show(2,2,1*16,hao);
show(2,2,2*16,chuang);
show(2,2,3*16,wei);
voidtworoom1()
show(1,4,0*16,er);
//二
show(1,4,1*16,hao);
show(1,4,2*16,bing);
show(1,4,3*16,fang);
show(2,4,0*16,yi);
s