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

51单片机跑马灯

发布时间:2022-02-21 01:07:24

❶ 若51单片机P1口接了8个LED,编写程序完成跑马灯程序要求大约1秒变化一次

//假设晶振12MHZ,P1控制8个LED低电平亮
#include "reg51.h"
unsigned int YSJS=0;
signed char LED=0XFE;
void main(void)
{
TMOD |= 0X10; //定时器1工作于方式1,16位定时器
TH1 = 0XFE; //定时器1定时时间=500uS
TL1 = 0X0C;
ET1 = 1; //使能定时器1中断
TR1 =1;
EA =1; //开总中断

while(1)
{
}
}

void TIMER1(void) interrupt 3 //定时器1中断函数使用默认寄存器组
{
TH1 = 0XFE; //定时器1定时时间=500us
TL1 = 0X0C;

YSJS++;
if(YSJS==2000) //500uS*2000=1000000uS=1S
{
P1 = LED;
LED=LED<<1;
LED=LED | 1
if(LED==0XFF)LED=0XFE;
YSJS = 0
}
}

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

❸ 单片机中的流水灯,花样灯,跑马灯

等 到 你单片机学到一定程度就理解了,这些灯只是按照自己的意思来亮,至于名称都无所谓

❹ 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();

}

}

}

(4)51单片机跑马灯扩展阅读:

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

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

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

❻ 51单片机跑马灯函数,参数是灯的个数,这个函数怎么写(C语言版的)

51单片机可以用十六进制数控制一个口,假如使用P1口,一个灯就是11111110,低电平灯亮,把这个二进制数转成十六进制,按位取反,两个灯同理

❼ 51单片机 跑马灯 所需器材

单片机,晶振,电容,电阻,发光二极管,7805,直流电源,万用板,单片机烧写器,电脑等

❽ 51单片机跑马灯电路图(左右来回循环),8个led灯分别接在P2口,c程序、仿真图如下。电路并未出现预期效果

电路:

一般的单片机 和 TTL集成电路芯片,都是灌电流能力强,拉电流能力极弱。
为此,应该用输出低电平,来带动负载。
而你的电路,是用高电平带动LED发光的,仿真,也许还行;实际的电路,LED是不会亮的。

❾ 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灯就不亮

程序已经过调试可用

仿真如下:

❿ 用51单片机设计8个灯的跑马灯程序拜托各位大神

/**************************************************************** 程序名称: 八位LED双灯右移动流水灯显示 说明:使用本程序你必须把 SE3设置为2-3短接 SE4设置为1-2短接 *****************************************************************/ /*头文件*/ #include <reg52.h> #include <intrins.h> #define uint unsigned int #define uchar unsigned char /*端口定义*/ #define led_port P0 /*定义LED显示的数据脚*/ /*1MS为单位的延时程序*/ void delay_1ms(uchar x) { uchar j; while(x--){ for(j=0;j<125;j++) {;} } } /*主程序*/ void main() { uchar led_sdata; /*显示寄存器*/ uchar i; while(1){ led_sdata=0xfe; /*初始化显示寄存器为1号灯亮*/ led_port = led_sdata; /*将显示寄存器输出到LED端口*/ delay_1ms(200); delay_1ms(200); /*延时*/ led_sdata=0xfc; /*显示寄存器为1.2号灯亮*/ for(i=0;i<8;i++){ led_port = led_sdata; /*将显示寄存器输出到LED端口*/ led_sdata = (led_sdata<<1)+1; /*将显示寄存器数据左移1位,并将第一位置高,即熄灭*/ delay_1ms(200); delay_1ms(200); /*延时*/ } led_sdata=0xff; /*灯全灭*/ led_port = led_sdata; /*将显示寄存器输出到LED端口*/ delay_1ms(200); delay_1ms(200); /*延时*/ } }

阅读全文

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

热点内容
为什么主题解压那么慢 浏览:858
怎么下载扫描二维码的手机app 浏览:725
云服务器创建私有镜像的时候一定要关机吗 浏览:112
php开发学习门户 浏览:385
传奇游戏服务器怎么设置 浏览:823
敲击东西解压完整版 浏览:401
刺络学pdf 浏览:868
怎么给手机文件夹设置封面 浏览:931
汽车保养app怎么用 浏览:62
线程javalock 浏览:896
c语言编译运行结果查看器 浏览:112
androidpx转dip 浏览:841
西藏编译局是什么级别 浏览:1001
php提交代码 浏览:597
如何用命令查找并删除代码块 浏览:582
python初学路线图 浏览:534
matlab遗传算法旅行商问题 浏览:304
将办公软件加入加密软件的进程 浏览:724
联想小新pro14编译器 浏览:462
为什么服务器要关掉icmp协议 浏览:855