当前位置:首页 » 编程软件 » 51单片机8个流水灯编程

51单片机8个流水灯编程

发布时间: 2022-05-18 17:44:27

① 51单片机8位流水灯8种变化程序

第一种:1个LED发光,循环右移。
第二种:2个LED发光,循环右移。
第三种:3个LED发光,循环右移。
第四种:4个LED发光,循环右移。
再改成左移,就又有四种。
这就有八种了。
一边移动,一边闪烁;
再改变一下速度;
这能有多少种了?

② 八只流水灯当开关k1按下时流水灯循环,开关k2按下时停止循环(循环往复) 单片机c51编程

1. 开外部中断0,1,控制LED
2. 定义两个全局标志位,控制主函数里面的流水灯即可

③ 用51单片机编写8盏流水灯程序,

ORG0000H
LJMPMAIN
ORG0030H
MAIN:
MOVA,#0FEH
MOVR2,#8
LOOP:
MOVP0,A
LCALLDELAY
RLA
DJNZR2,LOOP
CPLA
LCALLDELAY
CPLA
LCALLDELAY
RLA
LCALLDELAY
CPLA
LCALLDELAY
MOVR2,#7
SJMPMAIN
END

④ 很简的51单片机c语言流水灯程序

1、51单片机C语言实现循环8个流水灯左移三次,后右移三次。
例程:

#include<reg51.h>//51单片机头文件
#include<intrins.h>//包含有左右循环移位子函数的库
#defineuintunsignedint//宏定义
#defineucharunsignedchar//宏定义
sbitbeep=P2^3;
voiddelay(uintz)//延时函数,z的取值为这个函数的延时ms数,如delay(200);大约延时200ms.
{//delay(500);大约延时500ms.
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voidmain()//主函数
{
uchara,i,j;
while(1)//大循环
{
a=0xfe;//赋初值
for(j=0;j<3;j++)for(i=0;i<8;i++)//左移三次
{
P1=a;//点亮小灯
beep=0;//开启蜂鸣器
delay(50);//延时50毫秒
beep=1;//关闭蜂鸣器
delay(50);//再延时50毫秒
a=_crol_(a,1);//将a变量循环左移一位
}
a=0x7f;
for(j=0;j<3;j++)for(i=0;i<8;i++)//右移三次
{
P1=a;//点亮小灯
beep=0;//开启蜂鸣器
delay(50);//延时50毫秒
beep=1;//关闭蜂鸣器
delay(50);//再延时50毫秒
a=_cror_(a,1);//将a变量循环右移一位
}
}
}



2、51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8031单片机,后来随着Flash rom技术的发展,8031单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。

⑤ 51单片机中如何用汇编语言编写流水灯

流水灯就是51单片机控制led灯依次点亮的控制方式。具体程序如下:

ORG 0000H ;复位启动
AJMP START ;
ORG 001BH ;T1中断
AJMP T1INT ;

;定义变量========================
YSJS EQU 30H;延时计数器
LED EQU 31H;LED控制缓冲器

;主程序==========================
START: MOV LED,#0FEH ;初始化数据
MOV YSJS,#0 ;
MOV TMOD,#10H ;定时器1工作于方式1,16位定时器
MOV TL1,#0B0H ;设置定时初值
MOV TH1,#3CH ;定时时间=50mS
SETB ET1 ;使能定时器1中断
SETB TR1 ;启动定时器1
SETB EA ;开总中断

MOV P1,LED ;初始化流水灯
LOOP: JMP LOOP ;循环等待中断
T1INT: PUSH PSW ;定时器1中断程序
PUSH ACC ;保护现场
MOV TH1,#3CH ;定时时间=50mS
MOV TL1,#0B0H ;
INC YSJS ;

PUSH ACC ;保护ACC
MOV A,YSJI ;
CJNE A,#2,QT1 ;50mS*2=100mS
MOV P1,LED ;
MOV A,LED ;
RL A ;累加器A的值循环左移1位
MOV LED,A ;
MOV YSJS,#0 ;
QT1: POP ACC ;恢复现场
POP PSW ;
RETI ;返回主程序
END ;汇编程序结束

(5)51单片机8个流水灯编程扩展阅读:

实现流水灯的三个方法:

第一种,总线方法实现流水灯。这是一种比较笨但又最易理解的方法,采用顺序程序结构,用位指令控制P1口的每一个位输出高低电平,加上延时函数,即可控制每个LED灯的亮灭。

第二种,移位方法实现流水灯采用循环程序结构编程。首先在程序开始给P1.0口送一个低电平,其它位为高。然后延时一段时间再让低电平往高位移动,这样就实现“流水”的效果了。

第三种,库函数实现流水灯。利用左移函数进行。

⑥ 单片机流水灯C语言程序(8个灯,依次点亮每个灯,延时500MS)

单片机流水灯C语言程序的源代码如下:

#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(100); //调用延时函数

temp<<=1;

}

temp=0x80;

for(i=0;i<8;i++) //8个流水灯反向逐个闪动

{

P1=~temp;

delay(100); //调用延时函数

temp>>=1;

}

temp=0xFE;

for(i=0;i<8;i++) //8个流水灯依次全部点亮

{

P1=temp;

delay(100); //调用延时函数

temp<<=1;

}

temp=0x7F;

for(i=0;i<8;i++) //8个流水灯依次反向全部点亮

{

P1=temp;

delay(100); //调用延时函数

temp>>=1;

}

void delay(uint t) //定义延时函数

{

register uint bt;

for(;t;t--)

for(bt=0;bt<255;bt++);

}

(6)51单片机8个流水灯编程扩展阅读

51单片机流水灯的源代码如下

#include<reg51.h>

#include<intrins.h>

voiddelay(inta)

{

inti;

while(a--)for(i=0;i<110;i++);

}

main()

{

inti;

while(1)

{

P0=0xfe;

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

{

P0=_crol_(P0,1);

delay(500);

}

}

}

⑦ 51单片机c语言编写一个流水灯程序,要求如下(不能用数组,8个led指示灯从两边往中间移动,然后再分开)

简单点的,用表格,事先计算好,放到ROM中,用的时候逐行编译输出就可以。
复杂点的,开一个缓冲区,用循环程序,根据花样的不同,每次填充一行,并输出,然后再计算一下行。除非表格太大,不建议这样用。
#define len 8
char tablelist[][len] =
{
"",
"",
"",
"",
"",
}
outline( char * s )
{
int i;
for(i=0; i<len; ++i )
{
if ( s[i] == '0' )
{
// 对应的灯亮
}
else
{
// 对应的灯灭
}
}
}
main()
{
for(;;)
{
outline( tablelist[i]);
delay(..);
}
}

⑧ 求一c51单片机,8位流水灯程序

下列程序调试成功。使用晶振为12M。
//软件延时,使P1口外接的8个发光二极管,以每秒1位的速度,轮流发光。
//发光顺序:0123,1234,2345,3456,4567,5670,6701,7012。循环。
//----------------------------
#include<reg52.h>
#include<intrins.h>
unsigned char a;
void main()
{
unsigned char i, j, k;
a = 0x0f;
while(1) {
P1 = a; //假设8个发光二极管接在P1口.
a = _crol_(a, 1);
for(i = 8; i > 0; i--)
for(j = 250; j > 0; j--)
for(k = 250; k > 0; k--);
}
}
//----------------------------
补充提问:0123不是同时亮,而是0 1 2 3 按顺序亮,再1234按顺序亮...

回答补充提问,改动如下:

#include<reg52.h>
#include<intrins.h>
void main()
{
unsigned char a, b, c, i, j, k;
a = 0xfe;
while(1) {
b = a;
for(c = 0; c < 4; c++) {
P1 = b;
b = _crol_(b, 1);
for(i = 8; i > 0; i--)
for(j = 250; j > 0; j--)
for(k = 250; k > 0; k--);
}
a = _crol_(a, 1);
}
}

⑨ 51单片机流水灯程序

程序如下:

#include <reg52.h>

sbit led1 = P2^0;

sbit led2 = P2^1;

sbit led3 = P2^2;

sbit led4 = P2^3;

sbit led5 = P2^4;

sbit led6 = P2^5;

sbit led7 = P2^6;

sbit led8 = P2^7;


void main()

{

int i,j;

//点亮第一个灯

led1 = 1;

led2 = 0;

led3 = 0;

led4 = 0;

led5 = 0;

led6 = 0;

led7 = 0;

led8 = 0;

//延时1秒

for(i = 0;i < 110; ++i)

{

for(j = 0; j < 1000; ++j)

{

;//什么也不做

}

}

//点亮第二个灯

led1 = 0;

led2 = 1;

led3 = 0;

led4 = 0;

led5 = 0;

led6 = 0;

led7 = 0;

led8 = 0;

//点亮剩余的灯

//省略……

while(1);

}

(9)51单片机8个流水灯编程扩展阅读:

流水灯几点说明:

void:因为该延时函数不需要返回值,所以写为void

delay1s:该函数的函数名,命名需要符合C语言的标识符命名规则。

(): 不需要传入参数,所以括号中为空

至此我们可以把流水灯程序写为以下形式:

⑩ 51单片机汇编控制8个流水灯

思路:

  1. 循环控制常亮状态的值,将其从最高位循环到最低位。这个用于最后状态的常亮

  2. 在常亮循环中,控制不是常亮的其它所有位进行再次循环,逐渐从最低位亮灭循环到最高位

代码如下:

#include<reg51.h>

unsignedcharPData;//整体结果
unsignedcharCurrData;//变化的最高位

//延时,本函数是非精确延时,若需要精确延迟则需要根据本函数的汇编语句进行精确计算后调整循环体次数
voiddelay(unsignedintms){
unsignedchari;
while(ms--){
for(i=0;i<120;t++){
;
}
}
}


voidmain(){
unsignedchari=0,j=0;
PData=0x00;//全灭状态
for(i=8;i>0;i--){//控制常亮的位置,先从最高位开始,依次循环到最低位
for(j=0;j<i-1;j++){//从最低位循环到不是常亮的最高位
P1=~(PData+(1<<j));//第i位亮
delay(500);
P1=~PData;//第i位灭
delay(500);
}
PData=PData+(1<<(i-1));//置最高位为常亮状态
P1=~PData;
delay(500);
}
//停机
while(1){
;
}
}
热点内容
柱子箍筋加密区长度 发布:2025-05-14 10:18:29 浏览:351
云服务器和内网穿透哪个好 发布:2025-05-14 10:16:41 浏览:627
安徽新能源网络配置是什么 发布:2025-05-14 10:06:24 浏览:631
pinode搭建服务器 发布:2025-05-14 10:04:23 浏览:4
电脑服务器ip名称 发布:2025-05-14 10:01:09 浏览:749
connectorpython 发布:2025-05-14 09:48:50 浏览:763
配置不好怎么办 发布:2025-05-14 09:46:40 浏览:623
数据流程图中的数据存储是指 发布:2025-05-14 09:46:39 浏览:445
我的世界服务器id前缀mod 发布:2025-05-14 09:45:53 浏览:831
完整后台网站源码 发布:2025-05-14 09:45:46 浏览:455