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
'코스웨어 > 12년 내장형하드웨어' 카테고리의 다른 글
어셈블리 기본형 (0) | 2012.08.24 |
---|---|
키입력받고 케릭터 lcd 2라인 출력 (0) | 2012.08.24 |
[ARM] 캐릭터 LCD 2line BackSpace 구현 By.임창엽 (1) | 2012.08.23 |
[0823]back space 기능 추가입니다. (0) | 2012.08.23 |
[0823]하이퍼 터미널을 통해 LCD에 문자 찍기 소스입니다. (0) | 2012.08.23 |
charactor lcd 추가내용 (0) | 2012.08.23 |
[assembly]0821-업무일지 (0) | 2012.08.23 |
[Asembly]8월 22일 업무일지 - by 이창현 (1) | 2012.08.22 |