病房呼叫系统设计【开题报告+文献综述+毕业设计】

病房呼叫系统设计【开题报告+文献综述+毕业设计】

ID:471585

大小:5.11 MB

页数:61页

时间:2017-08-07

上传者:U-944
病房呼叫系统设计【开题报告+文献综述+毕业设计】_第1页
病房呼叫系统设计【开题报告+文献综述+毕业设计】_第2页
病房呼叫系统设计【开题报告+文献综述+毕业设计】_第3页
病房呼叫系统设计【开题报告+文献综述+毕业设计】_第4页
病房呼叫系统设计【开题报告+文献综述+毕业设计】_第5页
资源描述:

《病房呼叫系统设计【开题报告+文献综述+毕业设计】》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

毕业设计开题报告电气工程及其自动化病房呼叫机设计一、选题的背景与意义现阶段医院病房呼叫还处于低水平,大多数还是靠步行呼叫,存在医护人员不能及时赶到,不能满足服务效率上的要求,这样不仅会带给病人时间上的耗费,甚至激化医患矛盾等问题,对于医院也会有经济效益损失,并伴随一定安全隐患。病房呼叫机系统是一种新型分布式的网络系统,可以及时准确的找到病人所在位置和哪位病人呼叫的信息,及时解决病人的各种问题,例如:当病人有身体不适或其他需要时,按下从机的呼叫按键,主机就显示该病床号码,那么护士或医生就可以及时找到病人,为其进行及时处理,同时取消报警信号。而当病人在休息未关注点滴瓶时,点滴挂完产生一定的信号,护士或医生收到信号也可以及时处理。这样一来,节省了病人时间,避免了安全隐患,并且带来了极大的方便。市场上的病房呼叫机系统主要有有线和无线两大块。无线呼叫机系统成本高,容易受到各种因素的干扰,而且无线电波会干扰其它的医疗仪器设备。而有线的病房传呼系统虽然需要现场布线,但专线专用,可靠性高,报警信号传输相对稳定,因此本系统采用RS485总线进行传输管理。二、研究的基本内容,拟解决的主要问题该系统由护理主机,呼叫分机和RS485总线组成,病房呼叫机系统框图如图2-1。其中主机上有对应病房病床的LED灯显示,蜂鸣器报警、实时日历液晶显示及其时、秒、分设置按键和报警信号选择的按键(一个用于多报警信号时翻页查找,另一个用于撤销报警源),从机上有呼叫按键及其对应的取消按键,病房门口指示灯和点滴监测电路。61 图2-1病房呼叫机系统框图本系统采用STC12C5A08S2单片机为主机,STC11F02为从机,RS485总线为通讯系统,设计了一种新型分布式病房呼叫机系统,能够实现病房与护理人员间的快速、准确地呼叫及响应功能。该系统采用模块化设计思想,主从式结构。系统工作时,主机依次向从机发送地址信息,各从机接收主机发来的地址信息,如果和自己相同,则向主机发送自己的信号,如有报警信号(呼叫信号或点滴挂完的信号),则点亮主机对应的指示灯和警报蜂鸣器,无报警信号,则发送一个对应信号。各从机和主机之间采用RS485总线标准进行通讯。当有病人按下呼叫按键或者点滴信号消失时,主机有声光报警,同时从机上的指示灯点亮。若医生对该呼叫作出应答,在从机处清除相应的呼叫信息,同时主机从机声光报警信号清除,指示灯熄灭,否则从机上的指示灯一直点亮,主机上一直有声光报警。在本设计中,拟要解决的主要问题如下:1、通信协议的选择2、通信地址的分配3、164端口扩展问题4、点滴监测的测量问题5、主机与从机的软件编程61 三、研究的方法与技术路线本系统的设计可分为三个主要部分:护理主机,呼叫分机和RS485总线。下面将对这三个组成部分的主要工作原理分别加以介绍。护理主机,原理图如图3-1所示,该系统采用STC12C5A08S2单片机为主控芯片。该系统的基本工作原理:系统工作时,主机依次向从机发送地址信息,各从机接收主机发来的地址信息,如果和自己相同,则向主机发送自己的信号,如有报警信号(呼叫信号或点滴挂完的信号),则点亮主机对应的指示灯和警报蜂鸣器,无报警信号,则发送一个对应信号。若医生对该呼叫作出应答,可通过从机的清除按键清除相应的呼叫信息,如果多种请求同时出现,医生可通过按键翻页查看。图3-1护理主机呼叫分机,原理图如图3-2所示,该系统采用STC11F02单片机为从机芯片。该系统的基本工作原理:当病人有需要时,手动按下按键,呼叫值班医生或护士,或者通过反射式红外线光电传感器TCRT5000监测点滴的液位信号传给单片机,单片机接收到信号时点亮对应的指示灯,同时通过网络通信传给主机,主机发出对应的声光报警。61 图3-2呼叫分机RS485接口电路,原理图如图3-3所示,该系统采用3082芯片进行主机与从机间的通信。采用RS485总线标准是为了缩短信号传输距离,采用主从式多机通讯系统,并且提高信号传输时的抗共摸干扰能力。图3-3RS485接口电路点滴监测电路采用反射式红外线光电传感器TCRT5000监测点滴的液位,以及时反映病人点滴瓶的信息。端口扩展问题采用HC164芯片扩展。软件编程采用C语言编程。四、研究的总体安排与进度1.2010年12月上旬—2010年12月下旬,查阅相关资料,完成开题报告。2.2010年12月下旬—2011年2月中旬,通过继续深入阅读相关文献,翻译文献,进一步了解病房呼叫机系统,选择相应的芯片。3.2011年2月中旬—2011年3月中旬,熟悉整个电路原理,设定硬件电路的参数。4.2011年3月中旬-2011年5月初,编写软件程序。5.2011年4月初—2011年5月中旬论文撰写。61 五、主要参考文献[1]曹君君,于淑英,刘玉春.重视危机管理减少医疗纠纷[J].管理杂志,2002,2(3):141.[2]卢仲毅,唐时奎.实施医患沟通制改善医患关系[J].中华医院管理杂志,2002,18(12):7261.[3]杨雷,李红旗,郏东耀,等.单片机在医院监护系统中的应用[J].上海:电子技术,2001(4):41-42.[4]尹丽丽,徐昌华,吴跃东.基于单片机控制的智能医护仪的设计与实现[J].电子工程师,2005(1):13-14.[5]傅征,任连仲.医院信息系统建设与应用[M].北京:人民军医出版社,2002.[6]李宝连,王剑钢.基于RS485接口的医院输液监控系统[J].山西电子技术,2004(5):13-14,27.[7]何立民.MC-51系列单片机应用系统设计[M].北京:航空航天大学出版社,1995.[8]胡汉才.单片机原理及其接口技术[M].北京:清华大学出版社,2002.61 毕业设计文献综述电气工程与自动化病房呼叫系统设计摘要:为提高医院的工作效率,保证病人及时得到医护人员的救助,设计了一种新型的医院病房呼叫机系统。该系统以STC12C5A08S2单片机,STC11F02单片机为核心,采用RS485总线进行通信,实现病房与护理人员间的快速、准确的呼叫及响应功能。系统由护理主机、呼叫从机、RS485总线通讯声光报警及LED显示等组成。采用了主从分布式多机通信,能同时监控多个病房的呼叫并进行处理,通过采用RS485总线通信系统实现远距离,多对一的呼叫。关键字:STC12C5A08S2;STC11F02;RS485总线;主机;从机一、背景1.1病房呼叫机系统病房呼叫机系统由安装在病区护士站的呼叫主机和分别设置在病房床头,一旦病房有人按下呼叫按钮或者点滴信号的消失,护士站的主机就发出声光报警,同时对应病房门口的显示灯同步显示,护士人员便可以立刻赶往病房处理紧急情况。病房呼叫机系统提高了医院管理水平和服务水平,具有广阔的应用前景,市场的应用如基于RS-485总线的病房数显呼叫器的设计[1]、基于CAN总线的输液滴速监控系统的设计[4]、病区护理站无线呼叫系统的设计[5]、基于PL3105的病房呼叫系统设计[7]。1.2病房呼叫机系统的研究现状目前使用的病房呼叫机系统大多采用数字电路构成,一般都具有声光报警功能,医护人员能够了解病人的医护请求。病房呼叫系统的主机一般都设在护士值班室。主机通过导线与各病房及各病床的终端呼叫器(一般为机械开关)相连。还有一些采用无线通信技术进行通信,但由于无线信号容易对医院的器材产生很大的干扰,所以在使用过程中常出现不必要的麻烦。自90年代前期,一些公司、厂家陆续推出各型医用呼叫机系统,安装于各个医院的住院床位,但大多数医院在使用中暴露出诸多问题。比如传输距离受到限制等问题。1.3病房呼叫机的发展趋势61 随着科技水平和医疗水平的进步,信息化时代的飞速发展,医院的服务理念也随之发生了相应的改变,树立了以人为本,全心为患者服务意识。为了方便患者,提高服务质量,病房呼叫机已经成为了国内外各类医院中广泛使用的一种电子设备。病房呼叫机发展到现在,已经不再是简单的医-患之间沟通的工具,在实际应用当中既要兼顾到医院的整体设计,又要具有良好的实用性、装饰性。病房呼叫机的应用将成为生活中的必需品。二、病房呼叫机的方法病房呼叫机由采用STC12C5A08S2单片机为主机,STC11F02为从机,RS485总线为通讯系统,设计了一种新型分布式病房呼叫机系统,能够实现病房与护理人员间的快速、准确地呼叫及响应功能。该系统采用模块化设计思想,主从式结构。系统工作时,主机依次向从机发送地址信息,各从机接收主机发来的地址信息,如果和自己相同,则向主机发送自己的信号,如有报警信号(呼叫信号或点滴挂完的信号),则点亮主机对应的指示灯和警报蜂鸣器,无报警信号,则发送一个对应信号。各从机和主机之间采用RS485总线标准进行通讯。当有病人按下呼叫按键或者点滴信号消失时,主机有声光报警,同时从机上的指示灯点亮。若医生对该呼叫作出应答,在从机处清除相应的呼叫信息,同时主机从机声光报警信号清除,指示灯熄灭,否则从机上的指示灯一直点亮,主机上一直有声光报警。本系统整体框图如图1。图1病房呼叫机系统框图文献[1]的系统是以AT89C51单片机为控制核心、采用RS48561 总线进行通信,实现病房与护理人员间的快速、准确地呼叫及响应功能。系统由护理主机、呼叫分机、RS485总线通信声光报警及LED显示等组成。采用了主从分布式多机通信,能同时监控多个病房的呼叫并进行分级处理,通过采用RS485总线通信系统实现远距离、多对一的呼叫。文献[4]设计的输液滴速监控系统采用单片机实现,利用光电传感器实现对液滴速度以及液位的可靠检测,通过步进电机调节瓶子高度及阀门的大小来控制输液的速度。利用ZLG7289构成的键盘显示电路来完成床位号(即网络地址)、点滴速度的设置及实时显示;根据医院环境的特殊要求,系统利用CAN现场总线组建通信模块,并通过CAN控制器与上位机进行通信。另外,系统还有自动报警的功能。文献[5]的系统利用单片机及无线数传模块进行数据的发送与接收,设计出了小巧的便携式呼叫信息接收机,解决护理站护士到病室内进行治疗护理时,听不到其他病室患者呼叫的蜂鸣声,造成危急患者得不到及时抢救的问题,接收机的可靠接收距离在800m以内,具有16个信道可供不同楼层选用,具有数据传送校验功能,功耗小,性能稳定可靠。值班护理人员能随身携带病室呼叫信息接收机,在护理站内不管在哪个病室都能随时接收到患者的呼叫信息,提供迅速及时的治疗和护理,提高患者对护理工作的满意度;中午和夜间还可将病区护理站传呼系统的声音关闭,有利于患者休息。文献[7]设计了基于可编程载波通信芯片PL3105的新型病房呼叫系统。系统分控制器和载波终端两层结构,均以PL3105为主控制单元,并以低压电力线为“总线”传输相应的控制命令。系统软件采用功能模块设计思想,提高了系统移植性和可靠性。病房呼叫系统的方法有很多种,主要都是主从分布式多机通信的结构,不同之处在于采用的核心芯片不一样,本系统采用的是STC系列的单片机作为核心芯片,STC系列单片机加密性强,很难解密或破解,并且有超强的抗干扰能力,超低功耗,在系统可编程,无需编程器,可远程升级等优点。三、发展趋势病房呼叫机系统是一种新型分布式的网络系统,可以及时准确的找到病人所在位置和哪位病人呼叫的信息,及时解决病人的各种问题,例如:当病人有身体不适或其他需要时,按下从机的呼叫按键,主机就显示该病床号码,那么护士或医生就可以及时找到病人,为其进行及时处理,同时取消报警信号。而当病人在休息未关注点滴瓶时,点滴挂完产生一定的信号,护士或医生收到信号也可以及时处理。这样一来,节省了病人时间,避免了安全隐患,并且带来了极大的方便。61 四、结论本系统由护理主机,呼叫分机和RS485总线组成,实现病人与护理人员间的快速、准确地呼叫及响应功能,实现远距离、多对一的呼叫功能。其中主机上有对应病房病床的LED灯显示,蜂鸣器报警、实时日历液晶显示及其时、秒、分设置按键和报警信号选择的按键(一个用于多报警信号时翻页查找,另一个用于撤销报警源),从机上有呼叫按键及其对应的取消按键,病房门口指示灯和点滴监测电路。系统结构简单、性能可靠,是医院实现提高工作效率和改善服务质量的有效途径之一。参考文献:[1]全为名.基于RS-485总线的病房数显呼叫器的设计[J].微计算机信息,2002.18(9)[2]尹丽丽,徐昌华,吴跃东.基于单片机控制的智能医护仪的设计与实现[J].中国医疗器械信息,2008.14(5)[3]张丽红,伦翠芬,李艳萍.基于RS485总线的医院智能呼叫系统硬件设计[N].河北科技师范学院学报2009-9.23(3)[4]张娅莉,廖承虎,沈爱祥,李艳萍,吕双娜.基于单片机的病房呼叫系统的研制[J].中国医疗器械信息,2008.14(5)[5]倪伟.病房智能呼叫系统的研究和开发.[J].电气自动化,2004.26(2)[6]朱晓颖,胡明.基于CAN总线的输液滴速监控系统设计[C].江苏徐州,中国矿业大学信息与电气工程学院[7]袁惠萍,张缀琴,张永奎,楼然苗.病区护理站无线呼叫系统的设计[R].浙江舟山:浙江海洋学院,2008-11.29(11):17-19[8]罗伏力.80C31控制的病房呼叫系统[J].企业技术开发2002(6)[9]朱艳华,田行军,李夏青.基于PL3105的病房呼叫系统设计[N].北京石油化工学院学报2009-6.17(2)[10]XuLixin,LiQingliang,ChenZhen,QiXinbo,ZhangXincheng.ApplicationoftheWirelessDigitalTransmissionTechnologyinRemoteECGMonitoringSystem.Dept.ofControlScience&Engineering,HuazhouUniversityofScience&Technology,Wuhan[11]KashifAltaf,JavaidIqbal.MultiprocessorCommunicationusing8051MicrocontrollerandRS-485LineDriver.DepartmentofMechatronics,CollegeofE&MENationalUniversityofScienceandTechnologyRawalpindi,Pakistankashifaltafl@gmail.com,jiqbal-EME@nust.edu.pk[12]KiHwanEom,JungYeonChoiandMinSupPark.WirelessNurseCall61 System.DepartmentofElectronicEngineering,DonggukUniversity,seoul100-715,Korea&YoungWooSystem,Seoul100-715,Korea.2009-7-1661 本科毕业设计(20届)病房呼叫机设计摘要【摘要】为提高医院的工作效率,保证病人及时得到医护人员的救助,本人设计了一种新型的医院病房呼叫机系统。该61 系统以STC12C5A08S2单片机,STC11F02单片机为核心,采用RS485总线进行通信,实现病房与护理人员间的快速、准确的呼叫及响应功能。系统由护理主机、呼叫从机、RS485总线通信、声光报警及时钟实时显示等组成,采用主从分布式多机通信,能同时监控多个病房的呼叫对其进行处理,并且通过采用RS485总线通信系统实现了远距离,多机通信的呼叫。【关键词】STC12C5A08S2;STC11F02;RS485总线;主机;从机。61 Abstract【ABSTRACT】Toimprovetheefficiencyofthehospitalandtoensurepatientsreceivetimelymedicalrelief,designedanewtypeofhospitalwardcallingsystem.ThesystemSTC12C5A08S2SCM,STC11F02MCUcore,usingRS485communicationbus,toachievebetweenwardsandnursesquicklyandaccuratelycallandresponsecapabilities.Thehostbythecaresystem,calltheslave,RS485buscommunication,real-timesoundandlightalarmandLCDdisplayandothercomponents.Adoptedthemaster-slavedistributedmulti-machinecommunication,cansimultaneouslymonitormultiplecallsandprocessingunit,throughtheuseofRS485buscommunicationsystemtoachievelong-range,many-to-call.【KEYWORDS】STC12C5A08S2;STC11F02;RS485bus;Host;Slave.61 目录1绪论11.1课题的背景及研究意义11.2国内外研究现状11.3本病房呼叫机系统的设计要求及拟实现的主要功能12系统总体方案与选择32.1控制器方案选择32.2主从机之间的通信方案选择32.3点滴液位监测电路方案选择32.4显示电路方案选择42.5系统总体设计43系统硬件电路设计63.1电源电路63.2时钟产生、显示模块电路63.3点滴液位监测电路73.4通信驱动电路83.5串行口扩展电路94系统软件设计114.1通信接口114.2通信协议114.3主机程序设计134.4从机程序设计134.574HC595串行口扩展程序设计144.6时钟产生、显示模块程序设计145调试165.1时钟产生、显示电路调试165.274HC595串行口扩展电路调试185.3RS485多机通信电路调试196总结226.1时钟产生、显示模块电路调试总结2261 6.274HC595串行口扩展电路调试总结226.3RS485多机通信电路调试总结22参考文献23附录2561 1绪论1.1课题的背景及研究意义现阶段医院病房呼叫机还处于低水平,大多数还是靠人工步行呼叫,存在医护人员不能及时赶到,不能满足服务效率上的要求,这样不仅会带给病人时间上的耗费,甚至激化医患矛盾等问题,对于医院也会有经济效益损失,并存在一定安全隐患。病房呼叫机系统是一种分布式的网络系统,可以及时准确的找到病人所在位置和所要的需求,及时解决病人的各种请求,例如:当病人有身体不适或其他需要时,按下从机的呼叫按键,主机就点亮该病床指示灯,那么护士或医生就可以及时找到病人,为其进行及时处理,同时取消报警信号。而当病人在休息未注意点滴瓶时,点滴挂完时产生一定的信号,护士或医生也可以收到该信号对其进行及时处理。这样一来,节省了病人时间,消除了安全隐患,并且带来了极大的方便。市场上的病房呼叫机系统主要有有线和无线两大块。无线呼叫系统成本高,容易受到各种因素的干扰,而且无线电波会干扰其它的医疗仪器设备。而有线的病房呼叫机系统虽然需要现场布线,但专线专用,可靠性高,报警信号传输相对稳定,因此本系统采用RS485总线进行传输管理。由此可见,基于RS485总线的病房呼叫机是一个很有开发前景的网络系统,给病人提供了方便,同时也提高医院的工作效率和最大程度上的经济效益。该系统具有广泛的社会意义与重大的使用价值。1.2国内外研究现状随着科技水平和医疗水平的进步,信息化时代的飞速发展,医院的服务理念也随之发生了相应的改变,树立了以人为本,全心为患者服务意识。为了方便患者,提高服务质量,病房呼叫机系统已经成为了国内外各类医院中广泛使用的一种电子设备。病房呼叫系统发展到现在,已经不再简单是医-患之间沟通的工具,在实际应用当中既要兼顾到医院的整体设计,又要具有良好的实用性、装饰性。病房呼叫机系统的应用将成为生活中的必需品。目前使用的病房呼叫机系统大多采用无线通信技术进行通信,一般都具有声光报警功能,医护人员能够了解病人的医护请求。但由于无线信号容易对医院的器材产生很大的干扰,所以在使用过程中常出现不必要的麻烦。还有一些采用数字电路构成,病房呼叫机系统的主机一般都设在护士值班室。主机通过导线与各病房病床的终端呼叫器(一般为机械开关)相连。因此病房与值班室之间需要大量的连线,布线施工麻烦,成本也高。自90年代前期,一些公司、厂家陆续推出各种类型的医用呼叫机系统,安装于各个医院的住院床位,但大多数医院在使用中暴露出诸多问题。关键问题在于传输距离受到限制等问题。61 1.3本病房呼叫机系统的设计要求及拟实现的主要功能针对目前病房呼叫机系统的发展状况及其所存在的问题,本文介绍了基于RS485总线的病房呼叫机系统的设计过程,该系统解决了传输距离受限制的问题。该系统由安装在病区护士站的护理主机和分别设置在病房床头的呼叫从机,以及各病床对应的点滴监测系统组成。一旦病房中有人按下呼叫按钮或者产生点滴液位监测信号时,护士站的主机就发出相应的声光报警,同时对应病房门口的显示灯同步显示,护士人员便可以方便找到病房解决病人需要的情况。本系统由护理主机,呼叫分机和RS485总线组成,实现病人与护理人员间的快速、准确地呼叫及响应功能,实现远距离、多对一的呼叫功能。其中主机上有各病房请求信号的LED灯显示,蜂鸣器报警、日历时钟实时液晶显示及其年月日、时分调整设置按键,从机上有呼叫按键及其对应的取消按键,病房门口指示灯和点滴液位监测电路。系统结构简单、性能可靠,是医院实现提高工作效率和改善服务质量的有效途径之一。本病房呼叫机,可以及时准确的找到病人所在位置,解决病人的各种问题,例如:当病人有身体不适或其他需要时,按下从机的呼叫按键,主机就显示该病床呼叫按键指示灯,那么护士或医生就可以及时找到病人所在的位置,对其进行及时的处理,同时在病房中取消报警信号。这样一来,节省了病人时间,避免了安全隐患,并且带来了极大的方便。基于RS485的病房呼叫机系统提高了医院管理水平和服务水平,具有广阔的应用前景。61 2系统总体方案与选择根据系统设计要求,对系统的从机呼叫主机,点滴液位监测系统,声光报警以及日历时钟实时显示等功能进行了分析。为了提高产品的稳定性,控制器采用STC单片机完成。对于各模块的设计,分别讨论如下:2.1控制器方案选择方案一:使用高端的ARM芯片,可以轻松实现高速实时同步的功能,但是由于目前病房呼叫系统的市场竞争力相当大,若为了设计的简单而失掉了产品最重要的价格优势,那么我们的产品将永远堆在实验室里。方案二:采用性价比很高的STC单片机作为控制器芯片,既可实现稳定的系统设计,又可以使生产成本控制在很低的范围。STC系列的单片机作为核心芯片,加密性强,很难解密或破解,并且有超强的抗干扰能力,超低功耗,并且在系统可编程,无需编程器,可远程升级等优点。综合考虑,最终采用了方案二。2.2主从机之间的通信方案选择方案一:使用RS232标准进行通信,通信两端使用的驱动器和接收器分别负责TTL电平到RS232C电平和RS232C电平到TTL电平的转换。由于这两类芯片均使用单端电路,因此两者之间的接地电位的电位差Vs可能相差会比较大,这在通信距离较远时将尤为明显,同时信号电平也易受到干扰。RS232C规定最大负载电容为2500pF,这个电容也限制了传送距离和传送速率,而且RS232C电路本身也不具有抗共模干扰的特性,RS232C的通信距离和通信速率均受到了限制。RS232使用12V,0,-12V电压来表示逻辑,(-12V表示逻辑1,12V表示逻辑0),使用绝对电压表示逻辑,并且传输距离短,一般用于15m以内的通信。此外,RS232不能实现多机通信的功能。方案二:使用RS485标准进行通信,RS485标准是一种基于平衡发送和差分接收的串行总线,具有很强的抗共模干扰能力,在适当的波特率下传输距离远;同时易于进行网络扩展,被广泛的应用在很多工业现场。与RS232接口相比,RS485总线的传输距离更长,抗干扰能力也更强。由于RS-485芯片的特性,接收器的检测灵敏度为mv,即差分输入端VA-VBmv,输出逻辑1,VA-VBmv,输出逻辑0;而A、B端电位差的绝对值小于200mv时,输出为不确定。接口信号电平比RS-232-C降低了,就不易损坏接口电路的芯片,且该电平与TTL电平兼容,可方便与TTL电路连接。其接口的最大传输距离为1200m(标准值),总线上允许连接多达256个收发器(即具有多站能力),这样用户可以利用单一接口比较方便地建立设备网络。与RS232相比,RS485能实现多机通信的功能。综合考虑,最终采用了方案二。61 2.3点滴液位监测电路方案选择病人在打点滴时需要随时注意点滴情况,打完时自己或陪护人去按铃向护士进行呼叫,提醒护士来换药。这样如果病人或陪护人稍不注意,没有及时换药,就会导致病人静脉回血,给病人带来危险。因此本系统设计了点滴液位监测电路。方案选择如下:方案一:使用电感式传感器。使用继电器输出,输出信号标准,电路简单。其工作原理是滴管中液滴的滴下使电感量发生变化,通过LC振荡电路后输出变化的频率值,经过F/V变换电路之后,再通过电压比较后输出TTL电平信号来监测液滴。经过调试之后发现由于瓶中液体和周围环境随时会发生变化,很容易触发传感器,而使系统采集到错误的信号。方案二:使用非接触式红外对管传感器。通过非接触式红外对管传感器监测点滴液位信号,当液面低于给定的输液位置时,认为输液过程已经结束,应发出报警信号。非接触式红外对管传感器,由于红外光波长比可见光长,因此受可见光的影响较小。此方案成本低,电路简单,且不受可见光的干扰,稳定性好。其发射端和接收端是分开的,只需将非接触式红外对管传感器分别固定在滴管的两侧进行发射接收.当瓶内点滴液面在光路之上时,红外接收管不能接收到红外发射管发出的光;当瓶内点滴液面逐渐下降至光路附近时,红外接收管能接收到红外发射管发出的光,从而驱动相应电路发出报警信号,通知医护人员及时采取措施。监测电路如图2-1。图2-1点滴监测电路由于医疗系统本身的特殊要求,监测系统绝对不能直接接触药液,否则可能造成细菌污染,因此必须要进行非接触测量;同时非接触式红外对管传感器外形尺寸小巧,灵敏度高且价格便宜。能满足本设计输液器的各项性能要求指标。综上所述,可知我们选择了方案二。2.4显示电路方案选择方案一:采用数个七段数码管显示,控制简单易行,所占体积较小,但需要额外的驱动或扩展芯片,整体结构不够直观大方。方案二:使用128×64LCD液晶进行日历时钟实时显示,简单,电路性价比高,又能很好的完成驱动作用,并且感觉美观大方,所需的元件也较少。采用LED显示病房号码,显示清晰明了,易于查看。综上所述,根据本系统要求,采用方案二。61 2.5系统总体设计本人采用STC12C5A08S2芯片的单片机作为主机核心芯片,STC11F02芯片的单片机为从机核心芯片,RS485总线为通信系统方式,设计了一种分布式的病房呼叫机系统,能够实现病房与护理人员之间的呼叫及响应功能。该系统采用模块化设计思想,主从式结构。系统工作时,主机依次向从机发送地址信息,各从机接收主机发来的地址信息,如果和自己相同,则向主机发送自己的请求信号(呼叫信号或点滴液位监测信号),主机接收到从机的请求信号,点亮主机上对应的指示灯和警报蜂鸣器,无请求信号,不响应。各从机和主机之间采用RS485总线标准进行通信。当有病人按下呼叫按键或者点滴液位监测信号时,主机有声光报警,同时从机上的指示灯点亮。若医生对该请求信号作出应答,在从机处清除相应的请求信息,同时主机与从机的声光报警信号清除,指示灯熄灭,否则主机与从机的声光报警信号一直存在,指示灯也一直点亮。本系统整体框图如图2-2。图2-2病房呼叫机整体框图61 3系统硬件电路设计3.1电源电路为确保经过长距离传输的损耗之后仍有5V电压供电,并且考虑到LM7805的输入、输出电压差不小于2.5V,本系统采用12V的稳压电源直接为系统供电,经过LM7805稳压及并联电解电容和瓷片电容进行滤波后得到一个约为+5V的直流电,即为电路的工作电源。电路中二极管D1的作用是防止系统因电源反接导致电路损坏。液晶显示的电源3.3V由AMS1117电路输出。电源电路如图3-1所示。图3-1电源电路3.2时钟产生、显示模块电路时钟产生、显示模块电路,实时显示此时此刻的日历时钟,通过DS1302芯片实现时钟产生的功能,采用MzL05-12864LCD液晶实现显示的功能,时间调整通过四个按键来完成。按键1是时间调整与时间显示的切换,按键2的功能是进入调整状态后,时分、年月日位之间的切换,按键3的功能是位递加,按键4的功能是位递减。DS1302是DALLAS公司推出的涓流充电时钟芯片,内含有一个实时时钟/日历和31字节静态RAM。时钟操作可通过AM/PM指示决定,采用24或12小时格式。DS1302与单片机之间能简单地采用同步串行的方式进行通信,仅需用到三条线(1)RES(复位),(2)I/O(数据输入输出线),(3)SCLK(串行时钟)。时钟/RAM的读/写数据以一个字节或多达31个字节的字符组方式通信。DS1302工作时功耗很低,同时能保持数据和时钟信息的功率小于1mW。DS1302是由DS1202改进而来,增加了以下的特性:双电源管脚用于主电源和备份电源供应,Vcc1为可编程涓流充电电源,附加七个字节存储器。它广泛应用于电话、传真、便携式仪器以及电池供电的仪器仪表等。显示模块电路采用MzL05-12864液晶实现。MzL05-12864为一块小型的128X64点阵的LCD显示模组,模组上的LCM采用COG技术将控制(包括显存)、驱动器集成在LCM的玻璃上,接口简单、操作方便;为方便用户的使用,铭正同创在LCM的基础上设计了MzL05-12864模组,将模组所必需的外围电容电阻集成到模组上。MzL05-12864模组与各种MCU均可进行方便简单的接口操作。显示映射情况:MzL05-12864液晶显示模组的显示器上的显示点与驱动控制芯片中的显示缓存RAM是一一对应的;共有65(8Pagex8bit+1)X132个位的显示RAM区。而显示器的显示点阵大小为64X128点,所以实际上在液晶显示模块中有用的显示RAM区为6461 X128个位;按byte为单位划分,共分为8个Page,每个Page为8行,而每一行为128个位(即128列)。驱动控制芯片的显示RAM区每个byte的数据对应屏上的点的排列方式为:纵向排列,低位在上高位在下。时钟产生、显示模块电路如图3-2。图3-2时钟产生、显示模块电路3.3点滴液位监测电路点滴液位监测电路是通过非接触式红外对管传感器实现的。当病人在休息未关注点滴瓶时,点滴挂完时产生一定的信号,从而传达给单片机通信,护士或医生收到信号时可以进行及时处理。非接触式红外对管传感器,其发射端和接收端是分开的,这一特性非常适用本系统,只需将非接触式红外对管传感器分别固定在点滴瓶的两侧进行发射接收。当瓶内点滴液面在光路之上时,红外接收三极管不能接收到红外发射二极管发出的光,从而截止,值为“1”;当瓶内点滴液面逐渐下降至光路附近时,红外接收三极管能接收到红外发射二极管发出的光,从而导通,值为“0”,并且驱动相应电路发出报警信号,通知医护人员及时采取措施。报警时的点滴液剩余量应该足够,符合护理人员对点滴剩余量的最低要求。点滴液面监测电路如图3-3。61 图3-3点滴液位监测电路3.4通信驱动电路RS485接口是一种基于平衡发送和差分接收的串行总线,具有很强的抗共模干扰能力,在适当的波特率下传输距离远;同时易于进行网络扩展,被广泛的应用在很多工业现场。良好的接口设计,应该在硬件上保证系统有良好的抗干扰性、稳定性和易扩展性。由于RS-485芯片的特性,接收器的检测灵敏度为mv,即差分输入端VA-VBmv,输出逻辑1,VA-VBmv,输出逻辑0;而A、B端电位差的绝对值小于200mv时,输出为不确定。RS485接口采用半双工工作方式,任何时候只能有一点处于发送状态,因此,发送电路须由使能信号加以控制。RS485用于多点互相连接时非常方便,可以省掉许多信号线。本系统选用了性价比很高的半双工接口芯片SN75HVD3082。SN75HVD3082的一条总线可以连接多达256个节点,因此在每个从机接口上可以扩展更多的节点。SN75HVD3082的发送和接收功能转换是由它的,DE端控制的。=1,DE=1时,SN75HVD3082为发送状态;=0,DE=0时,SN75HVD3082处于接收状态。一般使用单片机的一根口线连接,DE端。在上电复位时,由于硬件电路稳定需要一定的时间,并且单片机各端口复位后处于高电平状态,这样就会使总线上各个分机处于发送状态,加上上电时各电路的不稳定,可能向总线发送信息。因此,如果用一根口线作发送和接收控制信号,应该将口线反向后接入SN75HVD3082的控制端,使上电时SN75HVD3082处于接收状态。RS485通信接口电路如图3-4。61 图3-4RS485通信接口电路3.5串行口扩展电路串行口扩展电路是通过74HC595实现的。74HC595具有8位移位寄存器和一个存储器,三态输出的功能。数据在SHcp的上升沿输入,在STcp的上升沿进入的存储寄存器中去。如果两个时钟连在一起,则移位寄存器总是比存储寄存器早一个脉冲。移位寄存器有一个串行移位输入(Ds),一个串行输出(Q7’)和一个异步的低电平复位;存储寄存器有一个并行8位的具备三态的总线输出,当使能时(为低电平),存储寄存器的数据输出到总线。每当SHcp上升沿到来时,DS引脚当前电平值在移位寄存器中左移一位,在下一个上升沿到来时移位寄存器中的所有位都会向左移一位,同时Q7'也会串行输出移位寄存器中高位的值,这样连续进行8次,就可以把数组中每一个数(8位的数)送到移位寄存器;然后当STcp上升沿到来时,移位寄存器的值将会被锁存到锁存器里,并从Q1—Q7引脚输出。单片机将数据送出控制相应的请求指示灯的亮灭。一个病房中有两张病床,每张病床对应两盏指示灯,一盏指示灯是病人的呼叫信号指示灯,另一盏是点滴液位监测信号指示灯,本系统模拟两个病房,共有8盏指示灯。若需要扩展更多的病房信号指示灯,可通过74HC595的三根引线进行扩展。串行口扩展电路及对应病房指示灯如图3-5。61 图3-5串行口扩展电路及对应病房指示灯61 4系统软件设计基于STC单片机为核心芯片的病房呼叫机系统主要由由护理主机,呼叫分机和RS485总线组成,同时还有时钟产生、显示模块与各病房请求指示灯的显示。软件系统运行流程主要有主机主程序,主机中断服务子程序,从机程序,74HC595串行口扩展程序,时钟产生、显示模块程序等组成。4.1通信接口本系统通信接口采用的是RS485总线主从式多机通信标准。所谓主从式,即在数个单片机中,有一个是主机,其余的为从机,从机要服从主机的调度、支配。RS485是一种单机发送、多机接收的单向、平衡传输规范,并增加了多点、双向通信能力,即允许多个发送器连接到同一条总线上,同时增加了发送器的驱动能力和冲突保护特性,扩展了总线共模范围。RS485串行标准总线系统如图4-1。图4-1RS485串行标准总线系统4.2通信协议主机采用串口2方式1,从机采用串口1方式1,波特率设置为9600bps。不发送数据时,进入延时状态。从机发送信号时,先发送地址,再发送数据。主机STC12C5808S2的串口初始化为AUXR|=0x10;//允许独立波特率,不加倍AUXR1=0x00;//设置P1口为通信口S2CON=0x50;//方式1,允许串口2接收BRT=-(FOCS/BAUD/12/32);//FOCS/(16*BAUD);IE=0x90;//总中断允许,串行口中断允许通信协议见表4-1。61 表4-1通信协议IDDATA0x01(1号病房)1号病床2(呼叫按键)3(液滴)4(取消信号按键)2号病床8(呼叫按键)9(液滴)16(取消信号按键)0x02(2号病房)1号病床2(呼叫按键)3(液滴)4(取消信号按键)2号病床8(呼叫按键)9(液滴)16(取消信号按键)………1号病床2(呼叫按键)3(液滴)4(取消信号按键)2号病床8(呼叫按键)9(液滴)16(取消信号按键)0xFF(256号病房)1号病床2(呼叫按键)3(液滴)4(取消信号按键)2号病床8(呼叫按键)9(液滴)16(取消信号按键)从机发送过程中的10位数据通过TXD发送,通过RXD接收。串口通信数据格式包含一个起始位(0),8个数据位(低位在先),和一个停止位(1)。接收时,停止位进入特殊功能寄存器SCON的RB8位。波特率由独立波特率发生器BRT的溢出率决定。串口通信数据格式如图4-2。61 图4-2串口通信数据格式4.3主机程序设计主机采用串口2方式1,波特率设置为9600bps。系统工作时,主机先处理时钟产生、显示模块电路的功能。当接收从机一个字节数据完成时,主机进入中断子程序,中断中读取寄存器中的数据,读取完数据后跳出中断。在主函数中判断是否为从机的地址,如是,再根据接收到的命令数据点亮相应的请求指示灯。主机程序流程图如图4-3。主机中断子程序如图4-4。图4-3主机程序流程图图4-4主机中断子程序61 4.4从机程序设计从机等待呼叫按键或点滴液位监测信号的信息,当有这些信息产生时,从机发送地址和命令数据。从机采用串口1方式1,波特率设置为9600bps。总共可以连接256台从机。如图4-5。图4-5从机程序流程图4.574HC595串行口扩展程序设计单片机将数据送出控制相应的请求指示灯的亮灭。每当SHcp上升沿到来时,DS串行数据输入引脚中当前电平值在移位寄存器中左移一位,在下一个上升沿到来时移位寄存器中的所有位都会向左移一位,同时Q7'也会串行输出移位寄存器中高位的值,这样连续进行8次,就可以把数组中每一个数(8位的数)送到移位寄存器;然后当STcp上升沿到来时,移位寄存器的值将会被锁存到锁存器里,并从Q1-7引脚输出。74HC595串行口扩展软件流程图如图4-6。61 图4-674HC595串行口扩展软件流程图4.6时钟产生、显示模块程序设计DS1302与微处理器进行数据交换时,首先由微处理器向电路发出命令字节,命令字节最高位MSB(D7)必须是逻辑1,如果D7=0,则禁止写DS1302,即写保护;D6=0,指定时钟数据,D6=1,指定RAM数据;D5—D1指定输入或输出的特定寄存器;最低位LSB(D0)为逻辑0,指定写操作(输入),D0=1,指定读操作(输出)。在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0到高位7。日历、时间寄存器见表4-2。表4-2日历、时间寄存器寄存器名称命令字取值范围写操作读操作秒寄存器80H81H00—59分寄存器82H83H00—59时寄存器84H85H01—12或00—23日寄存器86H87H01—28、29、30、31月寄存器88H89H01—12年寄存器8CHBDH00--99显示部分是通过MzL05-12864液晶实现。用户如要点亮LCD屏上的某一个点时,实际上就是对该点所对应的显示RAM区中的某一个位进行置1操作,所以就要确定该点所处的行地址、列地址。液晶显示模组的行地址实际上就是Page的信息,每一个Page应有8行;而列地址则表示该点的横坐标,在屏上为从左到右排列,Page中的一个Byte对应的是一列(861 行,即8个点),达128列。可以根据这样的关系在程序中控制LCD显示屏的显示。一个汉字为16*16,字符是8*16。时钟产生、显示模块的程序流程图如图4-7。图4-7时钟产生、显示模块的程序流程图61 5调试5.1时钟产生、显示电路调试时钟产生、显示电路是由DS1302时钟芯片,MzL05-12864液晶显示及按键组成。DS1302可以通过小电流对电池进行充电,同时电池可以作为DS1302实时显示的后备电源,提供掉电保护,防止主机关闭后无供电电源。在不经过按键调整时间的前提下,DS1302接上电源后的初始时间为11年01月01日00点00分00秒,显示如图5-1。图5-1初始化显示的时间按键调整有四个按键,按键1的功能是时间调整与时间显示之间的切换,按键2的功能是进入调整状态后,时分、年月日位之间的切换,按键3的功能是位递加,按键4的功能是位递减。时分、年月日时间调整的按键如图5-2。图5-2实时时间调整的按键按键调整后时分、年月日的实时时间为11年05月05日17点00分05秒——61 11年05月05日17点00分07秒。液晶显示的时间如图5-3—图5-5。图5-3按键调整后的实时时间1图5-4按键调整后的实时时间2图5-5按键调整后的实时时间35.274HC595串行口扩展电路调试61 单片机将数据送出控制相应的请求指示灯的亮灭。LED的接法为共阳极连接,故低电平点亮。输入数据为0FF,全灭的8盏指示灯如图5-6。图5-6呼叫信号与点滴信号指示灯1输入数据为00,全亮的8盏指示灯如下图5-7。图5-7呼叫信号与点滴信号指示灯2输入数据为0AA,一亮一灭的8盏指示灯如图5-8。图5-8呼叫信号与点滴信号指示灯35.3RS485多机通信电路调试61 从机等待呼叫按键或点滴液位监测信号的信息,当有这些信息产生时,从机先发送本机的地址给主机,再发送信息对应的数据。主机接收到数据后点亮相应的请求指示灯。10位数据通过TXD发送,RXD接收。串口通信数据格式包括一个起始位(0),8个数据位(低位在先),和一个停止位(1)。数据与地址之间用3.4S延时,以方便区别。地址为02的从机发送的四个按键地址与数据如下:从机2的地址为0x02,按下2号病床的呼叫按键1时发送数据2给主机,主机接收数据完成后进入中断,中断中读取SBUF寄存器中的数据,读取完数据后跳出中断,在主程序中判断是否是从机的地址。地址与数据之间有3.4ms左右的延时。半小格为一位。一位数据所持续时间的倒数为波特率。发送的地址为0x02,数据为2,接收到的地址为00000010,数据为00000010。以下波形为主机单片机RXD上测得。图5-9呼叫按键1对应数据从机2的地址为0x02,按下1号病床的取消按键时发送数据4给主机,主机接收数据完成后进入中断,中断中读取SBUF寄存器中的数据,读取完数据后跳出中断,在主程序中判断是否是从机的地址。地址与数据之间有3.4ms左右的延时。发送的地址为0x02,数据为4。接收到的地址为00000010,数据为00000100。以下波形为主机单片机的RXD上测得。图5-10取消按键1对应数据从机2的地址为0x02,按下2号病床的呼叫按键2时发送数据8给主机,61 主机接收数据完成后进入中断,中断中读取SBUF寄存器中的数据,读取完数据后跳出中断,在主程序中判断是否是从机的地址。地址与数据之间有3.4ms左右的延时。发送的地址为0x02,数据为8。接收到的地址为00000010,数据为00001000。以下波形为主机单片机RXD上测得。图5-11呼叫按键2对应数据从机2的地址为0x02,按下2号病床的取消按键时发送数据8给主机,主机接收数据完成后进入中断,中断中读取SBUF寄存器中的数据,读取完数据后跳出中断,在主程序中判断是否是从机的地址。地址与数据之间有3.4ms左右的延时。接收到的发送的地址:0x02,数据为16。地址:00000010,数据:00010000。以下波形为主机单片机RXD上测得。图5-12取消按键2对应数据61 6总结6.1时钟产生、显示模块电路调试总结DS1302经过初始化后,单片机读取数据能正常显示初始值时间,说明MzL05-12864LCD液晶能正常显示。按键调整之后,能动态显示实时时间,说明DS1302时钟芯片在程序运行过程中能正常产生时钟。在调试过程中,由于选择的MzL05-12864LCD液晶需要3.3V电源供电,在电源设计这一块,需要通过AMS1117将5V转换为3.3V电源供电,使电路变得比较复杂,不易于测试,在下次设计电路时,应该选取同一个电源的LCD液晶。在调试DS1302时钟产生、显示模块的过程中,总是会出现显示的时间里面出现85的数值,在确认程序正确的前提下,查找了很多资料并且又检查了下电路,后来通过在DS1302的数据输入输出口I/O引脚与单片机P16口之间接了1K的上拉电阻,解决了碰到的问题。6.274HC595串行口扩展电路调试总结74HC595串行口扩展电路在调试过程中也碰到了一些问题,程序写入的数据不能正确的显示出来,总是显示全亮的LED灯,74HC595芯片不受程序控制,经检查电路之后,发现在焊接过程中一个焊点DS与P04之间漏焊了,导致了74HC595芯片不受控制,解决了这个问题之后,电路能正常显示。6.3RS485多机通信电路调试总结RS485多机通信电路的调试是整个电路的核心部分。首先在点对点的通信过程中,波特率的计算遇到了一些问题,算出的值不能通信成功。再后来通过示波器测试的过程中,调整相关数值,使主从机的波特率一致,才使通信成功。点对点通信完成后,在调试多机通信的过程中又碰到了一些问题——点对点通信正常的前提下,一接上多机,通信就失效,完全不能实现多机通信的功能。经过查找资料以及请教了同学,才找到通信不成功的原因,就是当一个从机在发送数据时,另一个从机要处于接收的状态,才不影响发送。总的来说,RS485通信方式为半双工,一个从机为发送状态时,其余应都为接收状态。这是应该重视的一个问题。后来在程序的设计中将主机的查询方式改为中断方式,当接收从机数据完成时(地址和呼叫信号或点滴液位监测信号),主机进入中断子程序,中断中读取寄存器中的数据,读取完数据后跳出中断。在主函数中判断是否为从机的地址,如是,则点亮相应的请求指示灯。最终解决了多机通信地址冲突的问题。61 参考文献[1]全为名,基于RS-485总线的病房数显呼叫器的设计[J],微计算机信息,2002.18(9)。[2]尹丽丽,徐昌华,吴跃东,基于单片机控制的智能医护仪的设计与实现[J],中国医疗器械信息,2008.14(5)。[3]张丽红,伦翠芬,李艳萍.基于RS485总线的医院智能呼叫系统硬件设计[N],河北科技师范学院学报,2009-9.23(3)。[4]张娅莉,廖承虎,沈爱祥,李艳萍,吕双娜.基于单片机的病房呼叫系统的研制[J],中国医疗器械信息,2008.14(5)。[5]倪伟,病房智能呼叫系统的研究和开发[J],电气自动化,2004.26(2)。[6]朱晓颖,胡明,基于CAN总线的输液滴速监控系统设计[C],江苏徐州,中国矿业大学信息与电气工程学院。[7]袁惠萍,张缀琴,张永奎,楼然苗,病区护理站无线呼叫系统的设计[R],浙江舟山:浙江海洋学院,2008-11.29(11):17-19。[8]罗伏力,80C31控制的病房呼叫系统[J],企业技术开发2002(6)。[9]朱艳华,田行军,李夏青,基于PL3105的病房呼叫系统设计[N],北京石油化工学院学报,2009-6.17(2)。[10]XuLixin,LiQingliang,ChenZhen,QiXinbo,ZhangXincheng,ApplicationoftheWirelessDigitalTransmissionTechnologyinRemoteECGMonitoringSystem,Dept.ofControlScience&Engineering,HuazhouUniversityofScience&Technology,Wuhan.[11]KashifAltaf,JavaidIqbal,MultiprocessorCommunicationusing8051MicrocontrollerandRS-485LineDriver,DepartmentofMechatronicsCollegeofE&MENationalUniversityofScienceandTechnologyRawalpindi,Pakistankashifaltafl@gmail.com,jiqbal-EME@nust.edu.pk..[12]KiHwanEom,JungYeonChoiandMinSupPark,WirelessNurseCallSystem,DepartmentofElectronicEngineering,DonggukUniversity,seoul100-715,Korea&YoungWooSystem,Seoul100-715,Korea.2009-7-16.61 附录一原理图1主机原理图2从机原理图3显示部分原理图61 二PCB图1主机PCB图2从机原理图61 3显示部分PCB图三程序1主机通信程序//========================================================================//组成文件://main.c----主程序文件//LCD_Dis.c/LCD_Driver_User.c/LCD_ASCII.c/GB_Table.c//LCD_Dis.h/LCD_Config.inc/LCD_PortConfig.h/LCD_Driver_User.h//----基本驱动程序//硬件连接://LCDCS---P2.3//LCDRES---P2.2//LCDA0---P2.1//LCDSCK---P2.0//LCDSDI---P3.3//LCD模块3.3V供电~~~(建议,端口电平3.3或5V均可)//========================================================================//========================================================================//文件名:main.c//描述:基本显示功能演示//========================================================================#include"LCD_Dis.h"#include"p25.h"#defineucharunsignedchar#defineuintunsignedint61 /***串口通信***/sbitP3_7=P3^7;sbitP1_4=P1^4;#defineFOCS11059200#defineBAUD9600uchara=0,b=0,m=0;externvoiddisplay(uchartemp);/***设时按键***/sbitkey_down=P0^3;//key=-sbitkey_up=P0^2;//key=+sbitkey_shift=P0^1;//key=移位sbitkey_edit=P0^0;//key=设定sbitled=P2^5;//设定状态指示灯ucharcoderegistor_r[]={0x81,0x83,0x85,0x87,0x89,0x8d};/*DS1302.C中的子函数声明*/externvoiddelaynms(ucharn);externvoidInit_DS1302(void);externvoidWriteSet1302(unsignedcharCmd,unsignedchardat);externunsignedcharReadSet1302(unsignedcharCmd);externucharTime_test(ucharregistor,ucharl,uchary,ucharflag);init_serial()//串口初始化{AUXR|=0x10;//允许独立波特率,不加倍,每1个时钟计数一次AUXR1=0x00;//0x00——P1口S2CON=0x50;//方式20xc0方式3BRT=-(FOCS/BAUD/12/32);//FOCS/(16*BAUD);IE=0x90;IE2=IE2|0x01;}voidUART2_Routin(void)interrupt8//串口中断{EA=0;if(m==0)//收地址{if(S2CON&0x01==0x01){S2CON=S2CON&0xfe;a=S2BUF;m+=1;}}61 if(m==1)//收数据{if(S2CON&0x01==0x01){S2CON=S2CON&0xfe;b=S2BUF;m=0;}}EA=1;}voidmain(void){unsignedcharsecond,minute,hour,day,month,year;//分别储存秒、分、小时,日,月,年unsignedcharshift;ucharflag1=0xff,flag2=0xff;P1M1=P1M1&0x1f;P1M0=P1M0&0x1f;shift=1;init_serial();//初始化串口P3_7=1;P1_4=0;LCD_Init();//初始化LCDClrScreen(0);FontSet(2,0xff);//病房呼叫系统PutChar(16,0,0);PutChar(32,0,1);PutChar(48,0,2);PutChar(64,0,3);PutChar(80,0,4);PutChar(96,0,5);FontSet(2,0xff);//年、月、日PutChar(32,4,6);PutChar(64,4,7);PutChar(96,4,8);FontSet(0,0xff);//时、分、秒PutChar(48,6,':');PutChar(72,6,':');61 Init_DS1302();second=Time_test(registor_r[0],80,6,0);minute=Time_test(registor_r[1],56,6,0);hour=Time_test(registor_r[2],32,6,0);day=Time_test(registor_r[3],80,4,0);month=Time_test(registor_r[4],48,4,0);year=Time_test(registor_r[5],16,4,0);while(1){/******显示时间******/second=Time_test(registor_r[0],80,6,0);if((second-1)>57)minute=Time_test(registor_r[1],56,6,0);//59s开始扫描if(((minute-1)>57)&&((second-1)>57))hour=Time_test(registor_r[2],32,6,0);//56m开始扫描if(((hour-1)>22)&&((minute-1)>57)&&((second-1)>57))day=Time_test(registor_r[3],80,4,0);month=Time_test(registor_r[4],48,4,0);if(((month-1)>11)&&((hour-1)>22)&&((minute-1)>57)&&((second-1)>57))year=Time_test(registor_r[5],16,4,0);/******设定时间******/if(key_edit==0)//"设定"{delaynms(10);if(key_edit==0){led=0;WriteSet1302(0x8E,0x00);//写"不保护"指令WriteSet1302(0x80,0x80);//“关闭时钟”while(key_edit==0);while(key_edit!=0)//再按"设定",才能退出{if(key_shift==0)//光标位置{delaynms(5);if(key_shift==0){while(key_shift==0);61 if(shift<6)shift++;elseshift=1;}}elseif(key_up==0)//+{delaynms(10);if(key_up==0){switch(shift){case1:year++;WriteSet1302(0x8c,((year/10)<<4|(year%10)));year=Time_test(registor_r[5],16,4,0);break;case2:if(month<12)month++;elsemonth=1;WriteSet1302(0x88,((month/10)<<4|(month%10)));month=Time_test(registor_r[4],48,4,0);break;case3:day++;WriteSet1302(0x86,((day/10)<<4|(day%10)));day=Time_test(registor_r[3],80,4,0);break;case4:if(hour<23)hour++;elsehour=0;WriteSet1302(0x84,((hour/10)<<4|(hour%10)));hour=Time_test(registor_r[2],32,6,0);break;case5:if(minute<59)minute++;elseminute=0;WriteSet1302(0x82,((minute/10)<<4|(minute%10)));minute=Time_test(registor_r[1],56,6,0);break;default:break;}while(key_up==0);}}elseif(key_down==0)//-{delaynms(5);if(key_down==0)61 {while(key_down==0);switch(shift){case1:year--;WriteSet1302(0x8c,((year/10)<<4|(year%10)));year=Time_test(registor_r[5],16,4,0);break;case2:if(month>1)month--;elsemonth=12;WriteSet1302(0x88,((month/10)<<4|(month%10)));month=Time_test(registor_r[4],48,4,0);break;case3:if(day>1)day--;WriteSet1302(0x86,((day/10)<<4|(day%10)));day=Time_test(registor_r[3],80,4,0);break;case4:if(hour>0)hour--;elsehour=23;WriteSet1302(0x84,((hour/10)<<4|(hour%10)));hour=Time_test(registor_r[2],32,6,0);break;case5:if(minute>0)minute--;elseminute=59;WriteSet1302(0x82,((minute/10)<<4|(minute%10)));minute=Time_test(registor_r[1],56,6,0);break;default:break;}}}}while(key_edit==0);WriteSet1302(0x80,0x00);WriteSet1302(0x90,0xa5);WriteSet1302(0x8E,0x80);led=1;}}2从机通信程序//从机2#include"STC11.h"61 #include"intrins.h"#defineucharunsignedchar#defineuintunsignedintsbitP3_7=P3^7;sbitP1_5=P1^5;sbitYD1=P3^2;sbitYD2=P3^3;ucharm,flag=1;ucharb=0;/*****串口初始化配置*****/voidinit_serial(){SCON=0x40;//方式1AUXR1=0x80;//设置P1口为通信口AUXR=0x11;//允许独立波特率PCON=0x80;//独立波特率加倍BRT=-(((11059200/9600)/12)/32);//采用独立波特率发生器}/*****延时*****/voiddelay(uintp){uchari;for(;p>0;p--)for(i=200;i>0;i--){_nop_();_nop_();_nop_();_nop_();_nop_();}}/*****主函数*****/voidmain(void){ucharflag;init_serial();flag=0x02;//从机02P3_7=1;while(1){P1_5=0;//没通信时,RS485就进入接收状态61 if((P1&0x1e)!=0x1e)//判断是否有按键按下{delay(5);//去抖动if((P1&0x1e)!=0x1e){b=~(P1|0xe1);//读按键值switch(b)//判按键{case2:flag=0x02;P37=0;break;case4:flag=0x04;P37=1;break;case8:flag=0x08;P37=0;break;case16:flag=0x10;P37=1;break;default:flag=0xab;break;}P1_5=1;//RS485就进入发送状态SBUF=0x02;//发“病房01”地址while(!TI);TI=0;delay(1);//隔0.3ms发命令数据SBUF=flag;//发控制命令数据while(!TI);TI=0;delay(5);//隔1.7ms重发一次}}if(YD1==0||YD2==0)//判断是否有液滴信号{delay(5);//去抖动if(YD1==0||YD2==0)//判断是哪路液滴{if(YD1==0){flag=0x03;P37=0;}if(YD2==0){flag=0x09;P37=1;}}P1_5=1;//RS485就进入发送状态SBUF=0x02;//发“病房1”地址while(!TI);TI=0;delay(1);//隔1ms发命令数据SBUF=flag;//病房1while(!TI);TI=0;delay(5);//隔1.7ms重发一次61 }}}3595串口扩展程序#include"p25.h"#include"intrins.h"#defineucharunsignedcharsbitDS=P0^4;//串行数据输入sbitSH_CP=P0^6;//移位时钟脉冲sbitST_CP=P0^5;//输出锁存器控制脉冲voidWR_595(uchartemp){ucharj;CY=0;SH_CP=0;for(j=0;j<8;j++){temp=temp<<1;DS=CY;SH_CP=1;//上升沿发生移位_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();SH_CP=0;}}/********************************************************//**//*将移位寄存器内的数据锁存到输出寄存器并显示*//**//********************************************************/voidOUT_595(void){ST_CP=0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();61 ST_CP=1;//上升沿将数据送到输出锁存器_nop_();_nop_();_nop_();ST_CP=0;}voiddisplay(uchartemp){WR_595(temp);OUT_595();}41302时钟芯片程序#include"reg51.h"#include"LCD_Dis.h"#defineucharunsignedcharsbitDATA=P1^6;//位定义1302芯片的接口,数据输出sbitRST=P1^7;//位定义1302芯片的接口,复位端口sbitSCLK=P1^5;//位定义1302芯片的接口,时钟输出端口/*****************************************************函数功能:延时若干微秒入口参数:n***************************************************/voiddelaynus(unsignedcharn){unsignedchari;for(i=0;i>=1;//将dat的各数据位右移1位,准备写入下一个数据位}}/*****************************************************函数功能:根据命令字,向1302写一个字节数据入口参数:Cmd,储存命令字;dat,储存待写的数据***************************************************/voidWriteSet1302(unsignedcharCmd,unsignedchardat){RST=0;//禁止数据传递SCLK=0;//确保写数居前SCLK被拉低RST=1;//启动数据传输delaynus(2);//稍微等待,使硬件做好准备Write1302(Cmd);//写入命令字Write1302(dat);//写数据SCLK=1;//将时钟电平置于已知状态RST=0;//禁止数据传递}/*****************************************************函数功能:从1302读一个字节数据入口参数:x***************************************************/unsignedcharRead1302(void)61 {unsignedchari,dat;delaynus(2);//稍微等待,使硬件做好准备for(i=0;i<8;i++)//连续读8个二进制位数据{dat>>=1;//将dat的各数据位右移1位,因为先读出的是字节的最低位if(DATA==1)//如果读出的数据是1dat|=0x80;//将1取出,写在dat的最高位SCLK=1;//将SCLK置于高电平,为下降沿读出delaynus(2);//稍微等待SCLK=0;//拉低SCLK,形成脉冲下降沿delaynus(2);//稍微等待}returndat;//将读出的数据返回}/*****************************************************函数功能:根据命令字,从1302读取一个字节数据入口参数:Cmd***************************************************/unsignedcharReadSet1302(unsignedcharCmd){unsignedchardat;RST=0;//拉低RSTSCLK=0;//确保写数居前SCLK被拉低RST=1;//启动数据传输Write1302(Cmd);//写入命令字dat=Read1302();//读出数据SCLK=1;//将时钟电平置于已知状态RST=0;//禁止数据传递returndat;//将读出的数据返回}/*****************************************************函数功能:1302进行初始化设置***************************************************/voidInit_DS1302(void){WriteSet1302(0x8E,0x00);//根据写状态寄存器命令字,写入不保护指令WriteSet1302(0x80,0x00);//根据写秒寄存器命令字,写入“启动时钟”指令WriteSet1302(0x80,((55/10)<<4|(55%10)));//根据写秒寄存器命令字,写入秒的初始值WriteSet1302(0x82,((58/10)<<4|(58%10)));//根据写分寄存器命令字,写入分的初始值61 WriteSet1302(0x84,((23/10)<<4|(23%10)));//根据写小时寄存器命令字,写入小时的初始值WriteSet1302(0x86,((5/10)<<4|(5%10)));//根据写日寄存器命令字,写入日的初始值WriteSet1302(0x88,((5/10)<<4|(5%10)));//根据写月寄存器命令字,写入月的初始值WriteSet1302(0x8c,((11/10)<<4|(11%10)));//根据写年寄存器命令字,写入小时的初始值WriteSet1302(0x90,0xa5);WriteSet1302(0x8E,0x80);}ucharTime_test(ucharregistor,ucharl,uchary,ucharflag){unsignedchari,j,f,c;//j,k,l分别储存温度的百位、十位和个位ucharvalue,ReadValue;ReadValue=ReadSet1302(registor);//从秒寄存器读数据value=((ReadValue&0x70)>>4)*10+(ReadValue&0x0F);//将读出数据转化i=value/10;//取十位j=value%10;//取个位for(f=0;f<2;f++){if(f==0)c=i;elsec=j;FontSet(0,0xff);if(flag)PutChar(l+f*8,y,'');else{switch(c){case0:FontSet(0,0xff);PutChar(l+f*8,y,'0');break;case1:FontSet(0,0xff);PutChar(l+f*8,y,'1');break;case2:FontSet(0,0xff);PutChar(l+f*8,y,'2');break;case3:FontSet(0,0xff);PutChar(l+f*8,y,'3');break;case4:FontSet(0,0xff);PutChar(l+f*8,y,'4');break;case5:FontSet(0,0xff);PutChar(l+f*8,y,'5');break;case6:FontSet(0,0xff);PutChar(l+f*8,y,'6');break;case7:FontSet(0,0xff);PutChar(l+f*8,y,'7');break;case8:FontSet(0,0xff);PutChar(l+f*8,y,'8');break;case9:FontSet(0,0xff);PutChar(l+f*8,y,'9');break;}}}61 return(value);}512864液晶显示程序//========================================================================//文件名:LCD_Driver_User.c//描述:底层接口驱动扩展程序集//========================================================================#include"LCD_Config.h"#include"LCD_PortConfig.h"//========================================================================//函数:voidLCD_DataWrite(unsignedintData)//描述:写一个字节的显示数据至LCD中的显示缓冲RAM当中//参数:Data写入的数据//返回:无//========================================================================voidLCD_DataWrite(LCDBYTEDat){unsignedcharNum;LCD_CS_CLR();//=0;LCD_A0_SET();//=1;for(Num=0;Num<8;Num++){if((Dat&0x80)==0)LCD_SDI_CLR();//=0;elseLCD_SDI_SET();//=1;Dat=Dat<<1;LCD_CLK_CLR();//=0;LCD_CLK_SET();//=1;}LCD_CS_SET();//=1;}//========================================================================//函数:voidLCD_RegWrite(unsignedcharCommand)//描述:写一个字节的数据至LCD中的控制寄存器当中//参数:Command写入的数据,低八位有效(byte)//返回:无//========================================================================voidLCD_RegWrite(LCDBYTECommand){unsignedcharNum;61 LCD_CS_CLR();//=0;LCD_A0_CLR();//=0;for(Num=0;Num<8;Num++){if((Command&0x80)==0)LCD_SDI_CLR();//=0;elseLCD_SDI_SET();//=1;Command=Command<<1;LCD_CLK_CLR();//=0;LCD_CLK_SET();//=1;}LCD_CS_SET();//=1;}//========================================================================//函数:voidLCD_Fill(unsignedintData)//描述:会屏填充以Data的数据至各点中//参数:Data要填充的颜色数据//返回:无//备注:仅在LCD初始化程序当中调用//========================================================================voidLCD_Fill(LCDBYTEData){unsignedchari,j;unsignedcharuiTemp;uiTemp=Dis_Y_MAX;uiTemp=uiTemp>>3;for(i=0;i<=uiTemp;i++)//往LCD中填充初始化的显示数据{LCD_RegWrite(0xb0+i);LCD_RegWrite(0x00);//1);LCD_RegWrite(0x10);for(j=0;j<=Dis_X_MAX;j++){LCD_DataWrite(Data);}}}//========================================================================//函数:voidLCD_Init(void)//描述:LCD初始化程序,在里面会完成LCD初始所需要设置的许多寄存器,具体如果//用户想了解,建议查看DataSheet当中各个寄存器的意义//参数:无//返回:无//备注:61 //========================================================================//延时程序voidTimeDelay(intTime){inti;while(Time>0){for(i=0;i<8000;i++){;//_nop_();}Time--;}}voidLCD_Init(void){//LCD驱动所使用到的端口的初始化(如果有必要的话)LCD_Ctrl_GPIO();LCD_Ctrl_Out();TimeDelay(200);LCD_RE_CLR();//=0;TimeDelay(200);LCD_RE_SET();//=1;TimeDelay(20);LCD_RegWrite(M_LCD_ON);//LCDOnLCD_RegWrite(M_LCD_POWER_ALL);//设置上电控制模式LCD_RegWrite(M_LCD_ELE_VOL);//电量设置模式(显示亮度)LCD_RegWrite(0x1f);//指令数据0x0000~0x003fLCD_RegWrite(M_LCD_VDD_SET);//V5内部电压调节电阻设置LCD_RegWrite(M_LCD_VDD);//LCD偏压设置,V3时选LCD_RegWrite(M_LCD_COM_REV);//Com扫描方式设置LCD_RegWrite(M_LCD_SEG_NOR);//Segment方向选择LCD_RegWrite(M_LCD_ALL_LOW);//全屏点亮/变暗指令LCD_RegWrite(M_LCD_ALL_NOR);//正向反向显示控制指令LCD_RegWrite(M_LCD_STATIC_OFF);//关闭静态指示器LCD_RegWrite(0x00);//指令数据LCD_RegWrite(M_LCD_BEGIN_LINE);//设置显示起始行对应RAM61 LCD_Fill(LCD_INITIAL_COLOR);}//========================================================================//文件名:LCD_Dis.c//描述:串行接口版LCD用户接口层程序集//========================================================================#include"LCD_Driver_User.h"//LCD底层驱动声明头文件#include"LCD_Config.h"//LCD的配置文件,比如坐标轴是否倒置等的定义externFLASHAsii0608[];//6X8的ASII字符库externFLASHAsii0816[];//8X16的ASII字符库externFLASHGB1616[];//16*16自定义的汉字库DOTBYTEX_Witch;//字符写入时的宽度DOTBYTEY_Witch;//字符写入时的高度DOTBYTEFont_Wrod;//字体的每个字模占用多少个存储单元数FLASH*Char_TAB;//字库指针LCDBYTEBMP_Color;LCDBYTEChar_Color;BYTEFont_type=0;//标识字符类型//========================================================================//函数:voidFontSet(BYTEFont_NUM,LCDBYTEColor)//描述:文本字体设置//参数:Font_NUM字体选择,以驱动所带的字库为准//Color文本颜色,仅作用于自带字库//返回:无//========================================================================voidFontSet(BYTEFont_NUM,LCDBYTEColor){switch(Font_NUM){case0:Font_Wrod=16;//ASII字符A8*16X_Witch=8;Y_Witch=2;Char_Color=Color;Char_TAB=Asii0816;Font_type=1;break;case1:Font_Wrod=6;//ASII字符B6*861 X_Witch=6;Y_Witch=1;Char_Color=Color;Char_TAB=Asii0608;Font_type=1;break;case2:Font_Wrod=32;//汉字A16*16X_Witch=16;Y_Witch=2;Char_Color=Color;Char_TAB=GB1616;Font_type=0;break;default:break;}}//========================================================================//函数:voidPutChar(DOTBYTEx,DOTBYTEy,chara)//描述:写入一个标准字符//参数:xX轴坐标yY轴坐标(0~7页)//a要显示的字符在字库中的偏移量//返回:无//备注:ASCII字符可直接输入ASCII码即可//========================================================================voidPutChar(DOTBYTEx,DOTBYTEy,chara){unsignedchari,j;FLASH*p_data;if(Font_type==1)p_data=Char_TAB+(a-32)*Font_Wrod;elsep_data=Char_TAB+a*Font_Wrod;//要写字符的首地址x=x;//+1;//Editbyxinqiangfor(j=0;j>4)|0x10);//设置初始地址LCD_RegWrite(x&0x0f);for(i=0;iDis_X_MAX){x=0;if((Dis_Y_MAX-y)

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
关闭