PORTEQU 0CFA0H 片选地址CS0
CSEG AT 0000H
LJMP START
CSEG AT 4100H
START: MOVA,#11H 两个红灯亮,黄灯、绿灯灭
ACALL DISP 调用273显示单元(以下雷同)
ACALL DE3S延时3秒
ACALL DISP
ACALL DE10S 延时10秒
MOVA,#10H 东西路口绿灯灭南北路口红灯亮
ACALL DISP
MOVR2,#05H R2中的值为黄灯闪烁次数
TTT:MOVA,#14H 东西路口黄灯亮南北路口红灯亮
ACALL DISP
ACALL DE02S 延时0.2秒
MOVA,#10H 东西路口黄灯灭南北路口红灯亮
ACALL DISP
ACALL DE02S 延时0.2秒
DJNZ R2,TTT 返回TTT,使东西路口黄灯闪烁五次
MOVA,#11H 两个红灯亮,黄灯、绿灯灭
ACALL DISP
ACALL DE02S 延时0.2秒
MOVA,#21H 东西路口红灯亮南北路口绿灯亮
ACALL DISP
ACALL DE10S 延时10秒
MOVA,#01H 东西路口红灯亮南北路口绿灯灭
ACALL DISP
MOVR2,#05H 黄灯闪烁五次
GGG:MOVA,#41H 东西路口红灯亮南北路口黄灯亮
ACALL DISP
ACALL DE02S 延时0.2秒
MOVA,#01H 东西路口红灯亮南北路口黄灯灭
ACALL DISP
ACALL DE02S 延时0.2秒
DJNZ R2,GGG 返回GGG,使南北路口黄灯闪烁五次
MOVA,#03H 两个红灯亮,黄灯、绿灯灭
ACALL DISP
ACALL DE02S 延时0.2秒
JMPLLL 转LLL循环
DE10S: MOVR5,#100 延时10秒
JMPDE1
DE3S: MOVR5,#30 延时3秒
JMPDE1
DE02S: MOVR5,#02 延时0.2秒
DE1:MOVR6,#200
DE2:MOVR7,#126
DE3:DJNZ R7,DE3
DJNZ R6,DE2
DJNZ R5,DE1
RET
DISP: MOVDPTR,#PORT 273显示单元
CPLA
MOVX @DPTR,A
RET
END
你看看行不行 如果不行你自己再稍微改一下吧 反正大概就这些了
希望对你能有所帮助。
// 51单片机控制交通灯要求用汇编语言,仿真实例,可以参考一下
SNF EQU 00H 南北通行标志位
EWF EQU 01H 东西通行标志位
URF EQU 02H 紧急事件标志位
ORG 0000H
LJMP MAIN 上电转主程序
ORG 000BH 定时中断入口
LJMP DSZD
ORG 0003H 紧急中断入口
LJMP URZD
ORG 0030H
MAIN: LCALL INIT 调用初始化子程序
LOOP: LCALL DIS 循环执行显示子程序
AJMP LOOP
*** *** *** 初始化程序
INIT: SETB SNF
SETB EWF
SETB URF
MOV R2,#20 定时器中断20次为1s
MOV TMOD,#01H 初始化定时器
MOV TL0,#0B0H
MOV TH0,#3CH
SETB EA 开定时中断与紧急中断
SETB ET0
SETB TR0
SETB EX0
SETB IT0 设置中断程控方式
MOV DPTR,#TAB 数值首地址放入DPTR中
MOV 40H,#40 东南西北通行时间设置
MOV 41H,#40
MOV 30H,#40 通行时间初始化
MOV 31H,#60
MOV P0,#4CH 初始化时南北通行并把交通灯状态分别放在32H和33H中
MOV 32H,#4CH
MOV P2,#15H
MOV 33H,#15H
RET
*** *** *** 显示子程序
DIS: MOV P3,#0DFH 选中南北方向的十位数码管
MOV A,30H 把显示数据送人数码管显示
MOV B,#10
DIV AB
MOVC A,@A+DPTR
MOV P1,A
LCALL D1MS
MOV P3,#0EFH 选中南北方向的个位数码管
MOV A,B 送入数码管显示
MOVC A,@A+DPTR
MOV P1,A
LCALL D1MS
MOV P3,#7FH 选中第东西方向的十位数码管
MOV A,31H 送入数码管显示
MOV B,#10
DIV AB
MOVC A,@A+DPTR
MOV P1,A
LCALL D1MS
MOV P3,#0BFH 选中第东西方向的个位数码管
MOV A,B
MOVC A,@A+DPTR
MOV P1,A
LCALL D1MS
SETB P3.0
SETB P3.1
JNB P3.0,DIS_S 查询是否第一个按键按下
JNB P3.1,DIS_E 查询是否第二个按键按下
AJMP DIS_R 没有键按下则返回
DIS_S:LCALL D5MS 按键去抖
JNB P3.0,DIS_SN
AJMP DIS_R
DIS_SN:MOV 40H,#50 对通行时间从新分配,南北通行时间加长
MOV 41H,#30
AJMP DIS_R
DIS_E:LCALL D5MS 按键去抖
JNB P3.1,DIS_EW
AJMP DIS_R
DIS_EW:MOV 40H,#30 东西通行时间加长
MOV 41H,#50
DIS_R:RET
*** *** *** 定时中断处理程序
DS_C: LJMP DS_R 接力跳转
DSZD: PUSH ACC 保护现场
PUSH PSW
CLR TR0 关定时器及中断标志位并重新赋值
CLR TF0
MOV TL0,#0B0H
MOV TH0,#3CH
DJNZ R2,DS_C 判断1m时间是否到达
MOV R2,#20 到达重新赋值
DEC 30H 南北方向通行时间减一
MOV A,30H 把减一后的时间送入显示存储单元
*** *** *** 南北通行到达最后4秒时黄灯闪烁
DS_10:CJNE A,#4,DS_11 如果通行时间剩余4秒
JNB SNF,DS_11 判断是否是南北通行
MOV P0,#8AH
MOV 32H, #8AH 把交通灯状态存入存储单元(后面类似)
DS_11:CJNE A,#3,DS_12 不是剩余3秒,返回
JNB SNF,DS_12 不是南北通行时间,返回
MOV P0,#88H
MOV 32H, #88H
DS_12:CJNE A,#2,DS_13
JNB SNF,DS_13
MOV P0,#8AH
MOV 32H, #8AH
DS_13:CJNE A,#1,DS_14
JNB SNF,DS_14
MOV P0,#88H
MOV 32H, #88H
*** *** ***
DS_14:JNZ DS_NE 通行时间没有结束转向改变东西方向的数码管
CPL SNF 如果通行时间结束则对标志位取反
JNB SNF,DS_1 判断是否南北通行
MOV 30H,40H 是,点亮相应的交通灯
MOV P0,#4CH
MOV 32H,#4CH 存储交通灯状态
MOV P2,#15H
MOV 33H, #15H 存储交通灯状态
DS_NE:DEC 31H 东西方向通行时间减一
MOV A,31H 把通行剩余时间送入显示存储单元
*** *** *** 东西方向通行时间剩余4秒钟黄灯闪烁(程序注释与南北方向类似 略)
DS_20:CJNE A,#4,DS_21
JB EWF,DS_21
MOV P0,#51H
MOV 32H, #51H
DS_21:CJNE A,#3,DS_22
JB EWF,DS_22
MOV P0,#41H
MOV 32H, #41H
DS_22:CJNE A,#2,DS_23
JB EWF,DS_23
MOV P0,#51H
MOV 32H, #51H
DS_23:CJNE A,#1,DS_24
JB EWF,DS_24
MOV P0,#41H
MOV 32H, #41H
*** *** ***
DS_24:JNZ DS_R 东西方向时间没有结束,返回
CPL EWF 对通行状态取反
JNB EWF,DS_2 东西方向通行时间到来,跳转
MOV 31H,#80 东西方向通行结束,重新显示时间
MOV P0,#89H 点亮相应的交通灯
MOV 32H, #89H
MOV P2,#29H
MOV 33H, #29H
AJMP DS_R
DS_1: MOV 30H,#80 南北通行时间结束,重新对显示存储单元赋值
MOV P0,#89H 执行转弯状态1
MOV 32H, #89H
MOV P2,#26H
MOV 33H, #26H
AJMP DS_NE
DS_2: MOV 31H,41H 东西方向开始通行,赋值予显示存储单元
MOV P0,#61H 点亮相应的交通灯
MOV 32H, #61H
MOV P2,#15H
MOV 33H, #15H
DS_R: SETB TR0
POP PSW 恢复现场
POP ACC
RETI
*** *** *** 紧急中断处理程序
URZD: PUSH ACC 保护现场
PUSH PSW
CLR IE0 清除中断标志位
CLR TR0 关定时器
CPL URF 紧急事件标志位
JB URF,UR_CON 紧急结束;跳转
MOV P0,#49H 各路口灯全显示红灯亮
MOV P2,#15H
AJMP UR_R
UR_CON:SETB TR0 恢复正常交通
MOV A,32H
MOV P0,A
MOV A,33H
MOV P2,A
UR_R: POP PSW 恢复现场
POP ACC
RETI
*** *** *** 查表指令0,1,2,3,4,5,6,7,8,9
TAB: DB 3FH, 06H, 5BH, 4FH, 66H, 6DH
DB 7DH, 07H, 7FH, 6FH
*** *** *** 延时5ms与1ms
D5MS: MOV R7,#5
D1MS: MOV R7,#10
MOV R6,#50
L1: DJNZ R6,$
DJNZ R7,L1
RET
END
额。。你的要求我做不出来。。不过我这里有一个简单的交通灯。。你可以参考参考 CODE SEGMENTASSUME CS:CODE
DENGPROC FAR
CMP BL,0FHJUDGE BL
JC LIANG
SUB BL,0FH
LIANG: MOV AL,81H
CMP BL,04H
JC GO
MOV AL,41H
CMP BL,07H
JC GO
MOV AL,24H
CMP BL,0CH
JC GO
MOV AL ,22H
GO: MOV DX,292H XIANSHI
OUT DX,AL
RET
DENGENDP
START: MOV DX,283H INIT 8253
MOV AL,00010100B
OUT DX,AL
MOV DX,280H
MOV AL,00H
OUT DX,AL
MOV DX,283H
MOV AL,01010100B
OUT DX,AL
MOV DX,281H
MOV AL,10H
OUT DX,AL OUTPUT 1 SIGNAL PER SECOND
MOV DX,293H INIT 8255A
MOV AL,10010000B
OUT DX,AL
MOV BL,00H SET ONE FIRST
LP: MOV AH,0BH SHUT OFF IF TYPE ANYKEY
INT 21H
CMP AL,0FFH
JZ EXT
MOV DX,290H
IN AL,DX
AND AL,01H
CMP AL,01H HERE IS 1 SECOND SIGNAL
JNZ LP
INC BL
CALL DENG
JMP LP
EXT:MOV AH,4CH
INT 21H
CODEENDS
END START
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)