单片机怎么用简单按键控制LED

发布网友 发布时间:2022-04-22 09:57

我来回答

4个回答

热心网友 时间:2023-09-21 23:08

给你个C语言的
#include<stc.h> //头文件
sbit jian=P1^0;
sbit LED=P1^1;
void ys(unsigned int ); //声明延时函数
void main()
{
while(1)
{
LED=1; //让LED点亮,其实这条语句可以不写,因为单片机的IO口默认就是高电平
if(jian==0) //判断按键是否按下
{
ys(1000); //延时消抖
if(jian==0) //再次判断按键是否按下,这条语句很有必要。
{
LED==0; //LED 熄灭
}
}
}
}
/*延时函数*/
void ys(unsigned int i)
{
unsigned x;
for(x=0;x<5000;x++)
for(x=0;x<a;x++);
}

程序是在这里编写的,不是用编译器,可能存在语法错误

热心网友 时间:2023-09-21 23:09

KEIL C51语言
#include <REG51.H>
sbit K1 = P1^0;
sbit LED = P1^1;
main(void)
{
LED=0;//初始化LED灭
while(1)LED=~K1;//读按键状态取反后送LED显示
}

KEIL汇编语言
ORG 000H;程序开始
CLR P1.1;初始化LED灭
MAIN:;程序标号
MOV C,P1.0;读按键状态送C寄存
CPL C;取反键值
MOV P1.1,C;键值送LED显示
SJMP MAIN;转移到MAIN
END追问顺便:我用的是STC12C5A60S2,这个单片机可以用吗?
还有led两端的电压很低,只有1.76V(按下时),给单片机的电压有4.96V。

追答可以用REG51.H头文件
我这个方法不需消抖,你可以下载到单片机看效果

电压很低因为P1.1接LED到地,单片机内上拉很弱,你要设置P1.1为强上拉
有关强上拉设置方法请参考STC12C5A60S2手册

热心网友 时间:2023-09-21 23:09

  #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秒后灭
  }

  }
  }

热心网友 时间:2023-09-21 23:10

ORG 0000H
LJMP START
ORG 0100H

START:
mov c,p1.0 //把p1.0的按钮信息读进来
cpl c //取反
mov p1.1,c //输出到p1.1
sjmp start //循环
END追问用KEIL c51编写,否则我看不懂,还有不是说了用按键开关吗(抖动)?

追答就是用keil编写的 还仿真过了

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com