BASIC4MCU | 질문게시판 | 이 코드에서 절대 7세그먼트 디스플레이에 불이 들어오지 않는데 왜 그럴까요?
페이지 정보
작성자 범뚱 작성일2023-12-14 20:06 조회1,574회 댓글2건본문
#include <mega128a.h>
#include <delay.h>
#define FLOOR_1_BTN PINA.0 // 각 층의 버튼 핀 번호 설정
#define FLOOR_2_BTN PINA.1
#define FLOOR_3_BTN PINA.2
#define FLOOR_4_BTN PINA.3
unsigned char seg[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d}; // 0~5
unsigned char target_floor = 1, current_floor = 1;
void update_display() {
// 7세그먼트 디스플레이를 업데이트하는 코드를 작성하세요.
// 예를 들어, PORTC와 PORTD를 사용하여 디스플레이 값을 설정할 수 있습니다.
// 필요한 경우에는 delay_ms() 함수를 사용하여 디스플레이 간의 간격을 조절할 수 있습니다.
PORTC = 0x01; // digit 설정
PORTD = seg[current_floor]; // 현재 층에 해당하는 세그먼트 값 출력
delay_ms(500); // 디스플레이 간의 간격 설정
}
void elevator_move() {
if (target_floor > current_floor) {
while (target_floor > current_floor) {
current_floor++;
update_display(); // 층이 변경될 때마다 디스플레이 업데이트
delay_ms(500);
}
} else if (target_floor < current_floor) {
while (target_floor < current_floor) {
current_floor--;
update_display(); // 층이 변경될 때마다 디스플레이 업데이트
delay_ms(500);
}
}
}
void main(void) {
DDRD = 0xFF; // 7segment
DDRC = 0x01; // digit
PORTC = 0x01; // digit 초기값 설정
update_display(); // 초기 디스플레이 업데이트
while (1) {
if (FLOOR_1_BTN == 0) {
target_floor = 1;
delay_ms(200);
}
if (FLOOR_2_BTN == 0) {
target_floor = 2;
delay_ms(200);
}
if (FLOOR_3_BTN == 0) {
target_floor = 3;
delay_ms(200);
}
if (FLOOR_4_BTN == 0) {
target_floor = 4;
delay_ms(200);
}
if (target_floor != current_floor) {
elevator_move();
}
}
}
댓글 2
조회수 1,574master님의 댓글
master 작성일
#include <mega128a.h>
#include <delay.h>
//
#define FLOOR_1_BTN PINA.0 // 각 층의 버튼 핀 번호 설정
#define FLOOR_2_BTN PINA.1
#define FLOOR_3_BTN PINA.2
#define FLOOR_4_BTN PINA.3
//
unsigned char seg[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d}; // 0~5
unsigned char target_floor = 1, current_floor = 1;
//
void update_display() {
PORTC = ~0x01; // digit 설정
PORTD = seg[current_floor]; // 현재 층에 해당하는 세그먼트 값 출력
}
//
void elevator_move() {
if (target_floor > current_floor) {
while (target_floor > current_floor) { current_floor++; update_display(); delay_ms(500); }
}
else if (target_floor < current_floor) {
while (target_floor < current_floor) { current_floor--; update_display(); delay_ms(500); }
}
}
//
void main(void) {
DDRD = 0xFF; // 7segment
DDRC = 0x0F; // digit 초기값 설정
update_display();
while (1) {
if (FLOOR_1_BTN == 0) { target_floor = 1; delay_ms(200); }
if (FLOOR_2_BTN == 0) { target_floor = 2; delay_ms(200); }
if (FLOOR_3_BTN == 0) { target_floor = 3; delay_ms(200); }
if (FLOOR_4_BTN == 0) { target_floor = 4; delay_ms(200); }
//
if (target_floor != current_floor) { elevator_move(); }
}
}
이 코드로도 동작하지 않으면 회로도를 첨부해보세요
범뚱님의 댓글
범뚱 작성일atmega128A 스위치 1번 부터 4번 까지 이용하고 0층에서 5층까지 각 층을 7세그먼트 디스플레이에 나타내고 싶은데 7세그먼트 디스플레이가 켜지지 않습니다.