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

📄 xainshi.asm

📁 51单片机 函数发生器 带液晶显示 按键输入 全数字化
💻 ASM
📖 第 1 页 / 共 2 页
字号:
	ORG	0000H
	LJMP	MAIN
INTCOL  EQU   27H             ;滚屏起始列寄存器
COM     EQU   25H             	;指令寄存器                
DAT     EQU   26H             	;数据寄存器
PD1     EQU   3DH             	;模块参数
COLUMN  EQU   30H             	;列地址寄存器
PAG     EQU      31H             ;页地址寄存器
COD     EQU      32H             ;字符代码寄存器
COUNT   EQU      33H             ;计数器
BEGINECOL  EQU   34H             ;起始列寄存器
A0  	BIT    	P3.5            ;寄存器选择信号 
E1	BIT    	P3.3            ;使能信号E1
E2     	BIT    	P3.2       	;使能信号E2
RW     	BIT    	P3.6       	;读写选择信号
DWSH    EQU     47H 
DWSE    EQU     48H
DWSI    EQU     49H
DWSJ    EQU     4AH

DX1	BIT	00H
DX2	BIT	01H
DX3	BIT	02H
;;;**********************************************************************************
;写指令子程序 左半屏 E1 
PR0:  	CLR     A0                 ;A0=O
      	SETB    RW                 ;R/W=1
PR01:	MOV     P1,#0FFH           ;P1口准备输入
        SETB    E1                 ;E1=1       
        MOV     A,P1               ;读状态字
        CLR     E1                 ;E1=0
        JB      ACC.7,PR01         ;判“忙”标? 
        CLR     RW                  ;R/W=0
        MOV    	P1,COM           ;写指令代码
        SETB   	E1               ;E1=1
        CLR     E1               ;E1=0
        NOP
        NOP  
          RET
;;;*************************************************************************************
;(2)写显示数据子程序 左半屏E1
PR1:   CLR     A0                  ;A0=O
       SETB   RW                   ;R/W=1
 PR11:	  MOV    P1,#0FFH          ;P1口准备输入
          SETB   E1                ;E1=1   
          MOV    A,P1              ;读状态字
          CLR    E1                ;E1=0
          JB     ACC.7,PR11        ;判“忙”标志,标志为0,否,再读
          SETB   A0                ;A0=1
          CLR    RW                ;R/W=0
          SETB   E1                ;E1=1
          MOV    P1,DAT            ;写数据代码
          CLR    E1                ;E1=O
          NOP
          NOP  
    RET
;;;*************************************************************************************
;(3)读显示数据子程序
 PR2:    CLR     A0                  ;A0=O
         SETB    RW                  ;R/W=1
PR21:	 MOV     P1,#0FFH            ;P1口准备输入
         SETB    E1                  ;E1=1       
         MOV     A,P1                ;读状态字
         CLR     E1                  ;E1=0
         JB      ACC.7,PR21          ;判“忙”标志,标志为0,否,再读
         SETB    A0                  ;A0=1
         MOV     P1,#0FFH            ;P1口准备输入
         SETB    E1                  ;E1=1
         MOV     DAT,P1              ;读数据
         CLR     E1                  ;E1=0
         NOP
         NOP 
        RET 
;;;*************************************************************************************
;(4)写指令代码子程序 E2
 PR3:    CLR     A0                     ;A0=O
         SETB    RW                     ;R/W=1
PR31:    MOV     P1,#0FFH            	;P1口准备输入
         SETB    E2                     ;E2=1       
         MOV     A,P1                   ;读状态字
         CLR     E2                     ;E2=0
         JB      ACC.7,PR31         	;判“忙”标志,标志为0,否,再读
         CLR   	 RW                     ;R/W=0
         SETB  	 E2                     ;E2=1
         MOV   	 P1,COM               	;写指令代码
         CLR     E2                     ;E2=0
         NOP
         NOP 
       RET     
      
;;;*************************************************************************************   
;(5)写显示数据子程序 E2
PR4:  	 CLR     A0                     ;A0=O
         SETB    RW                    	;R/W=1
PR41:	 MOV     P1,#0FFH            	;P1口准备输入
         SETB    E2                     ;E2=1       
         MOV     A,P1                   ;读状态字
         CLR     E2                     ;E2=0
         JB      ACC.7,PR41         	;判“忙”标志,标志为0,否,再读
         SETB    A0 			;A0=1
	 CLR     RW
         SETB    E2                     ;E2=1
         MOV     P1,DAT                 ;读数据
         CLR     E2                     ;E2=0
         NOP
	 NOP
     RET 
          
;;;*************************************************************************************   
;(6)读显示数据子程序  右半屏E2 
    PR5: CLR     A0                     ;A0=O
         SETB    RW                     ;R/W=1
PR51:	 MOV     P1,#0FFH            	;P1口准备输入
         SETB    E2                     ;E2=1       
         MOV     A,P1                   ;读状态字
         CLR     E2                     ;E2=0
         JB      ACC.7,PR51         	;判“忙”标志,标志为0,否,再读
         SETB    A0                     ;A0=1
         MOV     P1,#0FFH            	;P1口准备输入
         SETB    E2                     ;E2=1
         MOV     DAT,P1                	;读数据
         CLR     E2                     ;E2=0 
         NOP
        NOP
         RET
;;;*************************************************************************************   
;初始化子程序
INT:      MOV   COM,#0E2H   ;复位
            LCALL  PR0
            LCALL  PR3
            MOV    COM,#0A4H   ;关闭等待状态
            LCALL  PR0
            LCALL  PR3
            MOV    COM,#0A9H   ;设置1/32占空比
            LCALL  PR0
            LCALL  PR3
            MOV    COM,#0A0H   ;正向排序设置
            LCALL  PR0
            LCALL  PR3
            MOV    COM,#0C0H   ;设置显示起始行为第一行
            LCALL  PR0
            LCALL  PR3
            MOV    COM,#0AFH   ;开显示设置
            LCALL  PR0
            LCALL  PR3
            NOP
            NOP 
  	RET
;;;***********************************************************************
;清屏子程序
CLEAR:       MOV         R4,#00H       ; 页面地址暂存器设置
CLEAR1:      MOV    A,R4    ;取页面地址
             ORL    A,#0B8H ;“或”页面地址设置代码
             MOV         COM,A    ;页面地址设置
             LCALL     PR0
             LCALL     PR3
             MOV    COM,#00H   ;列地址设置“0”
             LCALL     PR0
             LCALL     PR3
             MOV    R3,#3DH ;一页清61个字节
CLEAR2:MOV           DAT,#00H     ;显示数据为“0”
             LCALL        PR1        ;写数据E1
             LCALL     PR4     ;写数据E2
             DJNZ      R3,CLEAR2  ;页内字节清零循环
             INC    R4      ;页地址暂存器加1
             CJNE      R4,#04H,CLEAR1   ;RAM区清零循环
             NOP
             NOP
	RET 
;;;*************************************************************************  
;延时子程序
;T=R5*R6*R7*2us
DELAY:      MOV         R5,#250      ;延时1秒
          D3: MOV  R6,#50
          D2: MOV  R7,#200
          D1: DJNZ    R7,D1
             DJNZ  R6,D2
             DJNZ  R5,D3
             NOP
             NOP
            RET
D10MS:  MOV          R5,#150      ;延时1秒
       D33: MOV    R6,#25
       D22: MOV    R7,#15
       D11: DJNZ   R7,D11
             DJNZ  R6,D22
             DJNZ  R5,D33
            NOP
             NOP
RET
DELAYA:  MOV    R5,#250     ;延时1秒
       DA3: MOV    R6,#80
       DA2: MOV    R7,#20
       DA1: DJNZ   R7,DA1
             DJNZ  R6,DA2
             DJNZ  R5,DA3
             NOP
             NOP
 	RET
;;;*************************************************************************************   
;汉字写入程序
    CCW_PR:  MOV      DPTR,#CCTAB  
             MOV      A,COD    
             MOV      B,#20H    
             MUL      AB       
             ADD      A,DPL    
             MOV      DPL,A      
             MOV      A,B 
             ADDC     A,DPH 
             MOV      DPH,A 
             PUSH     COLUMN     
             PUSH     COLUMN      
             MOV      COD,#00H
    CCW_1:   MOV      COUNT,#10H
             MOV      A,PAG       
             ANL      A,#03H 
             ORL      A,#0B8H     
             MOV      COM,A      
             LCALL    PR0 
             LCALL    PR3 
             POP      COLUMN       
             MOV      A,COLUMN     
             CLR      C 
             SUBB     A,#PD1     
             JC       CCW_2     
             MOV      COLUMN,A
             MOV      A,PAG
             SETB     ACC.3       
             MOV      PAG,A      
  CCW_2 :    MOV      COM,COLUMN    
             MOV      A,PAG       
             JNB      ACC.3,CCW_3 
             LCALL    PR3       
             LJMP     CCW_4 
  CCW_3 :    LCALL    PR0       
  CCW_4 :    MOV      A,COD     
             MOVC     A,@A+DPTR   
             MOV      DAT,A     
             MOV      A,PAG 
             JNB      ACC.3,   CCW_5 
             LCALL    PR4        
             LJMP     CCW_6 
  CCW_5 :    LCALL    PR1       
  CCW_6 :    INC      COD        
             INC      COLUMN       
             MOV      A,COLUMN      
             CJNE     A,#PD1,CCW_7 
  CCW_7 :    JC       CCW_8          
             MOV      A,PAG        
             JB       ACC.3, CCW_8 
             SETB     ACC.3      
             MOV      PAG,A 
             MOV      COM,#00H      
             LCALL    PR3 
  CCW_8 :    DJNZ     COUNT,CCW_4
             MOV      A,PAG       
             JB       ACC.7,CCW_9   
             INC      A           
             SETB     ACC.7        
             CLR      ACC.3 
             MOV      PAG,A 
             MOV      COD,#10H    
             LJMP     CCW_1        
  CCW_9:     NOP
             NOP
             RET 
;;;*************************************************************************************
;;;*************************************************************************************   
;汉字选中变黑
 CCFW_PR:    MOV      DPTR,#CCTAB  
             MOV      A,COD    
             MOV      B,#20H    
             MUL      AB       
             ADD      A,DPL    
             MOV      DPL,A      
             MOV      A,B 
             ADDC     A,DPH 
             MOV      DPH,A 
             PUSH     COLUMN     
             PUSH     COLUMN      
             MOV      COD,#00H
    CCFW_1:  MOV      COUNT,#10H
             MOV      A,PAG       
             ANL      A,#03H 
             ORL      A,#0B8H     
             MOV      COM,A      
             LCALL    PR0 
             LCALL    PR3 
             POP      COLUMN       
             MOV      A,COLUMN     
             CLR      C 
             SUBB     A,#PD1     
             JC       CCFW_2     
             MOV      COLUMN,A
             MOV      A,PAG
             SETB     ACC.3       
             MOV      PAG,A      
  CCFW_2 :   MOV      COM,COLUMN    
             MOV      A,PAG       
             JNB      ACC.3,CCFW_3 
             LCALL    PR3       
             LJMP     CCFW_4 
  CCFW_3 :   LCALL    PR0       
  CCFW_4 :   MOV      A,COD  
             MOVC     A,@A+DPTR  
         MOV      B,A
         CPL      A
             MOV      DAT,A   
         MOV      A,B
             MOV      A,PAG 
             JNB      ACC.3,   CCFW_5 
             LCALL    PR4        
             LJMP     CCFW_6 
  CCFW_5 :   LCALL    PR1       
  CCFW_6 :   INC      COD        
             INC      COLUMN       
             MOV      A,COLUMN      
             CJNE     A,#PD1,CCFW_7 
  CCFW_7 :   JC       CCFW_8          
             MOV      A,PAG        
             JB       ACC.3, CCFW_8 
             SETB     ACC.3      
             MOV      PAG,A 
             MOV      COM,#00H      
             LCALL    PR3 
  CCFW_8 :   DJNZ     COUNT,CCFW_4
             MOV      A,PAG       
             JB       ACC.7,CCFW_9   
             INC      A           
             SETB     ACC.7        
             CLR      ACC.3 
             MOV      PAG,A 
             MOV      COD,#10H    
             LJMP     CCFW_1        
  CCFW_9:    NOP
             NOP
             RET 
;;;*************************************************************************************      

;;;*************************************************************************************   
CCTAB:
;--  文字:  安  --
;--  Times New Roman12;  此字体下对应的点阵为:宽x高=16x16   --
DB  080H,090H,08CH,084H,084H,0F4H,0A5H,086H,084H,084H,084H,084H,094H,08CH,084H,000H
DB  080H,080H,080H,040H,047H,028H,028H,010H,028H,024H,043H,0C0H,040H,000H,000H,000H ;00

;--  文字:  徽  --
;--  Times New Roman12;  此字体下对应的点阵为:宽x高=16x16   --
DB  090H,048H,0E7H,01AH,0B0H,0EEH,0A8H,0AFH,0A8H,04EH,0F8H,017H,012H,0F0H,010H,000H
DB  000H,000H,0FFH,020H,054H,086H,07DH,004H,014H,0A4H,040H,027H,01CH,0E3H,040H,000H  ;01

;--  文字:  大  --
;--  Times New Roman12;  此字体下对应的点阵为:宽x高=16x16   --
DB  020H,020H,020H,020H,020H,020H,0A0H,07FH,0A0H,020H,020H,020H,020H,020H,020H,000H
DB  000H,080H,040H,020H,010H,00CH,003H,000H,001H,006H,008H,030H,060H,0C0H,040H,000H  ;02

;--  文字:  学  --
;--  Times New Roman12;  此字体下对应的点阵为:宽x高=16x16   --
DB  040H,030H,010H,012H,05CH,054H,050H,051H,05EH,0D4H,050H,018H,057H,032H,010H,000H
DB  000H,002H,002H,002H,002H,002H,042H,082H,07FH,002H,002H,002H,002H,002H,002H,000H  ;03

;--  文字:  清  --
;--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --
DB  010H,061H,006H,0E0H,018H,020H,0AAH,0AAH,0AAH,0BFH,0AAH,0AAH,0AAH,02AH,000H,000H 
DB  004H,004H,0FFH,000H,000H,000H,0FFH,00AH,00AH,00AH,04AH,08AH,07FH,000H,000H,000H  ;04

;--  文字:  华  --
;--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --

⌨️ 快捷键说明

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