独立按键控制led灯原理图(单片机按键控制LED灯)
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
相关文章
发表评论
评论列表
- 这篇文章还没有收到评论,赶紧来抢沙发吧~