1104011006杨磊夜班防睡.docx
《1104011006杨磊夜班防睡.docx》由会员分享,可在线阅读,更多相关《1104011006杨磊夜班防睡.docx(27页珍藏版)》请在冰豆网上搜索。
1104011006杨磊夜班防睡
计算机科学与技术系
微机原理与接口技术
课程设计
2013~2014学年第1学期
课程设计题目
微机原理与接口技术课程设计
院系名称
计算机科学与技术
专业
计算机科学与技术
班级
11级计本一班
姓名(学号)
杨磊(1104011006)
指导教师
张向东、龙夏
2014年1月
1功能分析及解决方案2
1.1功能需求分析2
1.2解决问题方法及思路2
2硬件设计3
2.1可编程定时器计数器82533
2.2可编程并行接口82555
2.3可编程设置型键盘/显示器接口82795
2.4语音模块ISD14205
2.5键盘5
2.6LED灯5
2.7数码管5
2.8蜂鸣器5
2.9硬件总逻辑图及其说明12
3控制程序设计14
3.1控制流程设计及其思路说明14
3.2程序流程图15
3.3控制程序18
4上机调试过程41
4.1硬件调试41
4.2软件调试41
4.3联机调试42
4.4调试结果及问题的提出42
5设计结果分析及问题讨论42
5.1课程设计及结果分析42
5.2问题讨论42
5.3收获、体会和意见42
附录1系统原理图44
一、需求分析和解决问题的思路
1.1需求分析
1.1.1市场需求分析
如今社会上是大型企业和社会重要部门与组织的固定资产愈来愈多,而大量的固定资产的保护是现今企业面临的主要问题。
许多的企业都选择夜间值班这一措施来保护自己的固定资产,这个方法看上去是个不错的解决方式,但实际上它也是存在着不小的漏洞。
在夜间值班期间,值班者总有不时犯困的,而犯困是周围有没有人来提醒值班者,这同样可以让不法者有机可乘。
本设计就是针对这一问题而设计的。
利用计时警报提醒来警示值班者,从而可以大大降低值班者的昏睡频率。
进而保护企业的财产。
同时该设计这市场上的前景也是比较开阔的。
据了解在市场上同类型的产品基本上属于真空。
这也保证了本设计的市场出路。
1.1.2任务分析
1)每5分钟用一次较柔和的声音提醒值班者按复位键,之后计时重新开始。
2)若计时到6分钟时,还没人按复位键,则以较急促的声音报警,黄灯闪烁。
3)当到15分钟的时候红灯闪烁,并以持续尖锐的声音报警,以LED显示分和秒。
1.1.3功能分析
本设计主要是为了解决值班人员在值夜班时容易睡觉的问题。
设计中主要通过扬声器发生来防止值班人员睡觉,每隔5分钟用较柔和的声音提醒值班人员一次,值班人员按下复位键重新即时,说明值班人员并未睡着;如果及时到6分钟值班人员还没有按复位键,说明此时值班人员可能已经开始打盹,扬声器发出较急促的声音报警,并且黄灯闪烁,若此按下复位键,又重新计时;如果到了15分钟还没有人按复位键,那么此时值班人员可能已经完全睡着,扬声器发出尖锐的声音报警,红灯闪烁,并以LED记录睡着的时间。
1.1.4需要解决的问题
需要发声提醒,发声提醒又分为3种(较柔和,较急促,尖锐的声音),通过键盘复位,要红,黄灯闪烁。
还要将时间动态显示在LED显示器上,每秒刷新一次。
而且分秒显示共需4位数字,所以要有4个LED数码管进行控制。
秒控制的两位要在60秒后进位,分钟的两位加1,秒清零。
扬声器可用专门的扬声器电路,也要用PC机的喇叭实现。
1.2解决问题方法及思路
1.2.1硬件部分
1)PC机一台,并行接口8255A一片,LED数码管4只,发光二极管2只(红、黄各一只),开关一个,扬声器一只。
2)利用扬声器发声报警,节拍由延时程序决定.
3)使不同颜色的发光二极管按一定规律发光。
4)使实验箱上的8255A作为输出接口,驱动二极管发光。
所用端口工作在方式0、输出即可。
5)定义开关清零。
6)PC7接开关,用作输入,控制复位。
7)通过8255A来控制LED发光二极管的亮灭。
8)PC0接扬声器、PC1接红灯、PC2接黄灯。
9)二极管闪烁:
开|关输出为0则亮,输出为1则灭。
1.2.2软件部分
程序部分首先进行初始8255,然后进行时间显示,初值显示00分00秒,四个显示器每个显示10ms,接着秒个位加1,进行下一次显示,当秒个位为10时,秒十位加1,同时秒个位清零.当秒十位为6时,分个位加1,秒位清零,依次显示。
当显示为5分00秒时,发出控制信号使扬声器发出柔和的声音,此时,若有人拨动开关,则四个显示器全清零,又从00分00秒开始显示。
当显示5分00秒时,发出轻微的柔和的报警声,当显示6分00秒时,发出急促的报警声,发出控制信号使黄灯闪烁。
当显示为15分00秒时,扬声器持续发出尖锐的报警声,发出控制信号使红灯闪烁。
2硬件设计
2.1芯片8255-A
2.1.18255A在本设计中的作用
8255A作为输出接口,驱动二极管发光。
所用端口工作在方式0。
控制发光二极管的亮灭。
A口,B口控制LED数码显示管,C口低四位分别接扬声器,红灯,黄灯。
高四位中的Pc4接开关,用于输入信号,使系统复位。
2.1.28255A的功能分析
8255方式0是基本输入/输出方式,A、B、C三个口中任何一个口都可提供简单的输入和输出操作,不需要应答联络信号,即可用于无条件传送的场合,也可以用作查询方式传送。
当采用查询方式传送时,原则上可用A、B和C三个口的任一位充当查询信号,但通常都是选用C口充当查询信号,这和C口的编程有关。
通常把C口的4位(高4位或低4位)规定为输出口,用以输出一些控制信号,把C口的另4位规定为输人口,用以输入外设的状态。
2.1.38255A原理图及功能表
图2-18255A原理图
表2-18255A的操作功能表
A1A0
操作
数据传送方式
00100
读A口
A口数据→数据总线
00101
读B口
B口数据→数据总线
00110
读C口
C口数据→数据总线
01000
写A口
数据总线数据→A口
01001
写B口
数据总线数据→B口
01010
写C口
数据总线数据→C口
01011
写控制口
数据总线数据→控制口
8255A有三种工作方式,用户可以通过编程来设置。
2.1.48255A的方式控制字
图2-28255A方式控制字
2.1.5方式0的工作特点
这种方式通常不用联络信号,不使用中断,三个通道中的每一个都有可以由程序选定作为输入或输出。
其功能为:
1)两个8位通道:
通道A、B。
两个四位通道:
通道C高4位和低四位;
2)任何一个通道可以作输入/输出;
3)输出是锁存的;
4)输入是不锁存的;
5)在方式0时各个通道的输入/输出可有16种不同的组合。
2.1.68255部分技术参数
表2-28255A技术参数
Symbol
Parameter
Min
Max
Unit
VIL
InputLowVoltage
-0.5
0.8
V
VIH
InputHighVoltage
2.0
VCC
V
VOL(DB)
OutputLowVoltage(DateBus)
0.45*
V
VOL(PER)
OutputLowVoltage(PeripheralPort)
0.45*
V
VOH(DB)
InputLowVoltage(DateBus)
2.4
V
VOH(PER)
InputLowVoltage(PeripheralPort)
2.4
V
IDAR
(1)
DartingtonDriveCurrent
-1.0
-4.0
mA
ICC
PowerSupplyCurrent
120
mA
IIL
InputLoadCurrent
±10
μA
IOFL
OutputFloatLeakage
±10
μA
输入最低电压:
min-0.5V,max0.8V,输入最高电压:
2.0V。
输出最低电压:
0.45V
输出最高电压:
2.4V。
2.2LED显示器
2.2.1作用
LED发光二级管(Light-EmittingDiode),在本设计中采用7段数字发光二级管,做为终端显示。
2.2.2LED功能分析
图2-3LED图示
(1)物理构造:
LED发光二级管,采用砷化镓、镓铝砷、和磷化镓等材料制成,其内部结构为一个PN结,具有单向导电性。
(2)工作原理:
当在发光二极管PN结上加正向电压时,PN结势垒降低,载流子的扩散运动大于漂移运动,致使P区的空穴注入到N区,N区的电子注入到P区,这样相互注入的空穴与电子相遇后会产生复合,复合时产生的能量大部分以光的形式出现。
(3)数字成像:
将七个发光管进行组合,排列成数字图形8,再根据需要控制七个管的亮与灭,即可显示出定义数字。
实验中采用的是共阴极七段LED显示器,他由多个发光二极管组成,七段或八段笔画显示器,当段组发亮时,便可显示数字1位,七段代码的各位用作a-g和Dp的输入,当对应的位为1时,则该段亮。
图2-4LED内部结构示意图
2.2.3LED显示管段选码编码表
表2-3LED段选码
数字
DP
g
f
e
d
c
b
a
二进制编码(字形)
0
0
0
1
1
1
1
1
1
3FH
1
0
0
0
0
0
0
1
1
03H
2
0
1
0
1
1
0
1
1
5BH
3
0
1
0
0
1
1
1
1
4FH
4
0
1
1
0
0
1
1
0
66H
5
0
1
1
0
1
1
0
1
6DH
6
0
1
1
1
1
1
0
1
7DH
7
0
0
0
0
0
1
1
1
07H
8
0
1
1
1
1
1
1
1
7FH
9
0
1
1
0
1
1
1
1
6FH
2.2.4技术参数
表2-4LED技术参数
PCW
If
Vr
Ir
If
RP
对应型号
散射颜色
BT-235-2
70
25
5
>=1.5
<=2.5
200
SEL-10
红色
2.3单刀双掷开关
2.3.1开关的作用
本次设计需要用1位开关,用于检测值班者是否睡着。
+5V
图2-5单刀双掷开关
2.3.2开关的功能分析
开关闭合输入0,开关断开输入1。
2.3.3技术参数
开关高电平:
+5V、低电平:
0V
实验中单刀双掷开关接地,即通过8255,PC5检测到为0,当值班者拨动开关接+5V电压时,PC5检测到为1(即相当于值班者按动按扭)
2.4扬声器
2.4.1作用
本次设计需要扬声器发出三种不同频率的响声,由8255的PC0控制(第0位控制)
2.4.2功能分析
如果使该位交替为’0’为’1’则产生一个脉冲电流,该电流放大后驱动扬声器发出声音。
2.5硬件总逻辑图及其说明
图2-8硬件总逻辑图
上图所示为数码显示管逻辑总图,图中所用到的为一片8255芯片、1位开关、4个七段LED数码显示管、红灯和黄灯。
将PCI的CS、A0、A1分别接8255A的CS、A0、A1,8255A的PA0~PA7接入数码管选择脚,PB0~PB7分别与数码管段码相连,作为段选择。
8255的A口,B口控制LED数码显示管,C口低四位作输出口,PC0接扬声器,PC1接黄灯,PC2接红灯,高四位作输入口,PC7接开关。
3控制程序设计
3.1控制程序设计思路说明
首先将8255初始化(设置8255A的控制方式,A口、B口用于输出C口高四位输入,低四位输出),LED动态显示时间(分、秒),用软件查询判断分秒的情况:
当显示5:
00、6:
00、15:
00时,分别调用不同的发声子程序。
显示期间若按复位键则时间从00:
00开始计时。
3.2控制程序流程图
图3-1主程序流程图
图3-2判断时间控制流程图
图3-3进位判断
3.3控制程序
.modeltiny
extrnDisplay8:
near
.stack100
.data
COM_ADDEQU0F003H;控制口偏移量
PA_ADDEQU0F000H;PA口偏移量
PB_ADDEQU0F001H;PB口偏移量
PC_ADDEQU0F002H;PC口偏移量
tabdb3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh
m1db00h,00h,00h,00h
bufferdb00h,00h,00h,00h,00h,00h,00h,00h
m2db00h,00h,00h,00h
.code
start:
movax,@data
movds,ax
nop
movsi,offsetm2
movah,0
mov[si],ah
mov[si+1],ah
mov[si+2],ah
mov[si+3],ah
main:
movdx,COM_ADD;写8255A方式控制字
moval,88h;10001000令A口和B口方式0输出;C口Pc7到Pc4为输入,Pc3到Pc0输出
outdx,al
movdx,PC_ADD
moval,0FFH
outdx,al
movsi,offsetm1
lop:
movah,0
mov[si],ah
mov[si+1],ah
mov[si+2],ah
mov[si+3],ah
callLedDisplay
lop4:
movah,30
waite:
movdi,offsetm1
disp:
callLedDisplay
calldelay
exit2:
decah
jnzwaite
movdx,PC_ADD
inal,dx
testal,10000000B;判断是否复位
jzmain
calldecide
jmplop4
decideprocnear
pushax
pushbx
pushcx
moval,0
movah,1
movbl,5
movbh,6
add[di+3],ah;秒钟自动加一
cmp[di],ah;分十位是否小于等于1
jnaaa
ee:
callsleep;时间大于15
callrlgspk
jmpasd
aa:
cmp[di],ah;分十位是否大于等于1
jnbbb
cmp[di+1],bh;分个位是否小于6
jbcc
callylgspk
cc:
cmp[di+1],bl;分个位是否为5
jnzasd
callsoftspk
bb:
cmp[di],ah
jnzasd
cmp[di+1],bl;分个位是否大于5
jaeee
callylgspk
asd:
calltime
popax
popbx
popcx
ret
decideendp
timeprocnear;记时间子程序
pushax
pushbx
pushcx
moval,0
movah,1
movbh,6
movch,10
cmp[di+3],ch;判断秒钟的个位是否满10,满10后秒钟的个位清零,秒钟十位加1
jnzsl1
mov[di+3],al;秒钟的个位清零
add[di+2],ah;秒钟的十位加1
cmp[di+2],bh;判断秒的十位是否为6
jnzsl1
mov[di+2],al;秒钟十位满6后清零
add[di+1],ah;分钟个位加1
cmp[di+1],ch;判断分的个位是否为10,满10清零,分钟的十位加1
jnzsl1
mov[di+1],al
add[di],ah
sl1:
popax
popbx
popcx
ret
timeendp
;0-5之间的报警柔和
softspkproc
pushax
pushbx
pushcx
movbx,5
sound1:
movdx,pc_add
moval,11111110b
outdx,al
movcx,050h
wait1:
loopwait1
moval,0ffh
outdx,al
decbx
jnesound1
popcx
popbx
popax
ret
softspkendp
;6-15之间的报警急促
ylgspkproc
pushax
pushbx
pushcx
movbx,10
sound2:
movdx,pc_add
moval,11111100b
;低
outdx,al
movcx,050h
wait2:
loopwait2;50次
moval,0ffh;高
outdx,al
decbx
jnesound2
popcx
popbx
popax
ret
ylgspkendp
;15分钟之后的报警尖锐
rlgspkproc
pushax
pushbx
pushcx
movbx,120
sound3:
movdx,pc_add
moval,11111010b
;将pc口的p0口和p2口分别置0代表在红灯亮和扬声器响
outdx,al
decbx
movcx,050h
;进行循环50次
wait3:
loopwait3
moval,0ffh
outdx,al
decbx
jnesound3
popcx
popbx
popax
ret
rlgspkendp
sleepprocnear;记录睡着时间子程序
pushax
pushbx
pushcx
movsi,offsetm2
moval,0
movah,1
movbh,6
movch,10
add[si+3],ah
cmp[si+3],ch;判断秒钟的个位是否满10,满10后秒钟的个位清零,秒钟十位加1
jnzsl
mov[si+3],al;秒钟的个位清零
add[si+2],ah;秒钟的十位加1
cmp[si+2],bh;判断秒的十位是否为6
jnzsl
mov[si+2],al;秒钟十位满6后清零
add[si+1],ah;分钟个位加1
cmp[si+1],ch;判断分的个位是否为10,满10清零,分钟的十位加1
jnzsl
mov[si+1],al
add[si],ah
sl:
popax
popbx
popcx
ret
sleependp
;延时子程序
delayproc
pushcx
movbl,10
del:
movcx,1000
wait5:
loopwait5
decbl
jnzdel
popcx
ret
delayendp
LedDisplayPROCNEAR
pushax
moval,m1[0]
movbuffer,al
moval,m1[1]
oral,80h
movbuffer+1,al
moval,m1[2]
movbuffer+2,al
moval,m1[3]
movbuffer+3,al
moval,m2[0]
movbuffer+4,al
moval,m2[1]
oral,80h
movbuffer+5,al
moval,m2[2]
movbuffer+6,al
moval,m2[3]
movbuffer+7,al
leasi,buffer
callDisplay8
popax
ret
LedDisplayendp
exit:
movah,4ch
int21h
endstart
.
4.设计结果分析与问题讨论
4.1上机调试过程
1)上机过程中由于事先对实验室设备不了解,所以导致实验方案失败,重新修改了方案,耽误了不少时间;
2)联机运行后,数码管显示数字不对,经检查,发线问题出在数码转换表定义有误;
3)在扬声器发声的时候,LED数码显示管停止显示时间,这将导致当前时间显示太长。
4)时间判断子程序应放在时间控制子程序之中,否则15分钟后的报警LED会出现闪烁,达不到预期的效果。
5)最后在报警声音方面上又遇到了问题,没有达到预期的声音逐渐增强的效果。
通过反复的对声音模块参数的修改终于达到了预期效果。
6)最开始由于对汇编语言编程的不熟悉不了解,浪费了大量的时间在看书上面,导致最后剩余编程的时间太少,不得已只有在课下进机房进行编程调试。
7)在编程的过程中虽然程序能够调通,但是程序冗长,有的部分甚至出现逻辑错误。
在老师的提示下,我进行了逻辑和代码的优化。
4.2课程设计结果及分析
4.2.1设计结果
程序开始运行时,四个LED灯从00分00秒开始显示时间,并隔相应的时间加一秒,一直显示到59分59秒,然后又从00分00秒开始显示,如此循环下去。
当时间显示到05分00秒时,扬声器发出较柔和的声音,到06分00秒时,扬声器发出较急促的声音,黄灯闪烁,到15分00秒时,扬声器发出尖锐的报警声,红灯闪烁。
每次拨开关为高电平时,LED灯就变成从00分00秒开始显示,但若是在15分00秒时,值班人员没有按复位键,除了扬声器持续发出尖锐的报警声外,后面的四个数码管开始计时,且后面的四个数码管的时间不会随着复位键的激活而复位。
用于记录睡着的时间,以供管理人员第二天检查。
4.2.2结果分析
1、数码管的显示使用段选和位选的方法进行控制,即用位选来选择哪一个显示灯亮,用段选来控制显示器显示的时间值。
设计中因为时间的确定决定着发声和灯亮的操作,故一定要设置一个时间数字的缓冲区,以便于对时间的变化进行查询。
本次设计中最为重要的是定义段码表,其作