最简单的Lcd12864汇编程序
看到大多数关于lcd12864的程序都是C语言的,今天发一个汇编的程序,用于测试LCD12864。;以下为8H8K64U调试通过:频率11.0592M
P2M1 DATA 095H ;端口模式寄存器地址命名
P2M0 DATA 096H
P3M1 DATA 0B1H
P3M0 DATA 0B2H
; LCD12864并行驱动程序 for STC8H8K64U (1T, 11.0592MHz)
; 液晶型号:QC12864B (控制器ST7920)
; 端口定义:
; 数据端口:P2
; RS控制:P3.5
; RW控制:P3.4
; EN控制:P3.2
; 寄存器定义
RS BIT P3.5 ; 数据/命令选择
RW BIT P3.4 ; 读/写选择
EN BIT P3.2 ; 使能信号
LCD_PORT EQU P2 ; 数据端口
ORG 0000H
JMP MAIN
ORG 0300H
MAIN: ; 主程序
MOV P2M0, #00H
MOV P2M1, #00H
MOV P3M0, #00H
MOV P3M1, #00H
; 初始化端口
MOV LCD_PORT, #0FFH ; P2设为推挽输出
MOV P2M1, #00H
MOV P2M0, #0FFH
; 控制端口初始化
CLR RS
CLR RW
MOV P2,#30H
SETB EN
CLR EN
MOV P2,#0CH
SETB EN
CLR EN
LCALL DELAY47US
CLR RS
CLR RW
MOV P2,#80H
SETB EN
CLR EN
LCALL DELAY47US
SETB RS
CLR RW
MOV P2,#'c'
SETB EN
CLR EN
LCALL DELAY47US
SJMP $ ;主循环
DELAY47US: ;@11.0592MHz
PUSH 30H
MOV 30H,#101 ;延时程序,最少是101,改成100就显不了!
NEXT:
DJNZ 30H,NEXT
POP 30H
RET
END
;===============================================================
;STC8H8K64U 驱动 LCD12864(ST7920)51汇编程序
;数据口:P2,控制口:P3.2(EN), P3.4(RW), P3.5(RS)
;直接连接
;===============================================================
;以下为8H8K64U调试通过:频率11.0592M
P0M1 DATA 093H
P0M0 DATA 094H
P2M1 DATA 095H ;端口模式寄存器地址命名
P2M0 DATA 096H
P3M1 DATA 0B1H
P3M0 DATA 0B2H
RS BITP3.5 ; 命令/数据选择
RW BITP3.4 ; 读/写选择
EN BITP3.2 ; 使能
ORG0000H
SJMP MAIN
;-------- 延时子程序 -----------------------------------------
DELAY:
PUSH 07H
PUSH 06H
MOVR7,#10
DEL1: MOVR6,#0
DEL2: DJNZ R6,$
DJNZ R7,DEL1
POP06H
POP07H
RET
;-------- 写命令 ------------------------------------------------
WR_CMD:
CLRRS
SJMP WR_COMM
;-------- 写数据 ------------------------------------------------
WR_DAT:
SETB RS
WR_COMM:
CLRRW ; 只写
MOVP2,A ; 数据送到P2口
SETB EN
CLREN
LCALL DELAY
RET
;-------- 主程序 ------------------------------------------------
MAIN:
;------ STC8H 端口模式设为双向(准双向)
MOV P0M1,#0
MOV P0M0,#0
MOVP2M1,#0
MOVP2M0,#0
MOVP3M1,#0
MOVP3M0,#0
;------ ST7920 初始化
MOVA,#1CH ; 功能设定:基本指令、8位并口00011100
LCALL WR_CMD
MOVA,#0CH ; 显示开,游标关
LCALL WR_CMD
MOVA,#01H ; 清屏
LCALL WR_CMD
MOVA,#06H ; 地址自动+1
LCALL WR_CMD
;------ 显示汉字“STC8 单片机”
MOVDPTR,#HZ_TAB1
MOVR0,#12 ; 2字节×5字
DISP_LP1:
CLRA
MOVC A,@A+DPTR
LCALL WR_DAT
INCDPTR
DJNZ R0,DISP_LP1
;------------------------------
MOV A,#90H
LCALL WR_CMD
MOVDPTR,#HZ_TAB2
MOV R0,#14
DISP_LP2:
clr a
MOVC A,@A+DPTR
LCALL WR_DAT
INCDPTR
DJNZ R0,DISP_LP2
;------------------------------
MOV A,#88H
LCALL WR_CMD
MOVDPTR,#HZ_TAB3
MOV R0,#16
DISP_LP3:
clr a
MOVC A,@A+DPTR
LCALL WR_DAT
INCDPTR
DJNZ R0,DISP_LP3
;------------------------------
MOV A,#98H
LCALL WR_CMD
MOVDPTR,#HZ_TAB4
MOV R0,#14
DISP_LP4:
clr a
MOVC A,@A+DPTR
LCALL WR_DAT
INCDPTR
DJNZ R0,DISP_LP4
SJMP $ ; 停机
;-------- 汉字码表(ST7920 内置编码) -------------------------
HZ_TAB1:
DB'STC8单片机'
HZ_TAB2:
DB '2005年11月11日'
HZ_TAB3:
db '芯片出厂序列号 : '
HZ_TAB4:
db 'F784C90401461C' ; ST
END 我觉得汇编语言编写程序,对于硬件的理解会更加深刻。在汇编的基础上去学习,C语言的难点也会更容易突破! fzhyw 发表于 2025-11-11 17:44
;===============================================================
;STC8H8K64U 驱动 LCD12864(ST7920 ...
SETB EN 和CLR EN之间最好留些时间
页:
[1]