1、信息科学与技术学院微机原理与接口技术课程设计报告题目名称: 汽车车灯控制系统 学生姓名: 吴权权 学 号: 2009082190 专业年级: 计科09-1班 指导教师: 裘祖旗 时 间: 2012-1-12 目 录1题目及要求11.1 题目11.2 要求12.功能设计12.1 汽车图形12.2 汽车左转12.3 汽车右转12.4 汽车前进12.5 汽车倒退12.6 汽车停止12.7 响铃模块13.主流程图24.详细设计34.1 汽车图形显示33.2 汽车停止、转向、倒车的指示35.结果显示45.总结76、程序代码81题目及要求1.1 题目汽车车灯控制系统1.2 要求1) 实现停止时的指示灯;2
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、能:汽车停止时,提供倒车提示音。 3.主流程图开始有无按健等待 No Yes调用DRAW_W与W比较 Yes RET 与A比较 No调用DRAW_A Yes RET No与D比较 Yes调用DRAW_D RET No调用DRAW_S和响铃函数与S比较 Yes RET 与B比较No调用STOP Yes RET No与空格比较 非定义字符 RET Yes退出 4.详细设计4.1 汽车图形显示 字符图形既可以在显示器上以简单的黑白图形字符显示,也可以在彩色显示器上以彩色的图形字符显示。通过调用INT 10H的AH=0,AL=07可设置不同的显示方式,调用INT10H的AH=09H,AH=0AH等可显
4、示字符。在屏幕上显示出汽车的效果,可分5步进行:1) 在屏幕上显示图形(单字符或多字符图形)2) 延迟一个时间周期,这样图形更清晰3) 清除图形 4) 改变图形的行列坐标5) 返回第一步,重复上述过程。“汽车”各字符的相对位移量: 4.2 汽车停止、转向、倒车的指示 首先是检测键盘的输入,根据输入的字符(A,D,W,S,B)来调用相应的函数,执行相应的操作实现:在屏幕上显示小车, 延迟一个时间周期这样图形更清晰, 清除图形,改变汽车图形的行列坐标,返回第一步,重复上述过程。5.结果显示 1、开始2、左转3右转4、前进5、后退和响铃6、停止5.总结两周的课程设计结束了,在这次的课程设计中不仅检验
5、了我所学习的知识,也培养了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情。在设计过程中,和同学们相互探讨,相互学习,相互监督。学会了合作,学会了运筹帷幄,学会了宽容,学会了理解,也学会了做人与处世。课程设计是我们专业课程知识综合应用的实践训练,着是我们迈向社会,从事职业工作前一个必不少的过程”千里之行始于足下”,通过这次课程设计,我深深体会到这句千古名言的真正含义我今天认真的进行课程设计,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和
6、考察过程.随着科学技术发展的日新日异,当今计算机应用在是生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握计算机开发技术十分重要的。我的题目是汽车车灯控制系统,对于我们这些新手来说,这是很大的考验,我一千次一万次的问自己,怎么才能找到课堂所学与实际应用的最佳结合点?怎么才能让自己的程序在篇幅上简单,在使用价值上丰富?怎样让自己的业余更靠近专业?怎样让自己的计划更具有序性,而不会忙无一用?机会是老师,学校,以及无数代教育工作者给的,而能力是自己的,耐性是需要的。经过自己的琢磨,听取了师姐,师兄们的建议,还查阅了很多书籍,才做到了心中有数,才了解了接口课程设计的真正用意培养自学能力,养成程
7、序编辑的好习惯。我从来不相信车到山前必有路的说法,认为那只是懒惰者自寻懒惰的借口,我要积极,要把握,要努力。回顾起此次课程设计,至今我仍感慨颇多,的确,从从拿到题目到完成整个编程,从理论到实践,在整整半个月的日子里,可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各
8、样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体通过这次课程设计之后,一定把以前所学过的知识重新温故。在课程设计过程中,我学到了很多人生的哲理,懂得怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪,黑夜过去了,我们收获的是黎明。谢谢老师的指导。6、程序代码.MODEL SMALL.DATAmessage db Switch A is for zuozhuan,switch D is for youzhuan,switch W is for qianjin,switch S is for ho
9、utui,switch B is for shache! db 0ah,0dh db If you want to quit, please hit kongge!,0ah,0dh,$CARS DW 15 DB 0,0,4FH,7,0,1,4FH,7 DB 1,0,0BBH,6,0,-1,0BBH,6DB 1,-1,0BBH,6,0,1,0BBH,6DB 0,1,0BBH,6,0,1,0BBH,6DB 1,0,4FH,7,0,-3,4FH,7 ;定义汽车形状ROW DB ? COLUMN DB ?MODE DB ?;MODE=1时画小车,MODE=0时清除小车 MUS_FREG dw 262,
10、262,294,262,349,330 dw 262,262,294,262,392,349 dw 262,262,523,440,349,330,294 dw 466,466,440,262,392,349 dw -1 MUS_TIME dw 10,20,20,20,20,100 dw 10,20,20,20,20,100 dw 10,20,20,20,20,20,200 dw 10,20,20,20,20,100.CODESTART:MOV AX,DATA MOV DS,AX;初始化 MOV ROW,13 ;小车的初始行坐标 MOV COLUMN,38;小车的初始列坐标 mov ah,09
11、h ;显示系统提示信息 mov dx,seg message mov ds,dx mov dx,offset message int 21hCALL DRAW;画小车CALL DIRECTION;检查是否有控制键按下? MOV AX,4C00H;退出程序 INT 21H;DIRECTION PROC NEAR;键盘检测子程序DRAW_U:MOV AH,0;接收键盘输入 INT 16H CMP AL,57H;向上? JNZ DRAW_D;没有则转移CALL CLEAR;清除小车 DEC ROW;行坐标减1CALL DRAW;画小车CMP ROW,1 ;小车在最上边吗?JNZ DRAW_D;不是则
12、转移CALL CLEAR;是则清除小车MOV ROW,24;把小车置于最下边 DRAW_D:CMP AL,53H;向下? JNZ DRAW_L;没有则转移CALL CLEAR;清除小车 INC ROW;行坐标加1CALL DRAW_DD;画小车CMP ROW,24;小车在最下边吗?JNZ DRAW_L;不是则转移CALL CLEAR;清除小车MOV ROW,1;把小车置于最上边jmp DRAW_L A1:jmp DRAW_U DRAW_L:CMP AL,41H;向左? JNZ DRAW_R;没有则转移CALL CLEAR;清除小车 DEC ROW;行坐标减1 DEC COLUMN;列坐标减1C
13、ALL DRAW_LL;画小车CMP COLUMN,0;小车在最左边吗?JNZ DRAW_R;不是则转移CALL CLEAR;清除小车MOV COLUMN,76;把小车置于最右边MOV ROW,24 DRAW_R:CMP AL,44H ;向右? JNZ DRAW_STOP;没有则转移CALL CLEAR;清除小车 INC COLUMN ;列坐标加1 DEC ROW;行坐标减1CALL DRAW_RR;画小车CMP COLUMN,76;小车在最右边吗?JNZ DRAW_STOP;不是则转移CALL CLEAR;清除小车MOV COLUMN,0;把小车置于最左边MOV ROW,24DRAW_STO
14、P:CMP AL,42H JNZ EXIT CALL CLEAR CALL DRAW_SS EXIT:CMP AL,20H;空格?JNZ A1;没有则返回RET;退出DIRECTION ENDP DRAW: ;画小车MOV MODE,1CALL CARRETCLEAR:;清除小车MOV MODE,0CALL CARRETCAR PROC NEAR;小车图形子程序 MOV DH,ROW MOV DL,COLUMN MOV CX,10 LEA DI,CARS+2ONE: ADD DH,DI+0;置光标列ADD DL,DI+1;置光标行MOV AH,2INT 10HMOV AL,DI+2;显示字符的
15、ASCII码MOV BL,DI+3;显示字符的属性CMP MODE,0;MODE=1时画小车,MODE=0时清除小车JNE SKIPMOV BL,0SKIP:PUSH CXMOV CX,1MOV AH,09HINT 10HPOP CXADD DI,4LOOP ONERETCAR ENDP;左拐的处理DRAW_LL: ;画小车MOV MODE,1CALL CAR_LRETCAR_L PROC NEAR;小车图形子程序 MOV DH,ROW MOV DL,COLUMN MOV CX,10 LEA DI,CARS+2ONE_L: ADD DH,DI+0;置光标行ADD DL,DI+1;置光标列MOV
16、 AH,2INT 10HMOV AL,DI+2;显示字符的ASCII码MOV BL,DI+3;显示字符的属性SKIP_L:PUSH CXMOV CX,1MOV AH,09HINT 10HPOP CXADD DI,4LOOP ONE_L MOV DH,ROW;左前灯亮 MOV DL,COLUMNLEA DI,CARS+2ADD DH,DI+0;置光标行ADD DL,DI+1;置光标列MOV AH,02HINT 10HMOV AL,DI+2;显示字符的ASCII码 MOV BL,4;显示字符的属性MOV CX,1MOV AH,09HINT 10HPOP CX ADD DH,3;左后灯亮 ADD D
17、L,-1MOV AH,02HINT 10HMOV AL,DI+2;显示字符的ASCII码MOV BL,4;显示字符的属性PUSH CXMOV CX,1MOV AH,09HINT 10HPOP CX RETCAR_L ENDP;右拐的处理DRAW_RR: ;画小车MOV MODE,1CALL CAR_RRETCAR_R PROC NEAR;小车图形子程序 MOV DH,ROW MOV DL,COLUMN MOV CX,10 LEA DI,CARS+2ONE_R: ADD DH,DI+0;置光标行ADD DL,DI+1;置光标列MOV AH,2INT 10HMOV AL,DI+2;显示字符的ASC
18、II码MOV BL,DI+3;显示字符的属性SKIP_R:PUSH CXMOV CX,1MOV AH,09HINT 10HPOP CXADD DI,4LOOP ONE_R ;右前灯亮 MOV DH,ROW MOV DL,COLUMNLEA DI,CARS+6ADD DH,DI+0;置光标行ADD DL,DI+1;置光标列MOV AH,02HINT 10HMOV AL,DI+2;显示字符的ASCII码 MOV BL,4;显示字符的属性MOV CX,1MOV AH,09HINT 10HPOP CXADD DH,3;左后灯亮 ADD DL,+1MOV AH,02HINT 10HMOV AL,DI+2
19、;显示字符的ASCII码MOV BL,4;显示字符的属性PUSH CXMOV CX,1MOV AH,09HINT 10HPOP CXRETCAR_R ENDP;后退的处理DRAW_DD: ;画小车MOV MODE,1CALL CAR_DRETCAR_D PROC NEAR;小车图形子程序 MOV DH,ROW MOV DL,COLUMN MOV CX,10 LEA DI,CARS+2ONE_D: ADD DH,DI+0;置光标行ADD DL,DI+1;置光标列MOV AH,2INT 10HMOV AL,DI+2;显示字符的ASCII码MOV BL,DI+3;显示字符的属性SKIP_D:PUSH
20、 CXMOV CX,1MOV AH,09HINT 10HPOP CXADD DI,4LOOP ONE_DMOV DH,ROW MOV DL,COLUMN ADD DH,3;左后灯亮 ADD DL,-1MOV AH,02HINT 10HMOV AL,4FH;显示字符的ASCII码MOV BL,4;显示字符的属性PUSH CXMOV CX,1MOV AH,09HINT 10HPOP CX ;右后灯亮 ADD DL,+3MOV AH,02HINT 10HMOV AL,4FH;显示字符的ASCII码MOV BL,4;显示字符的属性PUSH CXMOV CX,1MOV AH,09HINT 10HPOP
21、CXcall music RETCAR_D ENDPDRAW_SS: ;画小车MOV MODE,1CALL CAR_STOPRETCAR_STOP PROC NEAR;小车图形子程序 MOV DH,ROW MOV DL,COLUMN MOV CX,10 LEA DI,CARS+2ONE_STOP: ADD DH,DI+0;置光标行ADD DL,DI+1;置光标列MOV AH,2INT 10HMOV AL,DI+2;显示字符的ASCII码MOV BL,DI+3;显示字符的属性SKIP_STOP:PUSH CXMOV CX,1MOV AH,09HINT 10HPOP CXADD DI,4LOOP
22、ONE_STOP ;右前灯亮 MOV DH,ROW MOV DL,COLUMNLEA DI,CARS+6ADD DH,DI+0;置光标行ADD DL,DI+1;置光标列MOV AH,02HINT 10HMOV AL,DI+2;显示字符的ASCII码 MOV BL,4;显示字符的属性MOV CX,1MOV AH,09HINT 10HPOP CX;左前灯亮ADD DL,-1MOV AH,02HINT 10HMOV AL,4FH;显示字符的ASCII码MOV BL,4;显示字符的属性PUSH CXMOV CX,1MOV AH,09HINT 10HPOP CXMOV DH,ROW MOV DL,COL
23、UMN ADD DH,3;左后灯亮 ADD DL,-1MOV AH,02HINT 10HMOV AL,4FH;显示字符的ASCII码MOV BL,4;显示字符的属性PUSH CXMOV CX,1MOV AH,09HINT 10HPOP CX ;右后灯亮 ADD DL,+3MOV AH,02HINT 10HMOV AL,4FH;显示字符的ASCII码MOV BL,4;显示字符的属性PUSH CXMOV CX,1MOV AH,09HINT 10HPOP CX RETCAR_STOP ENDPmusic proc near ONE_m: LEA SI,MUS_FREG LEA BP,DS:MUS_T
24、IMEfreq: mov di,si cmp di,-1 je ENDMUS mov bx,ds:bp call soundf add si,2 add bp,2 jmp freq ENDMUS: RET music endp;*soundf proc near push ax push bx push cx push dx push di mov al,0b6h out 43h,al mov dx,12h mov ax,348ch div di out 42h,al mov al,ah out 42h,al in al,61h mov ah,al or al,3 out 61h,alwait
25、1: mov cx,663 call waitfdelay: loop delay dec bx jnz wait1 mov al,ah out 61h,al pop di pop dx pop cx pop bx pop ax retsoundf endpq0 proc near mov ah,2 sub bh,bh mov dh,0 mov dl,0 int 10h retq0 endpwaitf proc near push axwaitf1: in al,61h and al, 10h cmp al, ah je waitf1 mov ah,al loop waitf1 pop ax retwaitf endp;*END START18