单片机设计八个彩灯控制电路,遇到了一点问题,请高手指出错误之处
程序和PROTEUS图已经做出来了(如下),preteus图可以运行简单的彩灯程序,但是运行这个程序时灯只是全亮不动,程序和proteus图都找不出问题,希望高手指点一二...
程序和PROTEUS图已经做出来了(如下),preteus图可以运行简单的彩灯程序,但是运行这个程序时灯只是全亮不动,程序和proteus图都找不出问题,希望高手指点一二。
要求:
1 从左到右排列,编号为1~8号。系统启动后,灯管 点亮的顺序依次为:1号→2号→3号→...→7号→8 号,时间间隔为1S。8根彩灯全亮后,持续10S。然 后按照8号→7号→6号→...→2号→1号的顺序依次 熄灭,时间间隔为1S。灯管全部熄灭后,等待2S, 再从8号灯管开始,按照8号→7号→6号→...→2号 →1号的顺序依次点亮,时间间隔为1S。全部点亮后 持续20S,再按照1号→2号→3号→...→7号→8号的 顺序熄灭,时间间隔仍为1S。灯管全部熄灭后,等 待2S,再重新开始上述过程的循环。
下面是已经做出来的程序:
ORG 0000H
LJMP START
ORG 0030H
START: MOV TMOD,#10H
MOV TH1,#3CH
MOV TL1,#0B0H ;定时器1工作于模式1,时间为50ms
MOV P1,#0FFH ;低电平有效,灯熄灭
MOV R7,#00H
LOOP1: INC R7
MOV A,R7
MOV DPTR,#TAB1
MOVC A,@A+DPTR
MOV P1,A
LCALL DELAY1
CJNE R7,#8,LOOP1;8次没显示完则继续循环
LCALL DELAY2;过程1
MOV R7,#8
LOOP2: DEC R7
MOV A,R7
MOVC A,@A+DPTR
MOV P1,A
LCALL DELAY1
CJNE R7,#0,LOOP2;8次没完则继续循环
LCALL DELAY1
MOV R7,#0H
LOOP3:INC R7
MOV DPTR,#TAB2
MOV A,R7
MOVC A,@A+DPTR
MOV P1,A
LCALL DELAY1
CJNE R7,#8,LOOP3;8次未完继续循环
LCALL DELAY3
MOV R7,#8H
LOOP4:DEC R7
MOV A,R7
MOVC A,@A+DPTR
MOV P1,A
LCALL DELAY1
CJNE R7,#0,LOOP4;8次未完继续循环
LCALL DELAY1
LJMP START ;开始下一个循环
DELAY1:MOV R0,#20
LOOP5:
SETB TR1
JNB TF1,$
DJNZ R0,LOOP5
CLR TR1
RET ;一秒延时
DELAY2:MOV R0,#9
LOOP6:LCALL DELAY1
DJNZ R0,LOOP6
RET ;9秒延时
DELAY3:MOV R0,#19
LOOP7:LCALL DELAY1
DJNZ R0,LOOP7
RET ;19秒延时
TAB1:DB 0FFH,7FH,3FH,1FH,0FH
DB 07H,03H,01H,00H
TAB2:DB 0FFH,0FEH,0FCH,0F8H,0F0H
DB 0E0H,0C0H,080H,00H
END
这是proteus图 展开
要求:
1 从左到右排列,编号为1~8号。系统启动后,灯管 点亮的顺序依次为:1号→2号→3号→...→7号→8 号,时间间隔为1S。8根彩灯全亮后,持续10S。然 后按照8号→7号→6号→...→2号→1号的顺序依次 熄灭,时间间隔为1S。灯管全部熄灭后,等待2S, 再从8号灯管开始,按照8号→7号→6号→...→2号 →1号的顺序依次点亮,时间间隔为1S。全部点亮后 持续20S,再按照1号→2号→3号→...→7号→8号的 顺序熄灭,时间间隔仍为1S。灯管全部熄灭后,等 待2S,再重新开始上述过程的循环。
下面是已经做出来的程序:
ORG 0000H
LJMP START
ORG 0030H
START: MOV TMOD,#10H
MOV TH1,#3CH
MOV TL1,#0B0H ;定时器1工作于模式1,时间为50ms
MOV P1,#0FFH ;低电平有效,灯熄灭
MOV R7,#00H
LOOP1: INC R7
MOV A,R7
MOV DPTR,#TAB1
MOVC A,@A+DPTR
MOV P1,A
LCALL DELAY1
CJNE R7,#8,LOOP1;8次没显示完则继续循环
LCALL DELAY2;过程1
MOV R7,#8
LOOP2: DEC R7
MOV A,R7
MOVC A,@A+DPTR
MOV P1,A
LCALL DELAY1
CJNE R7,#0,LOOP2;8次没完则继续循环
LCALL DELAY1
MOV R7,#0H
LOOP3:INC R7
MOV DPTR,#TAB2
MOV A,R7
MOVC A,@A+DPTR
MOV P1,A
LCALL DELAY1
CJNE R7,#8,LOOP3;8次未完继续循环
LCALL DELAY3
MOV R7,#8H
LOOP4:DEC R7
MOV A,R7
MOVC A,@A+DPTR
MOV P1,A
LCALL DELAY1
CJNE R7,#0,LOOP4;8次未完继续循环
LCALL DELAY1
LJMP START ;开始下一个循环
DELAY1:MOV R0,#20
LOOP5:
SETB TR1
JNB TF1,$
DJNZ R0,LOOP5
CLR TR1
RET ;一秒延时
DELAY2:MOV R0,#9
LOOP6:LCALL DELAY1
DJNZ R0,LOOP6
RET ;9秒延时
DELAY3:MOV R0,#19
LOOP7:LCALL DELAY1
DJNZ R0,LOOP7
RET ;19秒延时
TAB1:DB 0FFH,7FH,3FH,1FH,0FH
DB 07H,03H,01H,00H
TAB2:DB 0FFH,0FEH,0FCH,0F8H,0F0H
DB 0E0H,0C0H,080H,00H
END
这是proteus图 展开
5个回答
宿兴电子
2024-11-28 广告
2024-11-28 广告
联系我们一、有无震荡源 无源这里的“源”不是指电源,而是指震荡源。也就是说,有源蜂鸣器内部带震荡源,所以只要一通电就会叫。而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。 二、价格不同 有源蜂鸣器往比无源蜂鸣器贵,就是因为里面多个震荡...
点击进入详情页
本回答由宿兴电子提供
展开全部
少了最主要的中断部分的程序
ORG 001BH
SJMP ZD
...
ZD: MOV
还有: RL A ;也没有
ORG 001BH
SJMP ZD
...
ZD: MOV
还有: RL A ;也没有
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
电路没有问题。
只能看懂C语言的,汇编语言的我看不懂,但可以提供思路:
如果点亮的时间间隔为1S,则某端口输出低电平时(低电平有效)灯点亮,低电平要延时500ms;然后再反转为高电平(灯熄灭),高电平再延时500ms。完成一次动作。
你的问题可能出在没有进行电平翻转并延时,所以灯一直亮着。
只能看懂C语言的,汇编语言的我看不懂,但可以提供思路:
如果点亮的时间间隔为1S,则某端口输出低电平时(低电平有效)灯点亮,低电平要延时500ms;然后再反转为高电平(灯熄灭),高电平再延时500ms。完成一次动作。
你的问题可能出在没有进行电平翻转并延时,所以灯一直亮着。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
循环语句的问题
个人感觉循环的有点乱了,电路没有问题
个人感觉循环的有点乱了,电路没有问题
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询