焊接资讯

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

led灯

独立按键控制led灯原理图(单片机按键控制LED灯)

工品易达2022-11-16led灯13

51单片机一个按键控制2个LED灯产生四种状态的 电路图怎么做啊。

0 0

1 1

1 0

0 1

是这样的四种状态吗? 这样很简单的,, 主要还是检测按键, 按键按下 你把一个变量+1, 比如

if(Key == 0)

{

delay(); //延时10ms,延时函数 自己写吧

if(Key == 0)

{

num++;

if(num = 4)

num = 0;

while(!Key);

}

}

然后根据num 的值 对Led进行状态刷新就好了。

switch(num)

{

case 0: Led1 = 1; Led2 = 0; break;

case 1: Led1 = 0; Led2 = 1; break;

case 2: Led1 = 0; Led2 = 0; break;

case 3: Led1 = 1; Led2 = 1; break;

default : break;

}

就可以了,,,顺序的话 可以按照具体要求更换下位置就可以了。

用c语言编程三个按键对应点亮三个LED灯的程序,AT89S52单片机,最好有原理图,谢谢。急求

这个也求?用按键点亮LED灯这个是51入门最基础的东西,真心想学的话,买块51的开发板,都带有例程,很快就可以入门的。建议你还是多看看资料把基础的东西学好。推荐你看一下《十天学会单片机和C语言编程》的视频教程对入门还是不错的。

三路抢答器提供你编程思路(按键扫描方式)参考,程序还是要根据你的硬件电路自己编写。

端口配置:

1、选择4个端口作为输入端口连接按键(独立按键,按键一端接单片机端口,另一端接地)。 三路为抢答的按键KEY1、KEY2、KEY3,一路为抢答后复位按键KEY0。

2、选择3个端口作为输出端口连接LED灯(高电平点亮还是低电平点亮要看你电路设计)对应为LED1、LED2、LED3。

编程思路:

1、初始设置一个抢答键按下与否的位标志变量:bit flag = 0;(没有抢答按键按下flag = 0,有抢答按键按下flag = 1)。

2、主程序按键扫描循环。

3、按键按下程序KEY1、KEY2、KEY3基本相同。以KEY1为列:

首先判断是否有抢答键按下(KEY1==0),如有抢答按键按下,延时10ms(消抖),再判断是否KEY1==0,如果KEY1==0说明KEY1抢答按键已经按下,然后再判断是否flag = =0,如果flag = =0,则点亮LED1(其他按键按下的话点亮相应的LED灯)、按键按下标志置“1”(flag = 1)。

4、复位按键程序判断KEY0按下并且flag = =1时,关闭所有LED灯、按键按下标志复位置“0”(flag = 0)。

求两个独立开关控制点亮一个led灯的原理图?

1. 双控开关基础电路图当K1扳到1位置的时候,k2扳到3位置,电路接通,电灯亮,此时,再扳动任何一个开关,都能使电灯熄灭。这属于两地开关控制

要求用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单片机:两个独立按键控制一个led,k1按下松开led闪烁,k2按下松开led灭?

#include "reg52.h"

typedef unsigned int u16;

typedef unsigned char u8;

sbit led=P2^0;//把所要控制的led灯定义为p2.0这个口

sbit k1=P2^1;

sbit k2=P2^2;

void delay(u16 i)

{

while(i--);

}//一个延时程序

void main()

{

if(k1==1)

while(1)

{

led=1;

delay(50000); //大约延时450ms

led=0;

if(k2==1)

break;

}

led=0;

}

思路很简单,就是用检测的方法去扫描相应的按键是否被触发,然后执行相应的子程序。

关于独立按键控制led灯原理图和单片机按键控制LED灯的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。微信号:ymsc_2016

发表评论

评论列表

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