ImageVerifierCode 换一换
格式:DOCX , 页数:22 ,大小:219.29KB ,
资源ID:23006377      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/23006377.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(模拟病房呼叫系统设计.docx)为本站会员(b****1)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

模拟病房呼叫系统设计.docx

1、模拟病房呼叫系统设计模拟病房呼叫系统设计一、设计目的通过设计模拟病床呼叫的程序,更加熟练掌握单片机C语言指令的使用,培养用单片机来实现一些电子设备运行的逻辑思路,为以后更好的使用单片机打下基础。二、设计要求模拟一个护理站下管8个床位,哪个病人要呼叫可以按键,相应蜂鸣器响,数码管显示:呼叫数量_床位号.要求:16个数码管,正常情况下显示时间(时分秒),时间可通过按键调整。2有人呼叫则闪烁显示数量_床位号并蜂鸣器响,按应答键后继续显示时间。3若同时有多个病人呼叫则依次轮流显示:数量_床位号。4、要求做出实物。三、硬件电路设计3.1 系统结构框图图3-1系统框图当单片机一上电时,数码管显示时,分,秒

2、。并且可通过按键对时,分的调节。调节按键主要运用外部中断程序,其中时钟的显示是通过TO定时器定时1s和数码管显示电路主要运用动态扫描的方式以实现的。此设计主要运用键盘扫描电路来设计病床号。当有按键按下时数码管由当前的显示时,分,秒,变为显示当前呼叫数量和呼叫床号,并且呼叫床号按呼叫顺序循环显示,程序中运用数组作为按键缓冲区,先存储按键键值然后实现动态显示。当按下复位键后重新显示时,分,秒。并且清空按键缓冲区。3.2 STC89C52单片机芯片 89C52共有四个八位的并行双向口,即有32根输入输出口线。各口的每一位均由锁存器、输出驱动器和输入缓冲器组成。 图3-2 STC89C52集成芯片89

3、C52共有四个八位的并行双向口,即有32根输入输出口线。各口的每一位均由锁存器、输出驱动器和输入缓冲器组成。 VCC(40引脚):电源电压VSS(20引脚):接地P0端口(P0.0P0.7,3932引脚):P0口是一个漏极开路的8位双向I/O口。作为输出端口,每个引脚能驱动8个TTL负载,对端口P0写入“1”时,可以作为高阻抗输入。在访问外部程序和数据存储器时,P0口也可以提供低8位地址和8位数据的复用总线。此时,P0口内部上拉电阻有效。在Flash ROM编程时,P0端口接收指令字节;而在校验程序时,则输出指令字节。验证时,要求外接上拉电阻。P1端口(P1.0P1.7,18引脚):P1口是一

4、个带内部上拉电阻的8位双向I/O口。P1的输出缓冲器可驱动(吸收或者输出电流方式)4个TTL输入。对端口写入1时,通过内部的上拉电阻把端口拉到高电位,这是可用作输入口。P1口作输入口使用时,因为有内部上拉电阻,那些被外部拉低的引脚会输出一个电流。P1口特点是输出锁存器,输出时没有条件。输入缓冲,输入时有条件,即需要先将该口设为输入状态,先输出1。 此外,P1.0和P1.1还可以作为定时器/计数器2的外部技术输入(P1.0/T2)和定时器/计数器2的触发输入(P1.1/T2EX) P3口为准双向口。可以字节访问,也可以位访问。P3.0-RXD,串行输入口。P3.1-TXD,串行输出口。P3.2-

5、INT0,外部中断0的请求。P3.3-INT1,外部中断1的请求。P3.4-T0,定时器/计数器0外部计数脉冲。P3.5-T1,定时器/计数器,1外部计数脉冲。P3.6-WR,外部数据存储器写选通。P3.7-RD,外部数据存储器读选通。RST(9引脚):复位输入。当输入连续两个机器周期以上高电平时为有效,用来完成单片机单片机的复位初始化操作。ALE(30引脚):地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8位地址的输出脉冲。XTAL1(19引脚):振荡器反相放大器和内部时钟发生电路的输入端。XTAL2(18引脚):振荡器反相放大器的输入端。3.3 键盘扫描电路图3-3 按键扫描电路

6、病床呼叫按钮采用了矩阵键盘扫描的方式。按键设置在行、列线交点上,行、列线分别连接到按键开关的两端。首先将列至零,主程序中扫描P1是否有键按下,如果有键按下执行子程序,先将列至零,扫描行然后置位行扫描列。3.4 数码管显示电路图3-4 数码管显示电路数码管是通过锁存器573输出的。驱动573需要上拉电阻。通过P0口控制他的片选,以及数码管的位选,通过P2口控制数码管的段选,主程序中通过动态扫描以实现数码管的动态输出。原理说明:74HC573的八个锁存器都是透明的D 型锁存器,当使能(G)为高时,Q 输出将随数据(D)输入而变。当使能为低时,输出将锁存在已建立的数据电平上。输出控制不影响锁存器的内

7、部工作,即老数据可以保持,甚至当输出被关闭时,新的数据也可以置入。这种电路可以驱动大电容或低阻抗负载,可以直接与系统总线接口并驱动总线,而不需要外接口。特别适用于缓冲寄存器,I/O 通道,双向总线驱动器和工作寄存器。当输入的数据消失时,在芯片的输出端,数据仍然保持; 这个概念在并行数据扩展中经常使用到。3.5 系统电路原理图图3-7 系统电路原理图所用器件如下如所示:数码管:LD3461AS-SS22锁存器:74HC573单片机:AT89S52上拉电阻:RESPACK-84、软件4.1 程序设计 图4-1 程序设计流程图 无人呼叫时,运用动态扫描方式利用定时器T0显示时间;有人呼叫时,运用数组

8、作为按键缓冲区,先存储按键值然后动态显示按键床号。4.2 子程序设计图4-2 子程序流程图扫描P1口前四位是否有变化,变化的位数为按键床号所属的行数;扫描P1口后四位是否有变化,变化的位数为按键床号所属的列数。行列结合可知呼叫的病床号。五、实验结果图仿真时间:启动后系统会自动进入显示时间状态,此状态下S8、S9、S10三个按键分别能对秒、分、时进行加1设置,而S12、S13、S14三个按键分别能对毫秒、秒、分进行减1设置。按下S11便暂停显示。仿真时间如图所示:图5-1 仿真时间有呼叫时仿真:在任意时刻按下S0至S7中的一个按键,蜂鸣器发出响声,进入显示病床号状态,左1显示呼叫总人数,右1闪烁

9、显示病床号(若有多个人呼叫)。在按下复位键P37以前如有病人重复按键则只发出响声,不会改变呼叫总人数的显示。另外此状态下S8至S15处于无效无效状态,但时间计数仍未停止。图5-2 仿真呼叫倒计时秒表仿真:在无人呼叫时按下S15便进入秒表时间设定状态,此状态下S8、S9、S10三个按键分别能对毫秒、秒、分进行加1设置,而S12、S13、S14三个按键分别能对毫秒、秒、分进行减1设置,设置完成后再次按下S15倒计时便开始。当计时结束后再次按下S15,便又回到了时间显示状态。两个状态互不影响。图5-3 倒计时秒表仿真六、源程序/*程序名称:病床呼叫系统设计简要说明:无人呼叫显示时间,有人呼叫显示病床

10、号及呼叫总人数。P0,P2口接数码管显示,P1口接4*4矩阵键盘(键号015)。各键功能:07号按键:病床号07; 810号按键:秒,分,时加1调整键 1214号按键:秒,分,时减1调整键 11号按键:暂停时间显示键 15号按键:倒计时的秒表 P3.6接蜂鸣器按键 P3.7病床复位键编 写:邢志杰时 间:2015年07月8日最后修改时间:2015年07月10日*/#include#define uchar unsigned char#define uint unsigned intvoid display();/显示时间子函数void display1();/显示倒计时时间子函数void di

11、sp(); /显示呼叫病床总数及当前呼叫病床子函数void Time0() ; /定时中断子函数,用于改变时间参数void Time1() ; void rest(); / 初始化子函数,用于病床复位后uchar code DSY_CODE=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0xc6,0xa1,0x86,0x8e,0x00; /共阴极数码管显示段码sbit P36=P36; /接蜂鸣器sbit P37=P37; /病床复位按键void DelayMS(uint x) /延时子函数uchar y;while(x

12、-)for(y=0;y120;y+);uchar d8=0,0,0,0,0,0,0,0; /用于存放呼叫病床的显示段码uchar g=0,j=0,log=0,CEN=0; /下面有详细说明void rest() / 初始化子函数,用于病床复位后g=0; /g计数:要显示的呼叫病床个数log=0; /病床呼叫标志位,有人呼叫置1P36=0; /接蜂鸣器,高电平响CEN=0; /当前显示的病床号在数组d中的偏移量for(j=0;j=60)t=0; if(watch!=0) secon1=t; else secon=t; break; case 0xdb: KeyNo=9; if(watch!=0)

13、 t=min1; else t=min; if(+t=60)t=0; if(watch!=0) min1=t; else min=t; break; case 0xbb: KeyNo=10; if(watch!=0) t=hour1; else t=hour; if(+t=60)t=0; if(watch!=0) hour1=t; else hour=t; break; case 0x7b: KeyNo=11;TR0=TR0;break; /暂停计时 P1=0xf7;temp=P1;if(temp!=0xf7&g=0) switch(temp) case 0xe7: KeyNo=12; if(

14、watch!=0) t=secon1; else t=secon; if(t-=0)t=59; if(watch!=0) secon1=t; else secon=t; break; case 0xd7: KeyNo=13; if(watch!=0) t=min1; else t=min; if(t-=0)t=59; if(watch!=0) min1=t; else min=t; break; case 0xb7: KeyNo=14; if(watch!=0) t=hour1; else t=hour; if(t-=0)t=59; if(watch!=0) hour1=t; else hou

15、r=t; break; case 0x77: KeyNo=15;watch+; /倒计时watch=1设定倒计时时间, if(watch=2) TR1=1; /watch=2开始计时 if(watch=3) watch=0; TR1=0; break; /等待按键松开 P1=0X0f;temp=P1;while(temp!=0x0f) P1=0X0f;temp=P1;if(log=1)/当前按键为病床按键disp(); /显示病床号及呼叫总数else if(watch=0) /当前按键为时间调整按键且无人呼叫display(); /显示时间else display1(); /当前按键为倒计时时

16、间调整按键且无人呼叫void display() /显示时间函数 P0=0xfe;P2=DSY_CODEhour/10;DelayMS(1);P0=0xfd;P2=DSY_CODEhour%10;DelayMS(1);P0=0xfb;P2=DSY_CODEmin/10;DelayMS(1);P0=0xf7;P2=DSY_CODEmin%10;DelayMS(1);P0=0xef;P2=DSY_CODEsecon/10;DelayMS(1);P0=0xdf;P2=DSY_CODEsecon%10;DelayMS(1); void display1() /倒计时显示时间函数P0=0xfe;P2=D

17、SY_CODEhour1/10;DelayMS(1);P0=0xfd;P2=DSY_CODEhour1%10;DelayMS(1);P0=0xfb;P2=DSY_CODEmin1/10;DelayMS(1);P0=0xf7;P2=DSY_CODEmin1%10;DelayMS(1);P0=0xef;P2=DSY_CODEsecon1/10;DelayMS(1);P0=0xdf;P2=DSY_CODEsecon1%10;DelayMS(1); void disp() /显示呼叫病床总数及当前呼叫病床DelayMS(1);P0=0xfe;P2=DSY_CODEg; /显示当前呼叫病床总数Delay

18、MS(1);P0=0xfd;P2=dCEN;/显示当前床号,CEN的值在定时中断中发生发生改变,实现一秒的闪烁显示,精华之处DelayMS(1);void main() /主程序TMOD=0x00; /定时器T0方式0TH0=(8192-4000)/32; /计时250*4ms=1sTL0=(8192-4000)%32;TH1=(8192-5000)/32; /计时250*4ms=1sTL1=(8192-5000)%32;IE=0x8a; /开T0,T1中断PX1=1;TR1=0; /关T1TR0=1; /初始化完毕while(1) /主程序在此处循环if(g!=0) /有人呼叫时,显示病床号

19、 disp();else if(watch=0)/无人呼叫时,显示时、分、秒display();else /无人呼叫显示倒计时display1(); /判断是否有病床呼叫P1=0xf0;if(P1!=0xf0)Keys_Scan(); /有呼叫则求得床号for(j=0;j=60) min1=59; hour1-; if(hour1=0) hour1=0; else if(min1!=0) /秒针,时针都为0,分针不为0 secon1=99; min1-; if(hour1=0&min1=0&secon1=0) TR1=0; 七、设计总结通过这次的程序设计使我懂得了动态扫描,关于汇编语言与C语言

20、的联系。比如汇编语言的查表指令在C语言中可以用数组的形式实现。在编程过程中同样和其他同学一样也遇到了很多问题,比如在中断那忽略了interrupt 0中的0,后来查资料才知道这不是随便写的。论文设计是理论联系实际的最好方法之一,使我了解了许多课堂上学不到的东西,综合运用知识。发现,提出,分析和解决实际问题的能力明显提高。此外本课题是三人一组,团队合作至关重要,遇到问题时互相研究讨论。 最后在指导老师的帮助下,终于顺利完成本次实践。在此感谢对给过我帮助的所有同学和各位指导老师!八、参考文献1 沈美明.IBM-PC汇编语言程序设计.清华大学出版社.2 胡汉才单片机原理及其接口技术.清华大学出版社,2004.3 贾金铃等微型计算机原理及应用重庆大学出版社,2006. 4 薛栋梁.单片机原理及应用.中国水利水电出版社,2001.5 李勋.单片机微型计算机大学读本.北京航空航天大学出版社,2002.

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1