51单片机跑马灯程序

那位高手下愿意帮忙,小弟在这里先谢了。要求:8个发光二极管依次发亮,从左到右,然后清零,再从右到左,一直循环下去。... 那位高手下愿意帮忙,小弟在这里先谢了。要求:8个发光二极管依次发亮,从左到右,然后清零,再从右到左,一直循环下去。 展开
 我来答
t_cl
2010-01-18 · TA获得超过498个赞
知道小有建树答主
回答量:150
采纳率:0%
帮助的人:92.8万
展开全部

不好意思,延时用了楼上的。keil下编译OK。假设P1接灯。

ORG 00H

SJMP START

ORG 30H

START:

MOV A ,#00

SETB C

MOV R0,#9

;从左到右

LOOP1:

RLC A

MOV P1, A

ACALL DELAY

DJNZ R0, LOOP1

;从右到左

MOV R0,#9

LOOP2:

RRC A

MOV P1, A

ACALL DELAY

DJNZ R0, LOOP2

SJMP START

DELAY:

MOV R6,#20

DELAY_0:MOV R5,#255

DJNZ R5,$

DJNZ R6,DELAY_0

RET

END 

这个程序比较简单了。再精简,只能精简一句,将MOV P1,A 放在DELAY函数里。这样减少一行。

简单介绍一下:

首先就是你要轮流点亮,就是将1循环一圈,因为你要全灭一次,所以用到CY。

RG 00H

SJMP START

ORG 30H

START:

MOV A ,#00 ;//清空A寄存器

SETB C     ;//将CY置1,然后带进位左移就会进入将A的b0

MAINLOOP: ;//大循环起始

MOV R0,#9 ;设置移位次数,要灭一次,所以设置为9

;从左到右

LOOP1:

RLC A     ;带进位左移一次;第一次移位结果为01

MOV P1, A ;将A中值放入P1点亮对应LED;该句可放在DELAY里,然后从右到左也去掉该句

ACALL DELAY ;延时,保持灯亮一段时间,自己根据实际情况调整一下。

DJNZ R0, LOOP1 ;循环,点亮下一个灯,最后一次,A为0,将全灭一次,CY为1

;从右到左

MOV R0,#9 ;设置循环次数

LOOP2:    ;循环起始表示

RRC A     ;带进位右移,第一次结果为80H

MOV P1, A ;更新P1点亮对应LED

ACALL DELAY ;延时,保持灯亮一段时间

DJNZ R0, LOOP2 ;循环,点亮下一个灯

SJMP MAINLOOP  ;循环,重新开始下一轮

如果你是管脚输出低LED才亮,只需将MOV A ,#00 和SETB C改为MOV A, #0FFH和CLR C即可。 

方案2:位寻址区00做标志,为0从左到右,该标志为1从右到左

ORG 00H

SJMP START

ORG 30H

START:

MOV A ,#00

SETB C

MOV R0,#9

CLR 00H

LOOP1:

RLLED:

JB 00H, RRLED

RLC A

AJMP DISP

RRLED:

RRC A

DISP:

MOV P1, A

ACALL DELAY

DJNZ R0, LOOP1

CPL 00H

AJMP START

DELAY:

MOV R6,#20

DELAY_0:MOV R5,#255

DJNZ R5,$

DJNZ R6,DELAY_0

RET

END 

下面是方案1的流程图,这种流程图不知怎么写好,而且写出来基本是对每行的代码的解释。

WENWEN_8211
2010-01-16 · TA获得超过208个赞
知道小有建树答主
回答量:195
采纳率:0%
帮助的人:127万
展开全部
org 00h
sjmp main
org 30h
main:
mov r7,#8
mov r0,#00h
loop:
mov dptr,#100h
mov a,r0
movc a,@a+dptr
mov p1,a
acall delay
inc r0
djnz r7,loop
mov r0,#00h
mov r7,#8
loop_0:mov dptr,#200h
mov a,r0
movc a,@a+dptr
mov p1,a
acall delay
inc r0
djnz r7,loop_0
sjmp main

delay:mov r6,#20
delay_0:mov r5,#255
djnz r5,$
djnz r6,delay_0
ret

org 100h
db 根据灯的实际连接状态写
org 200h
db 根据灯的实际连接状态写

end
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
R傻强
2010-01-16 · 超过33用户采纳过TA的回答
知道答主
回答量:259
采纳率:100%
帮助的人:99.6万
展开全部
循环以后
连续赋值就可以了!!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
waiting320
2010-01-17 · 超过12用户采纳过TA的回答
知道答主
回答量:58
采纳率:0%
帮助的人:28万
展开全部
不会汇编
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式