c语言延时程序_如何在程序中编写按键的控制语句呢?

按键即微动开关,本身不能自锁。今天我们通过三个程序举例如何在程序中编写按键控制语句。

一、三个制作中用到的电路图以及元器件清单相同。

1.电路

dd3c31cce05beba40285bb9f5c2f769a.png

“按键与LED”电路图

2.元器件清单

b5666a7b64f096190328d21c5182d672.png

二、一键无锁控制LED

即按下LED点亮,放手LED熄灭。

1.程序设计(3.12.1)

#include //头文件

sbit LED=P1^0;//定义LED引脚

sbit KEY=P3^2;//定义按键引脚

void main()

{

while(1)

{

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

{

LED=0;//LED点亮

}

else

{

LED=1;//LED熄灭

}

}

}

2.程序解释

“if(KEY==0)”注意判断按键是否按下,要用“==”而不是“=”;如果按键按下,LED点亮,否则熄灭。

“= =”与“=”有什么区别,如何正确使用。

用“= =”用于判断语句,而“=”是赋值的含义,比如“LED=0;”将“0”赋值

三、一键自锁控制LED

按一下LED点亮,再按一下LED熄灭。

1.程序设计

#include //51头文件

sbit LED=P1^0;

sbit KEY=P3 ^ 2;

void main(void)

{

while(1)

{

if(KEY == 0)//判断按键状态

{

LED =~LED;//变化灯的状态

}

}

}

2.程序解释

“~”,取反的符号,如果原来是高电平,取反后就为低电平,原来是低电平取反后就是高电平。通过判断按键状态,不断取反操作而实现LED状态变化。

将程序下载后,你将发现,按键有时并不怎么听话,这个程序有问题,问题在哪儿?需要处理按键防抖。

3.C语言基础知识

按键防抖

当按下按键时,由于金属弹片的作用,不能很快闭合稳定,放开时也不能立刻断开,闭合稳定前后称为按键抖动,消除抖动可以通过程序或者硬件电路实现,通常通过程序完成。

c98142224566d7a9c570f535da3ad16a.png

按键抖动

如何用程序来实现呢?从上图中可以看出,当检测到按键状态变化,先延时一段时间(一般为10~20ms),绕开不稳定状态(前沿抖动),然后再检测一次按键状态,如果与前面检测的状态相同,说明已经进入“闭合稳定”。

4.改进程序

#include //头文件

sbit LED=P1^0;

sbit KEY=P3 ^ 2;

void delay(unsigned int a)

{

unsigned int i,j;

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

for(j=110;j>0;j--);

}

void main()

{

while(1)

{

if(KEY == 0)//判断按键状态

{

delay(20);//延时20ms

if(KEY == 0)//再次判断按键状态

{

LED =~LED;//变化灯的状态

while(KEY == 0);//等待按键松开

}

}

}

}

解释:

两次检测按键状态,确保按键真正按下。按键消除抖动程序非常重要,在设计按键控制的电路中,一定要加上消除抖动程序。“while(KEY==0);”该条语句是等待按键释放,检测到按键释放后,跳出循环体。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值