#include <avr/io.h>
#include <util/delay.h>
#define CLR 0x01 // Clear Display 명령
#define HOME 0x02 // Return Home 명령
#define FNC 0x38 // Function Set 명령
// Data Length 8 bit, 행수 2행
#define RIGHT 1
#define LEFT 0
void LCD_PortSetting(void)
{
DDRC = 0xFF; // 데이터 라인
DDRD = 0xFF; // 0 ~ 2 제어 핀 사용
// D0: Rs, D1: R/W, D2: En
}
void IR_Write(unsigned char Data)
{
PORTD &= 0xFC; // RS = 0, Write Enable
_delay_us(1); // Enable 까지 최소 대기 시간 40ns
PORTD |= 0x04; // En
_delay_us(1);
PORTC = Data;
_delay_us(1);
PORTD = 0b00000010; //Disable, Read Mode
}
void DR_Write(unsigned char Data)
{
PORTD = 0x01; // RS = 1, Write Enable
_delay_us(1); // Enable 까지 최소 대기 시간 40ns
PORTD |= 0x04; // En
_delay_us(1);
PORTC = Data;
_delay_us(1);
PORTD = 0b00000010; //Disable, Read Mode
}
void LCD_drive()
{
_delay_ms(50);
IR_Write(FNC);
_delay_ms(5);
IR_Write(FNC);
_delay_us(100);
IR_Write(FNC);
_delay_ms(2);
IR_Write(0x0E); // Display On/Off, DDRAM, 커서 ON
_delay_ms(2);
IR_Write(CLR); // Display Clear
_delay_ms(30);
IR_Write(0x06); // Entry Mode Set, 오른쪽으로 커서 이동
_delay_ms(2);
}
void LCD_CHAR(unsigned char a)
{
_delay_ms(1); // 명령어 쓰기 전 일정 시간 지연
DR_Write(a); // 사유 : Busy Flag 확인 대응
}
void cursor_HOME(void)
{
IR_Write(0x02)
_delay_ms(2);
}
void Display_Shift(unsigned char p)
{
if(p == RIGHT) // 표시화면 전체를 오른쪽으로 이동
{
IR_Write(0x1C); // 화면 표시 내용을 오른쪽으로 이동
_delay_us(50);
}
else if(p == LEFT)
{
IR_Write(0x18); // 화면 표시 내용을 오른쪽으로 이동
_delay_us(50);
}
}
void LCD_STR(unsigned char *str)
{
while(*str != 0)
{
LCD_CHAR(*str);
str++;
}
}
void Position(unsigned char col, unsigned char row)
{
IR_Write(0x80 | row+col*0x40));
}
void CGRAM_set(void)
{
int i;
unsigned char Gim[8]={0x1D, 0x05, 0x05, 0x19,
0x00, 0x1F, 0x11, 0x1F};
// unsigned char Reum[8]={};
_delay_ms(1);
IR_Write(0x40);
_delay_ms(1);
for(i=0;i<8;i++)
{
DR_Write(Gim[i]);
_delay_ms(1);
}
/* IR_Write(0x48);
_delay_ms(1);
for(i=0;i<8;i++)
{
DR_Write(Yi[i]);
_delay_ms(1);
}*/
}
int main(void)
{
//
LCD_PortSetting();
LCD_drive();
CGRAM_set();
/*
DR_Write(65);
DR_Write('b');*/
Position(0,0);
_delay_ms(1);
// LCD_STR("Smart Controller");
// Display_Shift(RIGHT);
while(1)
{
// To do
;
}
return 0;
}
'코스웨어 > 16년 스마트컨트롤러' 카테고리의 다른 글
리눅스 커널 4.6 공개··· ARM·터치 지원 등 강화 (0) | 2016.06.02 |
---|---|
오픈소스 버그를 잡는 블랙덕 무료 툴 ‘Security Checker’OSS (0) | 2016.06.01 |
2016-05-22_조재찬_스터디일지-C# 클래스 복습 (0) | 2016.05.22 |
2016-05-20_조재찬_스터디일지-C# 메소드와 클래스 복습 (0) | 2016.05.20 |
2016-05-19_조재찬_업무일지_ AVR-LCD출력 & C#-성적관리 프로그램 (0) | 2016.05.20 |
2016-05-18_조재찬_스터디일지_ C#-설문조사 APP, 기초복습 (0) | 2016.05.19 |
2016-05-18_조재찬_업무일지_ C#-OOP와 클래스 (0) | 2016.05.18 |
2016-05-17_조재찬_업무일지_AVR 입출력/ C#메소드 (0) | 2016.05.17 |