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设...
单片机 编写程序,让 LED 灯闪烁三次后熄 灭 ?单片机LED灯闪烁三次的代码应该能写吧,用for循环3次。然后停下,就是不再执行任何代码了,有一个死循环语句,while(1);这个就行了。单片机LED灯闪烁三次的代...
20 单片机 79f3212触摸开关控制 led 亮 灭 怎么写程序?是代表led灯亮或者灭的一个变量。当你按下开关后,s1==0,就执行led=!led这条语句。led=!led的意思就是取反的意思,即原来led灯亮的话执行...led应该是一个变...
按键控制 led 灯亮 灭 怎么解决?_住范儿家装官网要编界面可以用VC来编写,要控制单片机可以通过串口通信来实现。通俗一点说就是,计算机通过串口发送一个命令,如A5000000,单片机读SBUF后,判断收...
求一个51 单片机 的程序:一个按键控制 led 灯闪烁,就是按一下灯闪,再按灯就 灭 了?LEDBITP1.0KEYBITP1.1ORG0000HLJMPMAINORG0030HMAIN:CLR00HMAIN1:JBKEY,LOOPJNBKEY,$CPL00H...
51 单片机 C语言 如何写代码。控制2个 LED 的亮和 灭 。[最佳回答]比如你的8个灯连在P0口,如果是阴极的你只要先定义sbitP0^0=LED0;.....一定定义下去然后再定义一个按钮比如P1.1sbitP1^1=key;代码里写12...
单片机 控制 LED 灯1秒钟闪烁一次程序(采用中断方式)?你是想中断服务里读按键吧,硬件上提几点建议。1,按键加个104的去抖电容。2,中断口加上拉电阻。3,不用外部中断,采用定时器中断,在定时器中断服务程序中...
单片机 题十万火急只有半个小时~!1.使用80C51芯片,要求:(1)...[最佳回答]去我的博客上看吧,至少前面的一个好弄,有差不多的,后面那要求,你要看懂了才能写
用51 单片机 实现对一个 led 灯循环亮 灭 的控制,分别用延时和中断两种方式实现,c需要编程?什么叫延时,延时不就是中断么。内置的计时器,计时,计时完成产生中断,完成延时。什么叫延时,延时不就是中断么。内置的计时器,计时,计时完成产生中断,完成延时。
单片机 一个IO口如何控制两颗发光二极管( LED )?单片机的一个GPIO只能输出0和1两种状态,如果控制一个LED灯的话,可以实现LED的亮灭控制。两个LED具有四个状态:1)同时亮;2)同时灭;3)一个亮一个灭;4)一个灭...单...