每个病房有一个按钮,当按下一个按钮时,数码管显示病床号,指示灯闪烁,报警电路报警。 当护士按复位键应答,数码显示管显示消失,取消当前呼叫。 未按复位键时,再按下另一按钮,数码管显示相应病房号,指示灯闪烁,报警电路报警。 单片机复位时,系统清零。 2.1 系统总体方案及框图 无线病房呼叫系统在工作过程中,为了知道是哪个房间的病人发出呼叫信号,必须设计一个系统来完成此任务。此系统能显示呼叫房间号,并发出报警声。系统框图如下图所示: (详见附件) 2.2 时钟电路设计 单片机必须在时钟的控制下才能工作,在单片机内部有一个用于构成振荡器的高增益反相放大器,时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机系统的稳定性。 此设计中的时钟电路选用内部时钟方式的石英晶体振荡器,它的输入端为芯片引脚XTAL1,在加电大约延迟10ms后振荡器起振;输出端为XTAL2,产生幅度为3V左右的正弦波时钟信号。这两个引脚跨接石英晶体和微调电容,构成一个稳定的自激振荡器,其振荡频率主要由石英晶振的频率确定。电路中两个电容 C1、C2的作用有两个:一是帮助振荡器起振;二是对振荡器的频率进行微调。C1、C2的典型值为30PF。 单片机执行的指令均是在CPU控制器的时序控制电路的控制下进行的,各种时序均与时钟周期有关。单片机在工作时,由内部振荡器产生或由外直接输入的送至内部控制逻辑单元的时钟信号的周期称为时钟周期。其大小是时钟信号频率的倒数,常用f表示,是单片机时钟控制信号的基本时间单位。如时钟频率为6MHz,即f=6MHz,则时钟周期为1/6μs。 
图2-2 时钟频率电路 2.3 系统复位电路设计 AT89C51的复位是由外部的复位电路实现的,复位电路通常采用上电自动复位和按钮复位两种方式本设计采用按钮手动电平复位,该设计是通过RST端经电阻与电源Vcc接通来实现的,当时钟频率选用6MHz时,C的典型取值为10uf,R的取值为2KΩ,具体电路图如图2-3所示。  图2-3 复位电路 2.4 键盘扫描电路设计 2.4.1 矩阵式键盘 键盘具有向单片机输入数据,命令等功能,是人与单片机对话的主要手段。在单片机中应用最多的是独立式键盘和矩阵式键盘。本设计采用矩阵式键盘,也称为行列式键盘,用于按键数目较多的场合。与独立式键盘相比,要节省较多的I/O 口。它由行线和列线组成,一组为行线,一组为列线,按键位于行列的交叉点上。 矩阵键盘中无按键按下时,行线位于高电平状态;当有键按下时,行线电平状态将由与此行线相连的列线的电平决定。列线的电平如果为低,则行线电平为低;列线电平如果为高,则行线的电平也为高,这一点是识别矩阵式键盘按键是否按下的关键所在。由于矩阵式键盘中行、列线为多键共用,各按键彼此将相互影响,所以必须将行、列信号配合,才能确定闭合键的位置。本设计中采用4*4矩阵键盘电路设计,其电路图如下图所示: 
图 2-4 4*4矩阵键盘电路图 2.4.2 键的识别 为了识别键盘上的闭合键,通常采用两种方法,一种为扫描法,另一种为线发转法。 1 扫描法原理:识别键盘有无键按下,可分两部进行:第1步,识别键盘有无键按下;第2步,如有键按下,识别出具体的键位。下面以4*4行、列结构中键3被按下为例说明扫描法识别此键的过程。 第1步,识别键盘有无键按下。首先把所有列线均置为0电平,然后检查各行线电平是否为高电平,如果不全为高电平,说明有键按下,否则说明无键被按下。例如,当键3按下时,第1行线电平为低电平,但还不能确定是键3被按下, 第2步,识别那个键被按下。采用扫描法,在某一时刻只让1条列线处于低电平,其余所有列线处于高电平。当第1列为低电平,其余各列为高电平时,因为是键3被按下,所以第1列的行线仍处于高电平;而当第2列为低电平,其余各列为高电平时,同样也会发现第1行的行线仍处于高电平状态;直到让第4列为低电平,其余各列为高电平时,此时第1行的行线电平变为低电平,据此,可判断第1行与第4列交叉点处的按键,即键3被按下。 去除键抖动:用软件延时来消除按键抖动,基本思想是:在检测到有键按下时,该键所对应的行线为低电平,执行一段延时10ms的子程序后,确认该行线电平是否仍为低电平,如果仍为低电平,则确认该行确实有键按下。 线反转法原理:线反转法需3步,即可确定按键所在的行和列,从而识别出所按的键。 第1步:执行程序使行线均为低电平,此时读取各列线的状态即可知道是否有键按下。当无键按下时,各行线与各列线相互断开,各列线仍保持为高电平;当有键按下时,则相应的行线与列线通过该按键相连,该列线就变为低电平,此时读取列线的状态,得到列码。 第2步,执行程序使列线均为低电平,当有键按下时,行线中有一条为低电平,其余行线为高电平,读取行线的状态,得到行码。 第3步,将第一步得到的列码和第二步得到的行码拼合成被按键的位置码,即为所得(因为行线和列线各有一条为低电平,其余为高电平,所以位置码低四位和高四位分别只有一位低电平,其余为高电平)。 也就是说,当某个键按下时,该键两端所对应的行线和列线为低电平,其余行线和列线为高电平。 全部矩阵键盘的位置码如下表2-1所示: 表2-1 矩阵键盘位置码 本设计中采用扫描法。其综合思想是:先把某一列置为低电平,其余各列置为高电平,检查各行线电平的变化,如果某行线电平为低电平,则可确定此行此列交叉点处的按键被按下。 2.5 LED数码管显示部分 LED发光器件一般常用的有两类:数码管和点阵。7段数码管属于LED发光器件的一种。 为适用于不同的驱动电路,有共阴极共阳极两种,为了使LED数码管显示不同的符号和数字,要把某些段的发光二极管点亮,这样就要为LED数码管提供代码,因为这些代码可使LED相应的段发光,从而显示不同字形,因此改代码段也称为段码或字型码。 
图2-5 LED显示器的两种结构 LED数码管共计8段。因此提供给LED数码管的段码正好是一个字节。在使用时,一般习惯上还是以a段对应段码字节的最低位。各段与字节中各位对应关系见表2-2 表 2-2 段码与字节中各位对应关系 LED数码管有静态显示和动态显示两种显示方式。 静态显示:指无论多少位LED数码管,同时处于显示状态,静态显示方式的显示无闪烁,亮度都较高,软件控制比较容易。 动态显示:指无论在任何时刻只有一个LED数码管处于显示状态,即单片机采用“扫描方式”控制各个数码管轮流显示。显示亮度不如静态显示的亮度高,如果扫描速率较低,会出现闪烁现象。 本设计中采用动态显示,利用74LS373和显示器组成显示系统。LED不同位显示的时间间隔(扫描间隔)应根据实际情况而定。发光二极管从导通发光有一定的延时,导通时间太短,发光太弱,人眼无法看清;时间太长,要受限于临界显烁频率,而且此时间越长,占用单片机的时间也越多。因此动态显示的实质是以牺牲单片机时间来换取I/O端口的减少。 用AT89C51自身接口实现数码管动态显示和键盘扫描,使用AT89C51单片微机外加地址锁存用的2块8三态锁存器74LS373。 74LS373是常用的地址锁存芯片,它实质是一个带三态缓冲输出的8D触发器。其引脚图如下图2-6所示:

图2-6 74ls373引脚图 其功能介绍如下: 1脚是输出使能(OE),是低电平有效,当1脚是高电平时,不管输入3、4、7、8、13、14、17、18如何,也不管11脚(锁存控制端,G)如何,输出2(Q0)、5(Q1)、6(Q2)、9(Q3)、12(Q4)、15(Q5)、16(Q6)、19(Q7)全部呈现高阻状态(或者叫浮空状态); 当1脚是低电平时,只要11脚(锁存控制端,G)上出现一个下降沿,输出2(Q0)、5(Q1)、6(Q2)、9(Q3)、12(Q4)、15(Q5)、16(Q6)、19(Q7)立即呈现输入脚3、4、7、8、13、14、17、18的状态. 锁存端LE 由高变低时,输出端8 位信息被锁存,直到LE 端再次有效。 当三态门使能信号OE为低电平时,三态门导通,允许Q0~Q7输出,OE为高电平时,输出悬空。 1D~8D为8个输入端。1Q~8Q为8个输出端。其在电路图中的连接如图2-6所示

图2-7 74LS373锁存器及数码管显示电路
2.6 响铃报警电路设计部分 用三极管加限流电阻作为控制开关,用单片机P2.3口控制,利用三极管当做开关电路可以保护单片机,还可以起到放大电流的作用,当三极管基极为低电平时,发射极截止,为高电平时,发射极导通。显示器显示床号同时发出报警声。通过编程令单片机执行中断程序。
其电路图2-8如: 图2-8 响铃报警电路
2.7 系统总体硬件电路图 本系统利用AT89C51作为呼叫系统的核心,外围电路有:晶振电路、系统复位电路、响铃报警电路和LED数码显示电路以及其他各应用电路。系统总体硬件如图2-9所示。 图2-9 系统总体硬件电路图
第3章 单片机AT89C51简介 3.1 AT89C51的基本结构 AT89C51是一种带4K字节闪存可编程可擦除只读存储器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低电压,高性能CMOS 8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU(Cenctral Processing Unit)和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C系列单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。其管脚图如3-1所示:  图3-1 89C51管脚图 部分引脚说明: XTAL2(18 脚):接外部晶体和微调电容的一端;在8051 片内它是振荡电路反相放大器的输出端,振荡电路的频率就是晶体固有频率。若需采用外部时钟电路时,该引脚输入外部时钟脉冲。
要检查8051/8031 的振荡电路是否正常工作,可用示波器查看XTAL2 端是否有脉冲信号输出。 XTAL1(19 脚):接外部晶体和微调电容的另一端;在片内它是振荡电路反相放大器的输入端。在采用外部时钟时,该引脚必须接地。 控制信号引脚RST,ALE,PSEN 和EA: RST/VPD(9 脚):RST 是复位信号输入端,高电平有效。 ALE/PROG(30 脚):地址锁存允许信号端。当8051 上电正常工作后,ALE 引脚不断向外输出正脉冲信号,此频率为振荡器频率fOSC 的1/6。CPU 访问片外存储器时,ALE 输出信号作为锁存低8 位地址的控制信号。 ALE端的负载驱动能力为8 个LS 型TTL(低功耗甚高速TTL)负载。 此引脚的第二功能PROG 在对片内带有4KB EPROM 的8751 编程写入(固化程序)时,作为编程脉冲输入端。 PSEN(29 脚):程序存储允许输出信号端。在访问片外程序存储器时,此端定时输出负脉冲作为读片外存储器的选通信号。此引肢接EPROM 的OE 端(见后面几章任何一个小系统硬件图)。PSEN 端有效,即允许读出EPROM/ROM 中的指令码。PSEN 端同样可驱动8 个LS 型TTL 负载。要检查一个8051/8031 小系统上电后CPU能否正常到EPROM/ROM 中读取指令码,也可用示波器看PSEN 端有无脉冲输出。如有则说明基本上工作正常。 EA/Vpp(31 脚):外部程序存储器地址允许输入端/固化编程电压输入端。 P0口(P0.0~P0.7,39~32 脚):P0口是一个漏极开路的8 位准双向I/O口。作为漏极开路的输出端口,每位能驱动8 个LS 型TTL 负载。当P0 口作为输入口使用时,应先向口锁存器(地址80H)写入全1,此时P0 口的全部引脚浮空,可作为高阻抗输入。作输入口使用时要先写1,这就是准双向口的含义。在CPU 访问片外存储器时,P0口分时提供低8 位地址和8 位数据的复用总线。在此期间,P0口内部上拉电阻有效。 P1口(P1.0~P1.7,1~8 脚):P1口是一个带内部上拉电阻的8 位准双向I/O口。P1口每位能驱动4 个LS 型TTL 负载。在P1口作为输入口使用时,应先向P1口锁存地址(90H)写入全1,此时P1口引脚由内部上拉电阻拉成高电平。 P2口(P2.0~P2.7,21~28 脚):P2口是一个带内部上拉电阻的8 位准双向I/O口。P口每位能驱动4个LS 型TTL 负载。在访问片外EPROM/RAM 时,它输出高8 位地址。 P3口(P3.0~P3.7,10~17 脚):P3口是一个带内部上拉电阻的8 位准双向I/O口。P3口每位能驱动4个LS型TTL负载。P3口与其它I/O 端口有很大的区别,它的每个引脚都有第二功能,如下:
P3.0:(RXD)串行数据接收。 P3.1:(RXD)串行数据发送。 P3.2:(INT0#)外部中断0输入。 P3.3:(INT1#)外部中断1输入。 P3.4:(T0)定时/计数器0的外部计数输入。 P3.5:(T1)定时/计数器1的外部计数输入。 P3.6:(WR#)外部数据存储器写选通。 P3.7:(RD#)外部数据存储器读选通。 3.2 AT89C51的指令系统 AT89C51的指令系统是一种简明、易掌握、效率较高的指令系统,它共有7种寻址方式,111条指令,按其功能可分为五大类: - 数据传送类指令(28条);
- 算术运算类指令(24条);
- 逻辑操作类指令(25条);
- 控制转移类指令(17条);
- 位操作类指令(17条)。
指令的表示方法称为指令格式。一条指令通常有两部分组成:操作码和操作数。大多数指令在执行时都需要使用操作数。寻址方式就是在指令中说明操作数所在地址的方法,一般来说,寻址方式越多,单片机的功能就越强,灵活性则越大,指令系统则就越复杂,AT89C51单片机的指令系统有7中寻址方式。分别是:寄存器寻址方式、直接寻址方式、寄存器间接寻址方式、立即数寻址方式、基址寄存器加变址寄存器间接寻址方式、相对寻址方式和位寻址方式。 3.3 AT89C51单片机的定时/计数器 在单片机应用系统中,常常会有定时控制需求,如定时输出、定时检测、定时扫描等;也经常要对外部事件进行计数。80C51单片机内集成有两个可编程的定时/计数器:T0和T1,它们既可以工作于定时模式,也可以工作于外部事件计数模式,此外,T1还可以作为串行口的波特率发生器。
第4章 系统软件设计 4.1 单片机C语言程序设计步骤 程序设计步骤包括绘制程序流程图,编写程序,运行调试,仿真模拟等步骤。 病房呼叫系统软件设计均采用模块化设计,整个程序主要包括主程序、键盘扫描程序、显示程序。所有程序均采用单片机C语言编写。病房呼叫系统的软件设计思路说明如下:主程序的作用为程序初始化,显示病房编号(病房号的获得在键盘扫描程序中实现)。通过不断的扫描,检查是否有病人呼叫。显示程序通过扫描16个病床的判断标志截来决定是否需要显示床号。键盘扫描程序是重要组成部分,它的功能是判困是否有按键并进一步确认是哪个按键按下或释放,同时修改相应的标志位,以运用到显示程序中。 4.2 系统主程序流程图 主程序流程图给出了系统工作的基本过程,,描述了信号的基本流向,起到了一个向导的作用。 
图4-1主程序流程图
主程序描述:首先对各存储单元初始化,设定定时初值,清零键,然后继续扫描键盘, 如扫描到键盘有键按下,则进而判断是嘟个床位按下,进而显示病床号时,要判断标志位, 若已经按下,则不响应,否则显示病床号。最后,返回扫描键值程序,准备下一次的判断。 4.3 显示程序流程图 显示程序主要是来判断是否需要显示,以及如何去显示,是十分重要的程序之一。设计流程图如4-2图所示。 
图 4-2 显示程序流程图 显示程序描述:设定床号标志为,令n从1开始,判断床号是否为0,若不为0,表示有病房呼叫,则显示床号,继续扫描键值判断是否有别的病房呼叫,若n为0,表示无呼叫,则继续扫描下一病床号。
4.4 键盘扫描流程图 键盘电路设计为4*4矩阵式,在程序中可以先判断按键编码,然后在显示子程序中通过程序进行译码,再显示。设计流程图如图4-3所示:
第5章 电路的仿真及调试 5.1 软件的仿真 启动电源,显示屏无显示,在按下2号键时,界面部分显示02,指示灯闪烁,声音报警;未按按复位键,再按下6号键时,界面显示06,指示灯闪烁,声音报警。依次按下各按键,相应病房号会相应显示。该设计反映了控制电路的可行性。综上所述,本系统实现了主要功能:显示病床号,指示灯闪烁,声音报警提醒值班人员。通过Proteus软件仿真,能达到上述结论,满足课项目目的,达到要求。采用Proteus进行图形绘制仿真,Keil进行编程,然后放入单片机中,实现应有的功能。 

5.2 硬件调试分析 由于时间有限,没有做出电路板,只在单片机学习板上做了硬件仿真,以下是关于硬件仿真图:  

5.3 调试问题分析与总结 本设计采用七段数码管显示功能,最初在软件上进行仿真时按键个位数字是1和4时,数码管不能正常显示,将程序中数码管显示位数处进行了相应修改,能正常显示。 按下一个按键时,数码管显示按键号,有声音报警,再按下另一个按键,却不能正常显示,必须在按下复位键的前提下,按下另一个按键才能重新显示。之后对程序进行了相应的修改,将while(key!=0)改成if(key!=0)后,数码管就能在按下按键后显示相应按键号,指示灯闪烁,声音报警。 由于软件仿真的延时问题,数码管显示相应病床号时会不稳定。

程序+仿真+完整文档下载(word格式 可编辑):
http://www.51hei.com/bbs/dpj-86776-1.html
|