AVR
토글스위치 3개를 이용해 순차적 점등 및 일괄점등
이제팔
2023. 3. 15. 15:32
/*
* LED_BUTTON.c
*
* Created: 2023-03-15 오후 2:39:16
* Author : kccistc
*/
#define F_CPU 16000000UL
#include <avr/io.h>
#include <util/delay.h>
#define LED_DDR DDRA // LED_DDR로 설정을 하면 complier 가 DDRA로 바꿔준다.
#define LED_PORT PORTA // PORTA에 출력
#define BUTTON_DDR DDRD
#define BUTTON_PIN PIND //PORTD값을 읽어들이는 register
//1 : 5v 0:0v
#define BUTTON1 4 //PORTD.4
#define BUTTON2 5 //PORTD.5
#define BUTTON3 6 //PORTD.6
//button1 : led 전체켜고
//2 번 all off
//3번 led all on
int main(void)
{
LED_DDR = 0xff; // led는 출력모드로 설정
// BUTTON_DDR &= 0x10001111; ->이렇게 사용해도되지만 아래처럼 사용해도 좋다
BUTTON_DDR &= ~( 1 << BUTTON1 | 1 << BUTTON2 | 1 << BUTTON3);
//위의결과 01110000 를 뒤집어서 10001111
unsigned char led[8] = {0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
while (1)
{
//4번 pin이 High
//if(BUTTON_PIN & (0x10))
if(BUTTON_PIN & (1 << BUTTON1))
{
for(int i=0;i<8;i++)
{
PORTA=led[i];
_delay_ms(500);
}
}
if(BUTTON_PIN & (1 << BUTTON2))
{
for(int i=8;i>=0;i--)
{
PORTA=led[i];
_delay_ms(500);
}
}
if(BUTTON_PIN & (1 << BUTTON3))
{
PORTA = 0xff;
}
}
}