焊接资讯

您现在的位置是:首页 > led灯 > 正文

led灯

51单片机控制8个led灯依次闪烁报告(51单片机闪烁一个led灯)

工品易达2022-11-04led灯25

要求用51单片机控制8个LED亮灭的原理图+程序+解说?

本来以为这个程序很简单的,没想到写了快三个小时。哎学艺不精啊。贴出来给你研究吧。我不想做过多的解释了,我是按我理解的你出的题目做的,可能和你的本意不是很一样,

1、依次亮,依次灭:从一个灯亮到全亮,再到全灭,每次改变一个灯亮灭

2、奇偶号灯间隔亮灭:隔一个灯亮一个灯亮灯时间为1s,没有灯全灭的时候

3、依次闪烁、切换时间为3秒,闪烁时间为2秒,我理解的是,没三秒钟有一个灯在闪烁,其中有一秒钟是灭灯状态

程序中使用了P1口与8个发光二极管相连,具体电路图你百度一下吧,还有使用了一个按键,该按键与P3.7相连,低电平为按下状态。

程序如下:

#include reg52.h

#include intrins.h

/*变量声明:

i、j、k都是记录计时器溢出次数的变量,

stat是记录当前显示状态的变量,由按键key控制

temp是状态2中保护P1口状态的变量*/

unsigned char i=0,j=0,k=0,stat=0,temp;

bit flag=1; //状态1处于灭灯还是亮灯状态的变量,1为依次亮灯,0为依次亮灯

sbit key=P3^7; //按键控制

void init(); //初始化函数

void delay(unsigned int N); //延时函数

void keyscan(); //键盘扫描函数

void main()

{

init();

while (1)

{

switch (stat)

{

case 0: //0方案

if(i==20flag)

{

i=0;

P1=P11; //依次亮灯

temp=P1;

if(temp==0)

{

flag=0;

}

}

if(i==20!flag)

{

i=0;

if(P1==0xff)

{

flag=1;

P1=0xfe;

}

if(!flag)

{

P1=P11; //依次灭灯

temp=P1;

P1=temp+1;

}

}

break;

case 1: //2方案

if(i==20)

{

i=0;

P1=~P1; //去反后亮灯状态为灭灯,P1初值取0x55或0xaa,奇偶交替亮灯

}

break;

case 2: //3方案

if(j==60)

{

P1=temp;

P1=_crol_(P1,1);

temp=P1; //保护P1口亮灯状态

k=0;

j=0;

}

//闪烁部分,应该可以优化

if(k5)

{

P1=0xff;

}

else if(k=5k10)

{

P1=temp;

}

else if(k=10k15)

{

P1=0xff;

}

else if(k=15k20)

{

P1=temp;

}

else if(k=20k25)

{

P1=0xff;

}

else if(k=30k35)

{

P1=temp;

}

else if(k=35k40)

{

P1=0xff;

}

//-----------------------------------

break;

}

keyscan();

}

}

void init()

{

TH0=0x3c; //定时器赋初值定时时间50ms

TL0=0xB0;

TMOD=0x01; //设置定时器工作方式为方式1

EA=1; //开总中断

ET0=1; //开中断允许位

TR0=1; //定时器计数

P1=0xfe; //这里假设led灯与P1口相连并且

//低电平有效

}

void delay(unsigned int N)

{

int i,j;

for (i=0;iN;i++);

for (j=0;j110;j++);

}

void keyscan()

{

if(!key)

{

delay(10); //消抖

if(!key); //确认有键按下

stat++;

if(stat==3)

{

stat=0;

}

//右键按下复位

i=0;

j=0;

k=0;

TH0=0x3c;

TL0=0xB0;

switch (stat)

{

case 0:

P1=0xfe;

flag=1;

stat=0;

break;

case 1:

P1=0x55;

break;

case 2:

P1=0xfe;

temp=P1;

break;

}

//-----------------------------------

while(!key) //此循环中的函数和主函数中的显示函数是同一个

//用于长按键的显示,可以去掉,去掉长按键不会正常显示,松开按键后正常

{

switch (stat)

{

case 0:

if(i==20flag)

{

i=0;

P1=P11;

temp=P1;

if(temp==0)

{

flag=0;

}

}

if(i==20!flag)

{

i=0;

if(P1==0xff)

{

flag=1;

P1=0xfe;

}

if(!flag)

{

P1=P11;

temp=P1;

P1=temp+1;

}

}

break;

case 1:

if(i==20)

{

i=0;

P1=~P1;

}

break;

case 2:

if(j==60)

{

P1=temp;

P1=_crol_(P1,1);

temp=P1;

k=0;

j=0;

}

if(k5)

{

P1=0xff;

}

else if(k=5k10)

{

P1=temp;

}

else if(k=10k15)

{

P1=0xff;

}

else if(k=15k20)

{

P1=temp;

}

else if(k=20k25)

{

P1=0xff;

}

else if(k=30k35)

{

P1=temp;

}

else if(k=35k40)

{

P1=0xff;

}

break;

}

}

}

}

void timer0() interrupt 1

{

TH0=0x3c;

TL0=0xB0; //溢出后重新赋初值

//定时器中断时间为50ms

i++; //20次中断时间为1s

j++; //40次中断时间为2s

k++; //60次中断时间为3s

}

有什么不懂的可以百度Hi我

单片机C51编程,要求实现8盏LED灯的闪烁,这样写可以实现吗?渣渣求助大佬,谢谢啦

主程序应该有两个延时,而且还要有主循环语句,否则只执行一遍。

void main()

{

while(1)

{

P1=0xff;

delay(500);

P1=0x00;

delay(500);

}

}

这个效果是8个灯,同时亮,同时灭的。

单片机 8个LED灯随机闪烁怎么做?

1、首先在电脑中新建项目:Keil uVision4 51单片机LED闪烁编程,如下图所示。

2、然后设计单片机端口与LED灯相连,如下图所示,输入代码。

3、接着创建延迟函数,如下图所示,输入以下代码。

4、然后创建C语言主函数,如下图所示,输入以下代码。

5、接着输入对输出取反,最后调用延迟函数,如下图所示就完成了。

51单片机8个led向左循环依次点亮,按一下开关后往右循环一次后继续向左循环

#includereg51.h

#includeintrins.h

#define uchar unsigned char

uchar time=0,num,led=0xfe;

bit flag=0;

sbit key=P2^0;

void t0isr() interrupt 1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

time++;

if(time=10)

    {

    time=0;

    if(flag==0)

        {

        P0=led;

        led=_crol_(led,1);

        }

    else

        {

        P0=led;

        led=_cror_(led,1);

        num++;

        if(num8)flag=0;

        }

    }

}

main()

{

TMOD=0x01;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

TR0=1;

ET0=1;

EA=1;

while(1)

    {

    if(key==0)

        {

        while(key==0);

        flag=1;

        num=0;

        }

    }

}

单片机控制8个灯依次亮,全亮了,再依次灭的c语言流程图,顺便加上解释,不然看不懂

1、创建项目,如图所示。

2、创建延迟函数。

3、创建C语言主函数。设计unsigned char k=0;变量。

4、添加循环效果。

5、点亮灯,通过k++,改变效果。

6、添加延迟效果,单片机就可以控制8个灯依次亮,全亮了,然后再依次灭。

利用单片机控制8个发光二极管,实现8个灯同时闪烁的控制程序

以51位例,使用P1的八个IO口控制。

先定义:

sbit

LED0=P1^0;

sbit

LED1=P1^1;

........

以此类推,定义八个。

然后在主循环中:

LED0=0;

延时一段时间;

LED0=1;

就可以看到闪烁了。

51单片机控制8个led灯依次闪烁报告的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于51单片机闪烁一个led灯、51单片机控制8个led灯依次闪烁报告的信息别忘了在本站进行查找喔。微信号:ymsc_2016

发表评论

评论列表

  • 这篇文章还没有收到评论,赶紧来抢沙发吧~