技术文档

单片机控制led灯亮灭 51单片机中独立按键控制LED灯亮灭

小编 2024-10-06 技术文档 23 0

51单片机中独立按键控制LED灯亮灭

独立摁键的工作原理是电流脉冲;

独立摁键的电流脉冲原理

由于摁键机械点的弹性作用, 按键开关在闭合时不会马上稳定的接通, 在断开时也不会一下子断开, 因而在闭合和断开的瞬间均伴随着一连串的抖动。 抖动时间的长短由按键的机械特性决定的, 一般为 5ms 到 10ms。,需要使用delay函数来消抖。

实际使用过程中,常将摁键电路串联 引入51单片机的P1输入端 来控制电路。

独立摁键的连线示意图

如图示摁键,使用K1连接P1.0,控制P0.0的输出来控制LED开启。

函数:

编辑keypress摁键函数,控制led的亮灭;

编辑delay函数消抖,内嵌到keypress函数;

主函数调用keypress函数代码:

#include "reg52.h"

sbit led=P0^0;

sbit key=P1^0;

unsigned int u16;

unsigned char u8;

void delay(unsigned t)

{ while(t--);}

void keypress()

{while(1)

{ if(key==0)

{

delay(1000); //消抖函数

if(key==0)

{led=~led;}

}

while(!key); //检测按键是否松开,如果摁键未松开,则key==0,继续上述循环

}

}

void main()

{ led=0;

while(1)

{keypress();}

}

现象:

视频加载中...

用单片机仿真软件Proteus实现按钮控制LED亮灭

编程实现用LED指示单个按钮的状态

步骤:

(1)编程实现:按下按钮S1 发光二极管发光,放开按钮发光二极管熄灭;

(2)保存到“单片机练习三”文件夹中,命名为“LED指示按钮状态”;

(3)用仿真软件设计原理图,并进行仿真;

(4)把仿真结果保存到“单片机练习三”文件夹中,命名为“LED指示按钮状态”。

参考程序一:

ORG 0000H

START: JB P1.0, LOOP ;P1.0 口为低电平时,执行下一条指令,即执行CLR P0.0

CLR P0.0 ;P1.0 口为高电平时,跳转到LOOP 开头的指令,即执行

SETB P0.0

LJMP START

LOOP: SETB P0.0 ;P0.0 口输出高电平,即二极管熄灭

LJMP START

END

程序参考二:

/***********************************************************************************************************************************************

按一下灯亮,按一下灯灭

***********************************************************************************************************************************************/

#include<reg52.h>

sbit S1=P1^0; //将S1位定义为P1^0,检测独立按键

sbit led0=P0^0; //将led0定义为P0.0口的LED

/***********************************************************************************************************************************************

延时函数

***********************************************************************************************************************************************/

void delay(void)

{

unsigned int i;

for(i=5000;i>0;i--)

;

}

/***********************************************************************************************************************************************

主函数

***********************************************************************************************************************************************/

void main(void)

{

while(1)

{

if(S1==0) //判断是否有键按下

{

delay(); //有键按下,延时去抖,真正应用时要少用这种延时,占用时间,用定时器延时或一个寄存器循环检测10多次按键

if(F0==0) //用F0标志位判断键按下是否已经处理,因刚学C语言没多久,

//不知道怎么定义RAM能位寻址的寄存器,先用F0,按键多的话,一个F0不够用

{

F0=1; //F0置1,表示这次按键按下已处理

led0=~led0; //将LED亮灭状态取反

}

}

else //S1=1说明按键释放

{

F0=0; //F0清零,清按键已处理标志

}

}

}

相关问答

51 单片机 定时器中断 控制led灯亮灭 ?

1.在设置好TCON(IT0/1=0/1)寄存器,IE寄存器后当设定的外部中断电平被拉低时会执行中断程序,中断程序执行完毕后回到原程序执行处继续执行*2.外部中断TCON设...

C51 单片机 程序怎样 控制LED灯亮灭 时间?

在C51单片机中,可以通过编程来控制LED灯的亮灭时间。以下是一个简单的示例程序,用于控制LED灯的亮灭时间:c复制#include在C51单片机中,可以通过编程来控制LED...

单片机 编程里 控制LED灯 一闪一 的延时语句工作原理是什么?

单片机每执行一天机器码/语句,都是需要时间的。有机器周期,指令周期,时钟周期之分。那么单片机要延时就很简单了。就是做一些无关紧要的指令来达到消耗时间延...

点亮 单片机 中任意一个流水 灯亮灭 的C语言程序该如何做呢?

点亮单片机中任意一个流水灯亮灭的C语言程序该如何做呢?实现任意一个流水灯亮灭的程序非常好编程呀,这是入门级水准。首先我们规划好硬件电路部分,在这里使...

怎么用51 单片机控制 32个 led灯 但是不用完32个引脚,还要能实现很多方式的 亮灭 ,怎么实现?

用51单片机控制32个led灯,又不能全用32个IO引脚,还要能实现很多方式的亮灭,这很容易实现。扩展四个并行口就行了,一个并行口控制8个LED灯,最常用的是8位锁存...

stm32 单片机LED灯 常亮是怎么回事?

stm32单片机LED灯常亮是可能设置的时间太长。可以通过以下使其熄灭首先实现LED灯的点亮和熄灭,控制连接LED灯的管脚输出高低电平就可以实现。如果电流比较大可...

单片机LED灯 不亮问题!(初学者)?

P0如果不等于0,默认就是高电平。看电路,P0为高时,LED负极是高电平时,不导通LED肯定不会亮。P0如果不等于0,默认就是高电平。看电路,P0为高时,LED负极是高电平...

单片机 实验板上 led灯 不够亮,应该是程序的問題,可是该怎么改...

2、单片机工作电压设置问题(设低了呢?)3、这个IO口工作了么,有的默认是1点几...回复展开查看全部4条讨论相关问题OLED和LED哪个好?OLED和LED有什么区别...

单片机灯亮 怎么处理?

发生单片灯亮时,首先要确认线路问题。最有可能的问题,是开关控制的零线。这种时候要及时改正,以免发生危险,正确的做法是开关控制火线,零线接电路。如果电...

led灯 闪烁即亮1s 1s的程序?

1.LED灯闪烁即亮1s灭1s的程序是可以实现的。2.因为LED灯是一种电子元件,可以通过控制电流来实现亮灭。在程序中,可以通过控制GPIO口的电平来控制LED灯的亮灭...

猜你喜欢