汇编语言课程设计-交通信号灯控制系统.doc_第1页
汇编语言课程设计-交通信号灯控制系统.doc_第2页
汇编语言课程设计-交通信号灯控制系统.doc_第3页
汇编语言课程设计-交通信号灯控制系统.doc_第4页
汇编语言课程设计-交通信号灯控制系统.doc_第5页
免费预览已结束,剩余8页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

汇编语言课程设计交通信号灯控制系统初始界面:实现功能齐全。思路清晰一、设计要求利用pc机键盘和屏幕实现交通灯信号灯,控制系统。二、设计内容与要求基本要求:1、完成一个十字路口的红绿灯正常状态的控制:实现日常生活中正常的交通路口的控制功能,实现南北、东西方向的切换。2、显示时间,精确到秒;灯亮时间长短可变。3、具有自动和手动控制功能。提高要求:1、完成夜间状态的控制:由于夜间车辆和行人很少,实现南北、东西方向的黄灯闪烁,进入夜间控制状态。2、完成紧急状态的控制:南北双方向都设置为红灯,利于执行紧急公务。3、完成交通堵塞状态的控制:由于交通事故等原因出现南北或东西某一方向堵塞,可人为地调整每个方向的红灯时间,进入手动控制状态。附加要求:必要的辅助功能(设置、修改等)。三、编程提示要求用汇编语言进行编程,下面是编写过程中主要涉及的知识点(其中举例只是实现方法之一,同学可根据自己对知识的掌握情况进行设计并调试):1、视频显示程序设计:一般由dos 或bios调用来完成。有关显示输出的dos功能调用不多,而bios调用的功能很强,主要包括设置显示方式、光标大小和位置、设置调色板号、显示字符、显示图形等。用int 10h即可建立某种显示方式。用dos功能调用显示技术,把系统功能调用号送至ah,把程序段规定的入口参数,送至指定的寄存器,然后由中断指令 int 21h来实现调用,例:要输出多于一个字符时,利用dos功能调用9。2、键盘扫描程序设计:检测键盘状态,有无输入,并检测输入各值。例:利用dos系统功能调用的01号功能,接受从键盘输入的字符到al寄存器。3、定时器中断处理程序:在此中断处理程序中,计数器中断的次数记录在计数单元count中,由于定时中断的引发速率是每秒18.2次,即计数一次为55ms,当count计数值为18时,sec计数单元加一(为1秒)。例:在系统定时中断处理程序中,有一条中断指令int 1ch指令,在rom bios中,1ch的处理仅一条iret指令,实际上它并没有做任何工作而只是为用户提供了一个软中断类型号,所以int 1ch指令每秒也将执行18.2次,设计中可用这个定时周期性工作的处理程序来代替原有的1ch程序,实现定时。4、显示时间子程序:将计时单元的二进制转换为十进制数加以显示。参考资料:1微型计算机接口技术及应用2汇编语言程序设计3微型计算机汇编语言程序设计一、教科书中关于ibm-pc/xt机系统硬件的内容,包括8250(串行口控制器),8253,8255,8259等。二、dos系统功能调用。int21h1、 显示显示单个字符入参:ah=02hdl=字符ascii值出参:无显示字符串入参:ah=09hds:dx 此寄存器对指向内存中字符串的首地址,字符串以$结束出参:无2、 键盘检查键盘状态入参:ah=0bh出参:al=00h无输入 0ffh有一字符读键盘字符入参:ah=08h出参:al=字符ascii值3、 其它退出程序,返回系统入参:ah=4ch出参:无取中断矢量入参:ah=35hal=中断类型号出参:es:bx 中断矢量,es为段地址,bx为偏移地址置中断矢量入参:ah=25hal=中断类型号ds:dx 中断矢量,ds为段地址,dx为偏移地址出参:al=字符ascii值三、bios屏幕功能调用。int10h1、清屏操作mov ax,0600hmov cx,0000hmov dx,184fhmov bh,07hint 10h2、移动光标mov ah,02hmov dh,* ;*为目的地行数(0-24)mov dl,* ;*为目的地列数(0-79)mov bh,00hint 10h3、禁止光标显示mov ah,01hmov cx,2000hint 10h4、恢复光标显示mov ah,01hmov cx,0c0dhint 10h;/*/; 微机原理课程设计; 交通信号灯控制系统设计; 电子0803班; ; ; 2010-4-17 18:55;/*/stack segmentstack dw64 dup(?)stackends ;/*/; 功能:显示宏定义;/*/showlinemacrostr,sta,len,pos,col ;显示字符串宏 push dx push bx push ax ;/10 mov bp,offset str ;显示起始位置 add bp,sta ;第几个开始 mov dx,pos ;位置 mov cx,len ;长度 mov bx,col ;颜色 mov ax,1301h ;字符串显示中断 int 10h pop ax pop bx pop dx ;/20 endm ;/*/; 宏功能:读取时间子程序;/*/timebuf0 macrotime,buf ;显示字符串宏 pushbx pushax ;/10 mov di,offset buf mov al,time mov bl,0ah mov ah,00h div bl add al,30h add ah,30h mov di,al inc di mov di,ah pop ax pop bxendm ;/*/;功能: 延时一秒宏定义,8253每秒中断18.2次;/*/delay macro ;延时一秒 local dloop ;利用int 1ah/00h取得中断次数(dx), pushax pushbx pushdx mov ah,00h ;bios调用 /30 int 1ah ;55ms引起一次中断,作为定时信号。 add dl,18 ;定时1s,需要18个定时单位 mov bl,dl inc bldloop:mov ah, 00h int 1ah cmp dl,bl ;是否累计到1s jnz dloop ;没到,继续读 pop dx pop bx pop ax ;/40endm ;/*/;功能: ;数据定义 ;/*/data segment time_y db 2 time db 10 time0 db 7 time_g db 7 time_r db 10 buf0 db 0fh buf_x db 00 ;定义交通路口 buf_y db 00 buf db 00 table01 db traffic lights control system table02 db table03 db - table04 db ,0b3h, | ,0b3h, | table05 db ,0b3h, ,0b3h, | setting table06 db ,0b3h, | ,0b3h, | table07 db ,0b3h, n ,0b3h, | 1. changetime : c table08 db ,0b3h, | ,0b3h, | 2. doby : d table09 db ,0b3h, ,0b3h, | 3. night : n table10 db 13 dup(0c4h) ,0d9h, ,0c0h, 11 dup(0c4h) ,| 4. emergen : e table11 db | 5. quit : q table12 db ,0fh, | ;/60 table13 db | table14 db - - - -e- - ,0fh, ,0fh, - -w- - -|- table15 db | table16 db ,0fh, | now : normal table17 db | table18 db 13 dup(0c4h) ,0bfh, ,0dah, 11 dup(0c4h),| 1. quit system q table19 db ,0b3h, ,0b3h, | table20 db ,0b3h, | ,0b3h, |- table21 db ,0b3h, s ,0b3h, | table22 db ,0b3h, | ,0b3h, | write by qiuli ;/70 table23 db ,0b3h, ,0b3h, | tle:1522xxxxxxx table24 db ,0b3h, | ,0b3h, | mail:2372595 str db please input times r: ;g: ;y: ;y/n str1 db changetime str2 db doby str3 db night str4 db quit system q str5 db normal str6 db 1. quit system q str7 db 2. back to normal b str8 db emergen str9 dbx-g,y-r:x ;x-r,y-g:y strcl db str10 db : flg db 0 flg0 db 0 dataends codesegmentassume cs:code, ds:data,ss:stack;/*/ ;/80;功能:;主函数;/*/main proc far mov ax, data mov ds, ax mov es, ax funct: mov ah,01h ;清除光标 mov cx,2000h int 10h call initial n1: call showtime call getchar cmp al,c ;调整时间 jne loop1 call changtime jmp functloop1: cmp al,d ;手动/自动控制状态 jne loop2 ;100 call dobyloop2: cmp al,n ;夜间模式 jne loop3 call nightloop3: cmp al,e ;紧急模式 jne loop4 call emergenloop4: cmp al,q ;退出 jne n1 esc: mov ah,4ch ;/145 int 21h ;/*/ ;功能:紧急情况子函数;/*/emergen proc near ;/150 mov time,20 mov flg,1 timebuf0 time,buf call emtn0: call getchar cmp al,b ;紧急控制按钮是否按下 jne tn1 jmp functtn1: cmp al,q ;退出控制按钮是否按下 jne tn0 jmp esc ret ;/130emergen endp ;/170;/*/ ;功能:紧急情况界面初始化;/*/em proc near ;/150 showline buf,0,2,0a12h,0004h ;红灯 ;紧急情况 showline buf,0,2,1212h,0004h ;红灯 ;/120 showline buf,0,2,0e0ch,0004h ;红灯 showline buf,0,2,0e18h,0004h ;红灯 showline buf0,0,1,0c12h,0004h ;红灯 showline buf0,0,1,1013h,0004h ;红灯 showline buf0,0,1,0e0fh,0004h ;红灯 ;/160 showline buf0,0,1,0e16h,0004h ;红灯 showline str8,0,10,1038h,000fh ; showline str6,0,25,122ch,000fh ; ;/160 showline str7,0,25,132ch,000fh ; ret ;/130em endp ;/170;/*/;功能: 夜晚模式子函数;/*/night proc near mov time,0 timebuf0 time,bufng2: call ni delay call getchar cmp al,b ;夜间控制按钮是否按下 jne ng1 jmp functng1: cmp al,q jne ng2 jmp esc retnight endp ;/*/;功能: 夜晚模式显示界面函数;/*/ni proc near showline buf,0,2,0a12h,000eh ;黄灯 ;夜间显示控制 showline buf,0,2,1212h,000eh ;黄灯 showline buf,0,2,0e0ch,000eh ;黄灯 showline buf,0,2,0e18h,000eh ;黄灯 showline buf0,0,1,0c12h,000eh showline buf0,0,1,1013h,000eh showline buf0,0,1,0e0fh,000eh showline buf0,0,1,0e16h,000eh showline str3,0,10,1038h,000fh ; showline str6,0,25,122ch,000fh ; ;/160 showline str7,0,25,132ch,000fh ; retni endp ;/*/; 功能:手动模式子函数;/*/doby proc near ;开关子函数 mov flg,0op: call doop4: call getchar ;调用输入控制字符 cmp al,y ;手动控制下开 jne op1 mov flg,1 jmp opop1: cmp al,x ;手动控制下关 jne op2 mov flg,2 jmp opop2: cmp al,q jne op3 ;退出 jmp esc op3: cmp al,b jne op4 ;手动/自动控制 jmp funct retdoby endp;/*/;手动模式显示函数;/*/do proc near ;开关子函数 cmp flg,0 ja do0; showline buf,0,2,0a12h,000eh ;黄灯 showline buf,0,2,1212h,000eh ;黄灯 showline buf,0,2,0e0ch,000eh ;黄灯 showline buf,0,2,0e18h,000eh ;黄灯 jmp do2do0: cmp flg ,1 jne do1 showline buf,0,2,0a12h,0002h ; showline buf,0,2,1212h,0002h ; showline buf,0,2,0e0ch,0004h ; showline buf,0,2,0e18h,0004h ; jmp do2do1: showline buf,0,2,0a12h,0004h ; showline buf,0,2,1212h,0004h ; showline buf,0,2,0e0ch,0002h ; showline buf,0,2,0e18h,0002h ; showline buf0,0,1,0c12h,0004h showline buf0,0,1,1013h,0004h showline buf0,0,1,0e0fh,0002h showline buf0,0,1,0e16h,0002h jmp do3do2: cmp flg,0 jne do4 showline buf0,0,1,0c12h,000eh showline buf0,0,1,1013h,000eh showline buf0,0,1,0e0fh,000eh showline buf0,0,1,0e16h,000eh jmp do3do4: cmp flg,1 jne do3 showline buf0,0,1,0c12h,0002h showline buf0,0,1,1013h,0002h showline buf0,0,1,0e0fh,0004h showline buf0,0,1,0e16h,0004h do3: showline str9,0,30,112ah,000fh ; showline str2,0,10,1038h,000fh ; showline str6,0,25,122ch,000fh ; ;/160 showline str7,0,25,132ch,000fh ; retdo endp;/*/ ;功能: 改变时间子函数 ;/*/ changtime proc near call chan showline str10 ,0,1,113ah,000fh mov ah,01h int 21h sub al,30h ;将输入时间值转化成 mov bl,10 ;输出十进制值 ;/156 mul bl mov time_r,al mov ah,01h int 21h sub al,30h add time_r,al showline str10 ,0,1,113fh,000fh mov ah,01h int 21h sub al,30h ;将输入时间值转化成 mov bl,10 ;输出十进制值 ;/156dd mul bl mov time_g,al mov ah,01h int 21h sub al,30h add time_g,al showline str10 ,0,1,1144h,000fh mov ah,01h int 21h sub al,30h ;将输入时间值转化成 mov bl,10 ;输出十进制值 mul bl mov time_y,al mov ah,01h int 21h sub al,30h add time_y,alch1: call getchar cmp al,y je ch2 cmp al,n jne ch1 mov bl,10 mov time_r,bl mov bl,5 mov time_g,bl mov bl,4 mov time_y,blch2: retchangtime endp ;/*/ ;改变时间显示函数;/*/ chan proc near showline str,0,40,1126h,000fh showline str1,0,10,1038h,000fh showline table17,0,25,122ch,000fh showline buf,0,2,0a12h,000eh ;黄灯 showline buf,0,2,1212h,000eh ;黄灯 showline buf,0,2,0e0ch,000eh ;黄灯 showline buf,0,2,0e18h,000eh ;黄灯 showline buf0,0,1,0c12h,000eh showline buf0,0,1,1013h,000eh showline buf0,0,1,0e0fh,000eh showline buf0,0,1,0e16h,000eh retchan endp ;/*/; 功能: 时钟子程序 x方向;/*/showtimeproc near xor al,al mov flg,al mov flg0,al xor al,al mov al,time_r mov time,al mov al,time_g mov time0,al s1: mov ah,01h int 16h jnz s3 delay ;延时一秒 dec time cmp time,-1 jne s2 ;不等于-1,显示,否则 cmp flg,2 je s cmp flg,1 je s0 mov al,time_g mov time,al inc flg jmp s2 s0: mov al,time_y mov time,al inc flg jmp s2s: mov al,time_r mov

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论