第一范文网 - 专业文章范例文档资料分享平台

基于单片机的病房呼叫系统设计

来源:用户分享 时间:2026/1/20 12:00:14 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

信息工程学院课程设计(论文)

执行键盘扫描子程序,并识别键号。

3.6 系统软件的设计

该系统软件主要完成以AT89C51为核心的数据的采集、处理和有线传输。采用模块化程序设计方法,将系统软件的设计主要分为显示模块,输入模块,输出模块。单片机扫描发射键,如果扫描到有发射键按下,系统便扫描拨码开关的状态以确定地址码,通过P0口和P2口开始地址码传送当服务台接收到呼叫信号后,护士值班室内的呼叫系统板上显示该患者的床位号,并振铃。当护士按下“响应”键时,结束当前呼叫。

3.6.1 主程序流程图

单片机扫描发射键,如果扫描到有发射键按下,系统便扫描拨码开关的状态以确定地址码,再进行中断初始化,去除键的延时抖动,分辨行、列值,进入死循环,这时病房指示灯点亮,服务台显示出床号并响铃,病房等待服务台的回应,如果没有扫描到信号输入,则单片机始终处于初始状态。如图3-5所示。

开始初始化系统N有键按下?Y病房指示灯亮,服务台显示床号,并响铃服务台回应N停止?Y结束

图3-5 主程序流程图

- 11 -

信息工程学院课程设计(论文)

3.6.2 子程序流程图

子程序如图3-6是一个中段式键盘的流程图,当单片机收到信号后,中断入口开始初始化,去除键的延时抖动。而一般的削抖方式有软件和硬件两种,硬件削抖虽能够解决键抖动问题,但如果应用系统所需按键较多,硬件削抖电路将变得复杂,成本也比较高,因此本系统采用的是软件削抖,当检测出有键闭合时,先执行一个延时子程序产数毫秒的延时(5S),待接通时的前沿抖动消失后再判别是否有键按下,分辨出行、列值。当按键释放时,也要经过数毫秒延时,待后沿抖动消失后再判别是否有键按下。

中断入口中断初始化有键按下延时去键抖动分辨行、列中断返回 图3-6 子程序流程图

中断程序:

void key(void) 扫描键盘值 {

uchar hang,lie; P0=0x00;P2=0xff; delay(1); if(P2!=0xff) {

delay(5); 延迟(5)后查询行列值 if(P2!=0xff)

- 12 -

信息工程学院课程设计(论文)

{ switch(P2&0xff) 扫描列值 {

case 0xfe:lie=0;break; case 0xfd:lie=1;break; case 0xfb:lie=2;break; case 0xf7:lie=3;break; case 0xef:lie=4;break; case 0xdf:lie=5;break; case 0xbf:lie=6;break; case 0x7f:lie=7;break;

}

P2=0x00;P0=0xff;

switch(P0&0xff) 扫描行值 {

case 0xfe:hang=0;break; case 0xfd:hang=1;break; case 0xfb:hang=2;break; case 0xf7:hang=3;break; case 0xef:hang=4;break; case 0xdf:hang=5;break; case 0xbf:hang=6;break; case 0x7f:hang=7;break;

}

P2=0xff;P0=0x00; while(P2!=0xff);

bed_NO=keytab[hang][lie];TR0=1;

}

else

bed_NO=0;

}

}

void time_init(void) 计数器的初始化 {

- 13 -

行列值赋值给bed_NO 信息工程学院课程设计(论文)

}

TMOD=0x01;

TH0=(65536-8333)/256; 装入初值 TL0=(65536-8333)%6; EA=1; ET0=1;

void time(void) interrupt 1 using 1 定义中断块

3.6.3 源程序代码

源程序代码如下: #include

#define uchar unsigned char #define uint unsigned int sbit B1=P3^6; sbit B2=P3^7; sbit buzzer=P3^5;

sbit clear=P3^4; 定义字符B1,B2,BUZZER,CLEAR

uchar code distab[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uchar code keytab[8][8]={{1,2,3,4,5,6,7,8}, 定义键盘值

{9,10,11,12,13,14,15,16}, {17,18,19,20,21,22,23,24}, {25,26,27,28,29,30,31,32}, {33,34,35,36,37,38,39,40}, {41,42,43,44,45,46,47,48}, {49,50,51,52,53,54,55,56}, {57,58,59,60,61,62,63,64}, };

uchar bed_NO; uchar btime;

uchar itime; 定义字符bed_NO,uchar btime,uchar itime void delay(uint x) 定义延迟程序块 { uint i,j;

for(i=0;i

- 14 -

搜索更多关于: 基于单片机的病房呼叫系统设计 的文档
基于单片机的病房呼叫系统设计.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c8u08847veh10ttd0odur_5.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top