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

📄 parallel port.asm

📁 基于51的DS18B20_1Wire温度控制等C,ASM源程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;******************************************************************
;*                                                                *
;* ME500单片机开发系统演示程序 - 12864 图片与文字显示             * 
;*                                                                *
;* ST7920控制芯片(汉字库),并口模式。                             *
;*                                                                *
;* 版本: V1.0 (2006/11/20)                                       *
;* 作者: gguoqing (Email: gguoqing@willar.com)                   *
;* 网站: www.willar.com(伟纳电子)   www.mcusj.com(伟纳单片机世界)*
;* 邮箱: support@willar.com                                      *
;*                                                                *
;*【版权】COPYRIGHT(C)伟纳电子 www.willar.com ALL RIGHTS RESERVED *
;*【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!      *
;*                                                                *
;******************************************************************

          RS	 BIT	P2.0
          RW	 BIT	P2.1
          E 	 BIT	P2.2
          PSB	 BIT	P2.3
          RST	 BIT	P2.5

          LCD_X	 EQU	30H
          LCD_Y	 EQU	31H
          COUNT	 EQU	32H
          COUNT1 EQU	33H
          COUNT2 EQU	34H
          COUNT3 EQU	35H

       LCD_DATA  EQU	36H
       LCD_DATA1 EQU	37H
       LCD_DATA2 EQU	38H
          STORE	 EQU	39H

;**********************************************************

	    ORG  0000H
	    LJMP  MAIN
	    ORG  0030H

;**********************************************************
MAIN:
	    MOV	SP,#60H
            CLR  RST             ;复位
            LCALL DELAY4
            SETB RST
	    NOP
            SETB PSB             ;通讯方式为8位数据并口

;********************初始化**********************

LGS0:	    MOV	A,#34H		;34H--扩充指令操作
	    LCALL SEND_I
	    MOV	A,#30H		;30H--基本指令操作
	    LCALL SEND_I
	    MOV	A,#01H		;清除显示
	    LCALL SEND_I
            MOV	A,#06H		;指定在资料写入或读取时,光标的移动方向
	    LCALL SEND_I        ;DDRAM 的地址计数器(AC)加1
	    MOV	A,#0CH		;开显示,关光标,不闪烁
	    LCALL SEND_I

;**********************************************************

;显示汉字和字符
;加入80ms的延时,使你能够看清楚显示的过程
;根据汉字显示坐标写入 (隔行写入)

;**********************************************************
HAN_WR1:
            LCALL CLEAR_P
            MOV	DPTR,#TAB1      ;显示汉字和字符
	    MOV	COUNT,#40H      ;地址计数器设为最大值 64。
	    MOV	A,#80H          ;起始地址
	    LCALL SEND_I
            LCALL QUSHU
 	    LCALL DELAY3
            LCALL FLASH

;**********************************************************

;显示汉字和字符
;加入80ms的延时,使你能够看清楚显示的过程
;根据汉字显示坐标分段写入(顺序写入)

;**********************************************************
HAN_WR2:
            LCALL CLEAR_P
HAN_WR2A:
            MOV	DPTR,#TAB1A	;显示汉字和字符
	    MOV	COUNT,#10H      ;地址计数器设为16。
	    MOV	A,#80H          ;第一行起始地址
	    LCALL SEND_I
            LCALL   QUSHU
HAN_WR2B:
            MOV	DPTR,#TAB1B	;显示汉字和字符
	    MOV	COUNT,#10H      ;地址计数器设为16。
	    MOV	A,#90H          ;第二行起始地址
	    LCALL SEND_I
            LCALL QUSHU
HAN_WR2C:
            MOV	DPTR,#TAB1C	;显示汉字和字符
	    MOV	COUNT,#10H      ;地址计数器设为16。
	    MOV	A,#88H          ;第三行起始地址
	    LCALL SEND_I
            LCALL QUSHU
HAN_WR2D:
            MOV	DPTR,#TAB1D	 ;显示汉字和字符
	    MOV	COUNT,#10H       ;地址计数器设为16。
	    MOV	A,#98H           ;第四行起始地址
	    LCALL SEND_I
            LCALL QUSHU
            LCALL DELAY3
            LCALL FLASH
            LCALL CLEAR_P

;**********************************************************

; 显示图片

;**********************************************************
TU_PLAY1:

            MOV  DPTR,#TU_TAB1	 ;显示图形
	    LCALL PHO_DISP
	    LCALL DELAY3
           ;LCALL   FLASH

TU_PLAY2:
	    MOV	DPTR,#TU_TAB2    ;显示图形
	    LCALL PHO_DISP
	    LCALL DELAY3
           ;LCALL   FLASH

;**********************************************************

; 显示点阵

;**********************************************************
LATPLAY1:
            MOV	A,#01H         ;清屏
            LCALL SEND_I
	    MOV	LCD_DATA1,#0CCH	 ;显示点阵
	    MOV	LCD_DATA2,#0CCH
	    LCALL LAT_DISP
	    LCALL DELAY3
            LCALL CLEAR_P
	    
;**********************************************************

;调字库半角字符显示

;**********************************************************
KU_PLAY1:
            LCALL  CLEAR_P
            MOV  COUNT,#40H
            MOV  A,#80H
            LCALL SEND_I
            MOV  R1,#10H
LATPLAY11:
            MOV  A,R1
            LCALL  SEND_D
            INC  R1
            DJNZ  COUNT,LATPLAY11
            LCALL  DELAY3
            LCALL  CLEAR_P
           
;**********************************************************

;调字库汉字显示
;从 B9F3 “贵”字处开始显示

;**********************************************************
KU_PLAY2:
            LCALL  CLEAR_P
            MOV  COUNT,#40H
            MOV  A,#80H
            LCALL SEND_I
            MOV  R1,#0F3H
KU_PLAY21:
            MOV  A,#0B9H
            LCALL  SEND_D        ;写入第一字节数据(高位)
            MOV  A,R1
            LCALL  SEND_D        ;写入第二字节数据(低位)
            INC  R1
            DJNZ  COUNT,KU_PLAY21
            LCALL  DELAY3
            LCALL  CLEAR_P

            LJMP  TU_PLAY1
          
;**********************************************************

;全屏显示图形子程序

;**********************************************************
PHO_DISP:
    	    MOV  COUNT3,#02H
	    MOV  LCD_X,#80H
PHO_DISP1:
    	    MOV  LCD_Y,#80H
	    MOV  COUNT2,#20H
PHO_DISP2:
    	    MOV  COUNT1,#10H
	    LCALL WR_ZB
PHO_DISP3:
            CLR	A
	    MOVC A,@A+DPTR
	    LCALL SEND_D
	    INC	DPTR
	    DJNZ COUNT1,PHO_DISP3
	    INC	LCD_Y
	    DJNZ COUNT2,PHO_DISP2
	    MOV	LCD_X,#88H
	    DJNZ COUNT3,PHO_DISP1

	    MOV	A,#36H
	    LCALL SEND_I
	    MOV	A,#30H
	    LCALL SEND_I
            RET

;**********************************************************

; GDRAM写0子程序

;**********************************************************
CLRRAM:
     	    MOV	LCD_DATA1,#00H	
	    MOV	LCD_DATA2,#00H
	    LCALL LAT_DISP
	    RET
;**********************************************************

;显示点阵子程序

;**********************************************************
LAT_DISP:
    	    MOV	COUNT3,#02H
	    MOV	LCD_X,#80H
LAT_DISP1:
    	    MOV	LCD_Y,#80H
	    CLR	F0
	    MOV	COUNT2,#20H
LAT_DISP2:
    	    MOV	COUNT1,#10H
	    LCALL WR_ZB
LAT_DISP3:
    	    JB	F0,LAT_DISP32
	    MOV	LCD_DATA,LCD_DATA1
	    AJMP LAT_DISP31
LAT_DISP32:
    	    MOV	LCD_DATA,LCD_DATA2
LAT_DISP31:
    	    MOV	A,LCD_DATA
	    LCALL SEND_D
	    DJNZ COUNT1,LAT_DISP31
	    INC	LCD_Y
	    CPL	F0
	    DJNZ COUNT2,LAT_DISP2
	    MOV	LCD_X,#88H
	    DJNZ COUNT3,LAT_DISP1

	    MOV	A,#36H
	    LCALL SEND_I
	    MOV	A,#30H
	    LCALL SEND_I
	    RET

;**********************************************************

; 写入显示坐标子程序

;**********************************************************
WR_ZB:
    	    MOV	A,#34H
	    LCALL SEND_I
	    MOV	A,LCD_Y
	    LCALL SEND_I
	    MOV	A,LCD_X
	    LCALL SEND_I
	    MOV	A,#30H
	    LCALL SEND_I
	    RET

;**********************************************************

; 闪烁子程序

;**********************************************************
FLASH:
            MOV  A,#08H       ;关闭显示
            LCALL SEND_I
            LCALL  DELAY5
            MOV  A,#0CH	  ;开显示,关光标,不闪烁
	    LCALL SEND_I
            LCALL  DELAY5
            MOV  A,#08H       ;关闭显示
            LCALL SEND_I
            LCALL  DELAY5
            MOV  A,#0CH	  ;开显示,关光标,不闪烁

⌨️ 快捷键说明

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