我现在正在做毕业设计,但是遇到了点问题 请大家过来帮忙看下
下面是我的程序
ORG 0000H
LJMP MAIN
ORG 0003H ;外部中断0入口(夜间模式)
LJMP NIGHT
ORG 0013H ;外部中断1入口(紧急模式)
LJMP DANGER
ORG 0100H
MAIN: ;主程序实现正常工作状态
SETB EA ;开总中断
SETB EX0 ;开外部中断0
CLR PX0 ;中断0低优先级
CLR IT0 ;电平触发
SETB EX1 ;开外部中断1
SETB PX1 ;中断1高优先级
CLR IT1 ;电平触发
MOV 60H,#03H ;黄灯闪烁次数
MOV R0,#00H ;
MOV P2,R0 ;灯全灭
SETB P2.7 ;南北绿灯亮
SETB P2.1 ;东西红灯亮
ACALL DISPLAY ;显示倒计时
SETB P1.0
SETB P1.1
CLR P2.7 ;南北绿灯灭
CLR P2.1 ;东西红灯灭
SETB P2.6 ;南北黄灯亮
ACALL FLASH1 ;南北方向黄灯闪烁
CLR P2.6 ;南北黄灯灭
CLR P2.1 ;东西红灯灭
SETB P2.3 ;东西绿灯亮
SETB P2.5 ;南北红灯亮
ACALL DISPLAY ;显示倒计时
SETB P1.0
SETB P1.1
CLR P2.3 ;东西绿灯灭
CLR P2.5 ;南北红灯灭
SETB P2.2 ;东西黄灯亮
ACALL FLASH2 ;东西方向黄灯灯闪烁
CLR P2.2 ;东西黄灯灭
LJMP MAIN ;循环执行正常模式
DISPLAY:
MOV 30H,#30
L1: MOV A,30H
MOV B,#10
DIV AB
MOV DPTR,#TABLE
MOV R0,A
MOV R1,B
MOV R2,#10 ;增加循环用于延时。
K1: SETB P1.1
CLR P1.0
MOVC A,@A+DPTR
MOV P0,A
LCALL DEL
MOV DPTR,#TABLE
SETB P1.0
CLR P1.1
MOV A,R1
MOVC A,@A+DPTR
MOV P0,A
MOV A,R0
LCALL DEL
DJNZ R2,K1 ;判断循环次数到了没
DJNZ 30H, L1 ;判断25减完了没有
RET
DISPLAY1:
MOV 31H,#9
L2: MOV A,31H
MOV B,#10
DIV AB
MOV DPTR,#TABLE
MOV R0,A
MOV R1,B
MOV R2,#10 ;增加循环用于延时。
K2: SETB P1.1
CLR P1.0
MOVC A,@A+DPTR
MOV P0,A
LCALL DEL
MOV DPTR,#TABLE
SETB P1.0
CLR P1.1
MOV A,R1
MOVC A,@A+DPTR
MOV P0,A
MOV A,R0
LCALL DEL
DJNZ R2,K2 ;判断循环次数到了没
DJNZ 31H, L2 ;判断30S减完了没有
RET
DEL: MOV R5,#5
DD2: MOV R6,#20
DD1: MOV R7,#248
DJNZ R7,$
DJNZ R6,DD1
DJNZ R5,DD2
RET
FLASH1: SETB P2.6 ;南北方向黄灯闪烁子程序
SETB P2.1 ;东西方向红灯闪烁子程序
ACALL DELAY1 ;短延时1
CLR P2.6 ;南北方向黄灯灭
CLR P2.1 ;东西方向红灯灭
ACALL DELAY1 ;短延时1
DJNZ 60h,FLASH1 ;循环3次
MOV 60h,#3 ;重装循环次数
RET
FLASH2: SETB P2.2 ;东西方向黄灯闪烁子程序
SETB P2.5 ;南北方向红灯闪烁子程序
ACALL DELAY1 ;短延时1
CLR P2.2 ;东西方向黄灯灭
CLR P2.5 ;南北方向红灯灭
ACALL DELAY1 ;短延时1
DJNZ 60h,FLASH2 ;循环3次
MOV 60h,#3 ;重装循环次数
RET
DELAY1: MOV R2,#10 ;短延时1子程序
DEL8: MOV R3,#100
DEL7: MOV R4,#75
DEL6: NOP
NOP
DJNZ R4,DEL6
DJNZ R3,DEL7
DJNZ R2,DEL8
RET
DELAY2: MOV R2,#1 ;短延时2子程序
D8: MOV R3,#10
D7: MOV R4,#10
D6: NOP
NOP
DJNZ R4,D6
DJNZ R3,D7
DJNZ R2,D8
RET
NIGHT: MOV R0,#00H ;夜间模式
MOV P2,R0 ;灯全灭
SETB P2.7 ;南北绿灯亮
SETB P2.1 ;东西红灯亮
ACALL DISPLAY1 ;显示倒计时
SETB P1.0
SETB P1.1
CLR P2.7 ;南北绿灯灭
CLR P2.1 ;东西红灯灭
SETB P2.6 ;南北黄灯亮
ACALL FLASH1 ;南北方向黄灯闪烁
CLR P2.6 ;南北黄灯灭
CLR P2.1 ;东西红灯灭
SETB P2.3 ;东西绿灯亮
SETB P2.5 ;南北红灯亮
ACALL DISPLAY1 ;显示倒计时
SETB P1.0
SETB P1.1
CLR P2.3 ;东西绿灯灭
CLR P2.5 ;南北红灯灭
SETB P2.2 ;东西黄灯亮
ACALL FLASH2 ;东西方向黄灯闪烁
CLR P2.2 ;东西黄灯灭
LJMP NIGHT
DANGER: MOV P2,#00H ;紧急状态通行子程序
SETB P1.0
SETB P1.1
SETB P2.5 ;南北红灯亮
SETB P2.1 ;东西红灯亮
CALL DELAY2 ;短延时2
SJMP DANGER ;紧急状态循环
TABLE: DB 3FH ,06H, 5BH ,4FH ,66H ,6DH, 7DH ,07H ,7FH, 6FH
END
在proteus模拟的时候是没问题的 但是在做硬件的时候无论怎么改程序发光二极管却一直亮,而且那个数码管一直没反应不亮,数码管用的是共阴的,led灯也是共阴接法,是什么问题呢 补充一句,我模拟的时候是at89c51,但是硬件用的是stc89c52
今天我再试了一遍,先从红绿黄灯入手,发现可以运作,但是绿灯亮度不够,基本不亮,细微观察是亮的,而黄灯基本亮,三个灯中红灯最亮,为什么会出现这种情况?应该这三个口输出电流都一样的啊
引用: 原帖由 mrfantexi 于 2011-12-11 20:59 发表 今天我再试了一遍,先从红绿黄灯入手,发现可以运作,但是绿灯亮度不够,基本不亮,细微观察是亮的,而黄灯基本亮,三个灯中红灯最亮,为什么会出现这种情况?应该这三个口输出电流都一样的啊