夜班防睡控制+记录器.docx
《夜班防睡控制+记录器.docx》由会员分享,可在线阅读,更多相关《夜班防睡控制+记录器.docx(21页珍藏版)》请在冰豆网上搜索。
![夜班防睡控制+记录器.docx](https://file1.bdocx.com/fileroot1/2023-1/14/31d57a06-f984-4e62-87e3-b1eb5039169c/31d57a06-f984-4e62-87e3-b1eb5039169c1.gif)
夜班防睡控制+记录器
一、需求分析和解决问题的思路
1.题义与需求分析
1)任务分析
①每5分钟用一次较柔和的声音提醒值班者按复位键,之后计时重新开始。
②若计时到6分钟时,还没人按复位键,则以较急促的声音报警,黄灯闪烁。
③当到15分钟的时候红灯闪烁,并以持续尖锐的声音报警,以LED显示分和秒。
2)功能分析
本设计主要是为了解决值班人员在值夜班时容易睡觉的问题。
设计中主要通过扬声器发生来防止值班人员睡觉,每隔5分钟用较柔和的声音提醒值班人员一次,值班人员按下复位键重新即时,说明值班人员并未睡着;如果及时到6分钟值班人员还没有按复位键,说明此时值班人员可能已经开始打盹,扬声器发出较急促的声音报警,并且黄灯闪烁,若此按下复位键,又重新计时;如果到了15分钟还没有人按复位键,那么此时值班人员可能已经完全睡着,扬声器发出尖锐的声音报警,红灯闪烁,并以LED记录睡着的时间。
3)需要解决的问题
需要发声提醒,发声提醒又分为3种(较柔和,较急促,尖锐的声音),通过键盘复位,要红,黄灯闪烁。
还要将时间动态显示在LED显示器上,每秒刷新一次。
而且分秒显示共需4位数字,所以要有4个LED数码管进行控制。
秒控制的两位要在60秒后进位,分钟的两位加1,秒清零。
扬声器可用专门的扬声器电路,也要用PC机的喇叭实现。
2.解决问题方法及思路
1)硬件部分
①PC机一台,并行接口8255A一片,LED数码管4只,发光二极管2只(红、黄各一只),开关一个,扬声器一只。
②利用扬声器发声报警,节拍由延时程序决定.
③使不同颜色的发光二极管按一定规律发光。
④使实验箱上的8255A作为输出接口,驱动二极管发光。
所用端口工作在方式0、输出即可。
⑤定义开关清零。
⑥PC7接开关,用作输入,控制复位。
⑦通过8255A来控制LED发光二极管的亮灭。
⑧PC0接扬声器、PC1接红灯、PC2接黄灯。
⑨二极管闪烁:
开|关输出为0则亮,输出为1则灭。
2)软件部分
程序部分首先进行初始8255,然后进行时间显示,初值显示00分00秒,四个显示器每个显示10ms,接着秒个位加1,进行下一次显示,当秒个位为10时,秒十位加1,同时秒个位清零.当秒十位为6时,分个位加1,秒位清零,依次显示。
当显示为5分00秒时,发出控制信号使扬声器发出柔和的声音,此时,若有人拨动开关,则四个显示器全清零,又从00分00秒开始显示。
当显示5分00秒时,发出轻微的柔和的报警声,当显示6分00秒时,发出急促的报警声,发出控制信号使黄灯闪烁。
当显示为15分00秒时,扬声器持续发出尖锐的报警声,发出控制信号使红灯闪烁。
二、硬件设计
1.芯片8255-A
1)8255A在本设计中的作用
8255A作为输出接口,驱动二极管发光。
所用端口工作在方式0。
控制发光二极管的亮灭。
A口,B口控制LED数码显示管,C口低四位分别接扬声器,红灯,黄灯。
高四位中的Pc4接开关,用于输入信号,使系统复位。
2)8255A的功能分析
8255方式0是基本输入/输出方式,A、B、C三个口中任何一个口都可提供简单的输入和输出操作,不需要应答联络信号,即可用于无条件传送的场合,也可以用作查询方式传送。
当采用查询方式传送时,原则上可用A、B和C三个口的任一位充当查询信号,但通常都是选用C口充当查询信号,这和C口的编程有关。
通常把C口的4位(高4位或低4位)规定为输出口,用以输出一些控制信号,把C口的另4位规定为输人口,用以输入外设的状态。
3)8255A原理图及功能表
图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有三种工作方式,用户可以通过编程来设置。
4)8255A的方式控制字
图2-28255A方式控制字
5)方式0的工作特点
这种方式通常不用联络信号,不使用中断,三个通道中的每一个都有可以由程序选定作为输入或输出。
其功能为:
①两个8位通道:
通道A、B。
两个四位通道:
通道C高4位和低四位;
②任何一个通道可以作输入/输出;
③输出是锁存的;
④输入是不锁存的;
⑤在方式0时各个通道的输入/输出可有16种不同的组合。
6)8255部分技术参数
表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.LED显示器
1)作用
LED发光二级管(Light-EmittingDiode),在本设计中采用7段数字发光二级管,做为终端显示。
2)LED功能分析
图2-3LED图示
①物理构造:
LED发光二级管,采用砷化镓、镓铝砷、和磷化镓等材料制成,其内部结构为一个PN结,具有单向导电性。
②工作原理:
当在发光二极管PN结上加正向电压时,PN结势垒降低,载流子的扩散运动大于漂移运动,致使P区的空穴注入到N区,N区的电子注入到P区,这样相互注入的空穴与电子相遇后会产生复合,复合时产生的能量大部分以光的形式出现。
③数字成像:
将七个发光管进行组合,排列成数字图形8,再根据需要控制七个管的亮与灭,即可显示出定义数字。
实验中采用的是共阴极七段LED显示器,他由多个发光二极管组成,七段或八段笔画显示器,当段组发亮时,便可显示数字1位,七段代码的各位用作a-g和Dp的输入,当对应的位为1时,则该段亮。
图2-4LED内部结构示意图
3)LED显示管段选码编码表
表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
A
0
1
1
1
0
1
1
1
77H
B
0
1
1
1
1
1
0
0
7CH
C
0
0
1
1
1
0
0
1
69H
D
0
1
0
1
1
1
1
0
5EH
E
0
1
1
1
1
0
0
1
79H
F
0
1
1
1
0
0
0
1
71H
4)技术参数
表2-4LED技术参数
PCW
If
Vr
Ir
If
RP
对应型号
散射颜色
BT-235-2
70
25
5
>=1.5
<=2.5
200
SEL-10
红色
3.单刀双掷开关
1)开关的作用
本次设计需要用1位开关,用于检测值班者是否睡着。
+5V
图2-5单刀双掷开关
2)开关的功能分析
开关闭合输入0,开关断开输入1。
3)技术参数
开关高电平:
+5V、低电平:
0V
实验中单刀双掷开关接地,即通过8255,PC5检测到为0,当值班者拨动开关接+5V电压时,PC5检测到为1(即相当于值班者按动按扭)
4.扬声器
1)作用
本次设计需要扬声器发出三种不同频率的响声,由8255的PC0控制(第0位控制)
2)功能分析
如果使该位交替为’0’为’1’则产生一个脉冲电流,该电流放大后驱动扬声器发出声音。
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接开关。
三、控制程序设计
1)控制程序设计思路说明
首先将8255初始化(设置8255A的控制方式,A口、B口用于输出C口高四位输入,低四位输出),LED动态显示时间(分、秒),用软件查询判断分秒的情况:
当显示5:
00、6:
00、15:
00时,分别调用不同的发声子程序。
显示期间若按复位键则时间从00:
00开始计时。
2)控制程序流程图
图3-1主程序流程图
图3-2判断时间控制流程图
图3-3进位判断
3)控制程序
.MODELTINY
pcibar3equ1ch;8位i/o空间基地址(它就是实验仪的基地址,也为dma&32bitram板卡上的8237提供基地址)
vendor_idequ10ebh;厂商id号
device_idequ8376;设备id号
.stack100
.data
io_bit8_baseaddressdw?
msg0db'bios不支持访问pci$'
msg1db'找不到starpci9052板卡$'
msg2db'读8位i/o空间基地址时出错$'
com_adddw00f3h;控制口偏移量
pa_adddw00f0h;pa口偏移量
pb_adddw00f1h;pb口偏移量
pc_adddw00f2h;pc口偏移量
.code
Lightdb3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh;存储表示数字的各段选码分别表示为0-9
timdb00h,00h,00h,00h;存储要显示的四个时间量
start:
movax,@data
movds,ax
nop
callinitpci
callmodifyaddress;根据pci提供的基地址,将偏移地址转化为实地址
main:
movdx,com_add
;写8255a方式控制字
moval,88h
;设置端口a为工作方式0输出端口
moval,10001000b
;pc4为输入,pc3到pc0为输出;端口b为输出并工作在方式0
outdx,al
movdx,pc_add
moval,11111111b
outdx,al
movsi,offsettim
;设置tim的偏移地址于si中
init:
movah,1
mov[si],ah
mov[si+1],ah
mov[si+2],ah
mov[si+3],ah
go:
movah,30
;设置一秒钟循环显示的次数
ctrl:
movdi,offsettim+3
movcl,11111110b;位选码
disp:
moval,[di]
movbx,offsetlight
xlat
movdx,pb_add;写入端口b
outdx,al
;将从light空间内读取的段选码输入到端口b
moval,cl
movdx,pa_add
outdx,al;将位选码送入端口a
calldelay;调用延时子程序
cmpcl,11110111b
jztiming
decdi
rolcl,1
jmpdisp;重新显示下一位
guodu:
jmpgo
timing:
decah
jnzctrl;若一秒未显示30次则转向以上显示四个时间量的程序显示30次
movdx,pc_add;判断c口开关端口pc7输入是否为0
inal,dx
testal,10000000b
jnzinit;复位
moval,0
movah,1
movbl,5
movbh,6
movch,10
add[si+3],ah;秒个数的时间量加1
cmp[si],ah
jbmin5
cmp[si+1],bl
jbcallh
callstrongalarm
jmptimead
min5:
cmp[si+1],bl
jnzmin6
callsoftalarm
jmptimead
min6:
cmp[si+1],bh
jbtimead
callhurryalarm
callh:
callhurryalarm
jmptimead
timead:
cmp[si+3],ch
jnzgo
mov[si+3],al
add[si+2],ah
cmp[si+2],bh
jnzguodu
mov[si+2],al
add[si+1],ah
cmp[si+1],ch
jnzguodu
mov[si+1],al
add[si],ah
jmpgo
softalarmproc
;柔和声音子程序
pushax
pushbx
pushcx
movbx,10;叫声次数
sound1:
movdx,pc_add
moval,11111110b
outdx,al;蜂鸣器
movcx,0fffh;延时
wait1:
loopwait1
moval,11111111b
outdx,al
movcx,0fffh;延时每次叫声持续的时间
waitt1:
loopwaitt1
decbx
jnesound1
popcx
popbx
popax
ret
softalarmendp
hurryalarmproc
;急促声音伴随黄灯闪烁子程序
pushax
pushbx
pushcx
movbx,25
sound2:
movdx,pc_add
moval,11111100b
outdx,al;蜂鸣器
movcx,0fffh;延时
wait2:
loopwait2
moval,11111111b
outdx,al
movcx,0fffh
waitt2:
loopwaitt2
decbx
jnesound2
popcx
popbx
popax
ret
hurryalarmendp
strongalarmproc
;尖锐声音伴随红灯闪烁子程序
pushax
pushbx
pushcx
movbx,50
sound3:
movdx,pc_add
moval,11111010b
outdx,al;蜂鸣器
movcx,0fffh;延时
wait3:
loopwait3
moval,11111111b
outdx,al
movcx,0fffh
waitt3:
loopwaitt3
decbx
jnesound3
popcx
popbx
popax
ret
strongalarmendp
delayproc;延时子程序
pushcx
movbl,20
del:
movcx,1000
waitd:
loopwaitd
decbl
jnzdel
popcx
ret
delayendp
initpciprocnear
movah,00h
moval,03h
int10h;清屏
movah,0b1h
moval,01h
int1ah
cmpah,0
jzinitpci2
leadx,msg0
initpci1:
movah,09h
int21h
jmpexit
initpci2:
movah,0b1h
moval,02h
movcx,device_id
movdx,vendor_id
movsi,0
int1ah
jncinitpci3;是否存在starpci9052板卡
leadx,msg1
jmpinitpci1
initpci3:
movdi,pcibar3
movah,0b1h
moval,09h
int1ah;读取该卡pci9052基地址
jncinitpci4
leadx,msg2
jmpinitpci1
initpci4:
andcx,0fffch
movio_bit8_baseaddress,cx
ret
initpciendp
modifyaddressprocnear
addcom_add,cx
addpa_add,cx
addpb_add,cx
addpc_add,cx
ret
modifyaddressendp
exit:
movah,4ch
int21h
endstart
四、设计结果分析及问题讨论
1.上机调试过程
①上机过程中由于事先对实验的具体实际要求理解不彻底,所以导致实验方案失败,重新修改了方案;
②上机运行后,数码管显示数字不对,经检查,发线问题出在数码转换表定义有误;
③程序的时间控制部分写得不够完善,导致计时到15分钟后报警音混乱。
经思考,修改了程序。
④最后在报警声音方面上又遇到了问题,没有达到预期的声音逐渐增强的效果。
通过反复的对声音模块参数的修改终于达到了预期效果。
⑤8253一直输出方波,使得蜂鸣器不停的发声。
解决方法:
在指定的发声位置调用发声延时并通过控制8253计数器2的门控信号控制发声的停止。
将不同的发声程序定义不同的实现过程。
⑥蜂鸣器正常发声后,出现了不能及时将其关闭的问题,经过思考后决定采用8255的PC0作为GATE门控信号,对8253的计数器2进行控制,解决这个问题的关键是对8255的PC0进行置位/复位,以此来控制8253开始和停止输出方波。
2.课程设计结果及分析
1)设计结果
程序开始运行时,四个LED灯从00分00秒开始显示时间,并隔相应的时间加一秒,一直显示到59分59秒,然后又从00分00秒开始显示,如此循环下去。
当时间显示到50分00秒时,扬声器发出较柔和的声音,到60分00秒时,扬声器发出较急促的声音,黄灯闪烁,到15分00秒时,扬声器发出尖锐的报警声,红灯闪烁。
每次拨开关为高电平时,LED灯就变成从00分00秒开始显示。
2)结果分析
①数码管的显示使用段选和位选的方法进行控制,即用位选来选择哪一个显示灯亮,用段选来控制显示器显示的时间值。
设计中因为时间的确定决定着发声和灯亮的操作,故一定要设置一个时间数字的缓冲区,以便于对时间的变化进行查询。
本次设计中最为重要的是定义段码表,其作用可归纳为:
(1)初始状态时,时间为00:
00这时要利用段码表提供的数和位选依次对各个位进行赋值。
(此时偏移地址为0)
(2)计时时通过改变缓冲区内的数值值,以此作为换码指令的偏移地址,通过换码指令得到应该在数码显示器中显示的时间值。
②时间变化过程中要进行查询,注意与0,5,6,10几个敏感的数值进行比较,通过比较进行相应的操作。
功能扩展后,为了实现可控时间的发声,还需要与7、8、9三个数字进行比较,从而发出特定的报警声。
③本设计中峰鸣器的发声由8253完成,通过在计数器中打入不同的计数初值,使8253在特定的工作方式下实现峰鸣器发出不同频率和强度的报警声。
8253要与8255的C口相连,8255向8253输出门控信号,通过对8255控制口写C口置位复位控制字,控制PC0置1,使8253以方式3产生方波,从而驱动蜂鸣器的发声。
3)收获、体会和建议
①通过本次课程设计,对8255的工作方式尤其是方式0有了进一步的了解。
8255有三个8位端口PA,PB和PC,各端口都可由程序设定为各种不同的工作方式。
在本设计中A口工作于方式0,低4位用作位选码;B口工作于方式0,8位用于段选码,C口也工作于方式0,高4位用于输入口,低4位用于输出口。
②通过本次课程设计对七段LED数码显示器的发光原理有了进一步的了解。
发光二极管是一种当外加电压(阳极电压接高电位)超过额定电压时发生击穿,并因此能产生可见光的器件。
数码显示管通常由多个发光二极管来组成7段或8段笔画显示器,当段组合发亮时,便可显示某一数码或字符。
本设计有4位七段LED接口电路,共有4个七段发光二极管的器件。
为了减少所用器件的数量,这个电路可以和4个8位并行输出口连接。
4个显示器共用同一组段代码输出线,但通过数位选择线,在任何时间内只有一个显示器能够显示其代码。
为了实现这一功能,可让每个显示器接通一小段时间,以显示其对应的数,并且循环显示这4个数,以达到一秒的时间。
这样可,人们看上去好象4个显示器都在同时显示。
③充分认识理论知识对应用技术的指导性作用,进一步加强理论知识与应用相结合的实践和锻炼。
上理论课时总是觉得有些枯燥,因为太抽象.虽然平时通过实验课把老师设计的东西看懂并动手做一遍能够帮助我们在一定程度上加深了对理论知识的理解,但是还是不够深刻.通过此次课