文档库 最新最全的文档下载
当前位置:文档库 › ORG 0000H

ORG 0000H

ORG 0000H
ORG 0000H

ORG 0000H

MOV P0,#00H ;确保P0为低电位

lJMP MAIN0

ORG 0030H

MAIN0: MOV 30H,#08H

MOV R6,#00H

MOV R7,#00H

MOV DPTR,#TABLE ;取数码管的译码

MOV TMOD,#01H ;设计定时方式为定时器0的方式1;MOV TL0,#0CDH ;定时时间为125ms

MOV TH0,#0BH

SETB TR0 ;启动定时器

SETB EA ;开总中断

SETB EX0 ;允许外部中断0

SETB EX1

CLR IT0

MAIN: MOV P0,#0F3H ;南北绿灯,东西红灯

MOV R6,#1EH ;红灯30s倒计时

MOV R7,#19H ;绿灯25s倒计时

MAIN1: CALL DELAY ; 1S延时子程序

CJNE R7,#00H,MAIN1 ;判断绿灯25s是否倒计完

MOV P0,#0F5H ;南北黄灯,东西红灯

MAIN2: CALL DELAY

MOV R7,#00H ;红灯继续倒计时,黄灯闪烁

CPL P0.1 ;黄灯闪烁

CJNE R6,#00H,MAIN2 ;判断红灯是否倒计时完

MOV P0,#0DEH ;南北红灯,东西绿灯

MOV R7,#1EH

MOV R6,#19H

MAIN3: CALL DELAY

CJNE R6,#00H,MAIN3

MOV P0,#0EEH

MAIN4: CALL DELAY

MOV R7,#00H

CPL P0.4

CJNE R6,#00H,MAIN4

JMP MAIN

DELAY: MOV A,R6 ;进行南北方向倒计时时间的十进制调整

MOV B,#0AH

DIV AB

MOVC A,@A+DPTR ;找寻相应的数码管代码

MOV P1,A ;输出个位

MOV R4,#4 ;降低动态显示频率

LOOP1: MOV R3,#125

LOOP2: DJNZ R3,LOOP2

DJNZ R4,LOOP1

MOV A,B

MOVC A,@A+DPTR

MOV P2,A ;输出十位

MOV R4,#4

LOOP3:MOV R3,#125

LOOP4: DJNZ R3,LOOP4

DJNZ R4,LOOP3

MOV A,R7 ;进行东西方向倒计时时间的十进制调整MOV B,#0AH

DIV AB

MOVC A,@A+DPTR

MOV P1,A

MOV R4,#4

LOOP5: MOV R3,#125

LOOP6: DJNZ R3,LOOP6

DJNZ R4,LOOP5

MOV A,B

MOVC A,@A+DPTR

MOV P2,A

MOV R4,#4

LOOP7: MOV R3,#125

LOOP8: DJNZ R3,LOOP8

DJNZ R4,LOOP7

JBC TF0,LOOP ;判断是否计满125ms

AJMP DELAY

LOOP: MOV TL0,#0CDH ;计满125ms重新给定时器赋值MOV TH0,#0BH

MOV A,30H

DEC A

MOV 30H,A

JNZ DELAY ;判断是否计满8次125ms,即1s

DEC R6 ;计满1s,东西倒计时减1,南北倒计时减1 DEC R7

MOV 30H,#08H ;重新1s次数,重新计时

RET

TABLE:DB 03FH,06H,05BH,04FH,66H ;相应数值的数码管代码

DB 6DH,7DH,07H,7FH,6FH,00H

END

红灯30s 黄灯5s绿灯25s 怎么做不出来啊?

-----------------------------------

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

相关文档