导航:首页 > 操作系统 > 51单片机跑马灯教学

51单片机跑马灯教学

发布时间:2022-12-13 14:55:15

1. 关于51单片机的跑马灯设置问题

自己看程序修改一下:

#include<reg51.h>
#include <intrins.h>

/*****************************************************************************
* 延时子程序 *
* *
******************************************************************************/
void delayms(unsigned char ms)
{
unsigned char i;
while(ms--)
{
for(i = 0; i < 120; i++);
}
}

/*****************************************************************************
* 主程序 *
* *
******************************************************************************/
main()
{
unsigned char LED;
LED = 0xfe;
P2 = LED;
while(1)
{
delayms(250);
LED = _crol_(LED,1); //循环右移1位,点亮下一个LED 此函数位库函数
P2 = LED;
}
}

2. 51单片机跑马灯程序c

/***************************************** *用P1口接LED *****************************************/ #include //51系列单片机定义文件 #define uchar unsigned char //定义无符号字符 #define uint unsigned int //定义无符号整数 void delay(uint); //声明延时函数 void main(void) { uint i; uchar temp; while(1) { temp=0x01; for(i=0;i<8;i++) //8个流水灯逐个闪动 { P1^=temp; delay(500); //调用延时函数 temp<<=1; } temp=0x80; for(i=0;i/8个流水灯反向逐个闪动 { P1^=temp; delay(500); //调用延时函数 temp>>=1; } temp=0xFE; for(i=0;i<8;i++) //8个流水灯依次全部点亮 { P1=temp; delay(500); //调用延时函数 temp<<=1; } temp=0x7F; for(i=0;i/8个流水灯依次反向全部点亮 { P1=temp; delay(500); //调用延时函数 temp>>=1; } } } void delay(uint t) //定义延时函数 { register uint bt; //register为寄存器变量 即将无符号整形变量bt放在CPU的寄存器中而不是放在内存中 因为该 变量使用频率高 这样可以提高执行效率 for(;t;t--) for(bt=0;bt<255;bt++); }

3. 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的流程图,这种流程图不知怎么写好,而且写出来基本是对每行的代码的解释。

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

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

5. 51单片机设计跑马灯的程序用(c语言)编写

|P1口接8个发光二极管共阳

#include <AT89X51.H>

unsigned char i;

unsigned char temp;

unsigned char a,b;

void delay(void)

{

unsigned char m,n,s;

for(m=20;m>0;m--)

for(n=20;n>0;n--)

for(s=248;s>0;s--);

}

void main(void)

{

while(1)

{

temp=0xfe;

P1=temp;

delay();

for(i=1;i<8;i++)

{

a=temp<<i;

b=temp>>(8-i);

P1=a|b;

delay();

}

for(i=1;i<8;i++)

{

a=temp>>i;

b=temp<<(8-i);

P1=a|b;

delay();

}

}

}

(5)51单片机跑马灯教学扩展阅读:

Proteus 自从有了单片机也就有了开发系统,随着单片机的发展开发系统也在不断发展。 keil是一种先进的单片机集成开发系统。它代表着汇编语言单片机开发系统的最新发展,首创多项便利技术,将开发的编程/仿真/调试/写入/加密等所有过程一气呵成,中间不须任何编译或汇编。

6. 用51单片机设计一个16位的跑马灯 要求通过一个开关控制3种不同的模式 用汇编语言写,三种模式随意

一个开关,比如导通了1秒一个模式,3秒一个模式,5秒一个模式。

要么在一定时间内,检测开关导通的次数

我觉得应该弄的直观点,从51上接4个led做指示用,一个灯表示待运行,还有3个灯,亮一个表示模式1,亮两个表示模式2,亮3个表示模式3

开机的时候,待运行灯亮,等待设定模式,这时候开始按按键设定模式,同时待运行灯灭。模式灯随按键操作变化。

模式设定好了,停止按键操作,两秒后待运行灯亮,表示模式设定完毕。这时候长按按键,开始跑马灯。短按按键则返回模式设定。

当开始运行跑马灯的时候,可以设定运行一遍返回,也可以中断返回。

个人想法,不知行不行

7. 51单片机 跑马灯程序

org0000h

jmpstart

org0030h

start:

movp0,#11111110b;此时第一个灯亮

callt10s

movp0,#11111101b;此时第二个灯亮

callt10s

movp0,#11111011b

callt10s

movp0,#11110111b

callt10s

movp0,#11101111b

callt10s

movp0,#11011111b

callt10s

jmpstart;此处跳到开始即循环

;延时子程序10秒=250usX2X200X100

t10s:movr5,#100

lpr5:movr6,#200

lpr6:movr7,#250

djnzr7,$

djnzr6,lpr6

djnzr5,lpr5

ret

end

把灯的正极接电源正极即vcc负极分别接p0.0-p0.5

此时给p0送0灯就亮1灯就不亮

程序已经过调试可用

仿真如下:

8. 如何用51系列单片机做控制LED跑马灯实验

/*单片机,用定时中断实现每隔0.2秒让接在p1口的8个小灯从左往右循环点亮。*/
#include

#include

#define
uchar
unsigned
char
uchar
a,b;
uchar
b=1;
uchar
a=0xfe;
void
main()
{
ea=1;it1=1;et0=1;
th0=-5000/256;
tl0=-5000%256;
tmod=0x01;
tr0=1;
while(1)
{;}
}
void
timer0(void)
interrupt
1
using
1
{
th0=-5000/256;
tl0=-5000%256;
b=b+1;
if(b==40)
{
b=0;
p1=a;
a=_crol_(a,1);
p1=a;
}
}

9. 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

10. 单片机跑马灯咋把间隔时间调成200

1、首先51单片机LED流水灯正反向流水结合,即正向流水一遍。
2、其次再反向流水回来,时间间隔200ms。
3、最后单片机跑马灯即可把间隔时间调成200,完成操作。

阅读全文

与51单片机跑马灯教学相关的资料

热点内容
dvd光盘存储汉子算法 浏览:755
苹果邮件无法连接服务器地址 浏览:958
phpffmpeg转码 浏览:669
长沙好玩的解压项目 浏览:140
专属学情分析报告是什么app 浏览:562
php工程部署 浏览:831
android全屏透明 浏览:730
阿里云服务器已开通怎么办 浏览:801
光遇为什么登录时服务器已满 浏览:300
PDF分析 浏览:484
h3c光纤全工半全工设置命令 浏览:141
公司法pdf下载 浏览:381
linuxmarkdown 浏览:350
华为手机怎么多选文件夹 浏览:683
如何取消命令方块指令 浏览:349
风翼app为什么进不去了 浏览:778
im4java压缩图片 浏览:362
数据查询网站源码 浏览:150
伊克塞尔文档怎么进行加密 浏览:889
app转账是什么 浏览:163