펌웨어실습(LCD)
- LCD pin 설명
-H/W 연결
lcd | ATmega2560 | |
1 | VSS | GND |
2 | VDD | VCC |
3 | V0 | GND |
4 | RS | PC4 |
5 | R/W | PC5 |
6 | E | PC6 |
7~14 | DB0~DB7 | PA0~PA7 |
15 | LEDA | VCC |
16 | LEDK | GND |
* RS, R/W, E 의 PIN 선택시 특별한 기능이 없는 PIN을 선택하는 것이 좋다.
(RS, R/W, E는 HIGH, LOW 신호만 줄 수 있으면 된다.)
-Write Mode 타이밍도
- lcd.h 파일
#ifndef __LCD_H__
#define __LCD_H__
#include "main.h"
#define RS 4
#define RW 5
#define EN 6
#define BUS PORTA
#define CTL PORTC
#define LCD_CLR 0x01
#define LCD_HOME 0x02
#define LCD_ENT 0x06 //S:0Shift OFF, I/D:1 Increase Mode
#define LCD_DSP 0x0f //D:1 Display On C:1 Cursor on B:1 Blink On
#define LCD_CUR 0x14 //S/C:0 Shift Cursor OFF R/L:1
#define LCD_FUNC 0x38 //DL:1 Data length 8bit N:1 2Line F:0 Font 5X8
void lcd_Init(void);
void lcd_Inst(unsigned char ucInst);
void lcd_Data(unsigned char ucData);
#endif //__LCD_H__
- lcd.c 파일
#include "lcd.h"
void lcd_Init(void)
{
DDRC = (1<<RS) | (1<<RW) | (1<<EN);
DDRA = 0xff;
CTL= (0<<RS) | (0<<RW) | (0<<EN);
BUS = 0x00;
lcd_Inst(LCD_FUNC); // 진행 절차
lcd_Inst(LCD_DSP);
lcd_Inst(LCD_ENT);
lcd_Inst(LCD_CUR);
lcd_Inst(LCD_CLR);
lcd_Inst(LCD_HOME);
}
void lcd_Inst(unsigned char ucInst)
{
volatile unsigned int uiCnt;
CTL = CTL & ~(1<<RS);
CTL = CTL & ~(1<<RW);
CTL = CTL & ~(1<<EN);
BUS = ucInst;
for(uiCnt=0 ; uiCnt<30000 ; ++uiCnt);
// 여기까지 datasheet 그래프 첫번째 (A) 신호를 코딩
for(uiCnt=0 ; uiCnt<30000 ; ++uiCnt); //B구간
CTL = CTL | (1<<EN); // EN만 변화함
for(uiCnt=0 ; uiCnt<30000 ; ++uiCnt); //C구간
CTL = CTL & ~(1<<EN);
for(uiCnt=0 ; uiCnt<30000 ; ++uiCnt); // D구간
for(uiCnt=0 ; uiCnt<30000 ; ++uiCnt); // E구간
}
void lcd_Data(unsigned char ucData)
{
volatile unsigned int uiCnt;
CTL = CTL | (1<<RS); //data모드, High
CTL = CTL & ~(1<<RW);
CTL = CTL & ~(1<<EN);
BUS = ucData;
for(uiCnt=0 ; uiCnt<30000 ; ++uiCnt); // 여기까지 datasheet 그래프 첫번째 (A) 신호
for(uiCnt=0 ; uiCnt<30000 ; ++uiCnt); //B구간
CTL = CTL | (1<<EN); // EN만 변화함
for(uiCnt=0 ; uiCnt<30000 ; ++uiCnt); //C구간
CTL = CTL & ~(1<<EN);
for(uiCnt=0 ; uiCnt<30000 ; ++uiCnt); // D구간
for(uiCnt=0 ; uiCnt<30000 ; ++uiCnt); // E구간
}
- main.c 파일
#include "main.h"
#include "lcd.h"
int main(void)
{
lcd_Init ();
lcd_Data ('d'); //문자 입력
while(1)
{
}
return 0;
}
'코스웨어 > 16년 스마트컨트롤러' 카테고리의 다른 글
팀뷰어 보안 문제 있는거 같습니다... (0) | 2016.03.16 |
---|---|
20160316-이보원-ATMega2560 -LCD 실험 2 (1) | 2016.03.16 |
20160314-허도경-업무일지-펌웨어분석2 (0) | 2016.03.16 |
LCD_Str (0) | 2016.03.16 |
2016.03.11_노태경_업무일지 (0) | 2016.03.16 |
16.03.16 조승현 업무일지 about_LCD 디스플레이 명령어 (0) | 2016.03.16 |
20160314_오아람_업무일지_펌웨어분석+전역변수 (0) | 2016.03.16 |
20160316_장진웅_업무일지_펌웨어 실습(LCD) (0) | 2016.03.16 |