找回密码
 立即注册
查看: 129|回复: 3

最简单的Lcd12864汇编程序

[复制链接]
  • 打卡等级:偶尔看看II
  • 打卡总天数:23
  • 最近打卡:2025-12-17 09:24:53
已绑定手机

1

主题

2

回帖

119

积分

注册会员

积分
119
发表于 2025-11-10 21:49:56 | 显示全部楼层 |阅读模式
看到大多数关于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

1 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:23
  • 最近打卡:2025-12-17 09:24:53
已绑定手机

1

主题

2

回帖

119

积分

注册会员

积分
119
发表于 2025-11-11 17:44:59 | 显示全部楼层
;===============================================================
;  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      BIT  P3.5        ; 命令/数据选择
RW      BIT  P3.4        ; 读/写选择
EN      BIT  P3.2        ; 使能

        ORG  0000H
        SJMP MAIN

;-------- 延时子程序 -----------------------------------------
DELAY:
        PUSH 07H
        PUSH 06H
        MOV  R7,#10
DEL1:   MOV  R6,#0
DEL2:   DJNZ R6,$
        DJNZ R7,DEL1
        POP  06H
        POP  07H
        RET

;-------- 写命令 ------------------------------------------------
WR_CMD:
        CLR  RS
        SJMP WR_COMM
;-------- 写数据 ------------------------------------------------
WR_DAT:
        SETB RS
WR_COMM:
        CLR  RW             ; 只写
        MOV  P2,A           ; 数据送到P2口
        SETB EN
        CLR  EN
        LCALL DELAY
        RET

;-------- 主程序 ------------------------------------------------
MAIN:
        ;------ STC8H 端口模式设为双向(准双向)
        MOV        P0M1,#0
                MOV        P0M0,#0
                MOV  P2M1,#0
        MOV  P2M0,#0
        MOV  P3M1,#0
        MOV  P3M0,#0
               
        ;------ ST7920 初始化
        MOV  A,#1CH               ; 功能设定:基本指令、8位并口00011100
        LCALL WR_CMD
        MOV  A,#0CH         ; 显示开,游标关
        LCALL WR_CMD
        MOV  A,#01H         ; 清屏
        LCALL WR_CMD
        MOV  A,#06H         ; 地址自动+1
        LCALL WR_CMD

        ;------ 显示汉字“STC8 单片机”
        MOV  DPTR,#HZ_TAB1
        MOV  R0,#12          ; 2字节×5字
DISP_LP1:
        CLR  A
        MOVC A,@A+DPTR
        LCALL WR_DAT
        INC  DPTR
        DJNZ R0,DISP_LP1
;------------------------------               
                MOV        A,#90H
                LCALL WR_CMD
                MOV  DPTR,#HZ_TAB2
                MOV        R0,#14
DISP_LP2:
                clr        a
        MOVC A,@A+DPTR
        LCALL WR_DAT
        INC  DPTR
        DJNZ R0,DISP_LP2
;------------------------------               
                MOV        A,#88H
                LCALL WR_CMD
                MOV  DPTR,#HZ_TAB3
                MOV        R0,#16
DISP_LP3:
                clr        a
        MOVC A,@A+DPTR
        LCALL WR_DAT
        INC  DPTR
        DJNZ R0,DISP_LP3
;------------------------------
                MOV        A,#98H
                LCALL WR_CMD
                MOV  DPTR,#HZ_TAB4
                MOV        R0,#14
DISP_LP4:
                clr        a
        MOVC A,@A+DPTR
        LCALL WR_DAT
        INC  DPTR
        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
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:23
  • 最近打卡:2025-12-17 09:24:53
已绑定手机

1

主题

2

回帖

119

积分

注册会员

积分
119
发表于 2025-11-11 17:49:29 | 显示全部楼层
我觉得汇编语言编写程序,对于硬件的理解会更加深刻。在汇编的基础上去学习,C语言的难点也会更容易突破!
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:184
  • 最近打卡:2025-12-09 15:37:07

16

主题

273

回帖

1464

积分

金牌会员

积分
1464
发表于 2025-11-20 16:58:59 | 显示全部楼层
fzh*** 发表于 2025-11-11 17:44
;===============================================================
;  STC8H8K64U 驱动 LCD12864(ST7920 ...

SETB EN 和CLR EN之间最好留些时间
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-12-18 22:24 , Processed in 0.124559 second(s), 58 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表