原创 1602测试程序的编写方法

2009-5-1 09:11 3019 7 7 分类: 模拟
LCD1602应用已很普遍,本文介绍 利用LCD1602使用说明书,编写测试程序的编程方法。       

   1602使用说明附后;


1.接口定义
 参阅使用说明中:《接口信号定义》  


如LCD1602和MCU连接如下
                       4  (RS)     ---------------------P2.4
                        5 (R/W) ---------------------P2.3                       


                        6(E)        ---------------------P2.5
                        7-14             ----------------=---P0.0-P0.7



    接口定义如下:
    RS  BIT P2.4
    RW  BIT P2.3
    E   BIT P2.5
    DAT EQU P0


2.写入地址
    参阅使用说明中:3.RAM地址映射图
    说明:从图可见1602:第一项地址:00-0FH
                        第二项地址:40H-4FH
    如我们要显示字符,必须设置数据指针。
    设置方法见使用说明中4.2.1。指令码+地址
    如:我们要在第一项第一列中显示字符:80H(指令)+00H(地址)=10000000B
    程序可写入:MOV A,#10000000B
    如:我们要在第二项第十列中显示字符:80H(指令)+4AH(地址)=11001010B
    程序可写入:MOV A,#11001010B


3.指令的编写
    1602共有11条指令,参阅使用说明中:4.指令说明
    第一条指令:显示模式的设置,我们用1602
    程序可写入:MOV A,#00111000B,表示设置是16*2,5*7点阵,8位数据接口。
    其它指令的编写在程序中说明


4.LCD送入显示的是ASCII码(查表可知)


5.测试程序(有说明)
;=========================================;
;       LCD1602显示驱动测试程序
;                   NJF-1602
;                   12MHZ
;                  间接方式    
;=========================================;
              
               RS EQU P2.4          ;接口定义
               RW EQU P2.3
               E EQU P2.5
               DAT EQU P0


               ORG 0000H
               JMP MAIN
               ORG 0040H


               ;*****主程序


   MAIN:       MOV SP,#60H
               CALL CSH_LCM          ;启动
               MOV A,#11001111B      ;显示第二项16列(最后一个字)
               CALL WR_LCM           ;写入指令
               MOV A,#45H            ;送ASCII“E”
               CALL WR_DATA          ;写入数据
               JMP $


               ;*****启动


   CSH_LCM:    MOV A,#00111000B       ;参阅使用说明中:4.1.1(16*2,5*7点阵,8位数据接口)
               CALL WR_LCM            ;写入指令
               MOV A,#00001110B       ;参阅使用说明中:4.1.2上(开显示,显示光标不闪耀)
               CALL WR_LCM            ;写入指令
        MOV A,#00000110B       ;参阅使用说明中:4.1.2下(N=1当读或写一个字符后地址
                                      ;指针加一,光标加一。S=0写一字符,屏示动)
               CALL WR_LCM            ;写入指令
               RET


               ;*****写入指令


   WR_LCM:     CALL RD_BF             ;判LCD忙
               CLR E                  ;注意:E设低电平主要是为后产生一高电平脉冲
               CLR RS                 ;参阅使用说明中:1.2节  RS="L"
               CLR RW                 ;RS=L
               SETB E                 ;E=高脉冲
               MOV DAT,A              ;d0-d7指令码
               CLR E                  ;允许端恢复低电平
               RET


               ;*****判LCD忙          ;说明:MCU处理一个指令,仅需若干个uS,而LCD得化40uS
                                      ;-1.64ms,所以当写读时,先查LCD是否忙?
                                      ;参阅使用说明中:2-状态字说明
              
   RD_BF:      PUSH ACC               ;ACC入栈
   BF_LOOP:    SETB RW                ;RW-H
               CLR RS                 ;RS-L
               SETB E                 ;E=H
               MOV A,DAT              ;读数据
               CLR E                  ;允许端恢复低电平
               JB ACC.7,BF_LOOP       ;参阅使用说明中:2-状态字说明:对控制器读写之前,必须
                                      ;进行读写检测,确保ACC.7=0
               POP ACC                ;ACC出栈
               CALL DEAY              ;转延时
               RET


               ;*****写入数据
              
   WR_DATA:    CALL RD_BF             ;判LCD忙
               CLR E                  ;拉低电平
               SETB RS                ;参阅使用说明中:1-4   RS="H"
               CLR RW                 ;RW=L
               SETB E                 ;E=高电平
               MOV DAT,A              ;写入数据
               CLR E                  ;允许端恢复低电平
               RET
 
               ;*****延时2.5MS
              
   DEAY:       MOV R6,#5
   LD1:        MOV R7,#250
               DJNZ R7,$
               DJNZ R6,LD1
               RET
               END

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
7
关闭 站长推荐上一条 /3 下一条