汇编实现交通灯控制模拟程序设计_第1页
汇编实现交通灯控制模拟程序设计_第2页
汇编实现交通灯控制模拟程序设计_第3页
汇编实现交通灯控制模拟程序设计_第4页
汇编实现交通灯控制模拟程序设计_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

1、使用方法:使用win-masm运行后,首先输入个任意的两位数表示红灯亮的时间如05或99,然后输入个其他任意字符来作为分隔,接着输入个任意的小于红灯的两位数表示红灯亮的时间如03或98等等来表示黄灯亮的时间,绿灯亮的时间为红灯的时间减去黄灯的时间。输入后开始工作。 当输入9时进入手动控制状态,接着可分别输入1,2,3,4,5,6,来点亮各方向的灯,输入a,b,c,d,e,f分别灭各方向灯。输入7时返回自动控制状态。当输入0时,则进入夜间状态,黄灯开始闪烁。当输入8时进入紧急状态,个方向红灯亮起。后两个状态没有做返回到自动控制的功能。STACK SEGMENT STACKDW 64 DUP(0)

2、STACK ENDS DATA SEGMENTSTRING0 DB 13,10,3 DUP(9,20H),6 DUP(20H),+,12 DUP(20H),+$STRING1 DB 13,10,3 DUP(9,20H),= * =$ ;上面一行STRING2 DB 13,10,3 DUP(9,20H),6 DUP(20H),*,12 DUP(20H),*$;一个制表等于7个空格STRING3 DB 13,10,3 DUP(9,20H),= * * * * =$ ;下面一行STRTIME DB 13,10,4 DUP(9,20H),TIME: S$;显示时间的格式STRSHOW DB 13,10

3、,2 DUP(9,20H),SHOW TIME:$STRRED DB 13,10,2 DUP(9,20H),RED LIGHT(S),YELLOW LIGHT(S):$STRBLUE DB 13,10,2 DUP(9,20H),BLUE LIGHT(S)=RED LIGHT(S)-YELLOW LIGHT(S)$RED DB 35H,30H ;红灯亮的时间BLUE DB 33H,30H ;绿灯亮的时间YELLOW DB 32H,30H ;黄灯亮的时间SAVE DB 35H,30H,?,32H,30H ;初始红,黄两种灯亮的时间COLOUR_CHANGE DB 01H;COLOUR_CHANGE

4、为1时,表示南北红灯亮。为0表示东西SAVE_RED_NB DB ? ;南北方向SAVE_YELLOW_NB DB ?SAVE_BLUE_NB DB ?SAVE_RED_DX DB ? ;东西方向SAVE_YELLOW_DX DB ?SAVE_BLUE_DX DB ?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK START:MOV AX,DATA MOV DS,AXMOV BYTE PTR SAVE_RED_NB,04H;红色MOV BYTE PTR SAVE_YELLOW_NB,07H;白色MOV BYTE PTR SAVE_BL

5、UE_NB,07HMOV BYTE PTR SAVE_RED_DX,07HMOV BYTE PTR SAVE_YELLOW_DX,0EH;黄色MOV BYTE PTR SAVE_BLUE_DX,07HMOV SI,OFFSET STRING0 MOV CX,3 ROAD1:CALL SHOW ;设置南北方向的道路LOOP ROAD1 MOV SI,OFFSET STRING1 CALL SHOW MOV SI,OFFSET STRING2 MOV CX,5 NEXT:CALL SHOW LOOP NEXT MOV SI,OFFSET STRING3CALL SHOWMOV SI,OFFSET

6、STRING0 MOV CX,3 ROAD2:CALL SHOW ;设置南北方向的道路LOOP ROAD2MOV SI,OFFSET STRTIMECALL SHOWMOV SI,OFFSET STRSHOWCALL SHOWMOV SI,OFFSET STRREDCALL SHOWMOV SI,OFFSET STRBLUECALL SHOWCALL NORTH_RED ;设置北边的红灯CALL NORTH_YELLOW;设置北边的黄灯CALL NORTH_BLUE;设置北边的绿灯CALL WEST_BLUE;设置西边的绿灯CALL WEST_YELLOW;设置西边的黄灯CALL WEST_R

7、ED;设置西边的红灯CALL EAST_RED;设置东边的红灯CALL EAST_YELLOW;设置东边黄灯CALL EAST_BLUE;设置东边的绿灯CALL SOUTH_BLUE;设置南边绿灯CALL SOUTH_YELLOW;设置南边的黄灯CALL SOUTH_RED;设置南边的红灯MOV DH,16MOV DL,46MOV AH,02H;设置光标位置INT 10HMOV AH,00H;从键盘读入字符INT 16H MOV AH,09 ;按当前指定属性显示MOV BH,0 MOV BL,SAVE_RED_NB;红色MOV CX,01 ;字符重复一次INT 10HMOV BYTE PTR

8、SAVE+1,AL;输入红灯亮时间十位放在高地址 MOV CX,0FFFFH DELAY:LOOP DELAYMOV DH,16MOV DL,47MOV AH,2;设置光标位置INT 10HMOV AH,00HINT 16H MOV AH,09 MOV BH,0 MOV BL,SAVE_RED_NB;红色MOV CX,01INT 10HMOV BYTE PTR SAVE,AL;输入红灯点亮时间的个位放在低地址MOV CX,0FFFFH DELAY1:LOOP DELAY1MOV DH,16MOV DL,48MOV AH,2INT 10HMOV AH,00HINT 16H MOV AH,09 M

9、OV BH,0 MOV BL,SAVE_RED_NB;红色MOV CX,01 INT 10HMOV BYTE PTR SAVE+2,AL;在红黄亮灯时间中间可以输入字符加以区分 MOV CX,0FFFFH DELAY2:LOOP DELAY2MOV DH,16MOV DL,49MOV AH,2INT 10HMOV AH,00HINT 16H MOV AH,09 MOV BH,0 MOV BL,SAVE_RED_NB;红色MOV CX,01 ;字符重复一次INT 10HMOV BYTE PTR SAVE+4,AL;输入黄灯点亮时间的十位放在高地址MOV CX,0FFFFH DELAY3:LOOP

10、 DELAY3MOV DH,16MOV DL,50MOV AH,2INT 10HMOV AH,00HINT 16H MOV AH,09 MOV BH,0 MOV BL,SAVE_RED_NB;红色MOV CX,01 ;字符重复一次INT 10HMOV BYTE PTR SAVE+3,AL;输入黄灯点亮时间的个位放在低地址MOV AL,SAVEMOV BYTE PTR RED,AL;将输入红灯点亮的时间送入红灯亮的时间 MOV AL,SAVE+1MOV BYTE PTR RED+1,ALMOV AL,SAVE+3MOV BYTE PTRYELLOW,AL;将黄灯点亮的时间送入红灯亮的时间MOV

11、AL,SAVE+4MOV BYTE PTR YELLOW+1,ALMOV BYTE PTR SAVE+3,30H;将输入黄灯点亮时间清零MOV BYTE PTR SAVE+4,30HA1:MOV DI,OFFSET RED;红灯亮的时间送DIMOV SI,OFFSET SAVECOUNT:MOV AH,01H;读取键盘状态INT 16HJNZ CONTRL ;如果有键盘输入,进入手动控制AUTO:MOV DH,14;如果没有键盘输入,进入自动状态MOV DL,38MOV AH,2INT 10H ;置光标位置MOV AH,09 ;在当前光标处按指定属性显示MOV AL,DI+1;将红灯点亮时间高

12、位送AL并显示MOV BH,0 MOV BL,09H ;设置颜色MOV CX,01 INT 10HMOV DH,14;时间的位置MOV DL,39MOV AH,2INT 10H MOV AL,DI;将红灯点亮时间低位送AL并显示MOV AH,09 INT 10HMOV AH,01H ;隐藏光标MOV CX,2000HINT 10HPUSH AXPUSH BXPUSH DXPUSH CXMOV AH,00HINT 1AHADDDL,18;18是一秒跳的次数MOVBL,DLLOP: MOVAH,00H;读取当前DL中的值INT1AHCMPDL,BLJNZLOP;小于一秒,继续计数INC WORD

13、PTRSI+3;每过一秒,黄灯亮的时间加1MOVCX,WORD PTRSI+3CMPWORD PTRYELLOW,CX;将当前黄灯时间与设定黄灯时间比较JZBIANLV;若相等,绿灯变绿BACK1:DECBYTE PTRDI;倒计时减一CMP BYTE PTRDI, 30H ;红灯时间的个位和0比较JBCARRY_RED;小于0,转到借位POP CXPOP DXPOP BXPOP AXJMP COUNT;读取键盘状态BIANLV:TEST BYTE PTRCOLOUR_CHANGE,00000001BJZ NB_BLUE;为0,表示南北绿灯亮MOV BYTE PTR SAVE_BLUE_DX,

14、0AH;为1时,东西方向绿灯亮MOV BYTE PTR SAVE_BLUE_NB,07HMOV BYTE PTR SAVE_YELLOW_DX,07HMOV BYTE PTR SAVE_YELLOW_NB,07HNEW_BLUE:CALL NORTH_BLUE;设置北边的绿灯CALL WEST_BLUE;设置西北的绿灯CALL EAST_BLUE;设置东边的绿灯CALL SOUTH_BLUE;设置南边的绿灯CALL NORTH_YELLOW;设置北边的黄灯CALL WEST_YELLOW;设置西边的黄灯CALL EAST_YELLOW;设置东边的黄灯CALL SOUTH_YELLOW;设置南边

15、的黄灯JMP BACK1NB_BLUE:MOV BYTE PTR SAVE_BLUE_NB,0AH;南北方向的绿灯置为绿色MOV BYTE PTR SAVE_BLUE_DX,07HMOV BYTE PTR SAVE_YELLOW_NB,07HMOV BYTE PTR SAVE_YELLOW_DX,07HJMP NEW_BLUECARRY_RED: MOV BYTE PTRDI,39H;红灯亮的时间个位置9SUB BYTE PTRDI+1,1;红灯亮的时间十位减1CMP BYTE PTRDI+1,30H;十位和零作比较JB RESTART;红灯倒计时结束,重新计时POP CXPOP DXPOP

16、BXPOP AXJMP COUNTRESTART:MOV CL,SI;红灯的低位送CLMOV BYTE PTRDI,CLMOV CL,SI+1MOV BYTE PTRDI+1,CLMOV BYTE PTRSI+3,30HMOV BYTE PTRSI+4,30HMOV BYTE PTR SAVE_BLUE_NB,07HMOV BYTE PTR SAVE_BLUE_DX,07HXOR BYTE PTRCOLOUR_CHANGE,00000001B ;对COLOUR_CHANGE最低位取反TEST BYTE PTRCOLOUR_CHANGE,00000001BJNZ NB_RED;为1,南北红灯亮M

17、OV BYTE PTR SAVE_RED_NB,07H ;南北方向红灯灭MOV BYTE PTR SAVE_RED_DX,04H ;东西方向红灯亮MOV BYTE PTR SAVE_YELLOW_NB,0EH;南北方向黄灯亮NEW_RED:CALL NORTH_RED;设置北边红灯CALL WEST_RED;设置西边的红灯CALL EAST_RED;设置东边红灯CALL SOUTH_RED;设置南边的红灯CALL NORTH_YELLOW;设置北边的黄灯CALL WEST_YELLOW;设置西边的黄灯CALL EAST_YELLOW;设置东边的黄灯CALL SOUTH_YELLOW;设置南边的

18、黄灯CALL NORTH_BLUE;设置北边的绿灯CALL WEST_BLUE;设置西边的绿灯CALL EAST_BLUE;设置东边的绿灯CALL SOUTH_BLUE;设置南边的绿灯POP CXPOP DXPOP BXPOP AX JMP COUNTNB_RED: MOV BYTE PTR SAVE_RED_NB,04H ;南北方向红灯亮MOV BYTE PTR SAVE_RED_DX,07H ;东西方向红灯灭MOV BYTE PTR SAVE_YELLOW_DX,0EH;东西方向黄灯亮JMP NEW_REDCONTRL: CMP AL,39H;判断输入的是否为9,是则进入手动控制JZ HA

19、ND_CONTRLCMP AL,30H;判断是否为0,是则进入夜间状态JZ NIGHTCMP AL,38H;判断是否为8,是则进入紧急状态JZ UNFAIRJMP AUTOHAND_CONTRL:MOV CX,0FFFFHDELAYTIME:LOOP DELAYTIMEMOV CX,0FFFFHDELAYTIME1:LOOP DELAYTIME1MOV CX,0FFFFHDELAYTIME2:LOOP DELAYTIME2MOV AH,00H;从键盘上读入字符INT 16H CMP AL,37HJZ AUTO ;输入字符7时,跳转到自动模式CMP AL,31H;输入字符1时,东西方向红灯亮JZ

20、 DX_RLCMP AL,61H;输入小写a时,东西方向红灯灭JZ DX_RMCMP AL,32H;输入字符2时,东西方向黄灯亮JZ DX_YLCMP AL,62H;输入小写b时,东西方向黄灯灭JZ DX_YMCMP AL,33H;输入字符3时,东西方向绿灯亮JZ DX_BLCMP AL,63H;输入小写c时,东西方向绿灯灭JZ DX_BMCMP AL,34H;输入字符4时,南北方向红灯亮JZ NB_RLCMP AL,64H;输入小写d时,南北方向红灯灭JZ NB_RMCMP AL,35H;输入字符5时,南北方向黄灯亮JZ NB_YLCMP AL,65H;输入小写e时,南北方向黄灯灭JZ NB

21、_YMCMP AL,36H;输入字符6时,南北方向绿灯亮JZ NB_BLCMP AL,66H;输入小写f时,南北方向绿灯灭JZ NB_BMMOV AH,01H ;隐藏光标MOV CX,2000HINT 10HJMP HAND_CONTRLDX_RL:MOV BYTE PTR SAVE_RED_DX,04H ;东西方向红灯亮JMP SHOW_DX_REDDX_RM:MOV BYTE PTR SAVE_RED_DX,07H ;东西方向红灯灭SHOW_DX_RED:CALL WEST_RED;设置西边的红灯CALL EAST_RED;设置东边的红灯MOV AH,01H ;隐藏光标MOV CX,200

22、0HINT 10HJMP HAND_CONTRLDX_YL: MOV BYTE PTR SAVE_YELLOW_DX,0EHJMP SHOW_DX_YELLOWDX_YM:MOV BYTE PTR SAVE_YELLOW_DX,07HSHOW_DX_YELLOW:CALL WEST_YELLOW;设置西边的黄灯CALL EAST_YELLOW;设置东边的黄灯MOV AH,01H ;隐藏光标MOV CX,2000HINT 10HJMP HAND_CONTRLDX_BL: MOV BYTE PTR SAVE_BLUE_DX,0AHJMP SHOW_DX_BLUEDX_BM: MOV BYTE PT

23、R SAVE_BLUE_DX,07HSHOW_DX_BLUE:CALL WEST_BLUE;设置西边的绿灯CALL EAST_BLUE;设置东边的绿灯MOV AH,01H ;隐藏光标MOV CX,2000HINT 10HJMP HAND_CONTRLNB_RL: MOV BYTE PTR SAVE_RED_NB,04HJMP SHOW_NB_REDNB_RM: MOV BYTE PTR SAVE_RED_NB,07HSHOW_NB_RED:CALL NORTH_RED;设置北边的红灯CALL SOUTH_RED;设置南边的红灯MOV AH,01H ;隐藏光标MOV CX,2000HINT 10

24、HJMP HAND_CONTRLNB_YL: MOV BYTE PTR SAVE_YELLOW_NB,0EHJMP SHOW_NB_YELLOWNB_YM:MOV BYTE PTR SAVE_YELLOW_NB,07HSHOW_NB_YELLOW:CALL NORTH_YELLOW;设置北边的黄灯CALL SOUTH_YELLOW;设置南边的黄灯MOV AH,01H ;隐藏光标MOV CX,2000HINT 10HJMP HAND_CONTRLNB_BL: MOV BYTE PTR SAVE_BLUE_NB,0AHJMP SHOW_NB_BLUENB_BM:MOV BYTE PTR SAVE_

25、BLUE_NB,07HSHOW_NB_BLUE:CALL NORTH_BLUE;设置北边的绿灯CALL SOUTH_BLUE;设置南边的绿灯MOV AH,01H ;隐藏光标MOV CX,2000HINT 10HJMP HAND_CONTRLNIGHT: MOV BYTE PTR SAVE_BLUE_NB,07H;将所有灯熄灭MOV BYTE PTR SAVE_BLUE_DX,07HMOV BYTE PTR SAVE_YELLOW_DX,07HMOV BYTE PTR SAVE_YELLOW_NB,07HMOV BYTE PTR SAVE_RED_NB,07HMOV BYTE PTR SAVE_

26、RED_DX,07H CALL NORTH_RED;设置北边的红灯CALL NORTH_BLUE;设置北边的绿灯CALL WEST_BLUE;设置西边的绿灯CALL WEST_RED;设置西边的红灯CALL EAST_RED;设置东边的红灯CALL EAST_BLUE;设置东边的绿灯CALL SOUTH_BLUE;设置南边的绿灯CALL SOUTH_RED;设置南边的红灯SHANSUO:CALL NORTH_YELLOW;设置北边的黄灯CALL WEST_YELLOW;设置西边的黄灯CALL EAST_YELLOW;设置东边的黄灯CALL SOUTH_YELLOW;设置南边的黄灯XOR BYT

27、E PTR COLOUR_CHANGE,00000001B ;对COLOUR_CHANGE最低位取反TEST BYTE PTR COLOUR_CHANGE,00000001BJZ LIANGMOV BYTE PTR SAVE_YELLOW_DX,07HMOV BYTE PTR SAVE_YELLOW_NB,07HYANSHI:MOV CX,0FFFFHDELAYTIME5:LOOP DELAYTIME5MOV CX,0FFFFHDELAYTIME6:LOOP DELAYTIME6MOV CX,0FFFFHDELAYTIME7:LOOP DELAYTIME7MOV AH,01H ;隐藏光标MOV

28、 CX,2000HINT 10HJMP SHANSUOLIANG: MOV BYTE PTR SAVE_YELLOW_DX,0EHMOV BYTE PTR SAVE_YELLOW_NB,0EHJMP YANSHIUNFAIR:DELAY8:LOOP DELAY8MOV CX,0FFFFHMOV AX,03H ;检查鼠标左键是否按下INT 33HTEST BX,00001B;不为零表示按下了鼠标左键JNZ AUTOMOV BYTE PTR SAVE_RED_NB,04H;南北方向红灯亮MOV BYTE PTR SAVE_RED_DX,04H;东西方向红灯亮 MOV BYTE PTR SAVE_B

29、LUE_NB,07HMOV BYTE PTR SAVE_BLUE_DX,07HMOV BYTE PTR SAVE_YELLOW_DX,07HMOV BYTE PTR SAVE_YELLOW_NB,07HCALL NORTH_RED;设置北边的红灯CALL NORTH_BLUE;设置北边的绿灯CALL WEST_BLUE;设置西边的绿灯CALL WEST_RED;设置西边的红灯CALL EAST_RED;设置东边的红灯CALL EAST_BLUE;设置东边的绿灯CALL SOUTH_BLUE;设置南边的绿灯CALL SOUTH_RED;设置南边的红灯CALL NORTH_YELLOW;设置北边的

30、黄灯CALL WEST_YELLOW;设置西边的黄灯CALL EAST_YELLOW;设置东边的黄灯CALL SOUTH_YELLOW;设置南边的黄灯MOV AH,01H ;隐藏光标MOV CX,2000HINT 10HJMP UNFAIR MOV AH,4CH ;不带返回码结束 INT 21HSOUTH_RED PROCMOV DH,10;设置南边的红灯MOV DL,37MOV AH,2INT 10H ;置光标位置MOV AH,09 MOV AL,2AHMOV BH,0 MOV BL,SAVE_RED_NBMOV CX,01 INT 10HRETSOUTH_RED ENDPSOUTH_YEL

31、LOW PROCMOV DH,10;设置南边的黄灯MOV DL,35MOV AH,2INT 10H ;置光标位置MOV AH,09 MOV AL,2AHMOV BH,0 ;显示页MOV BL,SAVE_YELLOW_NBMOV CX,01 ;字符重复一次INT 10HRETSOUTH_YELLOW ENDPSOUTH_BLUE PROCMOV DH,10;设置南边的绿灯MOV DL,33MOV AH,2INT 10H ;置光标位置MOV AH,09 MOV AL,2AHMOV BH,0 MOV BL,SAVE_BLUE_NBMOV CX,01 INT 10HRETSOUTH_BLUE ENDP

32、EAST_BLUE PROCMOV DH,9; 设置东边的绿灯MOV DL,44MOV AH,2INT 10H ;置光标位置MOV AH,09 MOV AL,2AHMOV BH,0 MOV BL,SAVE_BLUE_DXMOV CX,01 INT 10HRETEAST_BLUE ENDPEAST_YELLOW PROCMOV DH,8;设置东边的黄灯MOV DL,44MOV AH,2INT 10H ;置光标位置MOV AH,09 MOV AL,2AHMOV BH,0 MOV BL,SAVE_YELLOW_DXMOV CX,01 ;字符重复一次INT 10HRETEAST_YELLOW ENDPEAST_RED PROCMOV DH,7;设置东边的红灯MOV

温馨提示

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

评论

0/150

提交评论