基于单片机的病房呼叫系统(5)

2019-05-17 10:40

开始 调用初始化子程序 液晶显示欢迎语 否 判断是否有床位报警 是 报警器打开,液晶显示对应床位号 判断应答按键是否按下 否 是

关闭报警器 液晶显示知晓

图4.1主程序流程图

结束 4.3 初始化程序设计

初始化程序包括液晶初始化显示、定时器中断系统初始化。 (一)、液晶初始化

根据液晶使用手册,在液晶使用之前,要对其设置显示模式,光标设置,然后进行清屏操作。方便之后使用。

(二)、定时器中断系统初始化

19

STC89C51有两个定时/计数器,都有定时和计数两种工作模式,四种工作方式(方式0、方式1、方式2、方式3),属于增一计数器。特殊功能寄存器TMOD用于选择定时器/计数器T0、T1的工作模式和工作方式。但无论是工作在定时器模式还是计数器模式,实质都是对脉冲信号进行计数,只是计数的来源不同,计数器模式是对加在T0(P3.4)和T1(P3.5)两个引脚的外部脉冲进行计数,而定时器模式是对单片机的时钟振荡器信号经片内12分频后的内部脉冲信号计数。

3、 工作方式控制寄存器TMOD,不能位寻址,其格式如表4.1所示。

表4.1 寄存器TMOD的格式

(1) GATE :门控位。 (2) M0、M1:工作方式选择位。

(3) C/T:计数器和定时器模式选择位。C/T=0,为定时器模式;C/T=1为计数器模式。 M0、M1共有4种编码,对应于4种工作方式的选择,见表4.2。

表4.2 M1、M0工作方式选择

M1 M0 0 0 0 1 工作方式 方式0,为13位定时器/计数器 方式1,为16位定时器/计数器 1 0 方式2,8位的常数自动重装的定时器/计数器 1 1

方式3,仅用于T0,此时T0分为两个8位计数器,T1停止计数 定时器的工作方式设置好以后就要给定时器装入初值,工作方式不同初值也不同。 1、下面介绍一下单片机的时钟周期、机器周期和指令周期。

(1) 时钟周期是单片机时钟控制信号的基本时间单位。若时钟晶体的震荡频率为f0sc ,则时钟周期Tosc=1/fosc 。

(2) 机器周期是CPU完成一个基本操作所需要的时间。AT89C51单片机的每12个时钟周期为一个机器周期,即TCY=12/fOSC 。

(3) 指令周期是执行一条指令所需的时间。AT89C51单片机中指令按字节来分,可分为单字节、双字节和三字节指令,单字节和双字节指令一般为单机器周期和双机器周期,三字节指令都是双机器周期,只有乘、除指令占4个机器周期。

本设计中,时钟晶体的频率为11.0592MHZ,所以时钟周期为1/12M。T0作为定时器使用,工作方

16

式为方式1,作为16位计数器。设计数个数为N,计数初值为X,那么X=2-N, 定时时间=N×12/

20

晶振频率,所以,定时时间=(2-X)×12/晶振频率。

本设计设置每隔50ms中断一次,那么得出初值X=0x4BFF,定时器T0的高8 位TH0赋值0x4B,低8位TL0赋值0xFF。

2、定时器/计数器控制寄存器TCON,可位寻址,其格式见表4.3。

表4.3特殊寄存器TCON的格式

D7 D6 D5 D4 D3 D2 D1 D0 16

TCON TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 位地址

8FH __ 8DH __ 8BH 8AH 89H 88H ① TR0:定时器启动位。TR0=0,关闭定时器0;TR0=1,开启定时器0.

② IT0:选择外部中断0为跳沿触发方式还是电平触发方式。IT0=0,为电平触发方式;IT0=1,为跳沿触发方式。 4、单片机对各中断源的开放或屏蔽是由片内的中断允许寄存器IE控制的,可位寻址,其格式见表4.4。

表4.4中断允许寄存器IE的格式

IE 位地址

D7 EA AFH D6 __ __ D5 __ __ D4 ES ACH D3 ET1 ANH D2 EX1 AAH D1 ET0 A9H D0 EX0 A8H (1) EA:中断允许总开关控制位。EA=0,所有的中断请求被屏蔽;EA=1,所有的中断请求被开放。 (2) ES:串行口中断允许位。ES=0,禁止串行口中断;ES=1,允许串行口中断。

(3) ET0:定时器/计数器T0的溢出中断允许位。ETO=0,禁止T0溢出中断;ETO=1,允许T0溢出中断。

(4) EX0:外部中断0中断允许位。EX=0,禁止外部中断0中断;ES=1,允许外部中断0中断。STC89C51复位后,IE被清零,所有的中断请求被禁止。所以在初始化时,要令EA=1,EX0=1,ET0=1,开放总中断、允许T0中断。初始化程序如下:

21

void init() { }

E=0;

com_1602(0x38); com_1602(0x0c); com_1602(0x06); com_1602(0x80); com_1602(0x01); bg_1602=0; TMOD=0x01; TL0=0x4b; TH0=0xff; EA=1; ET0=1; TR0=1;

4.4延时子程序设定

延时子程序作为方便其他程序调用,避免程序繁琐重复。我将延时子程序定为有参函数,延时1ms,程序如下:

void delay(ui x) { ui i,j;

for(i=0;i

4.5液晶显示子程序

void display() {

if(num_D0||num_D1||num_D2||num_D3) {

if(num_D0==1) { }

22

dis_1602(1,0,2,0,1); dis_1602(1,0,3,0,10);

} else

dis_1602(15,0,0,3,0);

if(num_D1==2) { }

if(num_D2==3) { }

if(num_D3==4) { }

dis_1602(10,1,5,1,0);

dis_1602(1,0,8,0,4); dis_1602(1,0,9,0,10); dis_1602(1,0,6,0,3); dis_1602(1,0,7,0,10); dis_1602(1,0,4,0,2); dis_1602(1,0,5,0,10);

通过以上的源代码将病床呼叫系统各个模块的功能实现,通过lcd对呼叫病床号的显示以及控制室对呼叫的应答的显示,使这次的设计很成功。

5 电路的仿真及调试

5.1软件仿真

启动电源,显示屏无显示,在按下B按钮(对应2号床位)时,界面部分显示2,有指示灯显示,按下复位键后复位。该设计充分反应了控制电路的可行性。综上所述,本系统实现了:显示病床号,有指示灯显示,病床呼叫与值班人员应答的功能。通过Protues软件仿真,能达到上述结论,满足题目目的,达到要求。

23


基于单片机的病房呼叫系统(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:幼儿园阳光体育活动总结范文两篇

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: