辽宁科技大学本科生毕业设计 第32 页
入口 从播音缓冲区首单元向下查询,找到存有结束符的单元 是 床号>=10? 否 是 10的整数? 否 床号减1存入缓冲单元,“拾”音码存入下一缓冲单元 床号高位存入缓冲单元,“拾”音码存入下一单元床号低位存入下一单元 床号减1存入缓冲区 呼叫吗? “床呼叫”语音码存入下一缓冲区 “床输液完毕”存入下一缓冲区 接下来依次存语音播报次数,床号,结尾符 播音区有播音词吗? 开始播报本次播音词 呼叫床号显示有效 电话机振铃处理 图4.14 启动语音播报流程图
辽宁科技大学本科生毕业设计 第33 页
4.3.5 铃流控制
铃流控制子程序流程图见4.15。子程序是利用定时器T2产生定时中断来完成的,主要完成电话机振铃控制和向分机与电话机发号控制。中断程序中,首先判断是否需要向分机发低位号码,以便实现主机呼叫分机。是否可以向分机发送接通信号“C”接通信号的发送在开铃流150ms之后发送。当第一次铃流结束后,应向电话机发送呼叫的分机号码,以便让电话机显示两个号码之间也要150ms[11]。 4.3.6 内部定时器T0中断服务子程序
单片机的内部定时器T0用作50ms的定时器,是本系统时钟的定时基准。每隔50ms产生一次中断请求,进入本中断服务子程序以后,主要完成软件计时的功能,以生成系统时钟,其流程图4.16所示。
辽宁科技大学本科生毕业设计 第34 页
INT2入口 ACC、PSW入栈保护 26H.6=1? 否 可以发“C”吗? 是 主机向分机发第2个号码 主机向分机发否 1秒? 是 产生拨号音置26H.7为1 第1次关铃流,发分机号给电话机显示 否 是 4秒? 主机向分机发码有效 第二次开铃流 是 否 5秒? 26H.6置0 第二次关铃流 否 8秒? 是 第三次开铃流 否 9秒? 第三次关铃流 是 PWS、ACC出栈,返回中断
图4.15 铃流控制流程图
辽宁科技大学本科生毕业设计 第35 页
定时器T0入口 定时器置初值,定时50ms ACC、PSW入栈保护 50ms单元加1 是 1秒到? 否 50ms单元清0,秒单元加1 是 1分到? 否 秒单元清0,分单元加1 P2.5取返,秒闪烁 是 1小时到? 否 分单元清0,时单元加1 是 1天完? 否 时单元清0,恢复现场 返回中断
图4.16 T0中断服务子程序
4.3.7 显示子程序
在没有呼叫或查询的时候,LED数码管显示时间,当有呼叫到来时,数码管显示床号,包括呼叫床号和通话床号。如图4.17:
1 床位显示
标志位20H.1是显示时间与显示床位的切换标志,当20H.1为1时,显示床号。定
辽宁科技大学本科生毕业设计 第36 页
义SHOW_BED1为通话床位显示单元,当有呼叫到来时,在检测到摘机信号后,就将本次通话的床位存入该单元中,并置20H.1为1,等待显示,当通话完毕,挂机信号到来时,将该单元置无通话符号“AAH”并置20H.1为0,以显示时间。定义SHOW_BED为呼叫床位显示单元,当有呼叫到来时,在启动语音播报后,将本次呼叫的床号送入到该单元中,并置20H.1为1,等待显示。显示时,左边两位显示通话床位,右边两位显示呼叫的床位[11]。
2. 时间显示
当20H.1为0,显示时间。这里有一点要注意,时间是以二进制数的形式存储在时间单元中,显示时应先转换为BCD码。其转换程序如下所示:
MOV A,@R0; MOV DPTR,#BCD_TAB MOVC A,@A+DPTR; BCD_TAB:
DB 00H,01H,02H,03H,04H,05H,06H,07H,08H,09H DB 10H,11H,12H,13H,14H,15H,16H,17H,18H,19H DB 20H,21H,22H,23H,24H,25H,26H,27H,28H,29H DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H DB 40H,41H,42H,43H,44H,45H,46H,47H,48H,49H DB 50H,51H,52H,53H,54H,55H,56H,57H,58H,59H
转换后,将要显示的“时”的高位存入到LED4,“时”的低位存入LED3,“分”的高位存入LED2,“分”的低位存入LED1,显示时,调用LED显示子程序,将LED4---LED1中的4位BCD码从左到右依次显示。