找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5816|回复: 0
打印 上一主题 下一主题
收起左侧

51单片机病床呼叫器设计思路

[复制链接]
跳转到指定楼层
楼主
ID:752373 发表于 2020-5-15 10:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
目前大多的病床呼叫系统采用有线传输方式,有线传输占用空间较大,耗材多,而且不易移动,因此现今需要对病床呼叫系统进行升级,近年来在我国无线领域有了大的进展,这为此提供了有力的技术支持。有的一些简易无线发射接收模块传输距离近,效率低,可靠性差,不适合用于产品的设计。
本设计是基于单片机实现的无线多路病床呼叫系统,分为无线发射模块、无线接收模块、单片机控制模块、显示模块、呼叫报警部分和复位应答部分。本系统通过无线电实现信号的传递,单片机作为控制部件协调处理整个系统的工作,实现无线信号的远距离传输,减少了材料的耗费,安装简单,使医患沟通更加灵活,是无线网络技术在医学临床上的大胆应用,具有创新性。

1.2设计要求及预期目标
设计要求:设计出稳定高效的运行系统,并且有一定的抗干扰能力,能够实现多路呼叫且互不干扰。距离在100m范围内,实现多路无线病床呼叫,并留有扩展空间。
预期目标:病人按呼叫键时,无线发射器发射信号,无线接收器接收无线信号,通过单片机控制处理,护士值班室发出呼叫警报,同时1602液晶上显示相应的床位号,当护士按键应答,呼叫报警停止,液晶显示以应答,警报由定时器控制关闭。当有多个病人呼叫没有及时应答时,对应显示各床床位号,同时报警。

1.3设计可行性
有线呼叫器受位置的制约不能很好的达到医患沟通,无线呼叫系统就显示其很大的优越性,可移动,不受位置制约,现今无线传输技术有了突飞猛进的发展,技术越来越成熟,普遍应用到生活、娱乐、学习和军工等领域,这为无线传输技术与医学临床的结合提供了技术支持。在校期间也学习了与单片机相关的,有了一定的理论基础。因此,本课题具有可行性,能够得到实现。

1.4 设计方案及步骤
针对单片机的无线病床呼叫系统,制定以下方案及步骤:
第一步,根据设计目的构想设计的原理图框架,学习设计中要用到的知识,如无线发射模块的原理、编码解码,单片机C语言编程设计,液晶1602的显示,使用的芯片引脚工作原理, Protel软件使用等。
第二步,对硬件模块进行设计。如无线发射模块、无线接收模块、1602显示模块、声音呼叫模块。在Protel中绘制原理图。
第三步,对系统软件进行设计。如主函数程序设计、初始化程序设计、延时子程序设计、液晶显示子程序设计、定时器中断服务子程序设计。

第二章  系统硬件设计


2.1 系统原理框图

根据单片机的无线病床呼叫系统要求初步绘制出系统原理框图如图2-1所示。

图2-1 系统原理框图

2.2  单片机STC89C51芯片简介

STC89C51是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash 存储器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C51为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。 具有以下标准功能: 8k字节Flash,512字节RAM, 32 位I/O 口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,三个16 位 定时器/计数器,一个6向量2级中断结构,全双工串行口。另外 STC89X51 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。最高运作频率35Mhz,6T/12T可选。

图2-2 STC89C51单片机引脚图

单片机是美国STC公司最新推出的一种新型51内核的单片机。片内含有Flash程序存储器、SRAM、UART、SPI、PWM等模块。
(一)STC89C51主要功能、性能参数如下:
(1)内置标准51内核,机器周期:增强型为6时钟,普通型为12时钟;
(2)工作频率范围:0~40MHZ,相当于普通8051的0~80MHZ;
(3)STC89C51RC对应Flash空间:4KB;
(4)内部存储器(RAM):512B;
(5)定时器\计数器:3个16位;
(6)通用异步通信口(UART)1个;
(7)中断源:8个;
(8)有ISP(在系统可编程)\IAP(在应用可编程),无需专用编程器\仿真器;
(9)通用I\O口:32\36个;
(10)工作电压:3.8~5.5V;
(11)外形封装:40脚PDIP、44脚PLCC和PQFP等。
(二)STC89C51单片机的引脚说明:
VCC:供电电压。
GND:接地。
P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3.0 RXD(串行输入口)
P3.1 TXD(串行输出口)
P3.2 /INT0(外部中断0)
P3.3 /INT1(外部中断1)
P3.4 T0(记时器0外部输入)
P3.5 T1(记时器1外部输入)
P3.6 /WR(外部数据存储器写选通)
P3.7 /RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
I/O口作为输入口时有两种工作方式,即所谓的读端口与读引脚。读端口时实际上并不从外部读入数据,而是把端口锁存器的内容读入到内部总线,经过某种运算或变换后再写回到端口锁存器。只有读端口时才真正地把外部的数据读入到内部总线。上面图中的两个三角形表示的就是输入缓冲器CPU将根据不同的指令分别发出读端口或读引脚信号以完成不同的操作。这是由硬件自动完成的,不需要我们操心,1然后再实行读引脚操作,否则就可能读入出错,为什么看上面的图,如果不对端口置1端口锁存器原来的状态有可能为0Q端为0Q^为1加到场效应管栅极的信号为1,该场效应管就导通对地呈现低阻抗,此时即使引脚上输入的信号为1,也会因端口的低阻抗而使信号变低使得外加的1信号读入后不一定是1。若先执行置1操作,则可以使场效应管截止引脚信号直接加到三态缓冲器中实现正确的读入,由于在输入操作时还必须附加一个准备动作,所以这类I/O口被称为准双向口。89C51的P0/P1/P2/P3口作为输入时都是准双向口。
RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:来自反向振荡器的输出。
(三)STC89C51单片机最小系统:
最小系统包括单片机及其所需的必要的电源、时钟、复位等部件,能使单片机始终处于正常的运行状态。电源、时钟等电路是使单片机能运行的必备条件,可以将最小系统作为应用系统的核心部分,通过对其进行存储器扩展、A/D扩展等,使单片机完成较复杂的功能。
STC89C51是片内有ROM/EPROM的单片机,因此,这种芯片构成的最小系统简单﹑可靠。用STC89C52单片机构成最小应用系统时,只要将单片机接上时钟电路和复位电路即可,结构如图2-3所示,由于集成度的限制,最小应用系统只能用作一些小型的控制单元。

图2-3 单片机最小系统原理框图

(1) 时钟电路
STC89C51单片机的时钟信号通常有两种方式产生:一是内部时钟方式,二是外部时钟方式。内部时钟方式如图2-4所示。在STC89C51单片机内部有一振荡电路,只要在单片机的XTAL1(18)和XTAL2(19)引脚外接石英晶体(简称晶振),就构成了自激振荡器并在单片机内部产生时钟脉冲信号。图中电容C1和C2的作用是稳定频率和快速起振,电容值在5~30pF,典型值为30pF。晶振CYS的振荡频率范围在1.2~12MHz间选择,典型值为12MHz和6MHz。

图2-4 STC89C51内部时钟电路
(2) 复位电路
当在STC89C51单片机的RST引脚引入高电平并保持2个机器周期时,单片机内部就执行复位操作(若该引脚持续保持高电平,单片机就处于循环复位状态)。
复位电路通常采用上电自动复位和按钮复位两种方式。
最简单的上电自动复位电路中上电自动复位是通过外部复位电路的电容充放电来实现的。只要Vcc的上升时间不超过1ms,就可以实现自动上电复位。
除了上电复位外,有时还需要按键手动复位。本设计就是用的按键手动复位。按键手动复位有电平方式和脉冲方式两种。其中电平复位是通过RST(9)端与电源Vcc接通而实现的。按键手动复位电路见图2-5。时钟频率用11.0592MHZ时C取10uF,R取10kΩ。

图2-5 STC89C51复位电路

(四) STC89C51中断技术概述
中断技术主要用于实时监测与控制,要求单片机能及时地响应中断请求源提出的服务请求,并作出快速响应、及时处理。这是由片内的中断系统来实现的。当中断请求源发出中断请求时,如果中断请求被允许,单片机暂时中止当前正在执行的主程序,转到中断服务处理程序处理中断服务请求。中断服务处理程序处理完中断服务请求后,再回到原来被中止的程序之处(断点),继续执行被中断的主程序。
图2-6为整个中断响应和处理过程。


                                                                      图2-6  中断响应和处理过程

如果单片机没有中断系统,单片机的大量时间可能会浪费在查询是否有服务请求发生的定时查询操作上。采用中断技术完全消除了单片机在查询方式中的等待现象,大大地提高了单片机的工作效率和实时性。

2.3 硬件模块设计

由图2-1系统原理框图可知,整个系统分为五个模块:无线发射模块、无线接收模块、声音报警模块、液晶显示模块、按键应答模块。

下面将简单的介绍各个模块设计方案。


2.3.1无线发射模块

PT2262是一种CMOS 工艺制造的低功耗低价位通用编码电路,PT2262最多可有12 位(A0-A11)三态地址端管脚(悬空,接高电平,接低电平),任意组合可提供531441 地址码,PT2262 最多可有6 位(D0-D5)数据端管脚,设定的地址码和数据码从17 脚串行输出,可用于无线遥控发射电路。

PT2262 管脚说明如表2-4

表2-4 PT2262管脚说明
名称
管脚
说明
A0-A11
1-8,10-13
地址管脚,用于进行地址编码,可置为“0”、 “1” 、“悬空”。
D0-D5
7-8,10-13
数据输入端,有一个为“1”即有编码发出,内部下拉。
VCC
18
电源正端(+)
GND
9
电源负端(-)
TE
14
编码启动端,用于多数据的编码发射,低电平有效;
OSC1
16
振荡电阻输入端,与OSC2所接电阻决定振荡频率;
OSC2
15
振荡电阻振荡器输出端;
DOUT
17
编码输出端(正常时为低电平)


T10A发射模块(如表2-5)采用SMD技术,在稳频处理上采用最先进声表谐振器(SAW)元件,电路板(PCB)采用介质损耗最小的材料,体积小巧。


表2-5 T10A发射模块
技术指标
参数
工作电压
3V-12V
工作电流
≤25mA(12V); ≤2mA(3V)
谐振方式
声表谐振(SAW)
调制方式
AM/ASK/OOK
工作频率
315MHz、433.92MHz可选
频率误差
±150kHz(max)
发射功率
25mW(315MHz, 12V时)

图2-6所示为无线发射模块图,由PT2262编码,发射模块的四个按键分别代表不同的病床号,按下表示病人呼叫。


图2-6 无线发射模块图

发射模块有密码保证功能,最多可以编6个数据码和6561个地址码,使重复的机会大大减少。其性能参数如下:

? 电源电压: DC3V~DC12V              ? 静态电流:≤0.02uA ? 发射频率:315MHz

? 发射电流:5~50mA                            ? 发射距离:50~800m ? 调制方式:ASK

在通常使用中,一般采用8位地址码和4位数据码,这时编码芯片PT2262和解码芯片PT2272的第1~8脚为地址设定脚,有三种状态可供选择:悬空、接正电源、接地三种状态,3的8次方为6561,所以地址编码不重复度为6561组,只有发射端PT2262和接收端PT2272的地址编码完全相同,才能配对使用,一般生产厂家都把地址编码端悬空,用户可以自己设置编码。设置地址码的原则是:同一个系统地址码必须一致;不同的系统可以依靠不同的地址码加以区分。

2.3.3液晶显示模块

图2-10 1602实物图

1602LCD的基本参数及引脚功能
1602LCD分为带背光和不带背光两种,基控制器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别,两者尺寸差别如下图10-54所示:
图2-11 1602LCD尺寸图
1602LCD主要技术参数:
显示容量:16×2个字符
芯片工作电压:4.5—5.5V
工作电流:2.0mA(5.0V)
模块最佳工作电压:5.0V
字符尺寸:2.95×4.35(W×H)mm
引脚功能说明
1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表10-13所示:
编号
符号
引脚说明
编号
符号
引脚说明
1
VSS
电源地
9
D2
数据
2
VDD
电源正极
10
D3
数据
3
VL
液晶显示偏压
11
D4
数据
4
RS
数据/命令选择
12
D5
数据
5
R/W
读/写选择
13
D6
数据
6
E
使能信号
14
D7
数据
7
D0
数据
15
BLA
背光源正极
8
D1
数据
16
BLK
背光源负极
表2-12:引脚接口说明表
第1脚:VSS为地电源。
第2脚:VDD接5V正电源。
第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。
第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。
第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
第7~14脚:D0~D7为8位双向数据线。
第15脚:背光源正极。
第16脚:背光源负极。

2.3.4声音报警模块

该设计有声音报警,当有病人呼叫时,蜂鸣器就会大声提示,直到护士应答回复,才会停止鸣叫,控制引脚接在P3.4引脚上,利用三极管当做开关电路可以保护单片机,还可以起到放大电流的作用,当三极管基极为高电平时,发射极截止,为低电平时,发射极导通。报警模块如图2-13所示。


图2-13声音报警模块


2.3.5应答电路

本设计中四个床位使用一个应答按钮,接在P3.3引脚上,当有病人按下按钮,报警开始时,按下应答按钮,即可停止报警,应答模块图如图2-14所示


图2-14应答电路



第三章  系统软件设计

2.3.2无线接收模块

解码接收模块包括接收头和解码芯片PT2272两部分。接收头将接收的信号输入PT2272的14引脚(DIN),PT2272对接收到的信号解码。无线接收模块如图2-7所示。

图2-7 无线接收模块图

编码芯片PT2262 发出的编码信号由:地址码、数据码、同步码组成一个完整的码字,解码芯片PT2272 接收到信号后,其地址码经过两次比较核对后,VT 脚才输出高电平,与此同时相应的数据脚也输出高电平,如果发送端一直按住按键,编码芯片也会连续发射。当发射机没有按键按下时,PT2262 不接通电源,其17 脚为低电平,所以315MHz 的高频发射电路不工作,当有按键按下时,PT2262 得电工作,其第17 脚输出经调制的串行数据信号,当17 脚为高电平期间315MHz 的高频发射电路起振并发射等幅高频信号,当17 脚为低平期间315MHz 的高频发射电路停止振荡,所以高频发射电路完全收控于PT2262 的17 脚输出的数字信号,从而对高频电路完成幅度键控(ASK 调制)相当于调制度为100%的调幅。

PT2272管脚说明如表2-9


表2-8 PT2272管脚说明
名称
管脚
说明
A0-A11
1-8,10-13
地址管脚,用于进行地址编码,可置为     “0”,“1”,“f”(悬空),必须与2262一致,否则不解码
D0-D5
7-8,10-13
地址或数据管脚,当做为数据管脚时,只有在地址码与2262一致
一致,数据管脚才能输出与2262数据端对应的高电平,否则输出为低电平,锁存型只有在接收到下一数据才能转换
VCC
18
电源正端(+)
GND
9
电源负端(-)
DIN
14
数据信号输入端,来自接收模块输出端
OSC1
16
振荡电阻输入端,与OSC2所接电阻决定振荡频率;
OSC2
15
振荡电阻振荡器输出端;
VT
17
解码有效确认 输出端(常低)解码有效变成高电平(瞬态)

PT2262和PT2272除地址编码必须完全一致外,振荡电阻还必须匹配,一般要求译码器振荡频率要高于编码器振荡频率的2.5~8倍,否则接收距离会变近甚至无法接收,随着技术的发展市场上出现一批兼容芯片,在实际使用中只要对振荡电阻稍做改动就能配套使用。在具体的应用中,外接振荡电阻可根据需要进行适当的调节,阻值越大振荡频率越慢,编码的宽度越大,发码一帧的时间越长。市场上大部分产品都是用2262/1.2M=2272/200K组合的,少量产品用2262/4.7M=2272/820K。

解码接收模块包括接收头和解码芯片PT2272两部分组成。接收头将收到的信号输入PT2272的14脚(DIN),PT2272再将收到的信号解码。           

接收板工作电压为DC 5V,接收灵敏度: -103dBm ,尺寸(mm): 49*20*7 ,工作频率:315MHz,工作电流:5mA ,编码类型:固定码(板上焊盘跳接设置)  应用说明:与各类型遥控器配合使用,解码输出后进行相应控制,在通常使用中,我们一般采用8位地址码和4位数据码,这时编码芯片PT2262和解码芯片PT2272的第1~8脚为地址设定脚,有三种状态可供选择:悬空、接正电源、接地三种状态,地址编码不重复度为38=6561组,只有发射端PT2262和接收端PT2272的地址编码完全相同,才能配对使用,遥控模块的生产厂家为了便于生产管理,出厂时遥控模块的PT2262和PT2272的八位地址编码端全部悬空,这样用户可以很方便选择各种编码状态,用户如果想改变地址编码,只要将PT2262和PT2272的1~8脚设置相同即可,例如将发射机的PT2262的第2脚接地,第3脚接正电源,其它引脚悬空,那么接收机的PT2272只要也第2脚接地,第3脚接正电源,其它引脚悬空就能实现配对接收。当两者地址编码完全一致时,接收机对应的D1~D4端输出约4V互锁高电平控制信号,同时VT端也输出解码有效高电平信号。


3.1设计的软件环境简介

3.1.1Keil_c51

Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。用过汇编语言后再使用C来开发,体会更加深刻。   Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。下面详细介绍Keil C51开发系统各部分功能和使用。Keil_c软件界面如图3-1-1:

图3-1-1Keil_c软件界面

该软件是一款集编程和仿真于一体的软件,它支持汇编、C语言及二者的混合编程。
3.1.2 Protel99SE

Protel99SE是PORTEL公司在80年代末推出的EDA软件。Protel99SE是应用于Windows9X/2000/NT操作系统下的EDA设计软件,采用设计库管理模式,可以网设计,具有很强的数据交换能力和开放性及3D模拟功能,是一个32位的设计软件,可以完成电路原理图设计,印制电路板设计和可编程逻辑器件设计等工作,可以设计32个信号层,16个电源--地层和16个机加工层。

Protel99SE软件的特点:

  • 可生成30多种格式的电气连接网络表;
  • 强大的全局编辑功能;
  • 在原理图中选择一级器件,PCB中同样的器件也将被选中;
  • 同时运行原理图和PCB,在打开的原理图和PCB图间允许双向交叉查找元器件、引脚、网络
  • 既可以进行正向注释元器件标号(由原理图到PCB),也可以进行反向注释(由PCB到原理图),以保持电气原理图和PCB在设计上的一致性;
  • 满足国际化设计要求(包括国标标题栏输出,GB4728国标库); * 方便易用的数模混合仿真(兼容SPICE 3f5);
  • 支持用CUPL语言和原理图设计PLD,生成标准的JED下载文件; * PCB可设计32个信号层,16个电源-地层和16个机加工层;
  • 强大的“规则驱动”设计环境,符合在线的和批处理的设计规则检查;
  • 智能覆铜功能,覆铀可以自动重铺;
  •          提供大量的工业化标准电路板做为设计模版;
  •          放置汉字功能;
  •          可以输入和输出DXFDWG格式文件,实现和AutoCAD等软件的数据交换;
  •          智能封装导航(对于建立复杂的PGABGA封装很有用);
  •          方便的打印预览功能,不用修改PCB文件就可以直接控制打印结果;
  •          独特的3D显示可以在制板之前看到装配事物的效果;
  •          强大的CAM处理使您轻松实现输出光绘文件、材料清单、钻孔文件、贴片机文件、测试点报告等;
  •          经过充分验证的传输线特性和仿真精确计算的算法,信号完整性分析直接从PCB启动;
  •          反射和串扰仿真的波形显示结果与便利的测量工具相结合;

Protel99SE的工作界面是一种标准的Windows界面,如图所示,包括:标题栏、主菜单、标准工具栏、绘图工具栏、状态栏、对象选择按钮、预览对象方位控制按钮、仿真进程控制按钮、预览窗口、对象选择器窗口、图形编辑窗口。Protel99SE软件界面如图3-1-2。


图3-1-2Prtel99SE软件界面

运行Protel99SE程序后,进入软件的主界面。通过左侧工具栏中的Browse(从库中选择元件命令)命令

3.2 主函数程序设计

一个完整的程序中只有一个main函数,首先调用初始化函数进行初始化,然后判断并调用显示子程序使液晶1602显示、蜂鸣器鸣响报警。程序流程如图3-2所示。


图3-2 主程序流程图

3.3 初始化程序设计

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

(一)、液晶初始化

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

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

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

  •          工作方式控制寄存器TMOD,不能位寻址,其格式如图3-3所示。

                        图3-3 寄存器TMOD的格式

  • GATE :门控位。
  • M0、M1:工作方式选择位。
  • C/T:计数器和定时器模式选择位。C/T=0,为定时器模式;C/T=1为计数器模式。

M0、M1共有4种编码,对应于4种工作方式的选择,见表3-4。

表3-4 M1、M0工作方式选择

M1     M0

工作方式

0       0

方式0,为13位定时器/计数器

0       1

方式1,为16位定时器/计数器

1       0

方式2,8位的常数自动重装的定时器/计数器

1       1

方式3,仅用于T0,此时T0分为两个8位计数器,T1停止计数


定时器的工作方式设置好以后就要给定时器装入初值,工作方式不同初值也不同。

1、下面介绍一下单片机的时钟周期、机器周期和指令周期。

  • 时钟周期是单片机时钟控制信号的基本时间单位。若时钟晶体的震荡频率为f0sc ,则时钟周期Tosc=1/fosc
  • 机器周期是CPU完成一个基本操作所需要的时间。AT89C51单片机的每12个时钟周期为一个机器周期,即TCY=12/fOSC
  • 指令周期是执行一条指令所需的时间。AT89C51单片机中指令按字节来分,可分为单字节、双字节和三字节指令,单字节和双字节指令一般为单机器周期和双机器周期,三字节指令都是双机器周期,只有乘、除指令占4个机器周期。

本设计中,时钟晶体的频率为11.0592MHZ,所以时钟周期为1/12M。T0作为定时器使用,工作方式为方式1,作为16位计数器。设计数个数为N,计数初值为X,那么X=216-N,      定时时间=N×12/晶振频率,所以,定时时间=(216-X)×12/晶振频率。

本设计设置每隔50ms中断一次,那么得出初值X=0x4BFF,定时器T0的高8

位TH0赋值0x4B,低8位TL0赋值0xFF。

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

表3-5 特殊寄存器TCON的格式


D7

D6

D5

D4

D3

D2

D1

D0

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控制的,可位寻址,其格式见表3-6。

表3-6 中断允许寄存器IE的格式


D7

D6

D5

D4

D3

D2

D1

D0

IE

EA

__

__

ES

ET1

EX1

ET0

EX0

位地址

AFH

__

__

ACH

ANH

AAH

A9H

A8H


  • EA:中断允许总开关控制位。EA=0,所有的中断请求被屏蔽;EA=1,所有的中断请求被开放。
  • ES:串行口中断允许位。ES=0,禁止串行口中断;ES=1,允许串行口中断。
  • ET0:定时器/计数器T0的溢出中断允许位。ETO=0,禁止T0溢出中断;ETO=1,允许T0溢出中断。
  • EX0:外部中断0中断允许位。EX=0,禁止外部中断0中断;ES=1,允许外部中断0中断。STC89C51复位后,IE被清零,所有的中断请求被禁止。所以在初始化时,要令EA=1,EX0=1,ET0=1,开放总中断、允许T0中断。初始化程序如下:

void init()

{

              bg_1602=0;

              TMOD=0x01;

              TL0=0x4b;

              TH0=0xff;

              EA=1;

              ET0=1;

              TR0=1;

              E=0;

              com_1602(0x38);

              com_1602(0x0c);

              com_1602(0x06);

              com_1602(0x80);

              com_1602(0x01);

}

3.4 延时子程序设定

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

void delay(ui x)

{

              ui i,j;

              for(i=0;i<x;i++)

              for(j=0;j<121;j++);

}

3.5 液晶显示子程序

void display()

{

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

              {

                            if(num_D0==1)

                            {

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

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

                            }

                            if(num_D1==2)

                            {

                                          dis_1602(1,0,4,0,2);

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

                            }

                            if(num_D2==3)

                            {

                                          dis_1602(1,0,6,0,3);

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

                            }

                            if(num_D3==4)

                            {

                                          dis_1602(1,0,8,0,4);

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

                            }

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

              }

              else

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


结束语


至此,本设计的主要内容已经完成。本章是在对前面完成的工作进行总结的基础上,提出今后进一步工作的建议和设想。

选择这个课题之后,我明白要解决的难点:病人都按开关时,在数码显示器能循环显示病床,这也就是考验我们对所学知识有比较透彻的了解和我们的耐心。

接下来每天奔波在宿舍、餐厅三点一线的生活,虽然有点累,但很充实,在这之中还去请教老师和同学,他们耐心的教导让我更加坚定了对该课题的研究,另外还有很多老师的帮助。

在设计的过程中遇到了很多问题,可以说得是困难重重,在遇到各种各样问题的同时,会发现了自己的不足之处,如对以前所学过的知识理解得不够深刻,掌握得不够牢固。比如说Protel软件应用的不够熟练、Proteus仿真知识及操作、对单片机汇编语言掌握得不好。不过通过这次设计之后,也学到了很多知识,更重要的是一定把以前所学过的知识重新温故,学好用好,学以致用。

最后在百般努力下,这次设计终于完成了,在设计中遇到了很多编程问题,最后在老师的辛勤指导下,终于实现了设计的要求。这一次设计给我的总体感觉很好,因为我学到了很多的东西。只要自己能够找好的学习方法,在过程中不断的努力。那么学到的东西肯定会有很多,我相信我是能够做好的。



附录一:Protel原理图



以上的文字Word格式文档51黑下载地址(求大神根据以上电路 弄个完整的程序啊):
文档.doc (438.74 KB, 下载次数: 12)
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表