51单片机按键控制LED? 单片机一个按键控制四个灯
单片机怎么用简单按键控制LED
#include "reg52.h"
#define uchar unsigned char
#define uint unsigned int
sbit led =P1^0;//假设灯在P1.0
sbit key1=P2^0;//假设按键在P2.0和P2.1
sbit key2=P2^1;//
void delay_1s(uint x)//延时
{
uint y;
uint z; //如果延时不够长可以把z的值加大
while(x--)
{
for(y=0;y<50000;y++)
{
z=200;;
while(z--);
}
}
}
void main(void)
{
led=1; //不亮
while(1)
{
if(key1==0 && key2==1)//按键1按下,按键2没按
{
led=0; //亮
}
else if(key1==1 ) //按键1释放或未按时,灯灭
{
led=1; //灭
}
if(key2==0 && key1==1) //按键2按下,按键1没按
{
led=0; //先亮
delay_1s(30); //等30秒
led =1 ; //30秒后灭
}
}
}
单片机C语言按键控制LED灯
其实是一样的,也没什么哪个规范这一说,这个看个人习惯了
首先if(SW13==0)是判断此引脚是否为0 (按键按下)
然后一个delay用于按键防抖动
没被注释的那部分是靠if在次判断是否为0按下按下后执行LED_ON函数使LED亮
然后通过while判断按键是否松开,如果松开的话就继续执行LED_OFF将LED关闭
而注释掉的那段是依靠while函数直接判断按键是否处于按下状态
是的话就循环执行LED_ON函数直至判断按键松开(SW13=1)后在继续执行到LED_OFF函数使LED 关闭
不过这两种写法的有个共同缺点就是按键判断是while死循环,如果你这个按键按下后,单片机就只是在判断这个条件成立与否,期间不在进行其他工作
51单片机编程—按键控制LED灯
if(!KEY2)//假设按键低电平有效
{
DelayMs(5);//延时2~10ms,按键消抖
if(!KEY2);//按键仍被按下,说明不是抖动
{
LED=~LED;//自己定义一下LED到对应IO
BUZZER=~BUZZER;//定义蜂鸣器到对应IO
}
}
51单片机 按键控制LED循环控制点亮
设置一个delay_2s()就是:
delay_2s()
{
for(i=0;i<200;i++)
{
for(j=0;j<200;j++)
}
} 具体要看你的晶振大小
然后
void main()
{
uchar temp = 0x01;
while(1)
{
Keyscan();
if(KEY)
{
delay_2s();
P0 = temp
delay_2s();
temp <<=1;
i++;
if(i>=7)
{
i = 0;
temp = 0x01
}
}
}
}
很容易理解就是让0X01一直左移赋值给P0口然后循环,还有就是入口你得做按键扫描程序Keyscan();