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

📄 ex3-8.asm

📁 《51单片机应用开发桉例精选》源代码及图片下载
💻 ASM
字号:
;--------------程序信息-----------------
;文件名   : ex3-8.asm
;版本     : 1.0
;作者     :
;修改时间 :

;--------------程序说明------------------
;CHAP 3.8  简单液晶显示实例

;-----------常量和变量声明---------------

         RS 	EQU P3.0;			控制位宏定义,数据地址选择位
         RW	EQU P3.1;		数据命令选择位
         E 	EQU P3.2;			LCD使能端
         LCDP   EQU P1;			LCD数据端口
         BF 	EQU LCDP.7;		LCD忙标志位
         LINEF  BIT 00H;			换行标志位


;--------------预定义--------------------

               ORG 0000H
               LJMP START

;------------中断入口地址分配------------
               ;ORG 0003H
               ;LJMP INT0PRG
               ;ORG 000BH
               ;LJMP INT1PRG
               ;ORG 0013H;
               ;LJMP
               ;ORG 0030H

START:
       INIT:  CALL LCDINIT;LCD INIT 	液晶显示器初始化
;--------------初始化子程序--------------
     MOV SP,60H;
;--------------主程序--------------------
MAIN:
        MOV LCDP,#01H;		开屏幕
        CALL WINSTR;
        MOV R0,#00H;			初始化寄存器
        MOV R1,#00H;
 MAIN1: MOV LCDP,R0;			写入数据
        CALL WDATA; 			时序使能
        CALL DELAY600MS;		显示延时
        ;CALL NEXTC;			显示下一个字符
        INC R1;
        INC R0;
        CJNE R1,#0FH,MAIN2;	判断是否行尾
        MOV R1,#00H;
        CALL CHGLINE;		换行
 MAIN2:
        CJNE R0,#00H,MAIN1;	判断是否LCD结尾


LJMP MAIN


;----------------子程序------------------
;---------------------------------
;  LCM显示初始化程序
;---------------------------------
LCDINIT:
        MOV  LCDP,#01H; 		液晶开显示
        CALL  WINSTR;		
        MOV  LCDP,#06H;  	清屏
        CALL  WINSTR; 		
        MOV  LCDP,#38H; 		设置行地址
        CALL  WINSTR;		
        MOV  LCDP,#80H; 		
        CALL  WINSTR;		
        MOV  LCDP,#0FH;		设置光标格式
        CALL  WINSTR;		
        SETB  LINEF;			
RET;			



;---------------------------------
;  命令数据写入时序等子程序部分
;---------------------------------
  ISBF:				        ;LCD内部DDRAM读写忙判断子程序
  ISBF1:CLR RS;				设定RS,RW读写和数据命令方式
        SETB RW;
        CLR E;
        CALL DELAYLCD;		时序等待延时
        SETB E;				LCD使能
        JB BF,ISBF1;			忙标志位判断
        CLR RW;				
        RET;
					;写入命令时序子程序
 WINSTR:CLR RS				;设定RS,RW读写和数据命令方式
        CLR RW
        CLR E
        ACALL DELAYLCD		        ;时序等待延时
        SETB E				;LCD使能
        RET

 WDATA:CLR RW				;写入数据令时序子程序
       SETB RS;				设定RS,RW读写和数据命令方式
       CLR E;
       CALL DELAYLCD;		         时序等待延时
       SETB E;				LCD使能
       CLR RS;
       RET;

 RADDR: CLR RS;				读数据时序子程序
        SETB RW;				设定RS,RW读写和数据命令方式
        CLR E;
        CALL DELAYLCD;		        时序延时
        SETB E;				LCD使能
        CLR RW;
        RET;

 CHGLINE: JB LINEF,CHG1;		LCD行末换行子程序
          JMP CHG2;			如果是第二行末尾,则跳到第一行首,否则,跳到第一行首
    CHG1: MOV LCDP,#0C0H;	        跳到第一行首
          CALL WINSTR;		        写入命令字
          CLR LINEF;			清除标志位	
          JMP CHGEND;		
    CHG2: MOV LCDP,#80H;		跳到第二行首
          CALL WINSTR;		        写入命令字
          SETB LINEF;			设置标志位
    CHGEND:
          RET;

 NEXTC: CALL RADDR;			字符顺序写入子程序
        MOV A,LCDP;
        ANL A,#7FH;;0111 1111;
        CJNE A,#0FH,NEXTC1;	         判断是否行尾,是,则跳转到下一行
        CLR LINEF;			是,则清除标志位
        MOV LCDP,#0C0H;		
        CALL WINSTR;
        JMP NEXTCEND;
NEXTC1: CJNE A,#4FH,NEXTC0;	         判断是第一行未或者第二行尾
        SETB LINEF;			设置标志位
        MOV LCDP,#080H;	        	写入命令
        CALL WINSTR;			写入命令时序字
        JMP NEXTCEND;
NEXTC0: ;INC A;
        ADD A,#80H;
        MOV LCDP,A;
        CALL WINSTR;
NEXTCEND:
RET;

;--------------中断子程序----------------

;---------------延时子程序---------------
DELAYLCD:   MOV R7,#02H;
DELAYLCD1:  MOV R6,#255;
DELAYLCD2:  DJNZ R6,DELAYLCD2
            DJNZ R7,DELAYLCD1
            RET

DELAY600MS: MOV R5,#04H;
 DELAY00: MOV R6,#00F4H;
 DELAY01: MOV R7,#0FFH;
 DELAY02: DJNZ R7,DELAY02;
        DJNZ R6,DELAY01;
        DJNZ R5,DELAY00;
        RET;

;---------------注意事项-----------------

⌨️ 快捷键说明

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