BASIC4MCU | 질문게시판 | atmega128 led 점등
페이지 정보
작성자 부경 작성일2023-04-06 23:14 조회1,341회 댓글1건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=22418
본문
안녕하십니까.. 실례를 무릅쓰고 한 가지 질문 드리고자 글 올리게 되었습니다.---------------------------------------------------------------------------------------------------------------------------------1. PD2에 SW1 연결2. PORTC에 LED 연결3. PB0, PB1에 LED 연결동작(1) 프로그램이 시작하면 LED 랜덤 점등, 이 때, PB0와 PB1의 LED는 off 상태(2) 스위치를 눌렀을 때(a) LED는 특정 비트에 정지 (8비트 중 한 개의 LED만 on 되어 있음)(b) 이때, 상위 4비트에 연결된 LED가 on인 경우 PB0의 LED를, 하위 4비트에 연결된 LED가 on 경우PB1의 LED를 on(3) 스위치에서 손을 떼면, LED 랜덤 점등, PB0와 PB1은 off---------------------------------------------------------------------------------------------------------------------------------을 수행하는 프로그램을 만드려고 합니다.우선 제가 직접 해본 과정은 아래와 같습니다.#include <mega128.h>#include <delay.h>#include <stdlib.h>#include <math.h>void main(void){char key;char position = 0;DDRD = 0b00000000;DDRC = 0b11111111;DDRB = 0b00000011;while(1){key = PIND & 0b00000100;if(key != 0){position = (char)(rand()%8);PORTC = (char)pow(2,position)^0xFF;PORTB = 0b11111111;}if(key == 0){PORTC =}delay_ms(500);}}이렇게 해봤는데 스위치를 on 시켰을 때의 경우를 어떻게 입력할지 잘 모르겠습니다ㅠㅠ혹시 위 과정 중 틀린 부분이 있는지, 그리고 스위치를 on 시켰을 때의 코드가 어떻게 되는지 알려주시면 너무나 감사하겠습니다.답변 달아주시면 감사하겠습니다. 항상 감사드립니다.
댓글 1
조회수 1,341master님의 댓글
master 작성일
#include <mega128.h>
#include <delay.h>
//
void main(void){
char key,position=0;
PORTD=4; // PD2 내부풀업저항
DDRB=3; DDRC=0xFF; // LED
while(1){
key=PIND&4; // PD2 스위치 입력
//
if(key){ // 스위치 누르지 않으면 랜덤 출력
position=rand()%8; PORTC=1<<position; // LED 랜덤출력
PORTB=3; // LED OFF
}
else{ // 스위치 누르고 있는 동안
// PORTC는 랜덤값 출력을 유지하고
if(position>=4)PORTB=2; // PB0 ON, PB1 OFF
else PORTB=1; // PB0 OFF, PB1 ON
}
delay_ms(500);
}
}