Busan IT/AVR 컨트롤러2015. 4. 3. 13:53

ATmega2560 LCD 사용을 위한 코딩

 

SMART.h

#ifndef __SMART_H__
#define __SMART_H__

/**** General Purpose Register A - L ****/

#define  PORTA (*((volatile unsigned char*)0x22))
#define   DDRA  (*((volatile unsigned char*)0x21))
#define   PINA  (*((volatile unsigned char*)0x20))

#define  PORTB (*((volatile unsigned char*)0x25))
#define   DDRB  (*((volatile unsigned char*)0x24))
#define   PINB  (*((volatile unsigned char*)0x23))

#define  PORTC (*((volatile unsigned char*)0x28))
#define   DDRC  (*((volatile unsigned char*)0x27))
#define   PINC  (*((volatile unsigned char*)0x26))

#define  PORTD (*((volatile unsigned char*)0x2B))
#define   DDRD  (*((volatile unsigned char*)0x2A))
#define   PIND  (*((volatile unsigned char*)0x29))

#define  PORTE (*((volatile unsigned char*)0x2E))
#define   DDRE  (*((volatile unsigned char*)0x2D))
#define   PINE  (*((volatile unsigned char*)0x2C))

#define  PORTF (*((volatile unsigned char*)0x31))
#define   DDRF  (*((volatile unsigned char*)0x30))
#define   PINF  (*((volatile unsigned char*)0x2F))

#define  PORTG (*((volatile unsigned char*)0x34))
#define   DDRG  (*((volatile unsigned char*)0x33))
#define   PING  (*((volatile unsigned char*)0x32))

#define  PORTH (*((volatile unsigned char*)0x102))
#define   DDRH  (*((volatile unsigned char*)0x101))
#define   PINH  (*((volatile unsigned char*)0x100))

#define  PORTJ (*((volatile unsigned char*)0x105))
#define   DDRJ  (*((volatile unsigned char*)0x104))
#define   PINJ  (*((volatile unsigned char*)0x103))

#define  PORTK (*((volatile unsigned char*)0x108))
#define   DDRK  (*((volatile unsigned char*)0x107))
#define   PINK  (*((volatile unsigned char*)0x106))

#define  PORTL (*((volatile unsigned char*)0x10B))
#define   DDRL  (*((volatile unsigned char*)0x10A))
#define   PINL  (*((volatile unsigned char*)0x109))

/* PORT 사용별 이름 지정 */

#define  LCD_CTL      PORTG
#define  LCD_BUS    PORTA  

#define  LCD_CTL_DDR  DDRG
#define  LCD_BUS_DDR  DDRA




/* LCD PIN */

#define  LCD_RS  0
#define  LCD_RW  1
#define  LCD_EN  2




/* CPU 동작시간을 맞춰주기 위한 Dealy문과 값 지정 */

#define  Delay(x)  for(uiCnt = 0; uiCnt < (dNum); ++uiCnt)

#define  dNum1 = 500;
#define  dNum2 = 3000;
#define  dNum3 = 3500;

/* LCD 제어 명령어 */

#define  LCD_CLR   0x01;  //화면 지우기, 커서홈 -0B 0000 0001
#define  LCD_HOME   0x02;  //커서 처음 위치로 이동 - OB 0000 001
#define  LCD_ENR   0x06;  //어드레스 자동증가/감소(I/D) = 1(증가), 표시 쉬프트(s)=1(표시) - 0B 0000 0111
#define  LCD_DSP   0x0F;  //디스플레이(D)=1(표시), 커서(C)=1(표시), 깜빡임(B) on/off=1(on) - 0B 0000 1111
#define  LCD_CUR   0x14;  //표시=1(표시), 커서 이동=1(오른쪽으로 쉬프트) - OB 0001 11--
#define  LCD_FUNC   0x38;  //인터페이스(DL) = 1(8비트), 라인수(N)=1(2라인), 문자폰트(F)=0(5*8) - OB 0011 10--



/* LCD Write mode 초기화 설정 */
// RS : High = data register, Low = Instruction Register
// R/W : High = read, Low = write

void LCD_Inst(unsigned char ucInst)
{
  LCD_BUS = ucInst;
  
  Delay(dNum1);  //초기 전압 인가시  지연
  
  LCD_CTL=(0<<LCD_RS)|(0<<LCD_RW)|(0<<LCD_EN); //  DC 영역
  Delay(dNum1);  //40ns 지연

  LCD_CTL=(0<<LCD_RS)|(0<<LCD_RW)|(1<<LCD_EN); //  enable 입력
  Delay(dNum2);  //enable 후 230ns 지연

  LCD_CTL=(0<<LCD_RS)|(0<<LCD_RW)|(0<<LCD_EN); //  
  Delay(dNum3);  //Tc(500) - Tw(230) = 270ns 지연

}

void LCD_AVR_Pin_Init(void)
{
  LCD_CTL_DDR = 0xFF;  //모든 입력값 열어줌(8개)
  LCD_BUS_DDR = 0x07;  //모든 입력값 열어줌(3개)

}

void LCD_Init(void)
{

  volatile unsigned int uiCnt;

  LCD_AVR_Pin_Init();

  Delay(dNum1);

  LCD_Inst(LCD_FUNC);
  
  
}


#endif //__SMART_H__

 

Main.c

#include "SMART.h"



{

  volatile unsigned int uiCnt;  

  /***** 다이오드에 불 깜빡거리게 만들기 *****/
  DDRA = 0xFF; //PORTA 값이 전부 입력가능하도록 DDRA를 다 열어줌
  DDRB = 0xFF; //PORTA 값이 전부 입력가능하도록 DDRA를 다 열어줌

  while(1)
  {

    Delay(dNum);
    /* PORTA on & PORTB off*/
    PORTA = 0x01;
    PORTB = 0x00;
    
    Delay(dNum);
    /* PORTB off & PORTA on*/
    PORTA = 0x00;
    PORTB = 0x01;    

  }      
  

  return 0;

}


반응형

'Busan IT > AVR 컨트롤러' 카테고리의 다른 글

7 semgemnt 카운터  (0) 2015.04.09
Linux 무선 네트워크 설정  (0) 2015.04.08
7 Segment를 활용한 숫자 이동 및 카운터  (0) 2015.04.08
7 Segment 카운트다운  (0) 2015.04.07
ATmega2560 사용환경 설정  (0) 2015.04.02
Posted by newind2000