SAMR21 LED和按键
SAMR21 Xplained Pro开发板中有一个用户按键和一个用户LED灯。硬件连接图如下:
图4-1:LED&KEY电路图
可以看到用户按键是和PA28相连,然后另一端跟GND连接。
用户LED是和PA19相连,LED的另一端和3.3V相连。当PA19給低电平时点亮,高电平是熄灭。
基本原理很简单,现在打开AtmelStudio新建一个例子。
图4-2:Example程序
上面红色圈圈中的这个例子是让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
主要程序如下:
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);
}
}
}