51单片机protues仿真学习:[15]按键开关小灯

 时间:2024-10-28 17:25:03

通常的按键所用开关僭轿魍儿为机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上圳袒膏缯稳定地接通,在断开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动,为了不产生这种现象而作的措施就是按键消抖。

51单片机protues仿真学习:[15]按键开关小灯

抖动时间抖动时间的长短由按键的机械特性决定,一般为5ms~10ms。这是一个很重要的时间参数,在很多场合都要用到。按键稳定闭合时间的长短则是由操作人员的按键动作决定的,一般为零点几秒至数秒,大家可以用示波器测试一下。键抖动会引起一次按键被误读多次。为确保CPU对键的一次闭合仅作一次处理,必须去除键抖动。在键闭合稳定时读取键的状态,并且必须判别到键释放稳定后再作处理。

消抖有硬件消抖和软件消抖,这里硬件消抖不做分析,如有兴趣可以查阅相关资料

这里主要讲的是软件消抖

分析思路:

IO口去读取数值,是否为0,当读取到0时,延时10ms,再次读取是否为0.当确实是0的时候,说明按键按下。检测是否按键松掉,执行语句

程序如下:

If(key==0)//按键按下

{

Delay_ms(10);//延时10ms

If(key==0)//确认按键按下

{

执行语句;//按照题目要求编写

}

While(!Key);//等待按键释放

}

那怎么用一个开关控制一个小灯的开和关呢?仿真图如下:

51单片机protues仿真学习:[15]按键开关小灯

程序:

#include<reg52.h>

#defineuintunsignedint

#defineucharunsignedchar

voiddelay_ms(uint);

sbitled0=P0^0;

sbitkey1=P3^2;

voidmain()

{

uchari;

while(1)

{

if(key1==0)

{

delay_ms(10);

if(key1==0)

{

i++;

i=i%2;

switch(i)

{

case0:led0=1;break;//关小灯

case1:led0=0;break;//开小灯

default:break;

}

}

while(!key1);

}

}

}

voiddelay_ms(uintz)//延时子程序

{

uintx,y;

for(x=z;x>0;x--)

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

}

keil uvision4怎么用 如何在Proteus画布中添加矩形工具 LabVIEW中数值控件介绍 proteus蜂鸣器不响? PCtoLCD2002完美版如何快速生成字模
热门搜索
美女性感图片 落叶图片 不良少女 栀子花图片 阿里图标