AVR单片机教程――按键状态

匿名 (未验证) 提交于 2019-12-03 00:08:02

好久没更新了,今天开始继续,争取日更。

今天我们来讲按键。开发板的右下角有4个按键,按下会有明显的“咔嗒”声。如何检测按键是否被按下呢?首先要把按键或直接或间接地连接到单片机上。与之前使用的4个LED不同,4个按键没有全部连接到单片机上――左边2个是连接的,右边2个通过按键上方标有B2、B3的接口引出(从左到右分别为B0、B1、B2和B3)。如果要使用B2、B3,要用杜邦线连接到16个单片机引出针脚上。

<ee1/button.h>这里是库函数手册。值得一提的是1.1版本的库中,换用枚举类型表示按键等设备,不再使用整数与宏定义(但用整数也是兼容的)。在Atmel Studio 7.0中写代码时,编辑器会提示函数接口,可以根据参数类型知道应该写什么。

对于单片机而言,按键是一种输入设备。程序都有零个或若干个输入,一个或多个输出,而我们学过的唯一一种输出设备就是LED。所以理所当然地,今天我们要用按键来控制LED:按键按下,LED亮起;按键抬起,LED关闭;4个按键分别对应4个LED。

我们先来实现一个简单的版本――只考虑一个按键和一个LED。

button_downbutton_down

 1 #include <ee1/led.h>  2 #include <ee1/button.h>  3   4 int main(void)  5 {  6     led_init();  7     button_init(PIN_NULL, PIN_NULL);  8     while (1)  9         led_set(LED_RED, button_down(BUTTON_0)); 10 }

led_setled_set

LED_REDBUTTON_0fori

 1 #include <ee1/led.h>  2 #include <ee1/button.h>  3   4 int main(void)  5 {  6     led_init();  7     button_init(PIN_0, PIN_1);  8     while (1)  9     { 10         for (int i = 0; i != BUTTON_COUNT; ++i) 11             led_set(i, button_down(i)); 12     } 13 }

注意将B2、B3分别连接到端口0和1上。你当然可以改变连接的端口,但也要相应地修改初始化参数。

iBUTTON_COUNT - 1LED_COUNTled_set

现在你已经学会如何读取按键状态了。但有时候我们关心的是按键被按下这一动作,而动作是不能仅由一个状态表示的,下一篇教程将介绍实现方案。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!