BASIC4MCU | 질문게시판 | AVR, atmega128에서 led 점등 코드
페이지 정보
작성자 제발도와주세요 작성일2022-04-14 12:58 조회1,511회 댓글5건본문
(1) 프로그램이 시작하면 모든 LED 꺼짐 상태
(2) SW1을 눌렀을 때 (a) 랜덤한 위치의 LED on (1개만)
(3) SW2를 눌렀을 때 (b) 켜져있는 LED off, 나머지 7개 LED on
(4) 2, 3번을 반복하도록 프로그램 작성
위를 참고하여 코드를 짜려고 하는데 3번에서 막히네요..
#include <mega128.h>
#include <delay.h>
#include <stdlib.h>
#include <math.h>
void main(void)
{
char key, led, led_all;
char position = 0;
DDRD = 0b00000000;
DDRC = 0b11111111;
led_all = 0b11111111;
while (1)
{
key = PIND & 0b00000110;
switch(key)
{
case 0b00000100:
position = (char)(rand()%8);
PORTC=(char)pow(2,position)^0xFF;
break;
case 0b00000010:
led = ~position;
PORTC = led;
break;
default:
led_all ^= 0b00000000;
PORTC = led_all;
break;
}
delay_ms(1000);
}
}
댓글 5
조회수 1,511master님의 댓글
master 작성일
(4) 2, 3번을 반복하도록 프로그램 작성
어떤 경우에 4)를 실행 할까요?
제발도와주세요님의 댓글
제발도와주세요
스위치를 누르는 걸 반복한다는 거 같아요 . 그래서 4번은 신경안써도 될듯합니다.
master님의 댓글
master 작성일
#include <mega128.h>
#include <delay.h>
#include <stdlib.h>
#include <math.h>
//
void main(void){
char position=0;
PORTC=0xFF; DDRC=0xFF;
while(1){
if (PIND&2==0){ position=rand()%8; PORTC=~(1<<position); }
else if(PIND&4==0){ PORTC=1<<position; }
else { PORTC=~PORTC; }
delay_ms(1000);
}
}
제발도와주세요님의 댓글
제발도와주세요
와 감사합니다!!
master님의 댓글
master 작성일
#include <mega128.h>
#include <delay.h>
//
void main(void){
char pos=0;
PORTC=0xFF; DDRC=0xFF;
TCCR0=0x09; OCR0=7;
while(1){
if (PIND&2==0){ pos=TCNT0; PORTC=~(1<<pos); }
else if(PIND&4==0){ PORTC=1<<pos; }
else { PORTC=~PORTC; }
delay_ms(1000);
}
}
랜덤함수 대신 타이머0으로 만들 수도 있습니다.