BASIC4MCU | 질문게시판 | atmega128 질문
페이지 정보
작성자 뮨굠 작성일2019-11-25 15:02 조회5,203회 댓글1건본문
atmega128에 대해 질문이요!
이번 실험 주제가 스위치에 따라 LCD에 이름 쓰는 주제인데
스위치를 누르면 그 스위치에 해당하는 LED도 반복해서 점멸해야합니다.
(ex) sw1를 누르면 sw1에 해당되는 이름이 나오고 sw1에 해당되는 LED1이 켜진후 1초뒤에 LED2가 켜지고 이 행동을 반복해서 해야합니다.
( sw2를 누르면 sw2의 해당되는 이름이나오고 sw2에 해당되는 LED3이 켜진후 1초뒤에 LED4가 켜지게 하는 코드)
이 LED 관련 코드에서 막혔네요..
어떻게 코드를 짜야할지 도와주실 수 있나요?
#include <mega128.h>
#include <delay.h>
typedef unsigned char u_char;
#define ENABLE PORTA.2
#define FUNCSET 0x28 //funtion set
#define ENTMODE 0x06 //Entry Mode set
#define ALLCLR 0x01 //All clear
#define DISPON 0x0c //Display on
#define LSHIFT 0x18 //Display LEFT SHIFT
#define HOME 0x02 //Cursor Home
void LCD_init(void);
void LCD_String(char flash *);
void Busy(void);
void Command(u_char);
void Data(u_char);
unsigned char led = 0xFE;
void main(void)
{
unsigned char key;
DDRC = 0xFF;
DDRE = 0x0;
PORTC = 0xFF;
LCD_init();
while(1){
key = PINE & 0xF0;
switch(key){
case 0b11100000:
LCD_init();
Command(HOME);
LCD_String("Kim Han Su");
break;
case 0b11010000:
LCD_init();
Command(HOME);
LCD_String("Gu JEONG Min");
break;
case 0b10110000:
LCD_init();
Command(HOME);
LCD_String("Park Han SuK");
break;
}
}
}
//LCD 초기화
void LCD_init(void)
{
DDRA = 0xFF;
PORTA = 0x0;
delay_ms(15);
Command(0x20);
delay_ms(5);
Command(0x20);
delay_us(100);
Command(0x20);
Command(FUNCSET);
Command(DISPON);
Command(ALLCLR);
Command(ENTMODE);
}
//문자열 출력 함수
void LCD_String(char flash *str)
{
char flash *pStr=0;
pStr = str;
while(*pStr) Data(*pStr++);
}
//인스트럭션 쓰기 함수
void Command(u_char byte)
{
Busy();
//인스트럭션 상위 4비트
PORTA = 0x00;
PORTA |= (byte & 0xF0);
delay_us(1);
ENABLE = 1;
delay_us(1);
ENABLE = 0;
//인스트럭션 하위 4비트
PORTA = 0x00;
PORTA |= (byte << 4);
delay_us(1);
ENABLE = 1;
delay_us(1);
ENABLE = 0;
}
//데이터 쓰기 함수
void Data(u_char byte)
{
Busy();
//데이터 상위 4비트
PORTA = 0x01;
PORTA |= (byte & 0xF0);
delay_us(1);
ENABLE = 1;
delay_us(1);
ENABLE = 0;
//데이터 하위 4비트
PORTA = 0x01;
PORTA |= (byte << 4);
delay_us(1);
ENABLE = 1;
delay_us(1);
ENABLE = 0;
}
// 일정한 시간 지연
void Busy(void)
{
delay_ms(2);
}
댓글 1
조회수 5,203master님의 댓글
master 작성일
LED는 켜지기만 하고 꺼지는 것은 없나요?
회로도 추가하고
다시 정리해서 작성해보세요