일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 4870
- Kentmere 400
- 2019 유럽여행
- Kodak T-Max 100
- Rollei35s
- cs50/2.5
- 2018 미국출장
- ZeissIkon ZI
- FujiFilm C200
- fujifilm velvia 50
- Nikon 28Ti
- kodak t-max 400
- Contax G2
- cf80/2.8
- Germany
- Kodak 5222
- Kodak 400TX
- Mamiya 7
- Minolta CLE
- SONY A7
- cf50/4 fle
- Hasselblad 500cm
- Minolta TC-1
- Leica M7
- M-Rokkor 40/2
- G28/2.8
- GRD2
- N80/4
- Kodak Ektar 100
- FujiFilm GFX50s
- Today
- Total
J 창고
[Atmega128] CLCD, 4bit모드, Atmega128 본문
참고사이트
http://gongnoob.blog.me/133468759
이렇게 참고 했는데..
음... 왜 안되지...;;??
=========================================================================수정
음? USBISP 케이블을 한번 뺐다가 끼니까 되넹...? 엥? ㅋㅋ;;
=======================================================================코드
/*
PA.0 = RS
PA.1 = RW
PA.2 = E1
PA.4 = D4
PA.5 = D5
PA.6 = D6
PA.7 = D7
*/
#define F_CPU 16000000UL
#include <avr/io.h>
#include <avr/delay.h>
#define RS_H (PORTA |= 0x01) // RS=1
#define RS_L (PORTA &= 0xFE) // RS=0
#define RW_H (PORTA |= 0x02) // RW=1
#define RW_L (PORTA &= 0xFD) // RW=0
#define ENABLE (PORTA |= 0x04) // ENABLE
#define DISABLE (PORTA &= 0xFB) // DISABLE
void LCD_command(char command){
PORTA = (command&0xF0); // send High nibble
RS_L; RW_L; // RS=0 RW=0
ENABLE; // E1 : L->H
_delay_us(1);
DISABLE; // E1 : H->L
PORTA = (command & 0x0F)<<4; // send Low nibble
RS_L; RW_L; // RS=0 RW=0
ENABLE; // E1 : L->H
_delay_us(1);
DISABLE; // E1 : H->L
}
void LCD_data(char data){
_delay_us(100);
PORTA = (data&0xF0); // send High nibble
RS_H; RW_L; // RS=1 RW=0
ENABLE; // E1 : L->H
_delay_us(1);
DISABLE; // E1 : H->L
PORTA = (data&0x0F)<<4; // send Low nibble
RS_H; RW_L; // RS=1 RW=0
ENABLE; // E1 : L->H
_delay_us(1);
DISABLE; // E1 : H->L
}
void LCD_init(void){
DDRA = 0xFF;
PORTA = 0x00;
_delay_ms(40);
LCD_command(0x28); // DL=0(4bit) N=1(2Line) F=0(5x7)
_delay_us(50);
LCD_command(0x0C); // LCD ON, Cursor X, Blink X
_delay_us(50);
LCD_command(0x01); // LCD Clear
_delay_ms(2);
LCD_command(0x06); // Entry Mode
_delay_us(50);
}
void LCD_string(char command, char *string){
LCD_command(command);
while(*string != '\0'){
LCD_data(*string);
string++;
}
}
int main(void){
char string1[16] = "Hello World!";
char string2[16] = "Good Job!";
LCD_init();
while(1){
LCD_string(0x80+0x00, string1);
_delay_ms(2000);
LCD_command(0x01); // LCD Clear
_delay_ms(2);
LCD_string(0x80+0x40, string2);
_delay_ms(2000);
LCD_command(0x01); // LCD Clear
_delay_ms(2);
}
return 0;
}