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灯的亮灭...