导航:首页 > 操作系统 > 单片机移位法实现跑马灯

单片机移位法实现跑马灯

发布时间:2023-06-06 06:15:34

A. 用51单片机(汇编语言写)写一个跑马灯程序知道的帮个忙写写。

急用!请教!!!
用汇编语言程序,程序功能:实现方向可控的跑马灯
编程要求:用八个LED发光二极管实现跑马灯(即:8个灯依次轮流发光,每次只亮一个灯),系统启动后,跑马灯右向流转,按下K1键,则反向流转,再按则再反向……。接线方法:流水灯接P0口,按键K1可自选P1~P3任一引脚。

B. 51单片机汇编语言编写一个跑马灯的程序,初学者做实验用,具体要求如下,好了可以加分

程序1:
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV SP,#5FH
LOOP:
MOV A,P2
MOV B,A
MOV P0,A
MOV P1,#0FFH
LOOP1:
LCALL DELAY
MOV C,P1.7
MOV A,P0
RLC A
MOV P0,A
MOV A,P1
RLC A
MOV P1,A
MOV A,P2
CJNE A,B,LOOP
SJMP LOOP1
DELAY:
MOV R2,#60
DELAY1:
MOV R3,#250
DJNZ R3,$
DJNZ R2,DELAY1
RET
END
程序2:
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV SP,#5FH
JNB P2.0,LOOP1 ;
JNB P2.1,LOOP2 ;
SJMP MAIN
LOOP1:
MOV P0,#0FEH
MOV P1,#0FFH
LOOP11:
MOV C,P1.7
MOV A,P0
RLC A
MOV P0,A
MOV A,P1
RLC A
MOV P1,A
JNB P2.1,LOOP2
SJMP LOOP11
LOOP2:
MOV P0,#0FCH
MOV P1,#0FFH
LOOP21:
MOV C,P1.7
MOV A,P0
RLC A
MOV P0,A
MOV A,P1
RLC A
MOV P1,A
JNB P2.0,LOOP1
SJMP LOOP21
DELAY:
MOV R2,#60
DELAY1:
MOV R3,#250
DJNZ R3,$
DJNZ R2,DELAY1
RET
END

C. 单片机跑马灯程序

org 0000h
ajmp start
org 0030h
start:
mov a,#0ffh ;
clr c ;
mov r2,#08h ;循环八次。
loop: rlc a ;带进位左移。
mov p1,a ;输出到P1口。
call delay ;延时一段时间
djnz r2,loop ;反复循环
mov r2,#07h ;再往回循环。
loop1: rrc a ;带进位右移
mov p1,a ;输出到P1口。
call delay ;延时一段时间
djnz r2,loop1 ;反复循环
jmp start ;重新开始

delay: mov r3,#20 ;延时子程序
d1: mov r4,#20
d2: mov r5,#248
djnz r5,$
djnz r4,d2
djnz r3,d1
ret
end

D. 51单片机跑马灯程序

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

ORG00H

SJMPSTART

ORG30H

START:

MOVA,#00

SETBC

MOVR0,#9

;从左到右

LOOP1:

RLCA

MOVP1,A

ACALLDELAY

DJNZR0,LOOP1

;从右到左

MOVR0,#9

LOOP2:

RRCA

MOVP1,A

ACALLDELAY

DJNZR0,LOOP2

SJMPSTART

DELAY:

MOVR6,#20

DELAY_0:MOVR5,#255

DJNZR5,$

DJNZR6,DELAY_0

RET

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

简单介绍一下:

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

RG00H

SJMPSTART

ORG30H

START:

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

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

MAINLOOP:;//大循环起始

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

;从左到右

LOOP1:

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

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

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

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

;从右到左

MOVR0,#9;设置循环次数

LOOP2:;循环起始表示

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

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

ACALLDELAY;延时,保持灯亮一段时间

DJNZR0,LOOP2;循环,点亮下一个灯

SJMPMAINLOOP;循环,重新开始下一轮

如果你是管脚输出低LED才亮,只需将MOVA,#00和SETBC改为MOVA,#0FFH和CLRC即可。

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

ORG00H

SJMPSTART

ORG30H

START:

MOVA,#00

SETBC

MOVR0,#9

CLR00H

LOOP1:

RLLED:

JB00H,RRLED

RLCA

AJMPDISP

RRLED:

RRCA

DISP:

MOVP1,A

ACALLDELAY

DJNZR0,LOOP1

CPL00H

AJMPSTART

DELAY:

MOVR6,#20

DELAY_0:MOVR5,#255

DJNZR5,$

DJNZR6,DELAY_0

RET

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

阅读全文

与单片机移位法实现跑马灯相关的资料

热点内容
交警app怎么绑定本人几辆车 浏览:983
彩虹六号如何人工服务器 浏览:632
mc服务器地址怎么登入 浏览:556
苹果app怎么扫描二维码下载 浏览:959
css文件在线解压 浏览:154
36岁程序员近况 浏览:283
哪里可以下载不加密的歌 浏览:934
隐藏文件夹是什么梗 浏览:918
插件注册命令 浏览:497
梁一端加密一端不加密规范 浏览:82
代码行数统计命令 浏览:104
单片机中2K表示什么 浏览:482
紫禁城为什么会断开服务器 浏览:580
华为手机的方舟编译器在哪呢 浏览:123
下载压缩虐杀原形2 浏览:907
linux脚本cd 浏览:167
间架结构pdf 浏览:843
重庆农村商业银行app怎么老出问题 浏览:471
慧编程配置要求 浏览:674
数控机床编程与操作视频 浏览:462