当前位置:文档之家› 交通信号灯控制系统(汇编语言课程设计)

交通信号灯控制系统(汇编语言课程设计)

汇编语言课程设计交通信号灯控制系统初始界面:实现功能齐全。

思路清晰~~~~~~~~~~~~一、设计要求利用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系统功能调用。

INT 21H1、显示显示单个字符入参: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屏幕功能调用。

INT 10H1、清屏操作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 SEGMENT STACKDW 64 DUP(?)STACK ENDS;//***************************************************************************** **//; 功能:显示宏定义;//****************************************************************************// SHOWLINE MACRO STR,STA,LEN,POS,COL ;显示字符串宏PUSH BXPUSH AX ;//10MOV BP,OFFSET STR ;显示起始位置ADD BP,STA ;第几个开始MOV DX,POS ;位置MOV CX,LEN ;长度MOV BX,COL ;颜色MOV AX,1301H ;字符串显示中断INT 10HPOP AXPOP BXPOP DX ;//20ENDM;//***************************************************************************** **//; 宏功能:读取时间子程序;//****************************************************************************// TIMEBUF0 MACRO TIME,BUF ;显示字符串宏PUSH BXPUSH AX ;//10MOV DI,OFFSET BUFMOV AL,TIMEMOV BL,0AHMOV AH,00HDIV BLADD AL,30HADD AH,30HMOV [DI],ALINC DIMOV [DI],AHPOP AXPOP BXENDM;//*********************************************************************//;功能:延时一秒宏定义,8253每秒中断18.2次;//********************************************************************//DELAY MACRO ;延时一秒LOCAL DLOOP ;利用INT 1AH/00H取得中断次数(DX),PUSH AXPUSH BXPUSH DXMOV AH,00H ;BIOS调用//30INT 1AH ;55ms引起一次中断,作为定时信号。

ADD DL,18 ;定时1S,需要18个定时单位MOV BL,DLINC BLDLOOP: MOV AH, 00HINT 1AHCMP DL,BL ;是否累计到1SJNZ DLOOP ;没到,继续读POP DXPOP AX ;//40ENDM;//************************************************************//;功能:;数据定义;//**************************************************************//DA TA SEGMENTTIME_Y DB 2TIME DB 10TIME0 DB 7TIME_G DB 7TIME_R DB 10BUF0 DB 0FHBUF_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,' | ' ;//60TABLE13 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 ' ;//70TABLE23 DB ' ',0B3H,' ',0B3H,' | Tle:1522xxxxxxx 'TABLE24 DB ' ',0B3H,' | ',0B3H,' | Mail:'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 DB'X--G,Y--R:[X] ;X--R,Y--G:[Y]'STRCL DB ' 'STR10 DB ':'FLG DB 0FLG0 DB 0DA TA ENDSCODE SEGMENTASSUME CS:CODE, DS:DA TA,SS:STACK;//***********************************************************//;//80;功能:;主函数;//******************************************************//MAIN PROC FARMOV AX, DATAMOV DS, AXMOV ES, AXFUNCT: MOV AH,01H ;清除光标MOV CX,2000HINT 10HCALL INITIALN1: CALL SHOWTIMECALL GETCHARCMP AL,'C' ;调整时间JNE LOOP1CALL CHANGTIMEJMP FUNCTLOOP1: CMP AL,'D' ;手动/自动控制状态JNELOOP2 ;100CALL DOBYLOOP2: CMP AL,'N' ;夜间模式JNE LOOP3CALL NIGHTLOOP3: CMP AL,'E' ;紧急模式JNE LOOP4CALL EMERGENLOOP4: CMP AL,'Q' ;退出JNE N1ESC: MOV AH,4CH ;//145INT 21H;//****************************************************************//;功能:紧急情况子函数;//*************************************************************//EMERGEN PROC NEAR ;//150MOV TIME,20MOV FLG,1TIMEBUF0 TIME,BUFCALL EMTN0:CALL GETCHARCMP AL,'B' ;紧急控制按钮是否按下JNE TN1JMP FUNCTTN1: CMP AL,'Q' ;退出控制按钮是否按下JNE TN0JMP ESCRET;//130EMERGEN ENDP ;//170;//****************************************************************//;功能:紧急情况界面初始化;//*************************************************************//EM PROC NEAR ;//150SHOWLINE BUF,0,2,0A12H,0004H ;红灯;紧急情况SHOWLINE BUF,0,2,1212H,0004H ;红灯;//120SHOWLINE 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 ;红灯;//160SHOWLINE BUF0,0,1,0E16H,0004H ;红灯SHOWLINE STR8,0,10,1038H,000FH ;SHOWLINE STR6,0,25,122CH,000FH ; ;//160SHOWLINE STR7,0,25,132CH,000FH ;RET;//130EM ENDP ;//170;//*************************************************************//;功能:夜晚模式子函数;//**************************************************************//NIGHT PROC NEARMOV TIME,0TIMEBUF0 TIME,BUFNG2: CALL NIDELAYCALL GETCHARCMP AL,'B' ;夜间控制按钮是否按下JNE NG1JMP FUNCTNG1: CMP AL,'Q'JNE NG2JMP ESCRETNIGHT ENDP;//*************************************************************//;功能:夜晚模式显示界面函数;//**************************************************************//NI PROC NEARSHOWLINE 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,000EHSHOWLINE BUF0,0,1,1013H,000EHSHOWLINE BUF0,0,1,0E0FH,000EHSHOWLINE BUF0,0,1,0E16H,000EHSHOWLINE STR3,0,10,1038H,000FH ;SHOWLINE STR6,0,25,122CH,000FH ; ;//160SHOWLINE STR7,0,25,132CH,000FH ;RETNI ENDP;//**************************************************************//; 功能:手动模式子函数;//************************************************************// DOBY PROC NEAR ;开关子函数MOV FLG,0OP: CALL DOOP4: CALL GETCHAR ;调用输入控制字符CMP AL,'Y' ;手动控制下开JNE OP1MOV FLG,1JMP OPOP1: CMP AL,'X' ;手动控制下关JNE OP2MOV FLG,2JMP OPOP2: CMP AL,'Q'JNE OP3 ;退出JMP ESCOP3: CMP AL,'B'JNE OP4 ;手动/自动控制JMP FUNCTRETDOBY ENDP;//****************************************************//;手动模式显示函数;//****************************************************/DO PROC NEAR ;开关子函数CMP FLG,0JA 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 ,1JNE DO1SHOWLINE 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,0004HSHOWLINE BUF0,0,1,1013H,0004HSHOWLINE BUF0,0,1,0E0FH,0002HSHOWLINE BUF0,0,1,0E16H,0002HJMP DO3DO2: CMP FLG,0JNE DO4SHOWLINE BUF0,0,1,0C12H,000EHSHOWLINE BUF0,0,1,1013H,000EHSHOWLINE BUF0,0,1,0E0FH,000EHSHOWLINE BUF0,0,1,0E16H,000EHJMP DO3DO4: CMP FLG,1JNE DO3SHOWLINE BUF0,0,1,0C12H,0002HSHOWLINE BUF0,0,1,1013H,0002HSHOWLINE BUF0,0,1,0E0FH,0004HSHOWLINE BUF0,0,1,0E16H,0004HDO3: SHOWLINE STR9,0,30,112AH,000FH ;SHOWLINE STR2,0,10,1038H,000FH ;SHOWLINE STR6,0,25,122CH,000FH ; ;//160SHOWLINE STR7,0,25,132CH,000FH ;RETDO ENDP;//**************************************************************************// ;功能:改变时间子函数;//*******************************************************************// CHANGTIME PROC NEARCALL CHANSHOWLINE STR10 ,0,1,113AH,000FHMOV AH,01HINT 21HSUB AL,30H ;将输入时间值转化成MOV BL,10 ;输出十进制值;//156MUL BLMOV TIME_R,ALMOV AH,01HINT 21HSUB AL,30HADD TIME_R,ALSHOWLINE STR10 ,0,1,113FH,000FHMOV AH,01HINT 21HSUB AL,30H ;将输入时间值转化成MOV BL,10 ;输出十进制值;//156DDMUL BLMOV TIME_G,ALMOV AH,01HINT 21HSUB AL,30HADD TIME_G,ALSHOWLINE STR10 ,0,1,1144H,000FHMOV AH,01HINT 21HSUB AL,30H ;将输入时间值转化成MOV BL,10 ;输出十进制值MUL BLMOV TIME_Y,ALMOV AH,01HINT 21HSUB AL,30HADD TIME_Y,ALCH1: CALL GETCHARCMP AL,'Y'JE CH2CMP AL,'N'JNE CH1MOV BL,10MOV TIME_R,BLMOV BL,5MOV TIME_G,BLMOV BL,4MOV TIME_Y,BLCH2:RETCHANGTIME ENDP;//*******************************************************************//;改变时间显示函数;//****************************************************************//CHAN PROC NEARSHOWLINE STR,0,40,1126H,000FHSHOWLINE STR1,0,10,1038H,000FHSHOWLINE TABLE17,0,25,122CH,000FHSHOWLINE 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,000EHSHOWLINE BUF0,0,1,1013H,000EHSHOWLINE BUF0,0,1,0E0FH,000EHSHOWLINE BUF0,0,1,0E16H,000EHRETCHAN ENDP;//***************************************************************************** //; 功能:时钟子程序X方向;//****************************************************************// SHOWTIME PROC NEARXOR AL,ALMOV FLG,ALMOV FLG0,ALXOR AL,ALMOV AL,TIME_RMOV TIME,ALMOV AL,TIME_GMOV TIME0,ALS1: MOV AH,01HINT 16HJNZ S3DELAY ;延时一秒DEC TIMECMP TIME,-1JNE S2 ;不等于-1,显示,否则··CMP FLG,2JE SCMP FLG,1JE S0MOV AL,TIME_GMOV TIME,ALINC FLGJMP S2S0: MOV AL,TIME_YMOV TIME,ALINC FLGJMP S2S: MOV AL,TIME_RMOV TIME,ALMOV FLG,0S2: TIMEBUF0 TIME ,BUF_XCALL OTHERCALL SHOWDJMP S1S3:RETSHOWTIME ENDP;//*******************************************************//;//功能:时钟子程序Y方向;//*****************************************************//OTHER PROC NEARDEC TIME0CMP TIME0,-1JNE S23 ;不等于-1,显示,否则··CMP FLG0,2JE S11CMP FLG0,1JE S10MOV AL,TIME_YMOV TIME0,ALINC FLG0JMP S23S10: MOV AL,TIME_RMOV TIME0,ALINC FLG0JMP S23S11: MOV AL,TIME_GMOV TIME0,ALMOV FLG0,0S23: TIMEBUF0 TIME0 ,BUF_YRETOTHER ENDP;//***************************************************************************// ;功能:显示时钟子程序;//***************************************************//SHOWD PROC NEARCMP FLG,0JNE D0SHOWLINE BUF_X,0,2,0E0CH,0004H ;红灯SHOWLINE BUF_X,0,2,0E18H,0004H ;红灯SHOWLINE BUF0,0,1,0E0FH,0004H ;红灯SHOWLINE BUF0,0,1,0E16H,0004H ;红灯JMP D11D0: CMP FLG,1JNE D1SHOWLINE BUF_X,0,2,0E0CH,0002H ;绿灯SHOWLINE BUF_X,0,2,0E18H,0002H ;绿灯SHOWLINE BUF0,0,1,0E0FH,0002H ;绿灯SHOWLINE BUF0,0,1,0E16H,0002H ;绿灯JMP D11D1: SHOWLINE BUF_X,0,2,0E0CH,000EH ;黄灯SHOWLINE BUF_X,0,2,0E18H,000EH ;黄灯SHOWLINE BUF0,0,1,0E0FH,000EH ;黄灯SHOWLINE BUF0,0,1,0E16H,000EH ;黄灯D11: CMP FLG0,0JNE D2SHOWLINE BUF_Y,0,2,0A12H,0002H ;红灯SHOWLINE BUF_Y,0,2,1212H,0002H ;红灯SHOWLINE BUF0,0,1,0C12H,0002H ;红灯SHOWLINE BUF0,0,1,1013H,0002H ;红灯JMP D4D2: CMP FLG0,1JNE D3SHOWLINE BUF_Y,0,2,0A12H,000EH ;黄灯SHOWLINE BUF_Y,0,2,1212H,000EH ;黄灯SHOWLINE BUF0,0,1,0C12H,000EH ;黄灯SHOWLINE BUF0,0,1,1013H,000EH ;黄灯JMP D4D3: SHOWLINE BUF_Y,0,2,0A12H,0004H ;绿灯SHOWLINE BUF_Y,0,2,1212H,0004H ;绿灯SHOWLINE BUF0,0,1,0C12H,0004H ;绿灯SHOWLINE BUF0,0,1,1013H,0004H ;绿灯D4: RETSHOWD ENDP;//*******************************************************************//;功能:得到字符;//***************************************************************//GETCHAR PROC NEARMOV AH,07HINT 21HRETGETCHAR ENDP;//***************************************************************************// ;功能:实现界面初始化;//***************************************************************************// INITIAL PROC NEAR ;初始化交通路口的显示SHOWLINE TABLE01,0,70,0100H,15SHOWLINE TABLE02,0,70,0200H,15SHOWLINE TABLE03,0,90,0300H,15SHOWLINE TABLE04,0,70,0400H,15SHOWLINE TABLE05,0,70,0500H,15SHOWLINE TABLE06,0,70,0600H,15SHOWLINE TABLE07,0,70,0700H,15SHOWLINE TABLE08,0,70,0800H,15SHOWLINE TABLE09,0,70,0900H,15SHOWLINE TABLE10,0,70,0A00H,15SHOWLINE TABLE11,0,70,0B00H,15SHOWLINE TABLE12,0,70,0C00H,15SHOWLINE TABLE13,0,70,0D00H,15SHOWLINE TABLE14,0,90,0E00H,15SHOWLINE TABLE15,0,70,0F00H,15SHOWLINE TABLE16,0,70,1000H,15SHOWLINE TABLE17,0,90,1100H,15SHOWLINE TABLE18,0,70,1200H,15SHOWLINE TABLE19,0,90,1300H,15SHOWLINE TABLE20,0,80,1400H,15SHOWLINE TABLE21,0,70,1500H,15SHOWLINE TABLE22,0,70,1600H,15SHOWLINE TABLE23,0,70,1700H,15SHOWLINE TABLE24,0,70,1800H,15RETINITIAL ENDP;//************************************************************************// CODE ENDSEND MAIN。

相关主题