컨텐츠 바로가기


  • AC/DC POWER
  • DC/DC POWER
  • Switching Regulator
  • LED AC/DC POWER
  • LED DC/DC POWER
  • MEDICAL POWER
  • DC/AC POWER
  • 기타 제품


현재 위치

  1. 게시판
  2. 자료실

자료실

제품의 데이터시트 카달로그등을 다운받아 보실 수 있습니다.

LCD 디스플레이
제목 LCD 디스플레이
작성자 Silicon Labs (ip:)
  • 작성일 2006-12-12 16:27:45
  • 추천 추천 하기
  • 조회수 793
  • 평점 0점

 20문자 4 줄의 LCD 를 구동하는 예제프로그램 입니다.

 

 

 

;-----------------------------------------------------------------------------
; (C)SAMPLE Electronics co.     http://www.SAMPLE.co.kr
;-----------------------------------------------------------------------------
; LCD Driver Program
;
; 이 프로그램은 C8051Fxxx 프로세서에 4줄 20문자 구성의 LCD를 연결하는 예입니다.
; 4 비트 모드로 동작 합니다.
;-----------------------------------------------------------------------------
;
;-----------------------------------------------------------------------------
; EQUATES
;-----------------------------------------------------------------------------
$MOD8F000                    ; C8051F000 의 SFR 과 비트를 정의해 놓은 파일
;-----------------------------------------------------------------------------
; LCD 를 4 비트로 모드로 연결하기 위한 포트 설정
; 포트는 어떤 것이든지 상관없으며 순서대로 정렬될 필요도 없다.
;
LCD_RS     EQU     P3.2      ; LCD Register Select
LCD_EN     EQU     P3.3      ; LCD Enable
LCD_D4     EQU     P3.4      ; LCD Data Bus D4
LCD_D5     EQU     P3.5      ; LCD Data Bus D5
LCD_D6     EQU     P3.6      ; LCD Data Bus D6
LCD_D7     EQU     P3.7      ; LCD Data Bus D7
;
LINE_1     EQU     080h      ; 첫번째 줄 어드레스 ( 4 x 20 LCD 기준)
LINE_2     EQU     0C0h      ; 두번째 줄 어드레스 (      "         )
LINE_3     EQU     094h      ; 세번째 줄 어드레스 (      "         )
LINE_4     EQU     0D4h      ; 네번째 줄 어드레스 (      "         )
;
;-----------------------------------------------------------------------------
; VARIABLES
;-----------------------------------------------------------------------------
; Indirect address space variables

ISEG    at        80h

        org       0e8h     ; temporary forced STACK location

STACK_TOP:
        DS        1  ; beginning of hardware  stack

;-----------------------------------------------------------------------------
; RESET AND INTERRUPT VECTOR TABLE
;-----------------------------------------------------------------------------
CSEG
        org       0000h

        ljmp      Main                   ; 프로그램 실행위치로 점프
;-----------------------------------------------------------------------------
; MAIN PROGRAM CODE
;-----------------------------------------------------------------------------
        org       0B3h
;-----------------------------------------------------------------------------
; ASCII 스트링 문자 상수 영역
;
str_1:  DB        'C8051F000 20MIPS MCU', 00h
str_2:  DB        '<4-BIT BUS MODE LCD>', 00h
str_4:  DB        'www.CYGNAL.com ', 00h
;-----------------------------------------------------------------------------
Main:
        mov       WDTCN, #0deh           ; 워치독 타이머 동작 금지
        mov       WDTCN, #0adh
        ;
        mov       SP, #STACK_TOP         ; 스택 포인터 설정
        mov       XBR2, #40h             ; Enable crossbar and weak pull-ups

        lcall     delay                  ; 딜레이 타임 1: 15 mS
        lcall     delay                  ; (LCD 파워 안정시간)

;-----------------------------------------------------------------------------
                                         ; LCD 초기설정
        mov       A, #00110000b          ; 첫번째 Function Set
        lcall     LCD_CMD                ; 4 비트 커맨드 출력
        lcall     delay                  ; 딜레이 타임 2: 4.1 mS

        mov       A, #00110000b          ; 두번째 Function Set
        lcall     LCD_CMD                ; 4 비트 커맨드 출력
        lcall     delay                  ; 딜레이 타임 3: 100 uS

        mov       A, #00110000b          ; 세번째 Function Set
        lcall     LCD_CMD                ; 4 비트 커맨드 출력
        lcall     delay                  ; 딜레이 타임 4:

        mov       A, #00101000b          ; 4 비트 모드 2(4) 라인 LCD
        lcall     LCD_CMD                ; 4 비트 커맨드 출력
        lcall     delay                  ; 딜레이 타임 5:

        mov       A, #00001000b          ; Display Off/Cursor Off/Blink Off
        clr       LCD_RS                 ; 커맨드 출력 모드
        lcall     LCD_OUT                ; 8 비트 출력
        lcall     delay                  ; 딜레이 타임 6:

        mov       A, #00000001b          ; 디스프레이 클리어, 커서를 홈 위치
        clr       LCD_RS                 ; 커맨드 출력 모드
        lcall     LCD_OUT                ; 8 비트 출력
        lcall     delay                  ; 딜레이 타임 7:

        mov       A, #00000110b          ; 증가 모드, 커서 시프트
        clr       LCD_RS                 ; 커맨드 출력 모드
        lcall     LCD_OUT                ; 8 비트 출력
        lcall     delay                  ; 딜레이 타임 8:
;-----------------------------------------------------------------------------
        mov       A, #00001111b          ; Set Display On / Cursor On / Blink On
        clr       LCD_RS
        lcall     LCD_OUT

        mov       A, #LINE_3+7           ;  3 번째 줄 어드레스 세트 + 7
        clr       LCD_RS
        lcall     LCD_OUT

        mov       A, #'N'                ; 1 개 문자 출력 예
        setb      LCD_RS
        lcall     LCD_OUT

        mov       A, #'E'
        setb      LCD_RS
        lcall     LCD_OUT

        mov       A, #'W'
        setb      LCD_RS
        lcall     LCD_OUT

        mov       A, #'C'
        setb      LCD_RS
        lcall     LCD_OUT

        mov       A, #'E'
        setb      LCD_RS
        lcall     LCD_OUT

        mov       A, #'S'
        setb      LCD_RS
        lcall     LCD_OUT

        mov       A, #'S'
        setb      LCD_RS
        lcall     LCD_OUT

        mov       A, #LINE_1             ; 첫번째 줄 어드레스 세트
        clr       LCD_RS                 ; 커맨드 출력 모드
        lcall     LCD_OUT

        mov       dptr, #str_1           ; 스트링 1 어드레스
        lcall     string_out             ; 스트링 출력

        mov       A, #LINE_2             ; 두번째 줄 어드레스 세트
        clr       LCD_RS                 ; 커맨드 출력 모드
        lcall     LCD_OUT

        mov       dptr, #str_2           ; 스트링 2 어드레스
        lcall     string_out             ; 스트링 출력

        mov       A, #LINE_4+3           ; 네번째 줄 어드레스 세트
        clr       LCD_RS                 ; 커맨드 출력 모드
        lcall     LCD_OUT

        mov       dptr, #str_4           ; 스트링 4 어드레스
        lcall     string_out             ; 스트링 출력

        sjmp      $                      ; 프로그램 정지

;-----------------------------------------------------------------------------
; 4 비트 모드로 커맨드 출력
; 입력조건 : A[7:4] <- 상위 4 비트의 커맨드
LCD_CMD:

        clr       LCD_RS

        mov       C, ACC.7
        mov       LCD_D7, C
        mov       C, ACC.6
        mov       LCD_D6, C
        mov       C, ACC.5
        mov       LCD_D5, C
        mov       C, ACC.4
        mov       LCD_D4, C

        lcall     LCD_EN_pulse

;-----------------------------------------------------------------------------
; 4 비트 모드로 데이터 출력
; 입력조건 : ACC <- 표시할 ASCII 데이터
LCD_OUT:

        mov       C, ACC.7            ; 상위 니블 출력
        mov       LCD_D7, C
        mov       C, ACC.6
        mov       LCD_D6, C
        mov       C, ACC.5
        mov       LCD_D5, C
        mov       C, ACC.4
        mov       LCD_D4, C

        lcall     LCD_EN_pulse

        mov       C, ACC.3            ; 하위 니블 출력
        mov       LCD_D7, C
        mov       C, ACC.2
        mov       LCD_D6, C
        mov       C, ACC.1
        mov       LCD_D5, C
        mov       C, ACC.0
        mov       LCD_D4, C

        lcall     LCD_EN_pulse

        ret

;-----------------------------------------------------------------------------
; LCD 의 EN 신호선 펄스 발생
LCD_EN_pulse:

        clr      LCD_EN

        mov      r0, #000h
        djnz     r0, $

        setb     LCD_EN              ; EN 신호를 High 로 만든다.

        mov      r0, #000h           ; 약 300 uS 의 딜레이 (2MHz 내부 클럭)
        djnz     r0, $

        clr      LCD_EN

        mov      r0, #000h
        djnz     r0, $

        ret
;-----------------------------------------------------------------------------
; C8051Fxxx 의 내장 오실레이터 2 MHz 를 사용할 때 약 10 mS 의 딜레이타임
;
delay:
        mov      r0, #0024h
delay_a:
        mov      r1, #000h
        djnz     r1, $
        djnz     r0, delay_a

        ret
;-----------------------------------------------------------------------------
; 스트링 데이터 (문자열 )를 출력
; 스트링의 마지막을 00h 로 정의하는 ASCIIZ 포맷
; 입력조건: DPTR <- 프로그램 메모리의 스트링 스타트 어드레스
string_out:
        setb      LCD_RS
string_out_a:
        mov      a, #000h
        movc     a, @a+dptr
        orl      a, #000h
        jz       string_out_r

        lcall    LCD_OUT
        inc      dptr
        sjmp     string_out_a

string_out_r:
        ret
;-----------------------------------------------------------------------------
; End of file.

END

첨부파일
비밀번호 삭제하려면 비밀번호를 입력하세요.

목록

삭제 수정 답변

댓글 수정

비밀번호

수정 취소

/ byte

댓글 입력

이름 비밀번호 관리자답변보기

확인

/ byte


* 왼쪽의 문자를 공백없이 입력하세요.(대소문자구분)

회원에게만 댓글 작성 권한이 있습니다.