Ⅰ 单片机跑马灯代码
//假设晶振12MHZ,P1控制8个LED低电平亮
#include "reg51.h"
unsigned int YSJS=0;
signed char LED=0XFF;
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==1000) //500uS*1000=500000us=0.5s,可调整
{
P1 = LED;
LED=LED<<1
if(LED==0X00)LED=0XFF;
YSJS = 0
}
}
Ⅱ 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();
}
}
}
(2)单片机数码跑马灯扩展阅读:
Proteus 自从有了单片机也就有了开发系统,随着单片机的发展开发系统也在不断发展。 keil是一种先进的单片机集成开发系统。它代表着汇编语言单片机开发系统的最新发展,首创多项便利技术,将开发的编程/仿真/调试/写入/加密等所有过程一气呵成,中间不须任何编译或汇编。
Ⅲ 单片机汇编语言跑马灯
1)将你想要的LED显示样式进行编组,这里P1端口中,输出低电平LED亮,高电平LED不亮;
2)然后按你排的顺序输出编组数据,加上延时显示;
3)通过定时器中断(0.5S)来设置准备显示的编组号;
Ⅳ 单片机 数码管跑马灯实验
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
delay(uint a)
while(a--)
void main()
P0=0xfe;
uchar i;
for(i=0;i<8;i++)
{
P0=0xfe<<1;
P0=P0|0x01;
delay(400);
}
时间你改下,流水灯基本上都这样的,很多时候要自己思考,如果真的想学好的话
Ⅳ 单片机实现跑马灯
硬件做好了吗
我做单片机设计的
Ⅵ 单片机 跑马灯 代码详解
ORG
0000H
;开机上电主程序入口
AJMP
START
;系统一进来就转到主程序
ORG
0030H
;主程序地址
START:
MOV
A,
#0FFH
;主程序开始,A中初始化成全1
CLR
C
;c清零
MOV
R2,
#08H
;R2左转循环计数器
LOOP:
RLC
A
<<C+A+C<<带进位循环左移,A中的内容在8此循环中从0位到7位依次变0
MOV
P2,
A
;送到P2,使P2从0位到7位依次点亮LED
CALL
DELAY
;单片机运行很快,为了能看到灯的变化,必须延迟,把速度降下来
DJNZ
R2,
LOOP
;R2每次减1后判断是否=0,8次后=0程序才会下行,否则会跳回LOOP
MOV
R2,#07H
;R2右转循环计数器
LOOP1:
RRC
A
>>C+A+C>>带进位循环右移,A中的内容在8此循环中从7位到0位依次变0
MOV
P2,
A
;送到P2,使P2从7位到0位依次点亮LED
CALL
DELAY
;和上个循环一样,延时
DJNZ
R2,
LOOP1
;R2每次减1后判断是否=0,7次后=0程序才会下行,否则会跳回LOOP1
JMP
START
;跳回程序起始位置重复下一个循环
DELAY:
MOV
R3,
#20;延时子程序,这个应该不用解释了吧
D1:
MOV
R4,
#200
D2:
MOV
R5,
#248
DJNZ
R5,
$
DJNZ
R4,
D2
RET
END
Ⅶ 单片机跑马灯程序 汇编语言编写,很简单
程序1:
ORG0000H
LJMPMAIN
ORG0030H
MAIN:
MOVSP,#5FH
LOOP:
MOVA,P2
MOVB,A
MOVP0,A
MOVP1,#0FFH
LOOP1:
LCALLDELAY
MOVC,P1.7
MOVA,P0
RLCA
MOVP0,A
MOVA,P1
RLCA
MOVP1,A
MOVA,P2
CJNEA,B,LOOP
SJMPLOOP1
DELAY:
MOVR2,#60
DELAY1:
MOVR3,#250
DJNZR3,$
DJNZR2,DELAY1
RET
END
程序2:
ORG0000H
LJMPMAIN
ORG0030H
MAIN:
MOVSP,#5FH
JNBP2.0,LOOP1;
JNBP2.1,LOOP2;
SJMPMAIN
LOOP1:
MOVP0,#0FEH
MOVP1,#0FFH
LOOP11:
MOVC,P1.7
MOVA,P0
RLCA
MOVP0,A
MOVA,P1
RLCA
MOVP1,A
JNBP2.1,LOOP2
SJMPLOOP11
LOOP2:
MOVP0,#0FCH
MOVP1,#0FFH
LOOP21:
MOVC,P1.7
MOVA,P0
RLCA
MOVP0,A
MOVA,P1
RLCA
MOVP1,A
JNBP2.0,LOOP1
SJMPLOOP21
DELAY:
MOVR2,#60
DELAY1:
MOVR3,#250
DJNZR3,$
DJNZR2,DELAY1
RET
END
Ⅷ 单片机跑马灯汇编程序详细解释
ORG
0000H
SJMP
START
ORG
0030H
START:
MOV
A,
#0FEH
;
先让第一个发光二极管点亮
LOOP:
MOV
P1,
A
;
从P1口输出到发光二极管
MOV
R1,
#100
;
延时0.5秒
DEL1:
MOV
R2,
#200
DEL2:
MOV
R3,
#7
DEL3:
DJNZ
R3,
DEL3
DJNZ
R2,
DEL2
DJNZ
R1,
DEL1
RL
A
;
左移一位,点亮下一个发光二极管
LJMP
LOOP
END
这个是我写的跑马灯程序,没有左右振荡,自己参考参考加上去吧
Ⅸ 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单片机的跑马灯设置问题
自己看程序修改一下:
#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;
}
}