BASIC4MCU | 질문게시판 | atmega128 질문입니다!
페이지 정보
작성자 슬레이브 작성일2020-12-19 15:28 조회4,276회 댓글1건본문
안녕하세요 선생님.
#include <mega128.h>
#include <delay.h>
char lcd_arr[2][16];
char lcd_full = 0xff;
char lcd_void = 0xfe;
int lcd_cnt=-1,lcd_cnt_line=0;
int lcd_cnt_temp=0,lcd_cnt_line_temp=0;
void LCD_init(void);
void LCD_String1(char *);
void Busy(void);
void Command(unsigned char);
void Data(unsigned char);
void Seg4_out(int);
void main(void) {
int i,j;
int num = 0;
LCD_init();
DDRB= 0xF0;
DDRD= 0xF0;
DDRG= 0x0F;
PORTB= 0x0;
PORTD= 0x0;
for(j=0;j<2;j++){
for(i=0;i<16;i++){
lcd_arr[j][i] = lcd_full;
}
}
while(1){
Seg4_out(num);
if(++num>9999) num= 0;
lcd_cnt_temp = lcd_cnt; // 이전 사각형의 위치를 저장
lcd_cnt_line_temp = lcd_cnt_line; // 이전 라인의 위치를 저장
if(lcd_cnt != -1)
lcd_arr[lcd_cnt_line_temp][lcd_cnt_temp] = lcd_full; // 이전에 검은색 사각형으로 출력된 부분을 빈 사각형으로 다시 출력
if(lcd_cnt <= -1 && lcd_cnt_line == 0) lcd_cnt =0; // 초기 상태에서 -1이 안되도록 방지
lcd_cnt++;
if(lcd_cnt_line == 0 && lcd_cnt >= 16){
lcd_cnt_line = 1;
lcd_cnt = 0;
}
else if( lcd_cnt_line == 1 && lcd_cnt >=16 ){
lcd_cnt_line=0;
lcd_cnt =0;
}
lcd_arr[lcd_cnt_line][lcd_cnt] = lcd_void; // 현재 빈 사각형 위치에 검은색 사각형 출력
Command(HOME);
LCD_String1(lcd_arr[0]);
Command(LINE2);
LCD_String1(lcd_arr[1]);
Command(RSHIFT);
delay_ms(1000); // 빈 사각형이 이동하는데 걸리는 시간 (1초로 세팅)
}
}
lcd 도트(?) 를 1초에 1칸씩 이동하도록 만들고자 이런 코드를 만들었습니다.
num=0; 이 부분 다음에 나오는 if문들을 하나로 묶어줘야 제가 원하는데로 구동을 할 것같은데 어떻게 묶어줘야 할지를 모르겠습니다..
지금 이대로 구동시키면 아마 첫째 줄 첫번째 칸과 두번째칸을 1초 간격으로 왔다갔다 하는 결과가 나올 것 같습니다.
*현재 구동시켜 볼 수 없는 상황이라 양해 부탁드립니다..
댓글 1
조회수 4,276master님의 댓글
master 작성일
뭘 어떻게 하려는지를 타인에게 설명하는 것은 쉽지 않습니다.
그 시간에 공부해서 직접 처리해보세요
글을 읽고 고민없이 바로 답변을 드릴 수 있는 간단한 질문이라면 도움을 드리겠습니다.