创客联盟网
标题:
最简按键——按一下亮灯再按一下灭灯
[打印本页]
作者:
CCFIVE
时间:
2013-8-16 15:37
标题:
最简按键——按一下亮灯再按一下灭灯
在按键实验的时候,我们学习了用上拉电阻,把接按键检测那个引脚平时钳制在高电平,只有当按键按下才检测到低电平。那有没有更简单的方法呢?
有滴!avr芯片其实引脚内部集成了上拉功能,所以我们做按键实验的时候,如果用上了引脚内部的上拉功能,就再也不用接10K上拉电阻啦
那么如何启动上拉功能呢?
秘密就在引脚初始化的时候:
平时是这样的:pinMode(X,INPUT)
现在是这样的:pinMode(X,INPUT_PULLUP)
PULLUP就是上拉的意思。
那么引脚内部有没有下拉功能呢?是没有的!
另外我们之前做的按键实验是,按住才亮灯,不按就不亮,现在我想要的现象是:按一下亮灯再按一下灭灯
这个程序应该怎么写呢?
如果你把之前的实验做成功了,这个也不会太难,照猫画虎,只是多了一次按键检测。之所以第一次的按键时间没教大家做这个实验是,怕大家理解不了,所以没讲,现在大家入门了。那就来试下这个相对难度大一点的吧!程序那里写了注释,大家理解下就好
硬件接线:
LED正极>>A0
LED负极>>GND(-)
按键一脚>>7
按键另一脚>>GND(-)
程序:
[mw_shl_code=cpp,true]const int button = 7;
const int led = A0;
int flag = 0;
int buttonstate=1;
void setup()
{
pinMode(button, INPUT_PULLUP);
pinMode(led, OUTPUT);
}
void loop()
{
int buttonstate = digitalRead(button); //读回按键状态,按下低电平
if(buttonstate == LOW) //判断按键状态是否为低电平
{
delay(15); //按键感觉不灵敏,可以修改下左右时间
buttonstate = digitalRead(button); //再读一次,为了躲过按键抖动干扰
if(buttonstate == LOW)
{
flag = !flag;
digitalWrite(led, flag);//亮,灭LED
while(!digitalRead(button));//等待按键释放
}
}
}[/mw_shl_code]
点击编译下载,然后我们就可以看到现象啦!
(, 下载次数: 65)
上传
点击文件名下载附件
下载积分: 贡献 -1
(, 下载次数: 67)
上传
点击文件名下载附件
下载积分: 贡献 -1
(, 下载次数: 70)
上传
点击文件名下载附件
下载积分: 贡献 -1
欢迎光临 创客联盟网 (https://immaker.org/)
Powered by Discuz! X3.3