




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
汇编实现交通灯控制模拟程序设计汇编实现交通灯控制模拟程序设计汇编实现交通灯控制模拟程序设计资料仅供参考文件编号:2022年4月汇编实现交通灯控制模拟程序设计版本号:A修改号:1页次:1.0审核:批准:发布日期:使用方法:使用win-masm运行后,首先输入个任意的两位数表示红灯亮的时间如05或99,然后输入个其他任意字符来作为分隔,接着输入个任意的小于红灯的两位数表示红灯亮的时间如03或98等等来表示黄灯亮的时间,绿灯亮的时间为红灯的时间减去黄灯的时间。输入后开始工作。当输入9时进入手动控制状态,接着可分别输入1,2,3,4,5,6,来点亮各方向的灯,输入a,b,c,d,e,f分别灭各方向灯。输入7时返回自动控制状态。当输入0时,则进入夜间状态,黄灯开始闪烁。当输入8时进入紧急状态,个方向红灯亮起。后两个状态没有做返回到自动控制的功能。STACKSEGMENTSTACK DW64DUP(0)STACKENDSDATASEGMENT STRING0DB13,10,3DUP(9,20H),6DUP(20H),'+',12DUP(20H),'+$' STRING1DB13,10,3DUP(9,20H),'=======***=======$';上面一行 STRING2DB13,10,3DUP(9,20H),6DUP(20H),'*',12DUP(20H),'*$';一个制表等于7个空格 STRING3DB13,10,3DUP(9,20H),'=======******=======$';下面一行 STRTIMEDB13,10,4DUP(9,20H),'TIME:S$';显示时间的格式 STRSHOWDB13,10,2DUP(9,20H),'SHOWTIME:$' STRREDDB13,10,2DUP(9,20H),'REDLIGHT(S),YELLOWLIGHT(S):$' STRBLUEDB13,10,2DUP(9,20H),'BLUELIGHT(S)=REDLIGHT(S)-YELLOWLIGHT(S)$' REDDB35H,30H;红灯亮的时间 BLUEDB33H,30H;绿灯亮的时间 YELLOWDB32H,30H;黄灯亮的时间 SAVEDB35H,30H,,32H,30H;初始红,黄两种灯亮的时间 COLOUR_CHANGEDB01H;COLOUR_CHANGE为1时,表示南北红灯亮。为0表示东西 SAVE_RED_NBDB;南北方向 SAVE_YELLOW_NBDB SAVE_BLUE_NBDB SAVE_RED_DXDB;东西方向 SAVE_YELLOW_DXDB SAVE_BLUE_DXDBDATAENDSCODESEGMENT ASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATA MOVDS,AX MOVBYTEPTRSAVE_RED_NB,04H;红色 MOVBYTEPTRSAVE_YELLOW_NB,07H;白色· MOVBYTEPTRSAVE_BLUE_NB,07H MOVBYTEPTRSAVE_RED_DX,07H MOVBYTEPTRSAVE_YELLOW_DX,0EH;黄色 MOVBYTEPTRSAVE_BLUE_DX,07H MOVSI,OFFSETSTRING0 MOVCX,3ROAD1:CALLSHOW;设置南北方向的道路 LOOPROAD1 MOVSI,OFFSETSTRING1 CALLSHOW MOVSI,OFFSETSTRING2 MOVCX,5NEXT:CALLSHOW LOOPNEXT MOVSI,OFFSETSTRING3 CALLSHOW MOVSI,OFFSETSTRING0 MOVCX,3ROAD2:CALLSHOW;设置南北方向的道路 LOOPROAD2 MOVSI,OFFSETSTRTIME CALLSHOW MOVSI,OFFSETSTRSHOW CALLSHOW MOVSI,OFFSETSTRRED CALLSHOW MOVSI,OFFSETSTRBLUE CALLSHOW CALLNORTH_RED;设置北边的红灯 CALLNORTH_YELLOW;设置北边的黄灯 CALLNORTH_BLUE;设置北边的绿灯 CALLWEST_BLUE;设置西边的绿灯 CALLWEST_YELLOW;设置西边的黄灯 CALLWEST_RED;设置西边的红灯 CALLEAST_RED;设置东边的红灯 CALLEAST_YELLOW;设置东边黄灯 CALLEAST_BLUE;设置东边的绿灯 CALLSOUTH_BLUE;设置南边绿灯 CALLSOUTH_YELLOW;设置南边的黄灯 CALLSOUTH_RED;设置南边的红灯 MOVDH,16 MOVDL,46 MOVAH,02H;设置光标位置 INT10H MOVAH,00H;从键盘读入字符 INT16HMOVAH,09;按当前指定属性显示 MOVBH,0 MOVBL,SAVE_RED_NB;红色 MOVCX,01;字符重复一次 INT10H MOVBYTEPTR[SAVE+1],AL;输入红灯亮时间十位放在高地址MOVCX,0FFFFHDELAY:LOOPDELAY MOVDH,16 MOVDL,47 MOVAH,2;设置光标位置 INT10H MOVAH,00H INT16HMOVAH,09 MOVBH,0 MOVBL,SAVE_RED_NB;红色 MOVCX,01 INT10H MOVBYTEPTR[SAVE],AL;输入红灯点亮时间的个位放在低地址 MOVCX,0FFFFHDELAY1:LOOPDELAY1 MOVDH,16 MOVDL,48 MOVAH,2 INT10H MOVAH,00H INT16HMOVAH,09 MOVBH,0 MOVBL,SAVE_RED_NB;红色 MOVCX,01 INT10H MOVBYTEPTR[SAVE+2],AL;在红黄亮灯时间中间可以输入字符加以区分 MOVCX,0FFFFHDELAY2:LOOPDELAY2 MOVDH,16 MOVDL,49 MOVAH,2 INT10H MOVAH,00H INT16HMOVAH,09 MOVBH,0 MOVBL,SAVE_RED_NB;红色 MOVCX,01;字符重复一次 INT10H MOVBYTEPTR[SAVE+4],AL;输入黄灯点亮时间的十位放在高地址 MOVCX,0FFFFHDELAY3:LOOPDELAY3 MOVDH,16 MOVDL,50 MOVAH,2 INT10H MOVAH,00H INT16HMOVAH,09 MOVBH,0 MOVBL,SAVE_RED_NB;红色 MOVCX,01;字符重复一次 INT10H MOVBYTEPTR[SAVE+3],AL;输入黄灯点亮时间的个位放在低地址 MOVAL,[SAVE] MOVBYTEPTR[RED],AL;将输入红灯点亮的时间送入红灯亮的时间 MOVAL,[SAVE+1] MOVBYTEPTR[RED+1],AL MOVAL,[SAVE+3] MOVBYTEPTR[YELLOW],AL;将黄灯点亮的时间送入红灯亮的时间 MOVAL,[SAVE+4] MOVBYTEPTR[YELLOW+1],AL MOVBYTEPTR[SAVE+3],30H;将输入黄灯点亮时间清零 MOVBYTEPTR[SAVE+4],30HA1: MOVDI,OFFSETRED;红灯亮的时间送DI MOVSI,OFFSETSAVE COUNT: MOVAH,01H;读取键盘状态 INT16H JNZCONTRL;如果有键盘输入,进入手动控制 AUTO: MOVDH,14;如果没有键盘输入,进入自动状态 MOVDL,38 MOVAH,2 INT10H;置光标位置 MOVAH,09;在当前光标处按指定属性显示 MOVAL,[DI+1];将红灯点亮时间高位送AL并显示 MOVBH,0 MOVBL,09H;设置颜色 MOVCX,01 INT10H MOVDH,14;时间的位置 MOVDL,39 MOVAH,2 INT10H MOVAL,[DI];将红灯点亮时间低位送AL并显示 MOVAH,09 INT10H MOVAH,01H;隐藏光标 MOVCX,2000H INT10H PUSHAX PUSHBX PUSHDX PUSHCX MOVAH,00H INT1AH ADD DL,18;18是一秒跳的次数 MOV BL,DLLOP:MOV AH,00H;读取当前DL中的值 INT 1AH CMP DL,BL JNZ LOP;小于一秒,继续计数 INCWORDPTR[SI+3];每过一秒,黄灯亮的时间加1 MOV CX,WORDPTR[SI+3] CMP WORDPTR[YELLOW],CX;将当前黄灯时间与设定黄灯时间比较 JZ BIANLV;若相等,绿灯变绿BACK1: DEC BYTEPTR[DI];倒计时减一 CMP BYTEPTR[DI],30H;红灯时间的个位和0比较 JB CARRY_RED;小于0,转到借位 POPCX POPDX POPBX POPAX JMPCOUNT;读取键盘状态 BIANLV:TESTBYTEPTR[COLOUR_CHANGE],00000001B JZNB_BLUE;为0,表示南北绿灯亮 MOVBYTEPTR[SAVE_BLUE_DX],0AH;为1时,东西方向绿灯亮 MOVBYTEPTR[SAVE_BLUE_NB],07H MOVBYTEPTR[SAVE_YELLOW_DX],07H MOVBYTEPTR[SAVE_YELLOW_NB],07HNEW_BLUE:CALLNORTH_BLUE;设置北边的绿灯 CALLWEST_BLUE;设置西北的绿灯 CALLEAST_BLUE;设置东边的绿灯 CALLSOUTH_BLUE;设置南边的绿灯 CALLNORTH_YELLOW;设置北边的黄灯 CALLWEST_YELLOW;设置西边的黄灯 CALLEAST_YELLOW;设置东边的黄灯 CALLSOUTH_YELLOW;设置南边的黄灯 JMPBACK1 NB_BLUE:MOVBYTEPTR[SAVE_BLUE_NB] ,0AH;南北方向的绿灯置为绿色 MOVBYTEPTR[SAVE_BLUE_DX],07H MOVBYTEPTR[SAVE_YELLOW_NB],07H MOVBYTEPTR[SAVE_YELLOW_DX],07H JMPNEW_BLUECARRY_RED:MOVBYTEPTR[DI],39H;红灯亮的时间个位置9 SUBBYTEPTR[DI+1],1;红灯亮的时间十位减1 CMPBYTEPTR[DI+1],30H;十位和零作比较 JBRESTART;红灯倒计时结束,重新计时 POPCX POPDX POPBX POPAX JMPCOUNT RESTART:MOVCL,[SI];红灯的低位送CL MOVBYTEPTR[DI],CL MOVCL,[SI+1] MOVBYTEPTR[DI+1],CL MOVBYTEPTR[SI+3],30H MOVBYTEPTR[SI+4],30H MOVBYTEPTR[SAVE_BLUE_NB],07H MOVBYTEPTR[SAVE_BLUE_DX],07H XORBYTEPTR[COLOUR_CHANGE],00000001B;对COLOUR_CHANGE最低位取反 TESTBYTEPTR[COLOUR_CHANGE],00000001B JNZNB_RED;为1,南北红灯亮 MOVBYTEPTR[SAVE_RED_NB],07H;南北方向红灯灭 MOVBYTEPTR[SAVE_RED_DX],04H;东西方向红灯亮 MOVBYTEPTR[SAVE_YELLOW_NB],0EH;南北方向黄灯亮 NEW_RED:CALLNORTH_RED;设置北边红灯 CALLWEST_RED;设置西边的红灯 CALLEAST_RED;设置东边红灯 CALLSOUTH_RED;设置南边的红灯 CALLNORTH_YELLOW;设置北边的黄灯 CALLWEST_YELLOW;设置西边的黄灯 CALLEAST_YELLOW;设置东边的黄灯 CALLSOUTH_YELLOW;设置南边的黄灯 CALLNORTH_BLUE;设置北边的绿灯 CALLWEST_BLUE;设置西边的绿灯 CALLEAST_BLUE;设置东边的绿灯 CALLSOUTH_BLUE;设置南边的绿灯 POPCX POPDX POPBX POPAXJMPCOUNTNB_RED:MOVBYTEPTR[SAVE_RED_NB],04H;南北方向红灯亮 MOVBYTEPTR[SAVE_RED_DX],07H;东西方向红灯灭 MOVBYTEPTR[SAVE_YELLOW_DX],0EH;东西方向黄灯亮 JMPNEW_REDCONTRL: CMPAL,39H;判断输入的是否为9,是则进入手动控制 JZHAND_CONTRL CMPAL,30H;判断是否为0,是则进入夜间状态 JZNIGHT CMPAL,38H;判断是否为8,是则进入紧急状态 JZUNFAIR JMPAUTOHAND_CONTRL: MOVCX,0FFFFH DELAYTIME:LOOPDELAYTIME MOVCX,0FFFFH DELAYTIME1:LOOPDELAYTIME1 MOVCX,0FFFFH DELAYTIME2:LOOPDELAYTIME2 MOVAH,00H;从键盘上读入字符 INT16H CMPAL,37H JZAUTO;输入字符7时,跳转到自动模式 CMPAL,31H;输入字符1时,东西方向红灯亮 JZDX_RL CMPAL,61H;输入小写a时,东西方向红灯灭 JZDX_RM CMPAL,32H;输入字符2时,东西方向黄灯亮 JZDX_YL CMPAL,62H;输入小写b时,东西方向黄灯灭 JZDX_YM CMPAL,33H;输入字符3时,东西方向绿灯亮 JZDX_BL CMPAL,63H;输入小写c时,东西方向绿灯灭 JZDX_BM CMPAL,34H;输入字符4时,南北方向红灯亮 JZNB_RL CMPAL,64H;输入小写d时,南北方向红灯灭 JZNB_RM CMPAL,35H;输入字符5时,南北方向黄灯亮 JZNB_YL CMPAL,65H;输入小写e时,南北方向黄灯灭 JZNB_YM CMPAL,36H;输入字符6时,南北方向绿灯亮 JZNB_BL CMPAL,66H;输入小写f时,南北方向绿灯灭 JZNB_BM MOVAH,01H;隐藏光标 MOVCX,2000H INT10H JMPHAND_CONTRLDX_RL: MOVBYTEPTRSAVE_RED_DX,04H;东西方向红灯亮 JMPSHOW_DX_REDDX_RM: MOVBYTEPTRSAVE_RED_DX,07H;东西方向红灯灭SHOW_DX_RED: CALLWEST_RED;设置西边的红灯 CALLEAST_RED;设置东边的红灯 MOVAH,01H;隐藏光标 MOVCX,2000H INT10H JMPHAND_CONTRL DX_YL: MOVBYTEPTRSAVE_YELLOW_DX,0EH JMPSHOW_DX_YELLOWDX_YM: MOVBYTEPTRSAVE_YELLOW_DX,07HSHOW_DX_YELLOW: CALLWEST_YELLOW;设置西边的黄灯 CALLEAST_YELLOW;设置东边的黄灯 MOVAH,01H;隐藏光标 MOVCX,2000H INT10H JMPHAND_CONTRL DX_BL: MOVBYTEPTRSAVE_BLUE_DX,0AH JMPSHOW_DX_BLUEDX_BM: MOVBYTEPTRSAVE_BLUE_DX,07HSHOW_DX_BLUE: CALLWEST_BLUE;设置西边的绿灯 CALLEAST_BLUE;设置东边的绿灯 MOVAH,01H;隐藏光标 MOVCX,2000H INT10H JMPHAND_CONTRL NB_RL: MOVBYTEPTRSAVE_RED_NB,04H JMPSHOW_NB_REDNB_RM: MOVBYTEPTRSAVE_RED_NB,07HSHOW_NB_RED: CALLNORTH_RED;设置北边的红灯 CALLSOUTH_RED;设置南边的红灯 MOVAH,01H;隐藏光标 MOVCX,2000H INT10H JMPHAND_CONTRL NB_YL: MOVBYTEPTRSAVE_YELLOW_NB,0EH JMPSHOW_NB_YELLOWNB_YM: MOVBYTEPTRSAVE_YELLOW_NB,07HSHOW_NB_YELLOW: CALLNORTH_YELLOW;设置北边的黄灯 CALLSOUTH_YELLOW;设置南边的黄灯 MOVAH,01H;隐藏光标 MOVCX,2000H INT10H JMPHAND_CONTRL NB_BL: MOVBYTEPTRSAVE_BLUE_NB,0AH JMPSHOW_NB_BLUENB_BM: MOVBYTEPTRSAVE_BLUE_NB,07HSHOW_NB_BLUE: CALLNORTH_BLUE;设置北边的绿灯 CALLSOUTH_BLUE;设置南边的绿灯 MOVAH,01H;隐藏光标 MOVCX,2000H INT10H JMPHAND_CONTRLNIGHT:MOVBYTEPTRSAVE_BLUE_NB,07H;将所有灯熄灭 MOVBYTEPTRSAVE_BLUE_DX,07H MOVBYTEPTRSAVE_YELLOW_DX,07H MOVBYTEPTRSAVE_YELLOW_NB,07H MOVBYTEPTRSAVE_RED_NB,07H MOVBYTEPTRSAVE_RED_DX,07H CALLNORTH_RED;设置北边的红灯 CALLNORTH_BLUE;设置北边的绿灯 CALLWEST_BLUE;设置西边的绿灯 CALLWEST_RED;设置西边的红灯 CALLEAST_RED;设置东边的红灯 CALLEAST_BLUE;设置东边的绿灯 CALLSOUTH_BLUE;设置南边的绿灯 CALLSOUTH_RED;设置南边的红灯 SHANSUO: CALLNORTH_YELLOW;设置北边的黄灯 CALLWEST_YELLOW;设置西边的黄灯 CALLEAST_YELLOW;设置东边的黄灯 CALLSOUTH_YELLOW;设置南边的黄灯 XORBYTEPTRCOLOUR_CHANGE,00000001B;对COLOUR_CHANGE最低位取反 TESTBYTEPTRCOLOUR_CHANGE,00000001B JZLIANG MOVBYTEPTRSAVE_YELLOW_DX,07H MOVBYTEPTRSAVE_YELLOW_NB,07HYANSHI: MOVCX,0FFFFH DELAYTIME5:LOOPDELAYTIME5 MOVCX,0FFFFH DELAYTIME6:LOOPDELAYTIME6 MOVCX,0FFFFH DELAYTIME7:LOOPDELAYTIME7 MOVAH,01H;隐藏光标 MOVCX,2000H INT10H JMPSHANSUOLIANG: MOVBYTEPTRSAVE_YELLOW_DX,0EH MOVBYTEPTRSAVE_YELLOW_NB,0EH JMPYANSHIUNFAIR: DELAY8:LOOPDELAY8 MOVCX,0FFFFH MOVAX,03H;检查鼠标左键是否按下 INT33H TESTBX,0000000000000001B;不为零表示按下了鼠标左键 JNZAUTO MOVBYTEPTRSAVE_RED_NB,04H;南北方向红灯亮 MOVBYTEPTRSAVE_RED_DX,04H;东西方向红灯亮 MOVBYTEPTRSAVE_BLUE_NB,07H MOVBYTEPTRSAVE_BLUE_DX,07H MOVBYTEPTRSAVE_YELLOW_DX,07H MOVBYTEPTRSAVE_YELLOW_NB,07H CALLNORTH_RED;设置北边的红灯 CALLNORTH_BLUE;设置北边的绿灯 CALLWEST_BLUE;设置西边的绿灯 CALLWEST_RED;设置西边的红灯 CALLEAST_RED;设置东边的红灯 CALLEAST_BLUE;设置东边的绿灯 CALLSOUTH_BLUE;设置南边的绿灯 CALLSOUTH_RED;设置南边的红灯 CALLNORTH_YELLOW;设置北边的黄灯 CALLWEST_YELLOW;设置西边的黄灯 CALLEAST_YELLOW;设置东边的黄灯 CALLSOUTH_YELLOW;设置南边的黄灯 MOVAH,01H;隐藏光标 MOVCX,2000H INT10H JMPUNFAIR MOVAH,4CH;不带返回码结束 INT21HSOUTH_REDPROC MOVDH,10;设置南边的红灯 MOVDL,37 MOVAH,2 INT10H;置光标位置 MOVAH,09 MOVAL,2AH MOVBH,0 MOVBL,SAVE_RED_NB MOVCX,01 INT10H RETSOUTH_REDENDP SOUTH_YELLOWPROC MOVDH,10;设置南边的黄灯 MOVDL,35 MOVAH,2 INT10H;置光标位置 MOVAH,09 MOVAL,2AH MOVBH,0;显示页 MOVBL,SAVE_YELLOW_NB MOVCX,01;字符重复一次 INT10H RETSOUTH_YELLOWENDP SOUTH_BLUEPROC MOVDH,10;设置南边的绿灯 MOVDL,33 MOVAH,2 INT10H;置光标位置 MOVAH,09 MOVAL,2AH MOVBH,0 MOVBL,SAVE_BLUE_NB MOVCX,01 INT10H RETSOUTH_BLUEENDP EAST_BLUEPROC MOVDH,9;设置东边的绿灯 MOVDL,44 MOVAH,2 INT10H;置光标位置 MOVAH,09 MOVAL,2AH MOVBH,0 MOVBL,SAVE_BLUE_DX MOVCX,01 INT10H RETEAST_BLUEENDP EAST_YELLOWPROC MOVDH,8;设置东边的黄灯 MOVDL,44 MOVAH,2 INT10H;置光标位置 MOVAH,09 MOVAL,2AH MOVBH,0 MOVBL,SAVE_YELLOW_DX MOVCX,01;字符重复一次 INT10H RETEAST_YELLOWENDP EAST_REDPROC MOVDH,7;设置东边的红灯
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 演出经纪人资格证复习最强策略及试题及答案
- 物理会考易考题及答案
- 吉林省长春市绿园区2024年毕业升学考试模拟卷数学卷含解析
- 《爱自己本来的样子》读后感
- 西藏英语口试题库及答案
- 设备法律法规试题及答案
- 焦作新材料职业学院《环境科学前沿》2023-2024学年第二学期期末试卷
- 石家庄财经职业学院《电电子基础训练》2023-2024学年第二学期期末试卷
- 新疆警察学院《土木工程施工与实务》2023-2024学年第二学期期末试卷
- 青海省西宁市2024-2025学年高三考试历史试题分类汇编含解析
- 思政课课题国内外研究现状
- 泌尿外科管道护理规范
- GB/T 2820.9-2024往复式内燃机驱动的交流发电机组第9部分:机械振动的测量和评价
- 设计伦理和责任
- 第二课+让美德照亮幸福人生(课时2)(课件)-【中职专用】中职思想政治《职业道德与法治》高效课堂课件+教案(高教版2023·基础模块)
- 射频消融治疗腰椎间盘突出
- 中国移动赋能国有企业数字化转型白皮书
- 《河道管理范围内建设项目防洪评价技术规程》
- 第八单元写作指导 统编版高中语文必修下册
- QC/T 629-2021 汽车遮阳板-PDF解密
- 儿童外科微创手术介绍
评论
0/150
提交评论