用户登录
用户注册

分享至

流水灯软件 单片机流水灯程序

  • 作者: 经肛鉆
  • 来源: 51数据库
  • 2020-04-18

我是一名多年的单片机工程师,下面的程序你参考一下

效果图

程序如下:

#include<reg52.h>

#include<intrins.h>

#define uchar unsigned char

#define uint unsigned int

uint i;

uchar j;

void delay_ms(uint k) //延时子程序

{

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

{

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

{

;

}

}

}

main()

{

uchar a,b;

P1=0xfe;

delay_ms(500);

b=P1;

while(1)

{

for(a=0;a<3;a++)

{

b=_crol_(b,1);

P1=b;

delay_ms(500);

}

P1=0xf0;

delay_ms(500);

P1=0xfe;

delay_ms(500);

b=P1;

}

}

如果你想学习更多单片机和程序的知识,可以看看我整理好的“17个实验学会单片机”,百度一下“17个实验学会单片机”就可以看到在首页了。

流水灯程序设计

很简单啊

你没有说是用C语言编写还是用汇编啊

(汇编我还没学)

=======================

电路可以这样设计,

①P3口接4*4矩阵键盘或是直接接8个按键。

②P0口、P2口 合起来共16个I/O口,直接接16个发光二级管。

注意I/O口接三极管的负极,三极管正极串上一个1K的保护电阻,然后接+5V。

别忘了P2口的上拉电阻,用10*8的排阻就行(排阻公共端接+5V)

其他的就是复位电路、晶振、电源、程序下载口了,都比较简单,而且都是固定模式。

指示灯直接用发光二级管串分压电阻接到电源就行了。

电源可以用7805稳压(输入电压>5V时),或者直接用5V电就行了。

=====================================================================

写程序方面:

数量比较多,流水灯设计宜用位操作,

①流水灯

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

{

P2=~pow(2,i);delay(500);

}

这样就是8位流水灯了

剩下的8个一样。

delay是一个延时函数,就是让单片机空转消耗时间,可以这样

delay(int time)

{int x=0,y=0;

for(x=0;x<time;x++)

for(y=0;y<100;y++);

}

②16灯逐个点亮。

P2=0xff;(开始8个灯都灭)

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

{

P2=P2--;(每次点亮一盏灯)

delay(500);

}

这样就可以8位的流水灯

另外8个接下来一样的方法点亮,

这样就是16灯逐个点亮。

============

③逐渐点亮一个灯

用延时长短来控制

sbit P20=P2^0;

int m=500

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

{

P20=1;delay(m);(灭P2.0口的灯)

P20=0;delay(500-m);(亮P2.0口的灯)

m--;

}

这样就可以500级渐亮一个灯了。

渐灭类似。

④ A-D-A

循环可以用for()来实现

或者直接来有条件跳转。

goto就行了

=========================

说的比较零碎,自己整合一下就OK;

解释一下这个流水灯程序

#include<reg51.h> //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; //将temp取反再赋值给P1口

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

temp<<=1; 流水灯左移

}

temp=0x7F; //给初值,第一个灯亮。

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

{

P1=temp; //将temp赋给P1

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

temp>>=1; //流水灯右移

}

}

}

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

{

register uint bt;

for(;t;t--)

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

}

temp 是自己定义的。名字可以随便取,没实际意义。是一个中间变量。。。

流水灯闪烁PLC程序图

拿走,不用谢

请在此输入您的回答

请问,哪个是计数器版,哪个是定时器版

定时器版的,没写计数器

用keil写的来回流水灯程序,要求左右来回的

#include <reg52.h>

#include <intrins.h>

#define uchar unsigned char

#define uint unsigned int

void DelayMS(uint x)

{

uchar t;

while(x--)

{

for(t=120;t>0;t--);

}

}

void main()

{

uchar i;

P2=0x01;

while(1)

{

for(i=7;i>0;i--)

{

P2=_crol_(P2,1);

DelayMS(150);

}

for(i=7;i>0;i--)

{

P2=_cror_(P2,2);

DelayMS(150);

}

}

}

不懂就问,要根据你电路图的连接来适当调整管脚定义。更多

把这个写成左右的流水灯怎么写?

你写的有点啰嗦了,j和k要了干嘛,

还有_crol_是循环左移,你移完了不延时的话也看不出来啊,所以要用一个for循环,每移动一次就延时一次。

把我上面程序里的P2改成P1就可以了。

可不可以把每步的意思告诉我

#include <reg52.h>

#include <intrins.h>//这个就是循环移位的头文件

#define uchar unsigned char//这个应该知道的吧

#define uint unsigned int

void DelayMS(uint x)//延时函数

{

uchar t;

while(x--)

{

for(t=120;t>0;t--);

}

}

void main()

{

uchar i;

P2=0x01;//给P2管脚赋值,P2连的是发光二极管

while(1)

{

for(i=7;i>0;i--)//移7次

{

P2=_crol_(P2,1);//循环左移,每次移一位

DelayMS(150);//延时一下,这样人眼就能看出来,不延时的话人眼不能识别,机器处理的太快

}

for(i=7;i>0;i--)

{

P2=_cror_(P2,2);//循环右移,每次2位

DelayMS(150);

}

}

}

一键多控流水灯汇编语言怎么写,软件是keil

一键多空流水灯汇编语言程序编写方法是:设置一个变量,来检测按键的次数,从而控制程序分支来达到控制不同流水灯的效果例如:

ORG 0000H

LJMP MAIN

ORG 0030H

MAIN:

MOV R6,#0FEH

MOV R7,#0

LOOP:

JB P1.0,LOOP1

JNB P1.0,$

INC R7

CJNE R7,#2,LOOP1

MOV R7,#0

LOOP1: ;奇数次按键左向流水灯

MOV A,R7

JNZ LOOP2

MOV A,R6

MOV P0,A

RL A

MOV R6,A

LCALL DELAY

SJMP LOOP

LOOP2: ;偶数次按键右向流水灯

MOV A,R6

MOV P0,A

RR A

MOV R6,A

LCALL DELAY

LJMP LOOP

DELAY:

MOV R2,#200

DL1:

MOV R3,#250

DJNZ R3,$

DJNZ R2,DL1

RET

END

如何用单片机简单制作一个流水灯

  1. 工具:STC系列51单片机、串口转换器(USB转TTL 或232转TTL)

  2. 材料:实验板一块(可以买现成的,也可以买面包板自己搭建),电阻、LED灯 若干,5V电源等。

  3. 以下程序可以直接用Keil C 直接编译执行。

//可以通过左移函数_crol_()和右移函数_cror_()来实现LED等的来回流动。

//具体实现方法可以参考如下程序:

#include<reg51.h>

#include<intrins.h>

#defineuintunsignedint

#defineucharunsignedchar

voiddelay(uinta);

voidmain()

{

P1=0xfe;

while(1)

{

//向左循环点亮LED

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

{

P1=_crol_(P1,1);//左移一位,点亮下一位LED

delay(55);

}

//向右循环点亮LED

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

{

P1=_cror_(P1,1);//右移一位,,点亮上一位LED

delay(55);

}

}

}

//延时函数,延时a毫秒

voiddelay(uinta)

{

uintx,y;

for(x=a;x>0;x--)

for(y=110;y>0;y--);

}

转载请注明出处51数据库 » 流水灯软件 单片机流水灯程序

软件
前端设计
程序设计
Java相关