问题描述
我正在按照 Ben Eater 的教程运行简单的 65c02 计算机设置并使用 65c22 VIA 添加 LCD 和显示,以及此时的任何内容。 8 位模式没有问题,但是当我试图想出如何使用 4 位模式时,没有任何效果。
目前我想要 4 位用于从 65c22 上的 PORT B 到 LCD 显示器的数据,以及从 PORT B 到 LCD 的 E RS 和 RW 控制信号的另外 3 位。我知道在指令之间有延迟很重要,这就是为什么我从代码中删除它并决定减慢时钟速度,这样就不会成为问题。这是我目前拥有的代码:
PORTB = $6000
PORTA = $6001
DDRB = $6002
DDRA = $6003
E = %00000001
RW = %00000010
RS = %00000100
SETMODE = %00100000 ; set 4 bit mode
CHARSETA = %00100000 ; set 1-line disply 5x8 char
CHARSETB = %00000000
disPLAYA = %00000000 ; Set display on and cursor on
disPLAYB = %11100000
disPLAYINCA = %00000000 ; increments the cursor to the right
disPLAYINCB = %01100000
disPLAYHA = %01000000 ; display letter H
disPLAYHB = %10000000
.org $8000
reset:
lda #%11111111 ; set port B to be outputs
sta DDRB
jsr delay
lda #SETMODE ; set 4-bit mode
sta PORTB
jsr delay
lda #(E | SETMODE) ; toggle E
sta PORTB
jsr delay
lda #SETMODE ; toggle E back to 0
sta PORTB
jsr delay
lda #CHARSETA ; set 1-line disply 5x8 char
STA PORTB
jsr delay
lda #(E | CHARSETA) ; toggle E
sta PORTB
jsr delay
lda #CHARSETA ; toggle E back to 0
sta PORTB
jsr delay
lda #CHARSETB
sta PORTB
jsr delay
lda #(E | CHARSETB)
sta PORTB
jsr delay
lda #CHARSETB
sta PORTB
jsr delay
lda #disPLAYA
sta PORTB
jsr delay
lda #(E | disPLAYA)
sta PORTB
jsr delay
lda #disPLAYA
sta PORTB
jsr delay
lda #disPLAYB
sta PORTB
jsr delay
lda #(E | disPLAYB)
sta PORTB
jsr delay
lda #disPLAYB
sta PORTB
jsr delay
lda #disPLAYINCA
sta PORTB
jsr delay
lda #(E | disPLAYINCA)
sta PORTB
jsr delay
lda #disPLAYINCA
sta PORTB
jsr delay
lda #disPLAYINCB
sta PORTB
jsr delay
lda #(E | disPLAYINCB)
sta PORTB
jsr delay
lda #disPLAYINCB
sta PORTB
jsr delay
lda #RS
sta PORTB
jsr delay
lda #(RS | disPLAYHA) ; display first 4 bits for letter H
sta PORTB
jsr delay
lda #(E | RS | disPLAYHA) ; Set E high and also keep RS high
sta PORTB
jsr delay
lda #(RS | disPLAYHA) ; set E low again and only keep RS high
sta PORTB
jsr delay
lda #RS
sta PORTB
jsr delay
lda #(RS | disPLAYHB) ; display second 4 bits for letter H
sta PORTB
jsr delay
lda #(E | RS | disPLAYHB) ; Set E high and also keep RS high
sta PORTB
jsr delay
lda #(RS | disPLAYHB) ; set E low again and only keep RS high
sta PORTB
jsr delay
loop: ; do nothing really and stay in loop
jmp loop
delay: ; this is how I did the loop. No need for the clc's I guess
pha
clc
ldy #$ff ; change that value to control how long the loop will be
ldx #$ff ; change that value to control how long the loop will be
delayparttwo:
dex
bne delayparttwo
clc
dey
bne delayparttwo
clc
pla
rts
.org $fffc
.word reset
.word $0000
我正在尝试以最简单的方式执行此操作,以便在进一步优化代码之前先使其工作。这是按照 4 位模式的 HD44780U 数据表示例完成的。然而,液晶显示器上没有任何反应。如果这种方法接近应该完成的正确方法,有什么想法吗?谢谢!
这是我想出来的更新和固定代码,只是为了测试和开始,没有将大部分代码添加到子程序中。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)