病房呼叫体统课程设计.doc

上传人:仙人指路1688 文档编号:2764153 上传时间:2023-02-24 格式:DOC 页数:20 大小:277KB
返回 下载 相关 举报
病房呼叫体统课程设计.doc_第1页
第1页 / 共20页
病房呼叫体统课程设计.doc_第2页
第2页 / 共20页
病房呼叫体统课程设计.doc_第3页
第3页 / 共20页
病房呼叫体统课程设计.doc_第4页
第4页 / 共20页
病房呼叫体统课程设计.doc_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《病房呼叫体统课程设计.doc》由会员分享,可在线阅读,更多相关《病房呼叫体统课程设计.doc(20页珍藏版)》请在三一办公上搜索。

1、课程设计报告(本科/专科)课程:单片机课程设计学号:09104210100910421050姓名:肖国健王合杰班级:09普本非师范班教师:刘乐群时间:2012.4.20计算机科学与技术系设计名称:病房救护系统设计内容、目的与要求:本系统利用单片机(AT89C51芯片)为控制核心,由按键模块、系统控制模块、床号显示模块、声光提示模块以及电源模块构成。其中,按键模块采用8*8矩阵键盘模式,显示模块采用动态LED显示,系统主要通过软件控制实现了所有硬件功能。当病人紧急呼叫是,会产生声、光提示,并显示病人编号,以便医护人员及时处理。(1)设计一个可容64张床位的病房呼救系统。(2)要求每个床位都有一个

2、按钮,当护着需要呼叫护士时,按下按钮。此时护士值班室内的呼叫系统板上显示该患者的床位号。当护士按下“相应”键时,取消当前呼叫。计划与进度安排:第一阶段:查阅资料,查找相关书籍 。第二阶段:Proteus软件设计,画出实验图 。第三阶段:编写相应代码,并与 Proteus连接,调试程序。第四阶段: 调试完整的程序代码,填写实验报告。设计过程、步骤(可加页):由于需要比较多的输入输出口,所有采用内部存储系统资源比较多的AT89C51单片机,2位LED动态显示,需要10根数据线,其中8根作为位选线,相当于地址线,选择其中一位显示,另外2跟作为LED显示码输入线。 根据按键要求,每个床位需要一个按钮,

3、共64个。扬声器可以用一个准I/O。采用AT89C51作为运算和控制单元完全没满足系统的需求。如图1所示。图1 AT89C511. 电路设计(1) 复位电路:RST引脚是复位信号输入端吗,高电平有效。采用上点复位,因为本系统设计的值班室“响应按钮”具有复位键,所以不需要进行手动复位,以节省资源,如图2所示图2 复位设计(2) 时钟电路:时钟是时序的基础,时钟可以由两种方式产生,内部方式和外部方式。本系统采用内部方式,在XTAL1和XTAL2端外接石英芯片作为定时原件。内部反向放大器自激震荡,产生时钟。时钟发生器对震荡脉冲二分频。电容采用33pF电容。如图3所示。 图3 时钟电路设计(3) 数码

4、显示电路:采用2位8段共阴极LED,P0口作为LED显示码输出端,P3.0、P3.1口接线选端,如图4。图4 数码显示设计(4) 键盘开关矩阵设计:由于都使用按钮形式,每个病房一个按钮,当病人有紧急情况是按下响应按钮,值班室便会及时找到该病人,如图5所示。图5 键盘矩阵设计(5) 提示电路的设计:采用发光二极管和嗡鸣器相串联,用三极管加限流电阻作为控制开关,用单片机P3.7端口控制,当有高电平导通,二极管发光同时嗡鸣器发出“嘀嘀”声作为呼叫提示。电路连接图如6图所示。图6 提示设计2系统软件设计(1) 病房呼叫系统结构设计图7 系统结构设计图8 系统结构框图图9 硬件构成示意图(2) 系统初始

5、化及呼叫过程启动系统后,系统进行初始化,此时,单片机执行EA=1; /开总中断ET0=1; /定时器T0中断允许 TMOD=0x01; /使用定时器T0的模式1TH0=(65536-500)/256; /定时器T0的高8位赋初值TL0=(65536-500)%256; /定时器T0的高8位赋初值TR0=1; /启动定时器T0keyval=0x00; /按键值初始化为0EX0=1; /允许使用外中断 IT0=1; /选择负跳变来触发外中断系统进行初始化后LED显示00,等待呼叫,如图10所示。图10 初始化显示(3)数码管显示过程接通LED的端口输出响应,连接响铃speaker的P3.7端位置,

6、LED显示按钮所带变得床位,响铃发出报警响声,提醒值班室的人眼有病人出现紧急情况。如图所示,比如24号按下按钮,LED显示24,响铃如图。图11 病房显示程序如下:void display(unsigned char k) P3=0xfe; /点亮数码管1 P0=Tabk/10; /显示十位 led_delay(); /动态扫描延时 P3=0xfd; /点亮数码管2 P0=Tabk%10; /显示个位 led_delay(); /动态扫描延时 if(keyval!=0x00) p=0; (4)延时程序设计 void led_delay(void) unsigned char j;for(j=0

7、;j200;j+) ; (5)键盘扫描过程端口P2进行键盘横向扫描,初始化后输出高电平。P0端口扫描键盘列向,当有按钮按下时,按钮左右电路接听,有信号输入。void time0_interserve(void) interrupt 1 using 1 TR0=0; /关闭定时器T0 P1=0xff; /所有列线置为高电平? P2=0x00; /所有行线置为低电平“0”?” if(P1&0xff)!=0xff) /列线中有一位为低电平“0”,说明有键按下 delay20ms(); /延时一段时间、软件消抖 if(P1&0xff)!=0xff) /确实有键按下 P2=0xfe; /第一行置为低电平

8、“0”(P1.1出低电平“0”) if(P1=0xfe) keyval=1; /可判断是S1键被按下 if(P1=0xfd) keyval=2; /可判断是S2键被按下 if(P1=0xfb) keyval=3; /可判断是S3键被按下 if(P1=0xf7) keyval=4; /可判断是S4键被按下 if(P1=0xef) keyval=5; /可判断是S5键被按下 if(P1=0xdf) keyval=6; /可判断是S6键被按下 if(P1=0xbf) keyval=7; /可判断是S7键被按下 if(P1=0x7f) keyval=8; /可判断是S8键被按下 P2=0xfd; /第

9、二行置为低电平“0”(P1.1出低电平“0”) if(P1=0xfe) keyval=9; /可判断是S9键被按下 if(P1=0xfd) keyval=10; /可判断是S10键被按下 if(P1=0xfb) keyval=11; /可判断是S11键被按下 if(P1=0xf7) keyval=12; /可判断是S12键被按下 if(P1=0xef) keyval=13; /可判断是S13键被按下 if(P1=0xdf) keyval=14; /可判断是S14键被按下 if(P1=0xbf) keyval=15; /可判断是S15键被按下 if(P1=0x7f) keyval=16; /可判

10、断是S16键被按下 P2=0xfb; /第三行置为低电平“0”(P1.2输出低电平“0”) if(P1=0xfe) keyval=17; /可判断是S17键被按下 if(P1=0xfd) keyval=18; /可判断是S18键被按下 if(P1=0xfb) keyval=19; /可判断是S19键被按下 if(P1=0xf7) keyval=20; /可判断是S20键被按下 if(P1=0xef) keyval=21; /可判断是S21键被按下 if(P1=0xdf) keyval=22; /可判断是S22键被按下 if(P1=0xbf) keyval=23; /可判断是S23键被按下 if

11、(P1=0x7f) keyval=24; /可判断是S24键被按下 P2=0xf7; /第三行置为低电平“0”(P1.2输出低电平“0 if(P1=0xfe) keyval=25; /可判断是S25键被按下 if(P1=0xfd) keyval=26; /可判断是S26键被按下 if(P1=0xfb) keyval=27; /可判断是S27键被按下 if(P1=0xf7) keyval=28; /可判断是S28键被按下 if(P1=0xef) keyval=29; /可判断是S29键被按下 if(P1=0xdf) keyval=30; /可判断是S30键被按下 if(P1=0xbf) keyv

12、al=31; /可判断是S31键被按下 if(P1=0x7f) keyval=32; /可判断是S32键被按下 P2=0xef; /第一行置为低电平“0”(P1.1出低电平“0”) if(P1=0xfe) keyval=33; /可判断是S33键被按下 if(P1=0xfd) keyval=34; /可判断是S34键被按下 if(P1=0xfb) keyval=35; /可判断是S35键被按下 if(P1=0xf7) keyval=36; /可判断是S36键被按下 if(P1=0xef) keyval=37; /可判断是S37键被按下 if(P1=0xdf) keyval=38; /可判断是S

13、38键被按下 if(P1=0xbf) keyval=39; /可判断是S39键被按下 if(P1=0x7f) keyval=40; /可判断是S40键被按下 P2=0xdf; /第二行置为低电平“0”(P1.1出低电平“0”) if(P1=0xfe) keyval=41; /可判断是S41键被按下 if(P1=0xfd) keyval=42; /可判断是S42键被按下 if(P1=0xfb) keyval=43; /可判断是S43键被按下 if(P1=0xf7) keyval=44; /可判断是S44键被按下 if(P1=0xef) keyval=45; /可判断是S45键被按下 if(P1=

14、0xdf) keyval=46; /可判断是S46键被按下 if(P1=0xbf) keyval=47; /可判断是S47键被按下 if(P1=0x7f) keyval=48; /可判断是S48键被按下 P2=0xbf; /第三行置为低电平“0”(P1.2输出低电平“0”) if(P1=0xfe) keyval=49; /可判断是S49键被按下 if(P1=0xfd) keyval=50; /可判断是S50键被按下 if(P1=0xfb) keyval=51; /可判断是S51键被按下 if(P1=0xf7) keyval=52; /可判断是S52键被按下 if(P1=0xef) keyval

15、=53; /可判断是S53键被按下 if(P1=0xdf) keyval=54; /可判断是S54键被按下 if(P1=0xbf) keyval=55; /可判断是S55键被按下 if(P1=0x7f) keyval=56; /可判断是S56键被按下 P2=0x7f; /第三行置为低电平“0”(P1.2输出低电平“0 if(P1=0xfe) keyval=57; /可判断是S57键被按下 if(P1=0xfd) keyval=58; /可判断是S58键被按下 if(P1=0xfb) keyval=59; /可判断是S59键被按下 if(P1=0xf7) keyval=60; /可判断是S60键

16、被按下 if(P1=0xef) keyval=61; /可判断是S61键被按下 if(P1=0xdf) keyval=62; /可判断是S62键被按下 if(P1=0xbf) keyval=63; /可判断是S63键被按下 if(P1=0x7f) keyval=64; /可判断是S64键被按下 TR0=1; /开启定时器T0 TH0=(65536-500)/256; /定时器T0的高8位赋初值 TL0=(65536-500)%256; /定时器T0的高8位赋初值 (4)响应过程当有呼叫发出是,值班室人员收到相应信息后,可按下“响应按钮”,单片机执行中断程序。void time0(void) i

17、nterrupt 0 using 0 keyval=0x00;按钮按下时,INTR0端口接地,发出中断指令,使P3.7响铃结束,LED回到00,如图。图12 复位按键设计结果与分析(可以加页): 1. 系统全局图图13 系统全局图2. 当64号病房紧急呼叫时,显示器显示64并且系统发出警报音图14 病房显示3. 当值班人员响应呼叫时,按下复位键(即响应按键)时,显示器复位,等待下一个病房呼叫。图15 复位显示图16 复位按钮设计体会与建议: 经过这些天的分析,设计和制作,我们终于成功的完成了病房呼救系统。半月的单片机课程设计,让我对Proteus软件的使用有了基本的掌握,在对题目的分析过程中,

18、对以前所学的知识特别是单片机知识回顾的过程也对Proteus和Keil uVision2有了更深层次的理解和领悟。在使用Proteus软件画图时,对自己将理论知识运用到实际已经形成严谨思维都有很大帮助。通过翻阅资料,对单片机的知识也有了进一步的认识。在设计过程中,遇到了不少问题,老是和同学的讲解给了我很大的帮助,让我进一步认识到了同学的帮助及相互合作的重要性。这个课程设计对自己的思考及动手能力的提高有一定的帮助,对我们在步入社会之前得到锻炼。附录:实验源程序#include /包含51单片机寄存器定义的头文件unsigned char code Tab =0xc0,0xf9,0xa4,0xb0

19、,0x99,0x92,0x82,0xf8,0x80,0x90; /数字09的段码unsigned char keyval; /定义变量储存按键值sbit p=P37;/*函数功能:数码管动态扫描延时*/void led_delay(void) unsigned char j;for(j=0;j200;j+) ; /*函数功能:按键值的数码管显示子程序*/ void display(unsigned char k) P3=0xfe; /点亮数码管1 P0=Tabk/10; /显示十位 led_delay(); /动态扫描延时 P3=0xfd; /点亮数码管2 P0=Tabk%10; /显示个位

20、led_delay(); /动态扫描延时 if(keyval!=0x00) p=0; /*函数功能:软件延时子程序*/ void delay20ms(void) unsigned char i,j;for(i=0;i100;i+) for(j=0;j60;j+) ; /*函数功能:主函数*/ void main(void) EA=1; /开总中断ET0=1; /定时器T0中断允许 TMOD=0x01; /使用定时器T0的模式1TH0=(65536-500)/256; /定时器T0的高8位赋初值TL0=(65536-500)%256; /定时器T0的高8位赋初值TR0=1; /启动定时器T0ke

21、yval=0x00; /按键值初始化为0EX0=1; /允许使用外中断 IT0=1; /选择负跳变来触发外中断/P1=0xff; while(1) /无限循环 display(keyval); /调用按键值的数码管显示子程序/*函数功能:定时器0的中断服务子程序,进行键盘扫描,判断键位*/ void time0_interserve(void) interrupt 1 using 1 TR0=0; /关闭定时器T0 P1=0xff; /所有列线置为高电平? P2=0x00; /所有行线置为低电平“0”?” if(P1&0xff)!=0xff) /列线中有一位为低电平“0”,说明有键按下 del

22、ay20ms(); /延时一段时间、软件消抖 if(P1&0xff)!=0xff) /确实有键按下 P2=0xfe; /第一行置为低电平“0”(P1.1出低电平“0”) if(P1=0xfe) keyval=1; /可判断是S1键被按下 if(P1=0xfd) keyval=2; /可判断是S2键被按下 if(P1=0xfb) keyval=3; /可判断是S3键被按下 if(P1=0xf7) keyval=4; /可判断是S4键被按下 if(P1=0xef) keyval=5; /可判断是S5键被按下 if(P1=0xdf) keyval=6; /可判断是S6键被按下 if(P1=0xbf)

23、 keyval=7; /可判断是S7键被按下 if(P1=0x7f) keyval=8; /可判断是S8键被按下 P2=0xfd; /第二行置为低电平“0”(P1.1出低电平“0”) if(P1=0xfe) keyval=9; /可判断是S9键被按下 if(P1=0xfd) keyval=10; /可判断是S10键被按下 if(P1=0xfb) keyval=11; /可判断是S11键被按下 if(P1=0xf7) keyval=12; /可判断是S12键被按下 if(P1=0xef) keyval=13; /可判断是S13键被按下 if(P1=0xdf) keyval=14; /可判断是S1

24、4键被按下 if(P1=0xbf) keyval=15; /可判断是S15键被按下 if(P1=0x7f) keyval=16; /可判断是S16键被按下 P2=0xfb; /第三行置为低电平“0”(P1.2输出低电平“0”) if(P1=0xfe) keyval=17; /可判断是S17键被按下 if(P1=0xfd) keyval=18; /可判断是S18键被按下 if(P1=0xfb) keyval=19; /可判断是S19键被按下 if(P1=0xf7) keyval=20; /可判断是S20键被按下 if(P1=0xef) keyval=21; /可判断是S21键被按下 if(P1=

25、0xdf) keyval=22; /可判断是S22键被按下 if(P1=0xbf) keyval=23; /可判断是S23键被按下 if(P1=0x7f) keyval=24; /可判断是S24键被按下 P2=0xf7; /第三行置为低电平“0”(P1.2输出低电平“0 if(P1=0xfe) keyval=25; /可判断是S25键被按下 if(P1=0xfd) keyval=26; /可判断是S26键被按下 if(P1=0xfb) keyval=27; /可判断是S27键被按下 if(P1=0xf7) keyval=28; /可判断是S28键被按下 if(P1=0xef) keyval=2

26、9; /可判断是S29键被按下 if(P1=0xdf) keyval=30; /可判断是S30键被按下 if(P1=0xbf) keyval=31; /可判断是S31键被按下 if(P1=0x7f) keyval=32; /可判断是S32键被按下 P2=0xef; /第一行置为低电平“0”(P1.1出低电平“0”) if(P1=0xfe) keyval=33; /可判断是S33键被按下 if(P1=0xfd) keyval=34; /可判断是S34键被按下 if(P1=0xfb) keyval=35; /可判断是S35键被按下 if(P1=0xf7) keyval=36; /可判断是S36键被

27、按下 if(P1=0xef) keyval=37; /可判断是S37键被按下 if(P1=0xdf) keyval=38; /可判断是S38键被按下 if(P1=0xbf) keyval=39; /可判断是S39键被按下 if(P1=0x7f) keyval=40; /可判断是S40键被按下 P2=0xdf; /第二行置为低电平“0”(P1.1出低电平“0”) if(P1=0xfe) keyval=41; /可判断是S41键被按下 if(P1=0xfd) keyval=42; /可判断是S42键被按下 if(P1=0xfb) keyval=43; /可判断是S43键被按下 if(P1=0xf7

28、) keyval=44; /可判断是S44键被按下 if(P1=0xef) keyval=45; /可判断是S45键被按下 if(P1=0xdf) keyval=46; /可判断是S46键被按下 if(P1=0xbf) keyval=47; /可判断是S47键被按下 if(P1=0x7f) keyval=48; /可判断是S48键被按下 P2=0xbf; /第三行置为低电平“0”(P1.2输出低电平“0”) if(P1=0xfe) keyval=49; /可判断是S49键被按下 if(P1=0xfd) keyval=50; /可判断是S50键被按下 if(P1=0xfb) keyval=51;

29、 /可判断是S51键被按下 if(P1=0xf7) keyval=52; /可判断是S52键被按下 if(P1=0xef) keyval=53; /可判断是S53键被按下 if(P1=0xdf) keyval=54; /可判断是S54键被按下 if(P1=0xbf) keyval=55; /可判断是S55键被按下 if(P1=0x7f) keyval=56; /可判断是S56键被按下 P2=0x7f; /第三行置为低电平“0”(P1.2输出低电平“0 if(P1=0xfe) keyval=57; /可判断是S57键被按下 if(P1=0xfd) keyval=58; /可判断是S58键被按下

30、if(P1=0xfb) keyval=59; /可判断是S59键被按下 if(P1=0xf7) keyval=60; /可判断是S60键被按下 if(P1=0xef) keyval=61; /可判断是S61键被按下 if(P1=0xdf) keyval=62; /可判断是S62键被按下 if(P1=0xbf) keyval=63; /可判断是S63键被按下 if(P1=0x7f) keyval=64; /可判断是S64键被按下 TR0=1; /开启定时器T0 TH0=(65536-500)/256; /定时器T0的高8位赋初值 TL0=(65536-500)%256; /定时器T0的高8位赋初值 /*函数功能:外部中断程序,进行复位响应按键*/ void time0(void) interrupt 0 using 0 keyval=0x00;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号