微机原理课程设计 模拟医院报警系统.docx
《微机原理课程设计 模拟医院报警系统.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计 模拟医院报警系统.docx(46页珍藏版)》请在冰豆网上搜索。
微机原理课程设计模拟医院报警系统
微机原理与接口技术
课程设计
课程设计科目
模拟医院报警系统设计
学生姓名
学号
班级
指导教师
一.题意分析与解决方案
1.1需求分析
采用7个开关为7个病房的开关,其中有两个是高危病房,当有人按下时立即在8个发光二级管上显示出来,并且该位置闪动,同时发出警报,并通过一个数码管显示出来。
当有高危病房的按键按下之后,立马将他的病房号调到第一个数码管显示并且相应的数码管显示,警报由一个扬声器发出。
设置一个警报清除按键,清除所有报警情况。
1.2算法及思路
(1)硬件部分
针对需求中的分析,作如下解决:
1)LED灯作为刺激信号;
2)用按键的高低电平信号作为用户的回馈信号;
3)采用0832来控制蜂鸣器发出声音;
4)为了显示出病房号,选择了7段数码管作为显示工具,用8255和8279来控制数码管;
(2)软件部分
首先,根据硬件需求采用8255A,8279A和0832,为实现对数码管、键盘、LED灯和蜂鸣器的控制,采用汇编语言,分别对8255A和0832进行初始化设置,然后采用继承函数从数据库里对8279相关功能进行调用。
然后,程序查询8255A的PA口输入的开关信号,决定8255A何时向外部设备发送的刺激信号,即低电平信号(LED灯点亮),通过相关的代码用8279对数码管进行位选和段选。
最后,程序查询8255A的PB端口接收缓冲区内回馈电信号,根据所得到的信号(低电平有效),调用相应模式子程序,并且在数码管上显示病房号,蜂鸣器发出声音。
二.硬件设计
2.1芯片8255
1)芯片8255在本设计中的作用
芯片8255在本实验中主要用于控制按键的开关、数码管以及LED灯。
2)芯片8255的功能分析
图2-18255内部结构图
8255是可编程并行接口,内部有3个相互独立的8位数据端口,即A口、B口和C口。
三个端口都可以作为输入端口或输出端口。
A口有三种工作方式:
即方式0、方式1和方式2,而B口只能工作在方式0或方式1下,而C口通常作为联络信号使用。
8255的工作只有当片选CS效时才能进行。
而控制逻辑端口实现对其他端口的控制。
使用8255芯片的C口,将其设置为基本输出工作方式,通过PC0输出线连接到芯片8253的GATE2口,使其计数器2正常工作,通过PC0输出线连接到D1区的CTRL口,控制蜂鸣器的开关。
读/写控制逻辑,它负责管理8255的数据传输过程。
它接收CS及RD、WR、RESET,还有来自系统地址总线的口地址选择信号A0和A1。
将这些信号组合后,得到对A组控制部件和B组控制部件的控制命令,并将命令发给这两个部件,以完成对数据、状态信息和控制信息的传输。
3)8255的技术参数
表2-18255技术参数
参数名称
符号
测试条件
最大规范值
最小规范值
输入低电平电压
VIL
0.8V
-0.5V
输入高电平电压
VIH
Vcc
2.0V
输入低电平电压(数据总线)
VOL
IOL=2.5MA
0.45V
输入低电平电压(外部端口)
VOL
IOL=1.7MA
0.45V
输入高电平电压(数据总线)
VOH
IOH=-400MA
2.4V
输入高电平电压(外部端口)
VOH
IOH=-200MA
2.4V
达林顿驱动电流
IDAR
REXT=750VEXT=1.5V
-0.4MA
1.0MA
电源电流
ICC
120MA
输入负载电流
IIL
I=Vcc—0V
+10MA
-10MA
输出浮动电流
IOFL
Vout=Vcc--0
+10MA
-10MA
2.2芯片8279
1)芯片8279在本设计中的作用
芯片8279在本实验中主要用于控制数码管。
2)芯片8279的功能分析
本图片为8279引脚图
8279采用单±5V电源供电,40脚封装。
DB0~DB7:
双向数据总线,用来传送8279与CPU之间的数据和命令。
CLK:
时钟输入线,用以产生内部定时的时钟周期。
RESET:
复位输入线,8279复位后被置为字符显示左端输入,二键闭锁的触点回弹型式,程序
时钟前置分频器被置为31,RESET信号高电平有效。
CS:
片选输入线,低电平有效,单片机在CS端为低时可以对8279读/写操作。
A0:
缓冲器低位地址,当A0为高电平时,表示数据总线上为命令或状态,当为低电平时,表示数据总线上为数据。
RD:
读信号输入线,低电平有效,将缓冲器读出,数据送往外部总线。
WR:
写信号输入线,低电平有效,将缓立器读出,将数据从外部数据总线写入8279的缓冲器。
RL2--140--VCC
IRQ:
中断请求输出线,高电平有效,在键盘工作方式下,当FIFO/传感器RAM中有数据时,
此中断线变为高电平,在FIFO/传感器RAM每次读出时,中断线就下降为低电平,若在RAM
中还有信息,则此线重又变为高电平。
在传感器工作方式中,每当探测到传感器信号变
化时,中断线就变为高电平。
SL0~SL3:
扫描线,用来扫描按键开关,传感器阵列和显示数字,这些可被编程或被译码。
RL0~RL7:
回送线,经过按键或传感器开关与扫描线联接,这些回送线内部设置有上拉电
路,使之保持为高电平,只有当一个按闭合时,对应的返回线变为低电平;无按键闭合时,
均保持高电平。
SHIFT:
换位功能,当有开关闭合时被拉为低电平,没有按下SHIFT开关时,SHIFT输入端保
持高电平,在键盘扫描方式中,按键一闭合,按键位置和换位输入状态一起被存贮起来。
CNTL/STB:
当CNTL/STB开关闭合时将其拉到低电平,否则始终保持高电平,对于键盘输入
方式,此线用作控制输入端,当键被按下时,按键位置就和控制输入状态一起被存贮起来,
在选通输入方式中,作选通用,把数据存入FIFORAM中。
OUTA3~OUTA0及OUTB3~OUTB0:
显示输出A口及B口,这两个口是16×4切换的数字显示。
这
两个端口可被独立控制,也可看成一个8位端口。
BD:
空格显示,此输出端信号用于在数字转换时将显示空格或者用显示空格命令控制其显示
空格字符。
VCC:
+5V电源输入线。
VSS:
地线输入线。
☆8279的编程方法
1.8279可按其功能分为:
键盘功能块;显示功能块;控制功能块;与CPU接口功能块控制功能块包括
控制和定时寄存器,定时和控制,扫描计数器三部分,它主要用来控制键盘和显示功能块工作.
:
:
控制和定时寄存器:
用于存贮来自CPU的编程命令,CPU对8279编程以确定键盘与显示器工作
方式和其它工作条件时,先把命令控制数据放到数据总线上,然后使A0=1,WR=0CS=0,并在WR
上升沿把命令键存在控制和定时寄存器中,并经译码,建立适当的功能.
:
:
定时和控制:
它含基本的定时计数器,第一个计数器是一个分频系数为2-31的前置定时器,
分频系数可由程序预置,使内部频率为100KHz,从而能给出5.1ms键盘扫描时间和10.3ms反
跳时间,其它计数器将此基本频率分频后,提供适当的按键扫描.行扫描.键盘阵列扫描.以
及显示器扫描次数.
:
:
扫描计数器:
扫描计数器有两种工作方式,在编码工作方式时,计数器提供一种二进制计数,
通过管脚SL0-SL3输出后经外部译码才能提供给键盘和显示器的扫描作用,在译码工作方式
时,扫描计数器对最低二位进行译码,SL0-SL3输出4选1的译码信号,作为显示器和键盘的译
码扫描.
:
:
键盘功能块包括:
返回缓冲器,键盘反跳及控制,8x8FIFO传感器RAM,FIFO/传感器RAM状态.
2.返回缓冲器与键盘反跳及控制
8条返回线被返回缓冲器缓冲,在键盘工作方式中,这几条线被逐个检测,以找出该行键中闭合
的键,如果反跳电路测知某键闭合,则它等待10.3ms,然后重核此键是否仍然闭合,如果仍闭合,
那么该键在矩阵中的行列地址以及SHIFT和CNTL的状态一起被送到FIFORAM中,其在FIFORAM中
的数据格式如下:
D7D6D5D4D3D2D1D0
CNTLSHIFTSCANRETURN
数据格式中,最高位CNTL,次高位为SHIFT状态,D5-D3来自扫描计数器,D2-D0来自返回计数器,
扫描线计数器和回扫线计数器的值分别反映出被按下键的行.列的值,如果在传感器阵列中,
返回线上的数据直接进入传感器RAM中相应于阵列中正被扫中的那行,这样每个开关位置就直
接反映为一个传感器RAM的位置.
2.3芯片DAC0832的技术参数
图2-2DAC0832
DAC0832芯片采用CMOS工艺,四象限乘法型DAC与微机兼容,数据输入能与双缓冲,单缓冲或直接缓冲通过三种方式工作。
1、单缓冲方式。
单缓冲方式是控制输入寄存器和DAC寄存器同时接收资料,或者只用输入寄存器而把DAC寄存器接成直通方式。
此方式适用只有一路模拟量输出或几路模拟量异步输出的情形。
2、双缓冲方式。
双缓冲方式是先使输入寄存器接收资料,再控制输入寄存器的输出资料到DAC寄存器,即分两次锁存输入资料。
此方式适用于多个D/A转换同步输出的情节。
3、直通方式。
直通方式是资料不经两级锁存器锁存,即CS*,XFER*,WR1*,WR2*均接地,ILE接高电平。
此方式适用于连续反馈控制线路和不带微机的控制系统,不过在使用时,必须通过另加I/O接口与CPU连接,以匹配CPU与D/A转换。
结构:
D0~D7:
8位数据输入线,TTL电平,有效时间应大于90ns(否则锁存器的数据会出错);
ILE:
数据锁存允许控制信号输入线,高电平有效;
CS:
片选信号输入线(选通数据锁存器),低电平有效;
WR1:
数据锁存器写选通输入线,负脉冲(脉宽应大于500ns)有效。
由ILE、CS、WR1的逻辑组合产生LE1,当LE1为高电平时,数据锁存器状态随输入数据线变换,LE1的负跳变时将输入数据锁存;
XFER:
数据传输控制信号输入线,低电平有效,负脉冲(脉宽应大于500ns)有效;
WR2:
DAC寄存器选通输入线,负脉冲(脉宽应大于500ns)有效。
由WR2、XFER的逻辑组合产生LE2,当LE2为高电平时,DAC寄存器的输出随寄存器的输入而变化,LE2的负跳变时将数据锁存器的内容打入DAC寄存器并开始D/A转换。
IOUT1:
电流输出端1,其值随DAC寄存器的内容线性变化;
IOUT2:
电流输出端2,其值与IOUT1值之和为一常数;
Rfb:
反馈信号输入线,改变Rfb端外接电阻值可调整转换满量程精度;
Vcc:
电源输入端,Vcc的范围为+5V~+15V;
VREF:
基准电压输入线,VREF的范围为-10V~+10V;
AGND:
模拟信号地;
DGND:
数字信号地。
主要参数为:
表2-2DAC0832主要技术参数
转换时间
1us
分辨率
8位
功耗
20mW
单一工作电源
+5V~+15V
电流建立时间
1
线性度
8,9或10位
增益温度系数
0.0002%usFS/℃
在此实验箱中的DAC0832芯片中包含有运算放大器,用来将电流信号转换成电压信号量,并且能够放大信号量。
本实验是通过0832来控制蜂鸣器。
2.4选择器件蜂鸣器
1)蜂鸣器在本设计中的作用
在本实验中,蜂鸣器是用做报警处理。
图2-3蜂鸣器电路图
2)蜂鸣器的功能分析
扬声器是将电能转化成声能,并将声能辐射到空气中去的一种电声转换器件。
当输入端输入一定频率的方波时,在RC震荡电路的作用下,蜂鸣器会发出一定频率的声音。
3)蜂鸣器的技术参数
它一般包括灵敏度、频率响应、额定功率、额定阻抗、指向性、失真、音质听感评价等。
本实验只关心应用电压,其为5V。
2.5选择数码管
图2-4数码管电路图
图2-5数码管
(1)数码管在本设计中的作用
在本设计中,数码管的作用不容小觑,主要用于显示病房号。
(2)数码管的技术参数分析
使用数码管时,应该区分数码管时共阴还是共阳,在本设计中,所有的数码管都是共阴的。
只要段选输入高电平即可点亮不同位置的数码管进而显示数据。
表2-3共阳极LED显示管段选码编码表
数字
Dp
g
f
e
d
c
b
a
二进制编码
0
1
1
0
0
0
0
0
0
C0H
1
1
1
1
1
1
0
0
1
F9H
2
1
0
1
0
0
1
0
0
A4H
3
1
0
1
1
0
0
0
0
B0H
4
1
0
0
1
1
0
0
1
99H
5
1
0
0
1
0
0
1
0
92H
6
1
0
0
0
0
0
1
0
82H
7
1
1
1
1
1
0
0
0
F8H
8
1
0
0
0
0
0
0
0
80H
9
1
0
0
0
0
1
1
0
90H
2.6LED灯
图2-6LED原理图
(1)LED灯在本设计中的作用
在本设计中,LED灯的作用是作为病房信号,按下按键时,led发光。
(2)LED灯的功能分析
通过LED灯的亮、灭作为一个刺激信号。
(3)LED灯的技术参数分析
LED灯的功能较为简单,为一个发光二极管,当该二极管导通时闪亮,截止时不闪亮。
2.7按键
图2-7微型按钮
(1)按键在本设计中的作用
在本设计中,键盘主要的作用是启动系统。
(2)按键的功能分析
按键的功能比较单一,按键或不按键,该端口将输出不同的电平信号。
(3)按键的技术参数分析
按键一段接芯片输入端口,另一端接VCC,当按键时,开关闭合,电平强制被拉低,通过低电平的信号输入即可知道是否有按键的输入啦。
2.8硬件总逻辑图及其说明
硬件原理图:
图2-8-1硬件原理图
硬件原理图说明:
表2-4连线图
A3区
A0、A1、CS1
B4区
A0、A1、CS
A3区
CS3
F3区
CS
B4区
A、C
G6区
按键、LED
B4区
B
G5区
B
G5区
JP41
C1区
开关
D1区
CTRL
F3区
OUT
E5区
CLK
B2
2M
E5
A0
A3
A0
软件仿真图
图2-8-2软件总体仿真图
图2-8-3左半部分图
图2-8-4软件右半部分图
三.控制程序设计
3.1控制程序设计思路说明
本程序采用模块化的程序设计思想,将完成整个作业所需要的全部功能按要求划分为若干子模块。
具体而言,控制程序主要有:
主程序块,初始化8255A,调用8279函数,初始化DAC0832子模块,延时子模块及其他一些初始化程序。
3.2程序流程图
Y
Y
=
图3.1模拟医院报警系统流程图
图3-2延时子程序
图3-3点亮LED
3.3控制程序
.MODELTINY
IOYEQU0F000H;对应端口CS1
A_8255EQUIOY+00H;控制按键
B_8255EQUIOY+01H;控制数码管
C_8255EQUIOY+02H;控制LED
CON_8255EQUIOY+03H
ADDR_0832EQU0D000H;ADC0832,CS2
EXTRNDisplay8:
NEAR
.STACK300
.DATA
BUFFERDB8DUP(0)
SHOW_BUFFERDB8DUP(10H)
LED_FLAGDB8DUP(0);表示灯1的状态,0表示灭,1为亮
KEY_COUNTDB0;表示总共多少病房
SHAN_TIMEDW0
SHAN_BUFDB2DUP(0)
KEY_VALUEDB?
KEY_VDB0FFH;保存灯的状态,最开始时二极管全灭,每当按一个按键使一个灯亮
.CODE
MAIN:
MOVDX,CON_8255
MOVAL,10010000B;方式0,A口输入,B口、C口输出
OUTDX,AL
MOVDX,C_8255
MOVAL,0FFH;C口输出高电平,LED全灭
OUTDX,AL
MOVDX,ADDR_0832
MOVAL,0FFH
OUTDX,AL;蜂鸣器初始状态,不响
CALLCLEAR_SEGMENT;清数码管显示
KEY_SCAN:
CALLSHANSHUO
MOVDX,A_8255
INAL,DX;读键值
CMPAL,0FFH
JZKEY_SCAN
CALLDL500ms
MOVKEY_VALUE,AL
CLEAR_KEY:
;消抖
INAL,DX;读键值
CMPAL,0FFH
JNZCLEAR_KEY
MOVAL,KEY_VALUE
;CALLSHOW+
CALLFIND_KEY;找出按键位置
JMPKEY_SCAN
CLEAR_SEGMENTPROCNEAR
PUSHDI
PUSHCX
PUSHAX
LEADI,BUFFER
MOVAL,10H
MOVCX,8
LOOPCLEAR:
STOSB
LOOPLOOPCLEAR
LEASI,BUFFER
CALLDisplay8
CALLFMQ_OFF
POPAX
POPCX
POPDI
RET
CLEAR_SEGMENTENDP
FIND_KEYPROCNEAR
PUSHAX
PUSHCX
PUSHBX
MOVAL,KEY_VALUE
MOVCX,8
MOVBL,11111110B
FIND1:
CMPAL,BL
ROLBL,1
LOOPNZFIND1
JCXZFIND_8
FIND_IT:
CALLCHANGE_LED
JMPFIND_RET
FIND_8:
CALLCLEAR_ALL
FIND_RET:
POPBX
POPCX
POPAX
RET
FIND_KEYENDP
CHANGE_LEDPROCNEAR
PUSHAX
PUSHSI
PUSHDI
MOVDX,CON_8255
CHANGE1:
LEASI,LED_FLAG
ADDSI,CX
DECSI
LODSB
CMPAL,1
JNZSET1
SET0:
MOVAL,CL
ROLAL,1
ORAL,00H
OUTDX,AL
LEADI,LED_FLAG;如果该位已经按过,表示该灭灯
ADDDI,CX
DECDI
MOVAL,0
STOSB
;CALLDELETE_ONE;删除一个,
JMPCHANGE_RET
SET1:
MOVAL,CL
ROLAL,1
ANDAL,0FFH
OUTDX,AL
LEADI,LED_FLAG
ADDDI,CX
DECDI
MOVAL,1
STOSB
;CALLADD_ONE;增加一个
CHANGE_RET:
POPDI
POPSI
POPAX
RET
CHANGE_LEDENDP
ADD_ONEPROCNEAR
PUSHAX
PUSHCX
PUSHBX
XORAX,AX
MOVAL,KEY_COUNT;放到show_data数组之后添加
;将按下的键值换为数存入show_buf中
MOVBH,8
SUBBH,CL
;判断是否=67
CMPBH,6
JBADDIT
ADDFIRST:
LEASI,SHOW_BUFFER
LEADI,SHOW_BUFFER
ADDSI,AX
ADDDI,AX
DECSI
XORCH,CH
MOVCL,KEY_COUNT
STD;DF=1,减量操作
REPMOVSB
CLD
XORAX,AX
ADDIT:
LEADI,SHOW_BUFFER
ADDDI,AX
MOVAL,BH
STOSB
MOVAL,KEY_COUNT
INCAL
MOVKEY_COUNT,AL
LEASI,SHOW_BUFFER
LEADI,BUFFER
MOVCX,8
REPMOVSB
LEASI,BUFFER
CALLDisplay8
CALLFMQ_ON
POPBX
POPCX
POPAX
RET
ADD_ONEENDP
DELETE_ONEPROCNEAR
PUSHAX
PUSHSI
PUSHDI
XORAX,AX
MOVAH,8
SUBAH,CL
;MOVAL,KEY_COUNT
;DECAL
LEASI,SHOW_BUFFER
MOVCL,KEY_COUNT
FINDNUM:
LODSB
CMPAL,AH
LOOPNZFINDNUM
;JCXZDELETE_RET
DELETE_IT:
LEADI,SHOW_BUFFER
LEASI,SHOW_BUFFER
MOVAL,CL
MOVCH,KEY_COUNT
SUBCH,CL
MOVCL,CH
XORCH,CH
ADDSI,CX
ADDDI,CX
DECDI
MOVCL,AL
INCCL
;DECCL
REPMOVSB
LEASI,SHOW_BUFFER
LEADI,BUFFER
MOVCX,8
REPMOVSB
LEASI,BUFFER
CALLDisplay8
CAL