注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
574433742的个人空间 https://home.eeworld.com.cn/space-uid-391494.html [收藏] [复制] [分享] [RSS]
日志

SAMR21 LED和按键

已有 1520 次阅读2015-3-20 23:46 |个人分类:IoT

SAMR21 LED和按键
SAMR21 Xplained Pro开发板中有一个用户按键和一个用户LED灯。硬件连接图如下:

4-1LED&KEY电路图
可以看到用户按键是和PA28相连,然后另一端跟GND连接。
用户LED是和PA19相连,LED的另一端和3.3V相连。当PA19給低电平时点亮,高电平是熄灭。
基本原理很简单,现在打开AtmelStudio新建一个例子。

4-2Example程序
上面红色圈圈中的这个例子是让LED闪烁的延时函数,下载到开发板中,即可看到LED灯闪烁起来。
我们稍作修改,让按键来控制LED灯的亮灭,当按下按键时,LED点亮,当松开按键时LED熄灭。
在定义中可以看到
#define BUTTON_0_PIN              SW0_PIN
#define SW0_PIN                   PIN_PA28
/** \nameLED0 definitions
*  @{ */
#define LED0_PIN                  PIN_PA19
#define LED0_ACTIVE               false
#define LED0_INACTIVE             !LED0_ACTIVE
#define LED0 LED0_PIN
主要程序如下:
#include <asf.h>
int main(void)
{
       system_init();
       delay_init();
       struct port_config pin;
       port_get_config_defaults(&pin);
       pin.direction = PORT_PIN_DIR_OUTPUT;
       port_pin_set_config(LED0_PIN, &pin);
       port_pin_set_output_level(LED0_PIN, LED0_INACTIVE);
       port_pin_get_input_level(BUTTON_0_PIN);
      
       while(1)
       {
          if(port_pin_get_input_level(BUTTON_0_PIN))
          {
            port_pin_set_output_level(LED0_PIN, LED0_INACTIVE);
          }
          else
          {
               port_pin_set_output_level(LED0_PIN, LED0_ACTIVE);
          }   
       }
       while (true) {
              for (int i = 0; i < 5; i++) {
                     port_pin_toggle_output_level(LED0_PIN);
                     delay_s(1);
              }
              for (int i = 0; i < 50; i++) {
                     port_pin_toggle_output_level(LED0_PIN);
                     delay_ms(100);
              }
              for (int i = 0; i < 5000; i++) {
                     port_pin_toggle_output_level(LED0_PIN);
                     delay_cycles(100);
              }
       }
}

本文来自论坛,点击查看完整帖子内容。

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章