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

20150727-출석번호 5번 - 김성주 - 업무일지

by 알 수 없는 사용자 2015. 7. 27.
728x90
반응형

ARM을 이용한 LCD 문자열 출력

-main.c 소스 분석


- main.c 소스

#include <project.h>

int main(void)
{
  Lcd_Init(); 

  Lcd_Print("Hello");

  while(1); 
  
  return 0;
}

-lcd.c 소스 분석


- lcd.c 소스

#include <lcd.h>
#include <AT91SAM7S256.h>

void Lcd_Inst(unsigned char uiInst)
{
  volatile unsigned int uiCnt;
  
  *AT91C_PIOA_CODR = LCD_BUS | LCD_RS | LCD_RW | LCD_EN; 
  *AT91C_PIOA_SODR = LCD_CAL_INST(uiInst);  

  for(uiCnt = 0 ; uiCnt < 100000 ; uiCnt++);    
  for(uiCnt = 0 ; uiCnt < 100000 ; uiCnt++);     

  *AT91C_PIOA_SODR = LCD_EN; 
  
  for(uiCnt = 0 ; uiCnt < 100000 ; uiCnt++);      
  for(uiCnt = 0 ; uiCnt < 100000 ; uiCnt++);     
  for(uiCnt = 0 ; uiCnt < 100000 ; uiCnt++);    
  
  *AT91C_PIOA_CODR = LCD_EN; 
  
  for(uiCnt = 0 ; uiCnt < 100000 ; uiCnt++);    
}

void Lcd_Init()
{
  volatile unsigned int uiCnt;  
  
  
  *AT91C_PIOA_PER = LCD_BUS | LCD_RS | LCD_RW | LCD_EN;      
  *AT91C_PIOA_OER = LCD_BUS | LCD_RS | LCD_RW | LCD_EN;
  *AT91C_PIOA_PPUDR = LCD_BUS | LCD_RS | LCD_RW | LCD_EN;
  
  for(uiCnt = 0 ; uiCnt < 100000 ; uiCnt++);
  
  Lcd_Inst(LCD_INST_FUNC);
  Lcd_Inst(LCD_INST_DSP);
  Lcd_Inst(LCD_INST_ENT);
  Lcd_Inst(LCD_INST_CUR);
  Lcd_Inst(LCD_INST_CLR);
  Lcd_Inst(LCD_INST_HOME);
  
  return;
}

void Lcd_Data(unsigned char uiInst)
{
  volatile unsigned int uiCnt;
  
  *AT91C_PIOA_CODR = LCD_BUS | LCD_RS | LCD_RW | LCD_EN; 
  *AT91C_PIOA_SODR = LCD_RS;          
  *AT91C_PIOA_SODR = LCD_CAL_INST(uiInst);   
  
  for(uiCnt = 0 ; uiCnt < 100000 ; uiCnt++);    
  for(uiCnt = 0 ; uiCnt < 100000 ; uiCnt++);   

  *AT91C_PIOA_SODR = LCD_EN;
  
  for(uiCnt = 0 ; uiCnt < 100000 ; uiCnt++);     
  for(uiCnt = 0 ; uiCnt < 100000 ; uiCnt++);     
  for(uiCnt = 0 ; uiCnt < 100000 ; uiCnt++);  
  
  *AT91C_PIOA_CODR = LCD_EN;  
  
  for(uiCnt = 0 ; uiCnt < 100000 ; uiCnt++);  

  return;
}

void Lcd_Print(const unsigned char * cString) 
{
  while(0!=*cString)
  {
    Lcd_Data(*cString);
    ++cString;
  }
  return;
}


-lcd.h 소스 분석



-lcd.h 소스

#ifndef __LCD_H__
#define __LCD_H__

#define LCD_BUS   0x00FF0000   
#define LCD_RS  0x00000001 
#define LCD_RW  0x00000002  
#define LCD_EN  0x00000004  
#define LCD_CAL_INST(x)  (   (LCD_BUS)&((x)<<16)   )  
                         
#define   LCD_INST_CLR  0x01  
#define   LCD_INST_HOME  0x02  
#define   LCD_INST_ENT  0x06  
#define   LCD_INST_DSP  0x0f  
#define  LCD_INST_CUR  0x14  
#define  LCD_INST_FUNC  0x38  

void Lcd_Init();
void Lcd_Inst(unsigned char );
void Lcd_Data(unsigned char );
void Lcd_Print(const unsigned char * );


#endif  //__LCD_H__


728x90