设计一个LED流水灯电路并写出程序.

设计一个LED流水灯电路并写出程序.,第1张

#include<reg51h>

#define uchar unsigned char

#define uint unsigned int

void Delayms(uint x)

{

uint i,j;

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

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

}

void main(){

uchar i,j;

while(1)

{

j=0x01; //8个流水灯逐个闪动

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

{

P0=~j;

Delayms(300);

j<<=1;

}

j=0x80; //8个流水灯反向逐个闪动

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

{

P0=~j;

Delayms(300);

j>>=1;

}

}

}

#include <reg52h>

#define LED P0 /宏定义LED接于P0口/

void delay (int); /声明延迟子函数/

main()

{

int i;

while(1)

{

LED=0xfe;

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

{

delay(100);

LED=(LED<<1)|0x01; /最低位LED灯左移一位后进行或运算使得最低位不会为“0”/

}

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

{

delay(100);

LED=(LED>>1)|0x80; /最低位LED灯右移一位后进行或运算使得最高位不会为“0”/

}

LED=0xff;

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

{

delay(300);

LED=~LED; /所有的LED灯取反全亮或者全灭/

}

}

}

#include <reg52h> //52系列单片机头文件

#define uint unsigned int //宏定义

sbit led1=P1^0; //声明单片机P1口的第一位

void delay1s(); //声明子函数

void main() //主函数

{

while(1) //大循环

{

led1=0; /点亮第一个发光二极管/

delay1s(); //调用延时子函数

led1=1; /关闭第一个发光二极管/

delay1s(); //调用延时子函数

}

}

void delay1s() //子函数体

{

uint i,j;

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

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

}

首先要看Led灯和单片机的连接情况,如果只是控制亮灭,只需要看单片机端口控制即可,关键是配置端口的DDRx方向寄存器和PORTx数据寄存器,比如端口A的0引脚控制一个灯,要配置它的输出高电平或是低电平以达到控制灯的亮灭,那就

灯亮:

DDRA |= BIT(0); //输出

PORTA |= BIT(0);//高电平

灯灭:

DDRA |= BIT(0); //输出

PORTA &= ~BIT(0);//低电平

其余的就看你电路如何连接的,每个端口寄存器的每一位控制一个引脚,你可以查查芯片的数据手册,上边有个表格的。

如果你要控制灯的亮暗程度,选择使用PWM输出来控制,需要看定时计数器。

方法:

1:设定一个变量i,可以从0到3循环的变化

2:检测一个经过消抖处理的按键,按一下,i+1

3:当i值为各个值时,执行相应的花样。

流水灯参考程序

#include

#include

#define uchar unsigned char

uchar j,temp;

void delay(unsigned int ms)

{

uchar t;

while(ms--)

for(t=0;t<123;t++);

}

void main()

{

P1=0xff;

delay(500);

temp=0xfe; //有点怪,led接在P23~P26

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

{

P1=temp;

delay(500);

temp=_crol_(temp,1);

}

P1=0xff;

while(1);

}

#include<reg51h>

#define uchar unsigned char

sbit c10=P1^0;

sbit c11=P1^1;

sbit c12=P1^2;

sbit c13=P1^3;

uchar led1,led3;

void delay(uchar a)

{

uchar i,j;

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

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

}

main()

{

uchar keyval=0xff;

led1=0xfe;

led3=0xf8;

while(1)

{

if(c10==0)

{

delay(10);

if(c10==0)

{

while(c10==0);

keyval=0;

}

}

if(c11==0)

{

delay(10);

if(c11==0)

{

while(c11==0);

keyval=1;

}

}

if(c12==0)

{

delay(10);

if(c12==0)

{

while(c12==0);

keyval=2;

}

}

if(c13==0)

{

delay(10);

if(c13==0)

{

while(c13==0);

keyval=3;

}

}

switch(keyval)

{

case 0:

P0=led1;

led1=(led1<<1)|0x01;

if(led1==0xff)led1=0xfe;

delay(100);

case 1:

P0=led1;

led1=(led1>>1)|0x80;

if(led1==0xff)led1=0x7f;

delay(100);

case 2:

P0=led3;

led3=(led3<<1)|0x01;

if((led3&0xf0)==0x30)led3=0x3e;

if((led3&0xf0)==0x70)led3=0x7c;

if((led3&0xf0)==0xf0)led3=0xf8;

break;

case 3:

P0=led3;

led3=(led3>>1)|0x80;

if((led3&0x0f)==0x0c)led3=0x7c;

if((led3&0x0f)==0x0e)led3=0x3e;

if((led3&0x0f)==0x0f)led3=0x1f;

break;

default:break;

}

}

}

#include<reg51h>

#define uchar unsigned char

uchar led[5]={0x7e,0x3c,0x18,0x00,0xff};

uchar num;

sbit key=P1^0;

main()

{

P0=0xff;

num=0;

while(1)

    {

    if(key==0)

        {

        while(key==0);

        P0=led[num];

        num++;

        num%=5;

        }

    }

}

以上就是关于设计一个LED流水灯电路并写出程序.全部的内容,包括:设计一个LED流水灯电路并写出程序.、利用单片机控制八个led灯,要求:全亮全灭 ,四亮四灭,以从右到左的 流水形式编程,不是用c语言 编、单片机控制一个led灯亮灭C编程等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/zz/9316829.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存