接口技术课程设计汽车信号灯控制系统综述.docx
《接口技术课程设计汽车信号灯控制系统综述.docx》由会员分享,可在线阅读,更多相关《接口技术课程设计汽车信号灯控制系统综述.docx(23页珍藏版)》请在冰点文库上搜索。
接口技术课程设计汽车信号灯控制系统综述
华北科技学院
《接口技术》
课程设计报告
班级:
姓名:
设计题目:
汽车信号灯控制系统
设计时间:
2012-6-4至2012-6-15
指导教师:
评语:
_________________________________
_________________________________________
_________________________________________
_________________________________________
_________________________________________
评阅成绩:
评阅教师:
一、课程设计目的
1、掌握8255的基本工作原理和编程方法。
2、了解双色点阵LED显示器的基本原理,掌握PC机控制双色点阵LED显示程序的设计方法。
进行程序设计方法和芯片使用基本训练,巩固在课堂上学到的有关芯片初始化编程和使用的基本知识和基本方法,通过实际动手能力的培养,进一步熟悉接口技术的原理及应用,达到能独立使用现有芯片编制程序并正确运行的水平。
二、课程设计内容
1.问题描述:
汽车行驶时一共有五种状况:
汽车左转
汽车右转
汽车出现紧急状况
汽车刹车
汽车停靠
在进行课程设计时,可以考虑到10种组合模式如下:
输入状态输出状态
左转左头灯,左尾灯,仪表左灯亮
右转右头灯,右尾灯,仪表右灯亮
紧急左右头灯,左右尾灯,仪表左右灯同时闪烁
刹车左右尾灯亮
左转+刹车左头灯,左尾灯,仪表左灯亮
右转+刹车右头灯,右尾灯,仪表右灯亮
刹车+紧急左右头灯,左右尾灯,仪表左右灯同时亮
左转+刹车+紧急左右头灯,左右尾灯,仪表左右灯同时亮
右转+刹车+紧急左右头灯,左右尾灯,仪表左右灯同时亮
停靠左右头灯,左右尾灯同时闪烁
当退出汽车系统时,在点阵LED显示器上双色显示“BYE”信息。
2.问题的解决方案分析
(1)通过6个发光二级管模拟两个头灯、两个尾灯和仪表盘上的两个指示灯。
(2)利用4个开关可产生的16种情况的前10种组合来分别模拟左转、右转、紧急,刹车,停靠的状态,使发光二极管信号灯相应亮、灭或闪烁。
(3)通过程序或者定时/计数器控制灯的闪烁频率。
考虑到程序设计比较简便,所以本次课程设计一旦涉及到信号灯的闪烁,都为程序控制。
在对任务需求进行详细分析以后,决定主要控制芯片采用实验箱上的8255A,由于本次设计中对信号灯闪烁的频率并没有严格的要求,所以就没必要采用8253来进行定时,采用程序来进行定时。
退出系统信息“BYE”则点阵LED显示器来控制。
3.系统的主要功能
(1)当用户置开关状态为01H时,也即左转,表左转开关闭合,则仪表左灯、左头灯、左尾灯同时亮,其他灯灭。
(2)当用户置开关状态为02H时,也即右转,表右转开关闭合,则仪表右灯、右头灯、右尾灯同时亮,其他灯灭。
(3)当用户置开关状态为03H时,表紧急开关闭合,也即出现紧急状态时,则所有灯闪烁。
(4)当用户置开关状态为04H时,表踩刹车(合上刹车开关),则左尾灯、右尾灯亮,其它灯灭。
(5)当用户置开关状态为05H时,表示汽车左转刹车,则仪表左灯、左头灯、左尾灯同时亮,其它灯灭。
(6)当用户置开关状态为06H时,表示汽车右转刹车,则仪表右灯、右头灯、右尾灯同时亮,其它灯灭。
(7)当用户置开关状态为07H时,表示汽车此时处于紧急刹车状态,则全部指示灯亮。
(8)当用户置开关状态为08H时,表示汽车此时处于左转紧急刹车状态,则全部指示灯亮。
(9)当用户置开关状态为09H时,表示汽车此时处于右转紧急刹车状态,则全部指示灯亮。
(10)当用户置开关状态为0AH时,表示汽车此时在停靠,则仪表左右灯灭,左右头灯亮,左右尾灯闪烁。
所以,可以设置实验箱上的6个发光二极管的对应情况为:
L0:
右尾灯L1:
左尾灯L2:
右头灯L3:
左头灯L4:
仪表右灯L5:
仪表左灯
通过4个开关(K0、K1、K2、K3的组合)产生的16种情况的前10种来作为输入选择,影响6个指示灯的输出,对应关系如下表:
灯状态
开关状态
仪表左灯(L5)
仪表右灯
(L4)
左头灯
(L3)
右头灯
(L2)
左尾灯
(L1)
右尾灯(L0)
1左转(01h)
亮
灭
亮
灭
亮
灭
2右转(02h)
灭
亮
灭
亮
灭
亮
3紧急(03h)
闪
闪
闪
闪
闪
闪
4刹车(04h)
灭
灭
灭
灭
亮
亮
5左转+刹车(05h)
亮
灭
亮
灭
亮
灭
6右转+刹车(06h)
灭
亮
灭
亮
灭
亮
7刹车+紧急(07h)
亮
亮
亮
亮
亮
亮
8左转+刹车+紧急(08h)
闪
亮
亮
亮
亮
亮
9右转+刹车+紧急(09h)
亮
闪
亮
亮
亮
亮
10停靠(0Ah)
灭
灭
亮
亮
闪
闪
表1开关状态与灯状态对应表
(11)当用户退出该系统时,双色点阵LED显示器显示“BYE”字样,由实验箱上设有一个共阳极8×8点阵的红黄两色LED显示器,若使某一种颜色、某一个LED发光,只要将与其相连的行线加高电平,列线加低电平即可。
三、课程设计原理及原理图
1.并行I/O接口芯片8255
端口A:
PA0~PA7,A组,支持工作方式0、1、2
端口B:
PB0~PB7,B组,支持工作方式0、1
端口C:
PC0~PC7,仅支持工作方式0、A组控制高4位PC4~PC7、B组控制低4位PC0~PC3
硬件连接图:
2.双色点阵LED显示器
实验仪上设有一个共阳极8×8点阵的红黄两色LED显示器,其点阵结构如图所示。
该点阵对外引出24条线,其中8条行线,8条红色列线,8条黄色列线。
若使某一种颜色、某一个LED发光,只要将与其相连的行线加高电平,列线加低电平即可。
如欲显示汉字,采用逐列循环发光。
“BYE”点阵代码:
①行代码输出99H;红色列代码输01H;第一列1个红色LED发光。
②行代码输出0FFH;红色列代码输02H;第二列5个红色LED发光。
③行代码输出0F0H;红色列代码输04H;第三列1个红色LED发光。
④行代码输出0FH;红色列代码输08H;第四列3个红色LED发光。
⑤行代码输出0F0H;红色列代码输10H;第五列5个红色LED发光。
⑥行代码输出0FFH;红色列代码输20H;第六列1个红色LED发光。
⑦行代码输出99H;红色列代码输40H;第七列3个红色LED发光。
⑧行代码输出0ffH;红色列代码输80H;第八列1个红色LED发光。
在步骤①~⑧之间可插入几ms的延时,重复进行①~⑧即可在LED上稳定的显示出红色“BYE”字。
若想显示黄色“BYE”,只需把红色列码改为黄色列码即可。
其设计布局如下所示:
接线方法:
行片选信号“行选”接280H;红列片选信号“红选”接288H;绿列片选信号“绿选”接290H,“WR”接总线区的“IOW”,“总线D7~D0”接总线区的“D7~D0”。
四、流程图
1、双色点阵显示流程图
2、汽车灯系统流程图
五、程序源代码
datasegment;数据段
prothequ280h
protlrequ298h
protlyequ290h
io8255aequ288H;8255的A口地址
io8255bequ289H;8255的B口地址
io8255cequ28aH;8255的C口地址
io8255conequ28bH
min1DB00h,01h,02h,03h,04h,05h,06h,07h
countdb0
BUFFDB99h,0ffh,0f0h,0fh,0f0h,0ffh,99h,0ffh;8255A的控制口地址
ctrdb'enterckeytocontinue!
',0ah,0dh;程序初始提示信息
db'enterotherkeystoexittodos!
',0ah,0dh,'$'
ctr01db'1.zuozhuanwan...',0ah,0dh,'$';左转弯时提示信息(以下类似)
ctr02db'2.youzhuanwan.....',0ah,0dh,'$'
ctr03db'3.jinjikaiguan.....',0ah,0dh,'$'
ctr04db'4.shache.....',0ah,0dh,'$'
ctr05db'5.zuozhuanwanshache.....',0ah,0dh,'$'
ctr06db'6.youzhuanwanshache.....',0ah,0dh,'$'
ctr07db'7.jinjishache.....',0ah,0dh,'$'
ctr08db'8.jinjizuozhuanshache.....',0ah,0dh,'$'
ctr09db'9.jinjiyouzhuanshache.....',0ah,0dh,'$'
ctr10db'10.tingkao.....',0ah,0dh,'$'
dataends
stacksegmentstack;堆栈段
stadw50dup(?
)
stackends
codesegment;代码段
assumecs:
code,ds:
data,es:
data,ss:
stack
mainprocfar
start:
pushds
subax,ax
pushax
movax,data
movds,ax
moves,ax
ccc:
movdx,offsetctr;显示提示信息
movah,09h
int21h
movah,01h
int21h
cmpal,'c';若输入'C',则继续执行,否则返回到DOS
jzeee
agn:
movcx,80h
d2:
movah,01h
pushcx
movcx,0008h
movsi,offsetmin1
next:
moval,[si]
movbx,offsetbuff
xlat;得到第一行码
movdx,proth
outdx,al
moval,ah
movdx,protlr
outdx,al;显示第一行红
moval,0
outdx,al
shlah,01
incsi
pushcx
movcx,0ffh;ffh
delay2:
loopdelay2;延时
popcx
loopnext
popcx
calldelay00
loopd2
moval,00
movdx,protlr
outdx,al
agn1:
movcx,80h;agn1为显示黄色
d1:
movsi,offsetmin1
movah,01
pushcx
movcx,0008h
next1:
moval,[si]
movbx,offsetbuff
xlat
movdx,proth
outdx,al
moval,ah
movdx,protly
outdx,al
moval,0
outdx,al
shlah,01
incsi
pushcx
movcx,0ffh;ffh
delay1:
loopdelay1
movcx,0ffh;ffh
delay3:
loopdelay3
popcx
loopnext1
popcx
calldelay00
loopd1
moval,00
movdx,protly
outdx,al
jmpagn
movax,4c00h
int21h
eee:
movdx,io8255con;给8255A送入方式控制字89H设置为A口输出,C口输入
moval,89h
outdx,al
movdx,io8255c;将4个开关的状态送入AL
inal,dx
movcx,0020h;设置循环次数
bb1:
cmpal,01h;将al的值依次与01H到0AH比较
jnzbb2;不是01H则转bb1执行,是则调用中断在屏幕上显示相应提示信息,顺序执行
movdx,offsetctr01;左转弯状态,实现六盏灯状态为:
闪、灭、闪、灭、闪、灭
movah,09h
int21h;调用09号中断,在屏幕上显示现在正处于左转弯状态
movdx,io8255a
left:
moval,11101010b;六盏灯状态为:
亮、灭、亮、灭、亮、灭(最高两位没影响)
outdx,al
calldelay0;调延时子程序
loopleft
jmpccc
bb2:
cmpal,02h
jnzbb3
movdx,offsetctr02
;右转弯状态,实现六盏灯状态为:
灭、亮、灭、亮、灭、亮
movah,09h
int21h
movdx,io8255a
right:
moval,11010101b;六盏灯状态为:
灭、亮、灭、亮、灭、亮
outdx,al
calldelay0
loopright
jmpccc
bb3:
cmpal,03h
jnzbb4
movdx,offsetctr03;紧急开关合上
movah,09h
int21h
movdx,io8255a
hurry:
moval,11000000b;六盏灯状态为:
闪、闪、闪、闪、闪、闪
outdx,al
calldelay0
moval,11111111b
outdx,al
calldelay0
loophurry
jmpccc
bb4:
cmpal,04h
jnzbb5
movdx,offsetctr04;刹车
movah,09h
int21h
movdx,io8255a
break:
moval,11000011b;六盏灯状态为:
灭、灭、灭、灭、亮、亮
outdx,al
calldelay0
loopbreak
jmpccc
bb5:
cmpal,05h
jnzbb6
movdx,offsetctr05;左转弯刹车
movah,09h
int21h
movdx,io8255a
leftbreak:
moval,11001010b;六盏灯状态为:
亮、灭、亮、灭、亮、灭
outdx,al
calldelay0
loopleftbreak
jmpccc
bb6:
cmpal,06h
jnzbb7
movdx,offsetctr06;右转弯刹车
movah,09h
int21h
movdx,io8255a
rightbreak:
moval,11000101b;六盏灯状态为:
灭、亮、灭、亮、灭、亮
outdx,al
calldelay0
looprightbreak
jmpccc
bb7:
cmpal,07h
jnzbb8
movdx,offsetctr07;紧急刹车
movah,09h
int21h
movdx,io8255a
hurrybreak:
moval,11111111b;六盏灯状态为:
亮、亮、亮、亮、亮、亮
outdx,al
calldelay0
loophurrybreak
jmpccc
bb8:
cmpal,08h
jnzbb9
movdx,offsetctr08;紧急左转刹车
movah,09h
int21h
movdx,io8255a
hurryleftbreak:
moval,11111111b;六盏灯状态为:
亮、亮、亮、亮、亮、亮
outdx,al
calldelay0
moval,11011111b
outdx,al
calldelay0
loophurryleftbreak
jmpccc
bb9:
cmpal,09h
jnzbb10
movdx,offsetctr09;紧急右转刹车
movah,09h
int21h
movdx,io8255a
hurryrightbreak:
moval,11111111b;六盏灯状态为:
亮、亮、亮、亮、亮、亮
outdx,al
calldelay0
moval,11101111b
outdx,al
calldelay0
loophurryrightbreak
jmpccc
bb10:
cmpal,0ah
jnzbb11
movdx,offsetctr10;停靠
movah,09h
int21h
movdx,io8255a
stop:
moval,11001100b;六盏灯状态为:
灭、灭、亮、亮、闪、闪
outdx,al
calldelay0
moval,11001111b
outdx,al
calldelay0
loopstop
jmpccc
bb11:
jmpccc
ret
mainendp
delayprocnear;延时子程序
pushcx
movcx,0ffffh
pp:
looppp
popcx
ret
delayendp
delay0procnear;延时子程序
pushcx
pushax
movcx,0080h
pp0:
calldelay
looppp0
popax
popcx
ret
delay0endp
DELAY00PROCNEAR;延迟子程序
pushcx
movcx,0ffh;ffh
cccc:
loopcccc
popcx
ret
DELAY00ENDP
codeends
endstart
六、结果
通过不断地对程序进行调试和上机验证,最终利用4个开关组合成10种不同的组合状态来模拟汽车信号灯10种不同的状态,初步实现了预期任务要求对应的灯亮、灭、闪的不同情况。
由于有10种不同的状态,这里只显示在第十种情况下的截图,当开关K0到K3为1010即0AH时,此时的功能是停靠,相对应的左右前灯亮即L2、L3灯亮,其结果如下所示:
系统总接线及停靠时汽车灯亮灭情况图
当继续进行测验时,在键盘上按“C”继续进行汽车信号灯测验;当按其他任意键退出信号灯测验,相应的进入双色点阵显示,此时机箱上会红绿交替“BYE”字样,其运行效果如下所示。
双色点阵红绿显示
七、课程设计总结及体会
本次课程设计主要设计了一个汽车信号灯控制系统,虽然实现了原本预期的各种控制状态,不过程序还有待优化、改进,比如实验中的灯亮灭的情况延时保持一段时间后,返回到主程序中在屏幕上显示提示语句,不过此时灯的状态还是保持(返回前应该将灯全熄灭)。
要再手动拨动开关成其它状态然后按下C键才能变化成另一种汽车状态,这样操作起来比较麻烦。
还有,该系统的使用者得去记住各个开关组合所表示的汽车状态,不够人性化,应该进一步改进成用单个开关对应一种汽车状态的情况。
此系统主要通过8255A的A口和C口模拟汽车信号灯的亮灭闪烁情况。
通过本次的设计以此来加深对微机接口技术的理解,提高了自己的动手能力。
首先是着手对硬件电路的设计,本次课程设计主要采用了8255A接口电路。
我们通过课本了解到了各个芯片的引脚及功能、工作方式、内部结构和控制字和双色点阵LED显示器的基本原理及PC机控制双色点阵LED显示程序的设计方法。
对各个功能的熟悉便于了硬件电路的设计。
然后就是对程序的设计,想要设计出一个实用的控制系统需要了解程序流程,先画出了流程图,然后对代码进行编写,主要采用汇编语言。
最后联系实验室的老师在实际的实验箱上对程序,硬件电路进行调试。
在调试过程中遇到了很多问题,有些问题在同学和老师的帮助下得以解决。
经过这段时间的课程设计,最终实现了该汽车信号灯控制系统,感到特别的欣慰,期间获益颇多。
将微机接口技术中的理论与实践相结合起来,对芯片的功能也有了进一步认识理解,重温了汇编语言的编程。
在实验调试过程中发现问题,分析问题,如何解决问题的能力都有所提高,这对我们不久将来离开学校,投入实际工作都是很有借鉴意义的。
希望通过以后的学习,不断提升自身各方面的能力,如对专业知识的掌握程度,动手实践能力等。
经过此次的课程设计,要形成自己的设计思想,以便在今后的专业课形成自己的风格。
同时在多多锻炼自己的动手能力,以便在以后的工作能独立完成一些设计项目。