본문 바로가기
코스웨어/16년 스마트컨트롤러

이름

by 알 수 없는 사용자 2016. 5. 20.
728x90
반응형

#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;
}

728x90