⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd12864_serial_char.asm

📁 好东西共享给大家,液晶显示的1502的,单片机51系列
💻 ASM
字号:
;12864的串行控制方式
;内置8192个16*16点阵字符,128个16*8个ASCII字符,可显示8*4行行16*16点汉字
;8位通讯的设置,PSB端要置1,E在通信过程中一直要有效
;显示图形时,先写入水平(0到15)与垂直(0到32)的坐标,再写入两个8位的资料
;注意:第0区的R5为LCD串行读写控制的RAM,不能在其程序的其他地方使用0区的R5,否则显示不正常

    ;控制位定义
    CS EQU P2.0
    SID EQU P2.1
    SCLK  EQU P2.2
    PSB EQU P2.3
    RST EQU P2.5
;--------------------------
    ORG 0000H
    AJMP MAIN
;--------------------------
    ORG 0030H
MAIN:
    MOV SP,#5FH
    LCALL LCD12864_INI    ;初始化LCD
    LCALL LCD12864_CHRS   ;将四行字都显示出来
    AJMP $
    ;END OF MAIN
;*********************************LCD12864**********************************************
;初始化程序,写指令,写数据,写行,忙检测
;------------------------
LCD12864_INI:
;初始化
  CLR PSB      ;串口方式
  SETB CS       ;令LCD12864被选中,高电平有效
  CLR SCLK      ;时钟置于低电平
  
  CLR RST       ;复位
  MOV R4,#60
  LCALL DELAYMS
  SETB RST
  NOP

  
  MOV B,#20H    ;基本指令操作(当并行时是4位并口方式,如果8位就是30H)
  LCALL LCD12864_WR_OP_NO_CHK
  
  MOV A,#01H    ;清屏
  LCALL LCD12864_WR_OP
  
  MOV A,#06H    ;指定资料写入或读取时,光标移动方向,AC自加1
  LCALL LCD12864_WR_OP
  
  MOV A,#0CH    ;开显示,关光标,不闪烁
  LCALL LCD12864_WR_OP
  
  CLR CS
  RET
;-----------------------OK
LCD12864_CHRS:
;将表中的四行字都显示出来
    MOV A,#80H
    MOV DPTR,#CHR1
    LCALL LCD12864_CHR
    
    MOV A,#90H
    MOV DPTR,#CHR2
    LCALL LCD12864_CHR
    
    MOV A,#88H
    MOV DPTR,#CHR3
    LCALL LCD12864_CHR
    
    MOV A,#98H
    MOV DPTR,#CHR4
    LCALL LCD12864_CHR
    RET
;----------------------OK
LCD12864_CHR:
;显示第一行字
    LCALL LCD12864_WR_OP  ;使DDRAM地址指到第n行首
    MOV R1,#16
LC_LP:
    CLR A
    MOVC A,@A+DPTR
    LCALL LCD12864_WR_DAT
    INC DPTR
    DJNZ R1,LC_LP
    RET
;----------------------OK
LCD12864_WR_OP:
;将命令A写入LCD12864
    MOV B,A         ;先将A的值保存起来
    
    LCALL LCD12864_CHK_BUSY      ;忙状态检测
LCD12864_WR_OP_NO_CHK:    

    SETB CS        ;令LCD被选中
    
    MOV A,#0F8H
    MOV R5,#8
LWO_LP1:
    RLC A
    MOV SID,C
    SETB SCLK
    NOP
    NOP
    CLR SCLK
    DJNZ R5,LWO_LP1
    
    MOV A,B
    ANL A,#0F0H
    MOV R5,#8
LWO_LP2:
    RLC A
    MOV SID,C
    SETB SCLK
    NOP
    NOP
    CLR SCLK
    DJNZ R5,LWO_LP2
    
    MOV A,B
    SWAP A
    ANL A,#0F0H
    MOV R5,#8
LWO_LP3:
    RLC A
    MOV SID,C
    SETB SCLK
    NOP
    NOP
    CLR SCLK
    DJNZ R5,LWO_LP3
    CLR CS
    RET
;----------------------OK
LCD12864_WR_DAT:
;将数据A写入LCD12864
    MOV B,A
    LCALL LCD12864_CHK_BUSY
    
    SETB CS
    
    MOV A,#0FAH
    MOV R5,#8
LWD_LP1:
    RLC A
    MOV SID,C
    SETB SCLK
    NOP
    NOP
    CLR SCLK
    DJNZ R5,LWD_LP1
    
    MOV A,B
    ANL A,#0F0H
    MOV R5,#8
LWD_LP2:
    RLC A
    MOV SID,C
    SETB SCLK
    NOP
    NOP
    CLR SCLK
    DJNZ R5,LWD_LP2
    
    MOV A,B
    SWAP A
    ANL A,#0F0H
    MOV R5,#8
 LWD_LP3:
    RLC A
    MOV SID,C
    SETB SCLK
    NOP
    NOP
    CLR SCLK
    DJNZ R5,LWD_LP3
    
    CLR CS
    
    RET    
;-----------------------OK
LCD12864_CHK_BUSY:
;检测忙位
  MOV R7,B
  SETB CS
  
  MOV A,#0FCH
  MOV R5,#8
LCB_LP1:
  RLC A
  MOV SID,C
  SETB SCLK
  NOP
  NOP
  CLR SCLK
  DJNZ R5,LCB_LP1
  
  MOV R5,#8
LCB_LP2:
  SETB SCLK
  NOP
  MOV C,SID
  RLC A
  CLR SCLK
  DJNZ R5,LCB_LP2
  MOV B,A
  
  MOV R5,#8
LCB_LP3:
  SETB SCLK
  NOP
  MOV C,SID
  RLC A
  CLR SCLK
  DJNZ R5,LCB_LP3
  SWAP A
  ORL A,B
    
   CLR CS
  
  JB ACC.7,LCD12864_CHK_BUSY
  MOV B,R7
  RET
;----------
DELAYMS:
    MOV R3,#185
DL:
    NOP
    NOP
    NOP
    DJNZ R3,DL
    DJNZ R4,DELAYMS
    RET
;----------------------
CHR1: DB "天降大任于斯人也"
CHR2: DB "必先苦其筋骨, 饿"
CHR3: DB "其体肤, 空泛其身"
CHR4: DB "行拂乱其所为...."
   END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -