初学者:用motorola的HC705单片机驱动1602LCM例程
国内motorola的8位单片机的相关内容比起其他如51系列少多了,现在我正在学motorola的
hc05系列,现把自己写的程序与大家交流,如果大家觉得有价值的话我将继续发布我的程
序,希望motorola的使用者能分享一下经验。
; Register Equates
PORTA EQU $00 ;LCD display data
PORTB EQU $01 ;Keypad Row4,3,2,1;Col1,2,3,4
PORTC EQU $02 ;Fan*,Heat*,Cool*,Beep;ADen*,E,RS,R/W
DDRA EQU $04 ;Data direction, Port A (all output)
DDRB EQU $05 ;Data direction, Port B (7-4in,3-0out)
DDRC EQU $06 ;Data direction, Port C (all output)
; RAM Equates
TEMPA EQU $9E ;One byte temp storage location
TEMPX EQU $9F ;One byte temp storage location
ORG $100
; Set Port data patterns and directions
TRYLCD LDA #$00 ;
STA PORTB ;Initial values for Thermostat controls控制脚PB0
接RS,PB1接RW,PB2接E
STA PORTC ;数据线
LDA #$FF
STA DDRB ;Port A all outputs
STA DDRC ;Port C all outputs
; LCD display peripheral needs to be initialized 初始化
LDA #$01
JSR WCTRL ;Clear
LDA #$02
JSR WCTRL ;Home
LDA #$38
JSR WCTRL ;Function Set- 8-bit,2-line,5X7
LDA #$0C
JSR WCTRL ;Display on, Cursor off
LDA #$06
JSR WCTRL ;Entry mode- Inc addr, no shift
LDA #80 ;从第一行开始
JSR ADDR
LDA #'A' ;ASCII 'A' 显示单字符子程序
DLP JSR WDAT ;Display a character
INCA ;To next ASCII character
CMP #'Z' ;Go ABCDEFGHIJKLMNOPQRS & stop
BNE DLP ;Loop till T
;HERE BRA HERE ;Stop
LDA #0C0 ;从第二行开始
JSR ADDR
CLRX
JSR PRSTR
PRSTR LDA LINE1,X ;整行显示字符串子程序
BEQ OUT
L3 JSR WDAT
INCX
BRA PRSTR
OUT RTS
;**************
; SUBROUTINES *
;**************
;*******************************************************
; WCTRL - Write control word to LCD peripheral *
; Enter with control word in accumulator *
; Return with original value of X *
; Delay ~4.5mS if A=$01 or $02 else delay ~120礢 *
;*******************************************************
WCTRL STX TEMPX ;Save X 写操作命令子程序
STA PORTC ;Write control word to LCD
BSET 2,PORTB ;E->1
BCLR 2,PORTB ;E->0
LDX #20 ;20*6~*1礢/~=120礢
L120U DECX ;Delay loop ~120礢
BNE L120U ;20-19,19-18...1-0
CMP #$02 ;Commands $01 & $02 req extra delay
BHI ARN5M ;If command > $02 skip long delay
L5M JSR ANRTS ;JSR+RTS TAKES 12~ (just want delay)
DECX ;TAKES 3~ (X=0->1 on first pass)
BNE L5M ;3~ Loop 256*18~*1礢/~=4.608mS Delay
ARN5M LDX TEMPX ;Restore X
ANRTS RTS ;** RETURN **
********************************************************
* WDAT - Write data word to LCD peripheral *
* Enter with data word in accumulator *
* Return with original values of X & A *
* Delay ~120礢 after data write *
********************************************************
WDAT STX TEMPX ;Save X 写显示字符子程序
STA TEMPA ;Save A
STA PORTC ;Write data word to LCD
BSET 0,PORTB ;RS->1
BSET 2,PORTB ;E->1
BCLR 2,PORTB ;E->0
BCLR 0,PORTB ;RS->0
LDX #20 ;20*6~*1礢/~=120礢
L120 DECX ;Delay loop ~120礢
BNE L120 ;20-19,19-18...1-0
LDA TEMPA ;Restore A
LDX TEMPX ;Restore X
RTS ;** RETURN **
ADDR BCLR 0,PORTB ;设定显示位置子程序
STA PORTC
BSET 2,PORTB
BCLR 2,PORTB
LDA #13
L4 DECA
BNE L4
BSET 0,PORTB
RTS
ORG $50
LINE1 DB 'MY LCD IS RUNNING' ;定义字符串
DB 0
发表时间:2002年7月20日9:44:00