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

2007-8-23 17:13 3080 5 6 分类: MCU/ 嵌入式

  
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


pdf

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户1290259 2007-9-23 15:47

好 !LZ讲得好细,以前在设计电路时还真没有去注意这些,仅仅是依照葫芦画瓢。

TKS!

用户15482 2007-8-26 08:37

             不论你走到那里,我都会追随你!永远向你学习的学生,敬礼!

                               资料先收藏啦!

相关推荐阅读
用户92689 2013-10-26 08:50
stm32-DAC应用一例
设定:1ms   0-16 输出: 16   3.000V  15  2.813V  14  2.625V 13  2.438V  12 2.250V 11  2.063V 1...
用户92689 2013-10-17 09:19
STM32 ---时序和延迟
#include<stm32f10x_rcc.h> #include<stm32f10x_gpio.h> #include "stm32f10x.h" #inclu...
用户92689 2013-10-12 13:45
STM8(用库)实例赏析---PWM
//占空比50% #include "stm8s.h" void main(void) {  //系统时钟切换配置(自动切换,外部高速晶振,关闭切换中断,  CLK_ClockSwi...
用户92689 2013-10-12 10:43
STM8(用库)实例赏析---TMI1
//0.5秒定时,LED闪烁 #include "stm8S.h" void main(void) {  //系统时钟切换配置(自动切换,外部高速时钟,关切换中断  //,切换新时钟...
用户92689 2013-10-12 10:16
STM8(用库)实例赏析---GPIO
 /*上电系统内部高速时钟默认为2MHz,    可选择不同的时钟分频值,观察LED亮灯速度。*/  #include "stm8s.h" //======= void delay(u...
用户92689 2013-10-05 21:13
STM8(用库)实例赏析---CLK
实例一:内部高速时钟切换 并可在CCO引脚上检测切换后的时钟信号。(红色部分)   #include "stm8s.h" //***************************...
EE直播间
更多
我要评论
1
5
关闭 站长推荐上一条 /3 下一条