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

📄 lcm12232zk.asm

📁 LCM12232ZK,LCM16032 的汇编驱动
💻 ASM
字号:
------用8051 为MPU 时钟6MHZ
若时钟较高注意调整相应延时时间满足时序要求
;;=================!!!!!!!!!!!!!====================
LCM12232ZK 间接控制方式-
;;8 位并行接口-汉字显示演示程序
;;========!! 口线定义必须与硬件一致!!! =============
D_PORT  EQU  P1
RS      EQU  P3.1
RW      EQU  P3.2
E       EQU  P3.3
BF      EQU  ACC.7

        PROG SEGMENT CODE
        STACK SEGMENT IDATA

        RSEG STACK
        DS 10H ; 16 Bytes Stack

        CSEG AT 0
        USING 0 ; Register-Bank 0

;Execution starts at address 0 on power-up.
        JMP   START
        RSEG  PROG
START:
        MOV   SP,#STACK-1 ;;set 堆栈指针
        lcall _init_lcm ;;液晶模块初始化
        mov   dptr,#string1
        lcall put_string ;;显示字符串
        ljmp $
        string1:
        DB "北京青云创新科",0
;;***************************************************
;;in: DPTR=string addr
;; R7=ddram addr
;;***************************************************
put_string:
        mov  a,r7
        orl    a,#80h
        mov   r7,a
        lcall _write_command
disp_str_loop:
        mov   a,#0
        movc  a,@a+DPTR
        cjne  a,#0,cont_str_disp
        ret
cont_str_disp:
        mov   R7,a
        lcall _write_data
        inc   DPTR
        sjmp  disp_str_loop
;;***************************************************
;;input:no
;;output:no
;;***************************************************
_init_lcm:
;;delay >40ms
    mov   r6,#0
    mov   r7,#40
    lcall _delay_ms
;;8-bit parall
;;select basic instruction
;;RS RW D7 D6 D5 D4 D3 D2 D1 D0
;; 0 0 0 0 1 1 x 0 x x
   mov   R7,#00110000B
   lcall _write1_command
;;delay >100us
   mov   r6,#0
   mov   r7,#1
   lcall _delay_us
;;set basic mode
;;RS RW D7 D6 D5 D4 D3 D2 D1 D0
;; 0 0 0 0 1 1 x 0 x x
   mov   R7,#00110000B
   lcall _write1_command
;;delay>37us
   mov   r6,#0
   mov   r7,#1
   lcall _delay_us
;;turn on lcd
;;RS RW D7 D6 D5 D4 D3 D2 D1 D0
;; 0 0 0 0 0 0 1 D C B D=1 整体显示ON
;; C=1 游标ON B=1 游标位置ON
   mov   r7,#00001100B
   lcall _write_command
;;delay >100us
   mov   r6,#0
   mov   r7,#1
   lcall _delay_us
;;clr screen text
;;RS RW D7 D6 D5 D4 D3 D2 D1 D0 将DDRAM
;;添满20H 且设定DDRAM 位址计数器AC=0
;; 0 0 0 0 0 0 0 0 0 1
   mov   r7,#00000001B
   lcall _write_command
;;delay>10ms
  mov   r6,#0
  mov   r7,#40
  lcall _delay_ms
;;enter dot setup
;;RS RW D7 D6 D5 D4 D3 D2 D1 D0 指定在资料的读
取与写入时游标的移动方向及指定显示的移位
;; 0 0 0 0 0 0 0 1 I/D S
   mov   r7,#00000110B
   lcall _write_command
   ret
;;***************************************************
_wait_free:
    push   acc
    mov   P1,#0FFH ;;set read active
    clr   RS
    setb  RW
_loop_busy:
    setb  E
    mov   a,P1
    clr   E
    jb    BF,_loop_busy
    clr   RS
    clr   RW
    pop   acc
    ret
;;***************************************************
;;input:r7
;;output:NO
*********** _write_command:
lcall _wait_free
_write1_command:
clr RS ;;RS RW= 0 0 ,write command
clr RW
setb E
mov D_PORT,R7
clr E
ret
;;***************************************************
;;input:R7
;;output:acc=bit address(b6~b0)
;;***************************************************
_write_data:
lcall _wait_free
setb RS ;;RS RW= 1 0,write data
clr RW
setb E
mov D_PORT,R7
clr E
ret
;;***************************************************
;;input:R7,R6
;;output:none
;;***************************************************
_delay_ms:
nop ;;1
delay:
mov acc,#250 ;;1
del:
;;4*250=1000*(12*1/12M)=1ms
nop ;;1
nop ;;1
djnz acc,del ;;2
djnz r7,delay ;;2
mov a,r6 ;;1
jz exit ;;2
djnz r6,delay ;;2
exit:
ret
;;***************************************************
;;input:R7,R6
;;output:none
;;*********************************************
_delay_us:
   nop   ;;1
delayus:
   mov   acc,#25 ;;1
delus:
;;4*25=100*(12*1/12M)=100us
  nop ;;1
  nop ;;1
  djnz acc,delus ;;2
  djnz r7,delayus ;;2
  mov  a,r6 ;;1
  jz   exitus ;;2
  djnz r6,delayus ;;2
exitus:
  ret
  END
;;================!!!!!!!!!!!!!================

⌨️ 快捷键说明

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