标题:
[求助]红绿灯数码管显示部分
[打印本页]
作者:
zp5837218529
时间:
2009-4-11 00:20
标题:
[求助]红绿灯数码管显示部分
大家好,我这个单片机新手又来麻烦大家了,我正在编写一个红绿灯在模拟板子上得程序,但数码管显示的部分始终实现不了,希望各位高手能指点一下,在下不胜感激。这是一个实现南北和东西方向的红绿灯程序的一部分。其中东西方向红灯延时30s,南北方向绿灯延时25s黄灯延时5s。我的问题主要是在东西方向在实现25s延时后剩下得5s,不知怎么和黄灯的5s取得统一。下面绿色部分即是在下困惑的地方,希望各位高手能个指点一二。谢谢
LED0 BIT P2.0
LED1 BIT P2.1
LED4 BIT P2.4
LED5 BIT P2.5
GRE0 EQU 30H
RED0 EQU 31H
YEL0 EQU 32H
GRE1 EQU 33H
RED1 EQU 34H
YEL1 EQU 35H
BUF_LED0 EQU 36H ;数码存储区
BUF_LED1 EQU 37H
BUF_LED4 EQU 38H
BUF_LED5 EQU 39H
BUF_LED3 EQU 40H
LYEL0 EQU 51H
ORG 00H
AJMP MAIN
ORG 0BH
AJMP IT0P
MAIN: MOV DPTR,#TABLE
MOV TMOD,#01H
MOV 21H,#100
MOV LYEL0,#0
MOV P1,#0FFH
MOV P0,#0FFH
MOV P2,#0FFH
MOV BUF_LED0,#092H ;赋初值 5
MOV BUF_LED1,#0A4H ; 2
MOV BUF_LED4,#0C0H ; 0
MOV BUF_LED5,#0B0H ; 3
MOV SP,#60H
MOV GRE0,#25 ;GRE0,RED0,YEL0南北方向灯的存储区
MOV RED0,#25
MOV YEL0,#5
MOV GRE1,#20 ;GRE1,RED1,YEL1东西方向灯的存储区
MOV RED1,#30
MOV YEL1,#5
MOV TH0,#0D8H ;赋初值1mS
MOV TL0,#0F0H
MOV IE,#82H
SETB TR0
HERE: CALL XIANSHI
SJMP HERE
IT0P:
PUSH Acc
PUSH PSW
MOV TH0,#0D8H
MOV TL0,#0F0H
DJNZ 21H,RETURN ;实现延时一秒
MOV 21H,#100
MOV A,RED1 ;东西灯30S
DEC A
MOV RED1,A
ACALL FENLI
MOVC A,@A+DPTR
MOV BUF_LED5,A
MOV A,B
MOVC A,@A+DPTR
MOV BUF_LED4,A
MOV C,LYEL0 ;LYEL0作用是实现跳转到黄灯,当C=1时跳到B1
JC B1
MOV A,GRE0 ;南北绿灯25S
DEC A
MOV GRE0,A
ACALL FENLI
MOVC A,@A+DPTR
MOV BUF_LED1,A
MOV A,B
MOVC A,@A+DPTR
MOV BUF_LED0,A
MOV A,GRE0
CJNE A,#0FFH,B0
MOV LYEL0,#1
B1: MOV A,YEL0 ;南北黄灯5S
DEC A
MOV YEL0,A
AJMP FENLI
MOVC A,@A+DPTR
MOV BUF_LED1,A
MOV A,B
MOVC A,@A+DPTR
MOV BUF_LED0,A
B0: MOV A,RED1
CJNE A,#0FFH,RETURN
FENLI: MOV B,#10 ;实现个十位的分离
DIV AB
RET
RETURN: POP PSW
POP Acc
RETI
XIANSHI:MOV P2,#11111110B ;数码管1亮
MOV P0,BUF_LED0
ACALL DELAY
MOV P2,#11111101B ;数码管2亮
MOV P0,BUF_LED1
ACALL DELAY
MOV P2,#11101111B ;数码管4亮
MOV P0,BUF_LED4
ACALL DELAY
MOV P2,#11011111B ;数码管5亮
MOV P0,BUF_LED5
ACALL DELAY
RET
DELAY:
MOV R6,#10
D2: MOV R7,#248
D3: DJNZ R7,D3
DJNZ R6,D2
RET
TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
END
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1