1、信息科学与技术学院微机原理与接口技术课程设计报告题目名称:汽车车灯控制系统目录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) 实现汽车转向时指示3) 实现倒车指示4) 扩展功能:实现倒车的声音提示2. 功能设计2
2、.1 汽车图形功能:用汇编语言在dos 下实现一个汽车的图形,和四盏灯。2.2汽车左转功能:按 A键,实现汽车的左转,左前、左后指示灯亮,右前、右后指示灯灭。2.3汽车右转功能:按 D键,实现汽车的右转,左前、左后指示灯灭,右前、右后指示灯亮。2.4汽车前进功能:按 W键,实现汽车的向前行驶,并且四盏指示灯全灭。2.5汽车倒退功能:按 S键,实现汽车的倒退行驶,并且后面 2 盏指示灯全亮,前面 2 盏指示灯全灭。2.6汽车停止功能:按 B键,实现汽车的停止,并且四盏指示灯全亮和倒车提示音。2.7响铃模块功能:汽车停止时,提供倒车提示音。13. 主流程图开始等待No有无按健YesYesRET与
3、W 比较NoYes 与 A 比较RETNo调用 DRAW_W调用 DRAW_AYes与 D 比较 RETNoYes与 S 比较No调用 DRAW_D调用 DRAW_S 和响铃函数RET与 B 比较YesRET调用 STOPNo非定义字符 RET与空格比 较Yes退出24. 详细设计4.1汽车图形显示字符图形既可以在显示器上以简单的黑白图形字符显示,也可以在彩色显示器上以彩色的图形字符显示。通过调用 INT 10H的AH=0, AL=07可设置不同的显示方式,调用 INT 10H的AH=09H,AH=0AH等可显示字符。在屏幕上显示出汽车的效果,可分 5步进行:1) 在屏幕上显示图形(单字符或多
4、字符图形)2) 延迟一个时间周期,这样图形更清晰3) 清除图形4) 改变图形的行列坐标5) 返回第一步,重复上述过程。“汽车”各字符的相对位移量:4.2汽车停止、转向、倒车的指示首先是检测键盘的输入,根据输入的字符(A,D,W,S, B)来调用相应的函数,执行相应的操作实现:在屏幕上显示小车, 延迟一个时间周期这样图形更清晰, 清除图形,改变汽车图形的行列坐标,返回第一步,重复上述过程。35. 结果显示1、开始2、左转43右转4、前进55、后退和响铃6、停止65. 总结两周的 程 束了,在 次的 程 中不 了我所学 的知 ,也培养了我如何去把握一件事情, 如何去做一件事情, 又如何完成一件事情
5、。 在 程中,和同学 相互探 ,相互学 ,相互 督。学会了合作,学会了运筹帷幄,学会了 容,学会了理解,也学会了做人与 世。 程 是我 程知 合 用的 践 , 着是我 向社会, 从事 工作前一个必不少的 程 ”千里之行始于足下 ”,通 次 程 ,我深深体会到 句千古名言的真正含 我今天 真的 行 程 , 学会脚踏 地 开 一步,就是 明天能 健地在社会大潮中奔跑打下 的基 程 是培养学生 合运用所学知 ,发现 ,提出 ,分析和解决 ,锻 践能力的重要 ,是 学生 工作能力的具体 和考察 程 .随着科学技 展的日新日异, 当今 算机 用在是生活中可以 得是无 不在。 因此作 二十一世 的大学来
6、掌握 算机开 技 十分重要的。我的 目是汽 灯控制系 , 于我 些新手来 , 是很大的考 ,我一千次一万次的 自己, 怎么才能找到 堂所学与 用的最佳 合点?怎么才能 自己的程序在篇幅上 , 在使用价 上丰富?怎 自己的 余更靠近 ?怎 自己的 划更具有序性,而不会忙无一用?机会是老 ,学校,以及无数代教育工作者 的, 而能力是自己的, 耐性是需要的。 自己的琢磨,听取了 姐, 兄 的建 , 了很多 籍,才做到了心中有数,才了解了接口 程 的真正用意培养自学能力, 养成程序 的好 。 我从来不相信 到山前必有路的 法, 那只是 惰者自 惰的借口, 我要 极,要把握,要努力。回 起此次 程 ,
7、至今我仍感慨 多, 的确,从从拿到 目到完成整个 程,从理 到 践,在整整半个月的日子里,可以学到很多很多的的 西,同 不 可以巩固了以前所学 的知 , 而且学到了很多在 本上所没有学到 的知 。通 次 程 使我懂得了理 与 相 合是很重要的, 只有理 知 是 不 的,只有把所学的理 知 与 践相 合起来, 从理 中得出 ,才能真正 社会服 , 从而提高自己的 手能力和独立思考的能力。 在 的 程中遇到 , 可以 得是困 重重, 竟第一次做的, 免会遇到 各种各 的 , 同 在 的 程中 了自己的不足之 , 以前所学 的知 理解得不 深刻,掌握得不 牢固,比如 构体通 次 程 之后,一定把以前
8、所学 的知 重新温故。在 程 程中, 我学到了很多人生的哲理, 懂得怎么 去制定 划, 怎么 去 个 划,并掌握了在 行 程中怎么 去克服心理上的不良情 ,黑夜 去了,我 收 的是黎明。 老 的指 。76、程序代码.MODEL SMALL.DATAmessage db Switch A is for zuozhuan,switch D is for youzhuan,switch W is for qianjin,switch S is for houtui,switch B is for shache!db 0ah,0dhdb If you want to quit, please hit
9、kongge!,0ah,0dh,$CARS DW 15DB 0,0,4FH,7,0,1,4FH,7DB 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_FREGdw 262,262,294,262,349,330dw 262,262,294,262,392,349dw 262,262,523,440,349,330,294dw
10、466,466,440,262,392,349dw -1MUS_TIMEdw 10,20,20,20,20,100dw 10,20,20,20,20,100dw 10,20,20,20,20,20,200dw 10,20,20,20,20,100.CODESTART: MOV AX,DATAMOV DS,AX ;初始化MOV ROW,13;小车的初始行坐标MOV COLUMN,38;小车的初始列坐标mov ah,09h;显示系统提示信息mov dx,seg messagemov ds,dxmov dx,offset messageint 21hCALL DRAW ; 画小车CALL DIREC
11、TION;检查是否有控制键按下?MOV AX,4C00H;退出程序8INT 21H;DIRECTION PROC NEAR ;键盘检测子程序DRAW_U:MOV AH,0;接收键盘输入INT 16HCMP AL,57H;向上 ?JNZ DRAW_D;没有则转移CALL CLEAR;清除小车DEC ROW;行坐标减 1CALL DRAW ; 画小车CMP ROW,1;小车在最上边吗?JNZ DRAW_D;不是则转移CALL CLEAR;是则清除小车MOV ROW,24;把小车置于最下边DRAW_D:CMP AL,53H;向下?JNZ DRAW_L;没有则转移CALL CLEAR;清除小车INC
12、ROW;行坐标加 1CALL DRAW_DD ;画小车CMP ROW,24 ; 小车在最下边吗?JNZ DRAW_L;不是则转移CALL CLEAR;清除小车MOV ROW,1;把小车置于最上边jmp DRAW_LA1:jmp DRAW_UDRAW_L:CMP AL,41H;向左?JNZ DRAW_R;没有则转移CALL CLEAR;清除小车DEC ROW;行坐标减1DEC COLUMN;列坐标减1CALL DRAW_LL;画小车CMP COLUMN,0;小车在最左边吗?JNZ DRAW_R;不是则转移CALL CLEAR;清除小车MOV COLUMN,76;把小车置于最右边MOV ROW,2
13、49DRAW_R:CMP AL,44H;向右?JNZ DRAW_STOP;没有则转移CALL CLEAR;清除小车INC COLUMN;列坐标加1DEC ROW;行坐标减1CALL DRAW_RR ;画小车CMP COLUMN,76;小车在最右边吗?JNZ DRAW_STOP;不是则转移CALL CLEAR;清除小车MOV COLUMN,0 ;把小车置于最左边MOV ROW,24DRAW_STOP:CMP AL,42HJNZ EXITCALL CLEARCALL DRAW_SSEXIT:CMP AL,20H;空格?JNZ A1;没有则返回RET;退出DIRECTION ENDPDRAW:;画小
14、车MOV MODE,1CALL CARRETCLEAR:;清除小车MOV MODE,0CALL CARRETCARPROC NEAR;小车图形子程序MOV DH,ROWMOV DL,COLUMNMOV CX,10LEA DI,CARS+2ONE:ADD DH,DI+0;置光标列ADD DL,DI+1;置光标行MOV AH,2INT 10H10MOV AL,DI+2;显示字符的 ASCII 码MOV BL,DI+3;显示字符的属性CMP MODE,0;MODE=1 时画小车, MODE=0 时清除小车JNE SKIPMOV BL,0SKIP:PUSH CXMOV CX,1MOV AH,09HIN
15、T 10HPOP CXADD DI,4LOOP ONERETCAR ENDP;左拐的处理DRAW_LL:;画小车MOV MODE,1CALL CAR_LRETCAR_LPROC NEAR;小车图形子程序MOV DH,ROWMOV DL,COLUMNMOV CX,10LEA DI,CARS+2ONE_L:ADD DH,DI+0;置光标行ADD DL,DI+1;置光标列MOV AH,2INT 10HMOV AL,DI+2;显示字符的 ASCII 码MOV BL,DI+3;显示字符的属性SKIP_L: PUSH CXMOV CX,1MOV AH,09HINT 10HPOP CXADD DI,4LOO
16、P ONE_LMOV DH,ROW;左前灯亮MOV DL,COLUMNLEA DI,CARS+2ADD DH,DI+0;置光标行ADD DL,DI+1;置光标列11MOV 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;显示字符的ASCII 码MOV BL,4;显示字符的属性PUSH CXMOV CX,1MOV AH,09HINT 10HPOP CXRETCAR_L ENDP
17、;右拐的处理DRAW_RR:;画小车MOV MODE,1CALL CAR_RRETCAR_RPROC NEAR ;小车图形子程序MOV DH,ROWMOV DL,COLUMNMOV CX,10LEA DI,CARS+2ONE_R:ADD DH,DI+0;置光标行ADD DL,DI+1;置光标列MOV AH,2INT 10HMOV AL,DI+2;显示字符的ASCII 码MOV BL,DI+3;显示字符的属性SKIP_R: PUSH CXMOV CX,1MOV AH,09HINT 10HPOP CX12ADD DI,4LOOP ONE_R; 右前灯亮MOV DH,ROWMOV DL,COLUMN
18、LEA 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;显示字符的 ASCII 码MOV BL,4;显示字符的属性PUSH CXMOV CX,1MOV AH,09HINT 10HPOP CXRETCAR_R ENDP;后退的处理DRAW_DD:;画小车MOV MODE,1CALL CA
19、R_DRETCAR_DPROC NEAR ;小车图形子程序MOV DH,ROWMOV DL,COLUMNMOV CX,10LEA DI,CARS+213ONE_D:ADD DH,DI+0;置光标行ADD DL,DI+1;置光标列MOV AH,2INT 10HMOV AL,DI+2;显示字符的ASCII 码MOV BL,DI+3;显示字符的属性SKIP_D: PUSH CXMOV CX,1MOV AH,09HINT 10HPOP CXADD DI,4LOOP ONE_DMOV DH,ROWMOV DL,COLUMNADD DH,3;左后灯亮ADD DL,-1MOV AH,02HINT 10HMO
20、V 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 CXcall musicRETCAR_D ENDP14DRAW_SS:;画小车MOV MODE,1CALL CAR_STOPRETCAR_STOPPROC NEAR;小车图形子程序MOV DH,ROWMOV DL,COLUMNMOV CX
21、,10LEA 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 ONE_STOP; 右前灯亮MOV DH,ROWMOV DL,COLUMNLEA DI,CARS+6ADD DH,DI+0;置光标行ADD DL,DI+1;置光标列MOV AH,02HINT 10HMOV AL,DI+2;显示字符的ASCII 码
22、MOV BL,4;显示字符的属性MOV CX,1MOV AH,09HINT 10HPOP CX;左前灯亮ADD DL,-1MOV AH,02HINT 10HMOV AL,4FH;显示字符的ASCII 码MOV BL,4;显示字符的属性15PUSH CXMOV CX,1MOV AH,09HINT 10HPOP CXMOV DH,ROWMOV DL,COLUMNADD DH,3;左后灯亮ADD DL,-1MOV AH,02HINT 10HMOV AL,4FH;显示字符的ASCII 码MOV BL,4;显示字符的属性PUSH CXMOV CX,1MOV AH,09HINT 10HPOP CX;右后灯
23、亮ADD DL,+3MOV AH,02HINT 10HMOV AL,4FH;显示字符的ASCII 码MOV BL,4;显示字符的属性PUSH CXMOV CX,1MOV AH,09HINT 10HPOP CXRETCAR_STOP ENDPmusic proc nearONE_m:LEA SI,MUS_FREGLEA BP,DS:MUS_TIMEfreq:mov di,si16cmp di,-1jeENDMUSmov bx,ds:bpcall soundfadd si,2add bp,2jmp freqENDMUS:RETmusic endp;*soundfproc nearpushaxpus
24、hbxpushcxpushdxpushdimoval,0b6hout43h,almovdx,12hmovax,348chdivdiout42h,almoval,ahout42h,alinal,61hmovah,aloral,3out61h,alwait1:movcx,663callwaitfdelay:loopdelaydecbxjnzwait1moval,ahout61h,alpopdipopdxpopcxpopbx17popaxretsoundfendpq0 proc nearmov ah,2sub bh,bhmov dh,0mov dl,0int 10hretq0 endpwaitfproc nearpushaxwaitf1: inal,61handal, 10hcmpal, ahjewaitf1movah,alloopwaitf1popaxretwaitfendp;*END START18