1. 首页 > 科技

51单片机按键控制LED? 单片机一个按键控制四个灯

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();