想在第二行第一个位置显示A,但显示不了。
STM8105C6 1602
; PE5---------------------------------RS
; PC6---------------------------------R/W
; PC5---------------------------------E
; PB0(pin10)—————————-———>D0(P10)
; PB1(pin9)—————————————>D1(P11)
; PB2(pin8)—————————————>D2(P12)
; PB3(pin7)—————————————>D3(P13)
; PB4(pin6)—————————————>D4(P14)
; PB5(pin5)—————————————>D5(P15)
; PB6(pin4)—————————————>D6(P16)
; PB7(pin3)—————————————>D7(P17)
GPIO_INIT:
;初始化PB口
MOV PB_DDR,#0FFH
MOV PB_CR1,#0FFH
MOV PB_CR2,#0 ;推挽输出;最大输出2MHZ
;初始化PE口
MOV PE_DDR,#0FFH
MOV PE_CR1,#0FFH
MOV PE_CR2,#0 ;推挽输出;最大输出2MHZ
;初始化PC口
MOV PC_DDR,#0FFH
MOV PC_CR1,#0FFH
MOV PC_CR2,#0 ;推挽输出;最大输出2MHZ
;显示字母A
CALL INIT
LD A,#0C0H ;写入显示起始程序(第二行第一个位置)
CALL ENABLE ;调用写入命令子程序
LD A,#01000001B ;写字母A的代码
CALL WRITE_DATA
;***********LCD初始化***********
INIT:
CALL DELAY
LD A,#38H
BRES PE_ODR,#5 ;位清零
BRES PC_ODR,#6
BRES PC_ODR,#5
BSET PC_ODR,#5 ;位置1
LD PB_ODR,A
BRES PC_ODR,#5
CALL DELAY
LD A,#38H
CALL ENABLE
LD A,#0CH
CALL ENABLE
LD A,#06H
CALL ENABLE
LD A,#01H
CALL ENABLE
RET
ENABLE:
BRES PE_ODR,#5 ;写入控制命令子程序
BRES PC_ODR,#6
BRES PC_ODR,#5
CALL CHECK_BUSY
BSET PC_ODR,#5
LD PB_ODR,A
BRES PC_ODR,#5
RET
WRITE_DATA:
BSET PE_ODR,#5 ;写入数据
BRES PC_ODR,#6
BRES PC_ODR,#5
CALL CHECK_BUSY
BSET PC_ODR,#5
LD PB_ODR,A
BRES PC_ODR,#5
RET
CHECK_BUSY:
MOV PB_ODR,#0FFH ;判断液晶显示器是否忙的子程序
BRES PE_ODR,#5
BSET PC_ODR,#6
BRES PC_ODR,#5
NOP
BSET PC_ODR,#5
BTJT PB_ODR,#7,CHECK_BUSY ;如果PB7为高电平表示忙
RET
;延时程序
DELAY:
LDW Y,#1
LOOP:
LDW X,#0FFFFH
LOOP1:
DECW X
JRNE LOOP1
DECW Y
JRNE LOOP
RET |
|