汽车车灯控制系统课程设计报告毕设论文.docx
《汽车车灯控制系统课程设计报告毕设论文.docx》由会员分享,可在线阅读,更多相关《汽车车灯控制系统课程设计报告毕设论文.docx(25页珍藏版)》请在冰豆网上搜索。
汽车车灯控制系统课程设计报告毕设论文
信息科学与技术学院
微机原理与接口技术
课程设计报告
题目名称:
汽车车灯控制系统
学生姓名:
吴权权
学号:
2009082190
专业年级:
计科09-1班
指导教师:
裘祖旗
时间:
2012-1-12
目录
1.题目及要求1
1.1题目1
1.2要求1
2.功能设计1
2.1汽车图形1
2.2汽车左转1
2.3汽车右转1
2.4汽车前进1
2.5汽车倒退1
2.6汽车停止1
2.7响铃模块1
3.主流程图2
4.详细设计3
4.1汽车图形显示3
3.2汽车停止、转向、倒车的指示3
5.结果显示4
5.总结7
6、程序代码8
1.题目及要求
1.1题目
汽车车灯控制系统
1.2要求
1)实现停止时的指示灯;
2)实现汽车转向时指示
3)实现倒车指示
4)扩展功能:
实现倒车的声音提示
2.功能设计
2.1汽车图形
功能:
用汇编语言在dos下实现一个汽车的图形,和四盏灯。
2.2汽车左转
功能:
按’A’键,实现汽车的左转,左前、左后指示灯亮,右前、右后指示灯灭。
2.3汽车右转
功能:
按’D’键,实现汽车的右转,左前、左后指示灯灭,右前、右后指示灯亮。
2.4汽车前进
功能:
按’W’键,实现汽车的向前行驶,并且四盏指示灯全灭。
2.5汽车倒退
功能:
按’S’键,实现汽车的倒退行驶,并且后面2盏指示灯全亮,前面2盏指示灯全灭。
2.6汽车停止
功能:
按’B’键,实现汽车的停止,并且四盏指示灯全亮和倒车提示音。
2.7响铃模块
功能:
汽车停止时,提供倒车提示音。
3.主流程图
No
Yes
YesRET
No
YesRET
No
Yes
RET
No
Yes
RET
No
YesRET
No
非定义字符RET
Yes
4.详细设计
4.1汽车图形显示
字符图形既可以在显示器上以简单的黑白图形字符显示,也可以在彩色显示器上以彩色的图形字符显示。
通过调用INT10H的AH=0,AL=0~7可设置不同的显示方式,调用INT 10H的AH=09H,AH=0AH等可显示字符。
在屏幕上显示出汽车的效果,可分5步进行:
1)在屏幕上显示图形(单字符或多字符图形)
2)延迟一个时间周期,这样图形更清晰
3)清除图形
4)改变图形的行列坐标
5)返回第一步,重复上述过程。
“汽车”各字符的相对位移量:
4.2汽车停止、转向、倒车的指示
首先是检测键盘的输入,根据输入的字符(A,D,W,S,B)来调用相应的函数,执行相应的操作实现:
在屏幕上显示小车,延迟一个时间周期这样图形更清晰,清除图形,改变汽车图形的行列坐标,返回第一步,重复上述过程。
5.结果显示
1、开始
2、左转
3.右转
4、前进
5、后退和响铃
6、停止
5.总结
两周的课程设计结束了,在这次的课程设计中不仅检验了我所学习的知识,也培养了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情。
在设计过程中,和同学们相互探讨,相互学习,相互监督。
学会了合作,学会了运筹帷幄,学会了宽容,学会了理解,也学会了做人与处世。
课程设计是我们专业课程知识综合应用的实践训练,着是我们迈向社会,从事职业工作前一个必不少的过程.”千里之行始于足下”,通过这次课程设计,我深深体会到这句千古名言的真正含义.我今天认真的进行课程设计,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础.
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,当今计算机应用在是生活中可以说得是无处不在。
因此作为二十一世纪的大学来说掌握计算机开发技术十分重要的。
我的题目是汽车车灯控制系统,对于我们这些新手来说,这是很大的考验,我一千次一万次的问自己,怎么才能找到课堂所学与实际应用的最佳结合点?
怎么才能让自己的程序在篇幅上简单,在使用价值上丰富?
怎样让自己的业余更靠近专业?
怎样让自己的计划更具有序性,而不会忙无一用?
机会是老师,学校,以及无数代教育工作者给的,而能力是自己的,耐性是需要的。
经过自己的琢磨,听取了师姐,师兄们的建议,还查阅了很多书籍,才做到了心中有数,才了解了接口课程设计的真正用意——培养自学能力,养成程序编辑的好习惯。
我从来不相信车到山前必有路的说法,认为那只是懒惰者自寻懒惰的借口,我要积极,要把握,要努力。
回顾起此次课程设计,至今我仍感慨颇多,的确,从从拿到题目到完成整个编程,从理论到实践,在整整半个月的日子里,可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体……通过这次课程设计之后,一定把以前所学过的知识重新温故。
在课程设计过程中,我学到了很多人生的哲理,懂得怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪,黑夜过去了,我们收获的是黎明。
谢谢老师的指导。
6、程序代码
.MODELSMALL
.DATA
messagedb'SwitchAisforzuozhuan,switchDisforyouzhuan,switchWisforqianjin,switchSisforhoutui,switchBisforshache!
'
db0ah,0dh
db'Ifyouwanttoquit,pleasehit''kongge''!
',0ah,0dh,'$'
CARSDW15
DB0,0,4FH,7,0,1,4FH,7
DB1,0,0BBH,6,0,-1,0BBH,6
DB1,-1,0BBH,6,0,1,0BBH,6
DB0,1,0BBH,6,0,1,0BBH,6
DB1,0,4FH,7,0,-3,4FH,7
;定义汽车形状
ROWDB?
COLUMNDB?
MODEDB?
;MODE=1时画小车,MODE=0时清除小车
MUS_FREGdw262,262,294,262,349,330
dw262,262,294,262,392,349
dw262,262,523,440,349,330,294
dw466,466,440,262,392,349
dw-1
MUS_TIMEdw10,20,20,20,20,100
dw10,20,20,20,20,100
dw10,20,20,20,20,20,200
dw10,20,20,20,20,100
.CODE
START:
MOVAX,@DATA
MOVDS,AX;初始化
MOVROW,13;小车的初始行坐标
MOVCOLUMN,38;小车的初始列坐标
movah,09h;显示系统提示信息
movdx,segmessage
movds,dx
movdx,offsetmessage
int21h
CALLDRAW;画小车
CALLDIRECTION;检查是否有控制键按下?
MOVAX,4C00H;退出程序
INT21H
;
DIRECTIONPROCNEAR;键盘检测子程序
DRAW_U:
MOVAH,0;接收键盘输入
INT16H
CMPAL,57H;向上?
JNZDRAW_D;没有则转移
CALLCLEAR;清除小车
DECROW;行坐标减1
CALLDRAW;画小车
CMPROW,1;小车在最上边吗?
JNZDRAW_D;不是则转移
CALLCLEAR;是则清除小车
MOVROW,24;把小车置于最下边
DRAW_D:
CMPAL,53H;向下?
JNZDRAW_L;没有则转移
CALLCLEAR;清除小车
INCROW;行坐标加1
CALLDRAW_DD;画小车
CMPROW,24;小车在最下边吗?
JNZDRAW_L;不是则转移
CALLCLEAR;清除小车
MOVROW,1;把小车置于最上边
jmpDRAW_L
A1:
jmpDRAW_U
DRAW_L:
CMPAL,41H;向左?
JNZDRAW_R;没有则转移
CALLCLEAR;清除小车
DECROW;行坐标减1
DECCOLUMN;列坐标减1
CALLDRAW_LL;画小车
CMPCOLUMN,0;小车在最左边吗?
JNZDRAW_R;不是则转移
CALLCLEAR;清除小车
MOVCOLUMN,76;把小车置于最右边
MOVROW,24
DRAW_R:
CMPAL,44H;向右?
JNZDRAW_STOP;没有则转移
CALLCLEAR;清除小车
INCCOLUMN;列坐标加1
DECROW;行坐标减1
CALLDRAW_RR;画小车
CMPCOLUMN,76;小车在最右边吗?
JNZDRAW_STOP;不是则转移
CALLCLEAR;清除小车
MOVCOLUMN,0;把小车置于最左边
MOVROW,24
DRAW_STOP:
CMPAL,42H
JNZEXIT
CALLCLEAR
CALLDRAW_SS
EXIT:
CMPAL,20H;空格?
JNZA1;没有则返回
RET;退出
DIRECTIONENDP
DRAW:
;画小车
MOVMODE,1
CALLCAR
RET
CLEAR:
;清除小车
MOVMODE,0
CALLCAR
RET
CARPROCNEAR;小车图形子程序
MOVDH,ROW
MOVDL,COLUMN
MOVCX,10
LEADI,CARS+2
ONE:
ADDDH,[DI+0];置光标列
ADDDL,[DI+1];置光标行
MOVAH,2
INT10H
MOVAL,[DI+2];显示字符的ASCII码
MOVBL,[DI+3];显示字符的属性
CMPMODE,0;MODE=1时画小车,MODE=0时清除小车
JNESKIP
MOVBL,0
SKIP:
PUSHCX
MOVCX,1
MOVAH,09H
INT10H
POPCX
ADDDI,4
LOOPONE
RET
CARENDP
;左拐的处理
DRAW_LL:
;画小车
MOVMODE,1
CALLCAR_L
RET
CAR_LPROCNEAR;小车图形子程序
MOVDH,ROW
MOVDL,COLUMN
MOVCX,10
LEADI,CARS+2
ONE_L:
ADDDH,[DI+0];置光标行
ADDDL,[DI+1];置光标列
MOVAH,2
INT10H
MOVAL,[DI+2];显示字符的ASCII码
MOVBL,[DI+3];显示字符的属性
SKIP_L:
PUSHCX
MOVCX,1
MOVAH,09H
INT10H
POPCX
ADDDI,4
LOOPONE_L
MOVDH,ROW;左前灯亮
MOVDL,COLUMN
LEADI,CARS+2
ADDDH,[DI+0];置光标行
ADDDL,[DI+1];置光标列
MOVAH,02H
INT10H
MOVAL,[DI+2];显示字符的ASCII码
MOVBL,4;显示字符的属性
MOVCX,1
MOVAH,09H
INT10H
POPCX
ADDDH,3;左后灯亮
ADDDL,-1
MOVAH,02H
INT10H
MOVAL,[DI+2];显示字符的ASCII码
MOVBL,4;显示字符的属性
PUSHCX
MOVCX,1
MOVAH,09H
INT10H
POPCX
RET
CAR_LENDP
;右拐的处理
DRAW_RR:
;画小车
MOVMODE,1
CALLCAR_R
RET
CAR_RPROCNEAR;小车图形子程序
MOVDH,ROW
MOVDL,COLUMN
MOVCX,10
LEADI,CARS+2
ONE_R:
ADDDH,[DI+0];置光标行
ADDDL,[DI+1];置光标列
MOVAH,2
INT10H
MOVAL,[DI+2];显示字符的ASCII码
MOVBL,[DI+3];显示字符的属性
SKIP_R:
PUSHCX
MOVCX,1
MOVAH,09H
INT10H
POPCX
ADDDI,4
LOOPONE_R
;右前灯亮
MOVDH,ROW
MOVDL,COLUMN
LEADI,CARS+6
ADDDH,[DI+0];置光标行
ADDDL,[DI+1];置光标列
MOVAH,02H
INT10H
MOVAL,[DI+2];显示字符的ASCII码
MOVBL,4;显示字符的属性
MOVCX,1
MOVAH,09H
INT10H
POPCX
ADDDH,3;左后灯亮
ADDDL,+1
MOVAH,02H
INT10H
MOVAL,[DI+2];显示字符的ASCII码
MOVBL,4;显示字符的属性
PUSHCX
MOVCX,1
MOVAH,09H
INT10H
POPCX
RET
CAR_RENDP
;后退的处理
DRAW_DD:
;画小车
MOVMODE,1
CALLCAR_D
RET
CAR_DPROCNEAR;小车图形子程序
MOVDH,ROW
MOVDL,COLUMN
MOVCX,10
LEADI,CARS+2
ONE_D:
ADDDH,[DI+0];置光标行
ADDDL,[DI+1];置光标列
MOVAH,2
INT10H
MOVAL,[DI+2];显示字符的ASCII码
MOVBL,[DI+3];显示字符的属性
SKIP_D:
PUSHCX
MOVCX,1
MOVAH,09H
INT10H
POPCX
ADDDI,4
LOOPONE_D
MOVDH,ROW
MOVDL,COLUMN
ADDDH,3;左后灯亮
ADDDL,-1
MOVAH,02H
INT10H
MOVAL,4FH;显示字符的ASCII码
MOVBL,4;显示字符的属性
PUSHCX
MOVCX,1
MOVAH,09H
INT10H
POPCX
;右后灯亮
ADDDL,+3
MOVAH,02H
INT10H
MOVAL,4FH;显示字符的ASCII码
MOVBL,4;显示字符的属性
PUSHCX
MOVCX,1
MOVAH,09H
INT10H
POPCX
callmusic
RET
CAR_DENDP
DRAW_SS:
;画小车
MOVMODE,1
CALLCAR_STOP
RET
CAR_STOPPROCNEAR;小车图形子程序
MOVDH,ROW
MOVDL,COLUMN
MOVCX,10
LEADI,CARS+2
ONE_STOP:
ADDDH,[DI+0];置光标行
ADDDL,[DI+1];置光标列
MOVAH,2
INT10H
MOVAL,[DI+2];显示字符的ASCII码
MOVBL,[DI+3];显示字符的属性
SKIP_STOP:
PUSHCX
MOVCX,1
MOVAH,09H
INT10H
POPCX
ADDDI,4
LOOPONE_STOP
;右前灯亮
MOVDH,ROW
MOVDL,COLUMN
LEADI,CARS+6
ADDDH,[DI+0];置光标行
ADDDL,[DI+1];置光标列
MOVAH,02H
INT10H
MOVAL,[DI+2];显示字符的ASCII码
MOVBL,4;显示字符的属性
MOVCX,1
MOVAH,09H
INT10H
POPCX
;左前灯亮
ADDDL,-1
MOVAH,02H
INT10H
MOVAL,4FH;显示字符的ASCII码
MOVBL,4;显示字符的属性
PUSHCX
MOVCX,1
MOVAH,09H
INT10H
POPCX
MOVDH,ROW
MOVDL,COLUMN
ADDDH,3;左后灯亮
ADDDL,-1
MOVAH,02H
INT10H
MOVAL,4FH;显示字符的ASCII码
MOVBL,4;显示字符的属性
PUSHCX
MOVCX,1
MOVAH,09H
INT10H
POPCX
;右后灯亮
ADDDL,+3
MOVAH,02H
INT10H
MOVAL,4FH;显示字符的ASCII码
MOVBL,4;显示字符的属性
PUSHCX
MOVCX,1
MOVAH,09H
INT10H
POPCX
RET
CAR_STOPENDP
musicprocnear
ONE_m:
LEASI,MUS_FREG
LEABP,DS:
MUS_TIME
freq:
movdi,[si]
cmpdi,-1
jeENDMUS
movbx,ds:
[bp]
callsoundf
addsi,2
addbp,2
jmpfreq
ENDMUS:
RET
musicendp
;***************************************************
soundfprocnear
pushax
pushbx
pushcx
pushdx
pushdi
moval,0b6h
out43h,al
movdx,12h
movax,348ch
divdi
out42h,al
moval,ah
out42h,al
inal,61h
movah,al
oral,3
out61h,al
wait1:
movcx,663
callwaitf
delay:
loopdelay
decbx
jnzwait1
moval,ah
out61h,al
popdi
popdx
popcx
popbx
popax
ret
soundfendp
q0procnear
movah,2
subbh,bh
movdh,0
movdl,0
int10h
ret
q0endp
waitfprocnear
pushax
waitf1:
inal,61h
andal,10h
cmpal,ah
jewaitf1
movah,al
loopwaitf1
popax
ret
waitfendp
;***************************************************
ENDSTART