본문 바로가기
코스웨어/12년 내장형하드웨어

하이퍼터미널에 타이핑시 lcd케릭터에 표시

by 알 수 없는 사용자 2012. 8. 23.
728x90
반응형





<촬영기종 HTC HD 디자이어>


<main.c>

#include "arm.h"
#include "led.h"
#include "aic.h"
#include "timer.h"
#include "dbgu.h"
#include "ultra.h"
#include "lcd.h"

volatile unsigned int dly;
#define delay(x)    for(dly = 0;(x)> dly; dly++) 

void INIT(void);
int main()
{  
  unsigned char ucchar;
  INIT();
  while(1)
  {
    
    ucchar=DBGU_RCHAR();
    LCD_Data(ucchar);
  }
  while(1);
  
  return 0;
}
void INIT(void)
{
  //INIT_LED();
  //INIT_AIC();
  //INIT_TIMER();
  INIT_DBGU();
  //INIT_ULTRA();
  init_LCD();
  LCD_Init();
  


<DBGU.c>


#include "arm.h"
#include "dbgu.h"

void INIT_DBGU()
{
  DBGU_CR=(1<<RSTRX)|(1<<RSTTX); //유닛컨트롤 레지 = 리시버 리셋 활성, 트랜스미터 리셋 활성  
  DBGU_IDR=(1<<RXRDY)|(1<<TXRDY)|(1<<ENDRX)|(1<<ENDTX)|(1<<OVRE)|(1<<FRAME)|
               (1<<PARE)|(1<<TXEMPTY)|(1<<TXBUFE)|(1<<RXBUFF)|(1<<COMMTX)|(1<<COMMRX);//유닛 인터럽터 디스에이블레지 전부 활성 
  /*핀 셋팅*/
  PIO_ASR=(1<<DRXD)|(1<<DTXD);//주변장치 A 기능중 9번 10번 켜기, 자동으로 B 기능 off
  PIO_PDR=(1<<DRXD)|(1<<DTXD);//pio 9번 10번 디스에이블
  /*전송 셋팅*/
  DBGU_BRGR=26;//보우레이트 값 =초당 115200bps = 14kbyte
  DBGU_MR=0;//Even parity and Normal Mode
       /*DMA기능 off*/
  PERIPH_PTCR=(1<<RXTDIS)|(TXDIS);//PDC 송 수신 Disable
       /*디버그 유닛기능  활성*/
  DBGU_CR=(1<<RXEN)|(1<<TXEN);//송수신 활성 
}
void DBGU_STRING(unsigned char * ucstring)
{
  
  if(0==ucstring)
  {
    return;
  }
  while(0!=* ucstring)
  {
    while(0==(DBGU_SR&(1<<TXRDY)));//수신버퍼에 데이터가 안비워졋다면  대기 비워졋다면 탈출
    DBGU_THR=*ucstring;
    ++ucstring;
  }  
}
unsigned char DBGU_RCHAR()
{
  while(0==(DBGU_SR&(1<<RXRDY)));//송신버퍼에 데이타가 없다면 대기 잇다면 탈출 
  return DBGU_RHR;
}



<LCD.c>


#include "arm.h"
#include "lcd.h"
volatile unsigned int icnt;  

//////////////////////////lcd 문자출력함수들////////////////////////
void init_LCD()
{
  PMC_PCER=1<<PIOA;
  PIO_OWER=LCD_ALL;//아웃풋 상태레지를 write로 활성화 
  PIO_PER=LCD_ALL;
  PIO_OER=LCD_ALL;

  return;
}

void LCD_Init()//셋팅호출용
{
  LCD_Inst(FUNC_SET);
  LCD_Inst(ENTRY_MODE);
  LCD_Inst(CUSOR_DIS);
  LCD_Inst(DISPLAY_ONOFF);
  LCD_Inst(CLEAR_DIS);
  LCD_Inst(RETURN_HOME);

  return;  
}

void LCD_Inst(unsigned char ucinst) //lcd 셋팅 함수
{
  PIO_CODR=LCD_ALL;//LCD핀을 전부 LOW값으로
  //ENB_DELAY(200000); 
  PIO_SODR=LCD_EN;//EN부분만 HIGH 값으로(en이 high값으로 지속될대 DB값을 바군다 
  ENB_DELAY(LCD_DELAY1);//E 값을 인지하는 시간을 준다 
  PIO_SODR=LCD_DB(ucinst);//fuction set, dl=1(8bit), n=1(2line),f=0(2*7dot) 
  ENB_DELAY(LCD_DELAY2);//데이터를 인지하는 시간 을 준다
  PIO_CODR=LCD_EN;//DB값을 변경하고 다시 E값을 LOW로 준다 
  ENB_DELAY(LCD_DELAY3);//E 값을 인지하는 시간을 준다
  
  return;
}

void LCD_Data(unsigned char ucdata)//문자출렬함수
{
  PIO_CODR=LCD_ALL;//LCD핀을 전부 LOW값으로
  PIO_SODR=LCD_RS; // data write
  //ENB_DELAY(200000); 
  PIO_SODR=LCD_EN;//EN부분만 HIGH 값으로(en이 high값으로 지속될대 DB값을 바군다 
  ENB_DELAY(LCD_DELAY1);//E 값을 인지하는 시간을 준다 
  PIO_SODR=LCD_DB(ucdata);//fuction set, dl=1(8bit), n=1(2line),f=0(2*7dot) 
  ENB_DELAY(LCD_DELAY2);//데이터를 인지하는 시간 을 준다
  PIO_CODR=LCD_EN;//DB값을 변경하고 다시 E값을 LOW로 준다 
  ENB_DELAY(LCD_DELAY3);//E 값을 인지하는 시간을 준다

  return;
}

void LCD_String(void *vp)//문자열 출력함수
{
  while(0!=(*((unsigned char *)vp)))//해당위치에 값 즉 문자
  {
    LCD_Data((*((unsigned char *)vp)));
    vp=((unsigned char *)vp)+1;
  }
  return;
}

/////////////////////////////////////////////


void LCD_CLEAR()//LCD 클리어 명령을 인지하게 해주는 코드 
{
  PIO_CODR=LCD_ALL;//LCD핀을 전부 LOW값으로
  PIO_SODR=LCD_EN;//EN부분만 HIGH 값으로(en이 high값으로 지속될대 DB값을 바군다 
  ENB_DELAY(200000);//E 값을 인지하는 시간을 준다 
  //PIO_SODR=0X00010000;
  PIO_SODR=LCD_DB(0X01);//화면 클리어 
  ENB_DELAY(200000);//데이터를 인지하는 시간 을 준다
  PIO_CODR=LCD_EN;//DB값을 변경하고 다시 E값을 LOW로 준다 
  ENB_DELAY(200000);//E 값을 인지하는 시간을 준다
  return;
}

void LCD_Return()//LCD 리턴 명령을 인지하게 해주는 코드 
{
  volatile unsigned int icnt;  
  PIO_CODR=LCD_ALL;//LCD핀을 전부 LOW값으로
  PIO_SODR=LCD_EN;//EN부분만 HIGH 값으로(en이 high값으로 지속될대 DB값을 바군다 
  ENB_DELAY(200000);//E 값을 인지하는 시간을 준다 
  //PIO_SODR=0X00010000;
  PIO_SODR=LCD_DB(0X02);//데이터 값을넣자 
  ENB_DELAY(200000);//데이터를 인지하는 시간 을 준다
  PIO_CODR=LCD_EN;//DB값을 변경하고 다시 E값을 LOW로 준다 
  ENB_DELAY(200000);//E 값을 인지하는 시간을 준다
}





  return;
}

728x90