问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

51单片机跑马灯程序

发布网友 发布时间:2022-04-23 14:03

我来回答

4个回答

热心网友 时间:2023-10-17 05:42

不好意思,延时用了楼上的。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的流程图,这种流程图不知怎么写好,而且写出来基本是对每行的代码的解释。

热心网友 时间:2023-10-17 05:43

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

热心网友 时间:2023-10-17 05:43

循环以后
连续赋值就可以了!!

热心网友 时间:2023-10-17 05:44

不会汇编
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
色彩中蓝色、红色、黄色除了加白色以外还有什么办法提高明度 色彩不敢调亮怎么办? 色彩如何提亮 男朋友惹我生气了 事后一点悔意也没 都在气头上 我不小心打男朋友了 他... 解签:为人处事莫亏心,暗室之中有灵应,一时得意反成失,半点悔改胜似金... 我手机之前一段时间由于欠费停机了 前几天我充了50元进去怎么还是... 撕名牌可以用哪些超能力技能? 为什么5孔插座带开关,安装好之后,灯有电,插座不通电? 怎么把照片内存变小 图片内存变小的方法 百度地图导航如何连接车蓝牙 百度地图导航连接车蓝牙方法 单片机跑马灯程序 单片机汇编语言跑马灯 单片机的跑马灯C程序如何编写八个LED灯依次点亮而且速度渐变的代码 怎么用单片机按键控制循环跑马灯??? 51单片机跑马灯程序c 单片机跑马灯如何编程! 51单片机设计跑马灯的程序用(c语言)编写 电子邮件什么格式 注册Apple ID的电子邮件地址应该怎么写? 手指背上长很多小痘痘 ID密码里填哪种格式的电子邮件? 怎么去掉背上的痘印啊? 我背上长那种小痘痘,不知道是不是传说中的“搭背疮”呀?求有效的治疗方法。 去痘痘小窍门 海尔热水器EC8002排污口怎么拆 电子邮件id地址怎样来填写 前胸后背老长小痘痘抹药膏都不见长了好几年不会痒 有没有别的可医治的办法? 海尔热水器fcd-jthqa40-iii排污口 背部长的小痘痘落下的痕迹用什么方法,具体一点。谢谢大家! 海尔热水器ES60H一S3kCE)排污口在什么地方? 求单片机跑马灯c语言程序! 51单片机 跑马灯程序 mcs51系列单片机编程 (跑马灯) 用汇编语言编写跑马灯程序 单片机的跑马灯程序 求注释 尽量每行都注释 我几乎看不懂啊! 谢谢= =!!明天就要答辩啦!!快的话加分加 c51编程 四个灯跑马灯 请问以下有关单片机跑马灯的C语言程序各语句的含义(详细) 用51单片机(汇编语言写)写一个跑马灯程序??知道的帮个忙写写。 如何用一个STC单片机做一个跑马灯,菜鸟一只,最好用详细的过程 求一段51单片机控制ws2812灯条的跑马灯程序 电脑的中央处理器指的是什么呀? 中央处理器是什么? 中央处理器的主要功能? 中央处理器主要由哪两部分组成简述它们的功? 如何消灭国字脸? 国字脸的女生如何变好看? 国字脸的矫正 怎样改变国字脸,国字脸太难看了 国字脸怎么办? 体现气质 国字脸MM如何用发型修脸型(组图)