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

📄 1.asm

📁 SSD1303汇编源程序,保证你能点亮你的OLED
💻 ASM
字号:

SCLK    EQU     P0.3
RST     EQU     P0.2
SDAT    EQU     P0.4
DC      EQU     P0.0
CS      EQU     P0.1
TMP1    EQU     30H     ;TEMP RAM(USED BY SEND)
PAGETMP EQU     31H
PAGEIN  EQU     32H
WR_NUM  EQU     33H
WR_BYTE EQU     34H

WR_MODE         EQU     35H
CHANGEXY        EQU     36H
OFFSET          EQU     37H

   

        ORG 0H
        
        LJMP    BEGIN
        ORG     01BH
        SETB    F0
        RETI
        
BEGIN:  

        ANL     8EH,#0
        MOV     DPTR,#0400H
        MOV     A,#1H        
        MOVX    @DPTR,A
        MOVX    A,@DPTR
     
        MOV     WR_MODE,A
        MOV     OFFSET,#0
        CALL    OLEDINIT
        CALL    OLEDCLS   
        CALL    POWER_START
        CALL    CLS_START
        CALL    LOGO_START

POWER_START:   
        MOV      TMOD,#01010001B
        MOV     A,#0AEH        /*set display ON/OF AF=ON AE=OF*/
        CALL   COMMAND
        CALL    LOGO
        MOV     A,#0AFH        /*set display ON/OF AF=ON AE=OF*/
        CALL   COMMAND        
        MOV     R0,#08H
POWER_REPEAT:      
        MOV      TH0,#0FCH
        MOV      TL0,#0FFH
        MOV      TH1,#0FFH
        MOV      TL1,#0C0H
        CLR      P3.5
        MOV      IE,#88H
        SETB     TR1
        SETB     TR0
POWER_LOOP:
        JNB     TF0,$
        CLR     TF0
        JBC     F0,POWER_OK
        SETB    P3.5                   
        MOV     TH0,#0FCH
        MOV     TL0,#0FFH
        CLR     P3.5
        SJMP    POWER_LOOP                   
POWER_OK:      
        DJNZ	R0,POWER_REPEAT
        ;CALL    OLEDCLS
        RET

CLS_START:   
        MOV      TMOD,#01010001B
        MOV     WR_MODE,#1
        MOV     A,#0AEH        /*set display ON/OF AF=ON AE=OF*/
        LCALL   COMMAND
        CALL    OLEDCLS
        MOV     A,#0AFH        /*set display ON/OF AF=ON AE=OF*/
        LCALL   COMMAND        
        MOV     WR_MODE,#0
        MOV     R0,#010H
CLS_REPEAT:      
        MOV      TH0,#0FCH
        MOV      TL0,#008H
        MOV      TH1,#0FFH
        MOV      TL1,#0C0H
        CLR      P3.5
        MOV      IE,#88H
        SETB     TR1
        SETB     TR0
CLS_LOOP:
        JNB     TF0,$
        CLR     TF0
        JBC     F0,CLS_OK
        SETB    P3.5                   
        MOV     TH0,#0FCH
        MOV     TL0,#008H
        CLR     P3.5
        SJMP    CLS_LOOP                   
CLS_OK:      
        DJNZ	R0,CLS_REPEAT
        RET
        
        
;------------------------------------------------------;
LOGO_START:   
        MOV      TMOD,#01010001B
        MOV     A,#0AEH        /*set display ON/OF AF=ON AE=OF*/
        CALL   COMMAND        
        CALL    DRAW_TEST
        MOV     A,#0AFH        /*set display ON/OF AF=ON AE=OF*/
        CALL   COMMAND        
LOGO_REPEAT:      
        MOV      TH0,#0FFH
        MOV      TL0,#0D0H
        MOV      TH1,#0FFH
        MOV      TL1,#0C0H
        CLR      P3.5
        MOV      IE,#88H
        SETB     TR1
        SETB     TR0
LOGO_LOOP:
        JNB     TF0,$
        CLR     TF0
        JBC     F0,LOGO_OK
        SETB    P3.5                   
        MOV     TH0,#0FFH
        MOV     TL0,#0C0H
        CLR     P3.5
        SJMP    LOGO_LOOP                   
LOGO_OK:      
        MOV     A,#0D3H        /*set display offset*/
        LCALL   COMMAND
        MOV     A,OFFSET
        CPL     A
        LCALL   COMMAND 
        INC     OFFSET
        MOV     A,OFFSET
        CJNE    A,#040H,LOGO_REPEAT
        JMP     LOGO_REPEAT	

        RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;        
LOGO: 
        MOV     PAGETMP,#0B5H
        MOV     DPTR,#POWERON_LOGO
LOGOPAGE:
        MOV	A,PAGETMP		
        CALL	COMMAND
        MOV     A,#000H
        CALL    COMMAND
        MOV     A,#010H
        CALL    COMMAND
        MOV     WR_NUM,#080H 
        CALL    WRDB
        DEC     PAGETMP
        MOV     A,PAGETMP
        CJNE    A,#0B1H,LOGOPAGE        
        RET         


DRAW_TEST:
        MOV     PAGETMP,#008H
        MOV     PAGEIN,#007H
        MOV     CHANGEXY,#000H
P_LOOP:
        CALL    C_XY
        MOV     R0,#10H
        MOV     WR_BYTE,#001H
DRAW_LOOP:
        MOV     A,WR_BYTE               ;画点
        CALL    SENDDATA
        MOV     A,WR_BYTE
        RL      A
        MOV     WR_BYTE,A
        CJNE    A,#00000001B,DRAW_LOOP  ;画斜线
        DJNZ    R0,DRAW_LOOP            ;画16次
        DEC     PAGEIN                  ;换页画
        DJNZ    PAGETMP,P_LOOP          ;画8次        
        RET 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;                
DISP_BIGNUM:

        MOV     WR_NUM,#08H
        CALL    WRDB
        DEC     PAGEIN
        CALL    C_XY
        MOV     WR_NUM,#08H
        CALL    WRDB  
        RET
                                    
;----------------------------------------------------------
C_XY:
        MOV     A,PAGEIN
        ADD     A,#0B0H
        CALL    COMMAND
        MOV     A,CHANGEXY
        ANL     A,#0FH
        CALL	COMMAND
        MOV     A,CHANGEXY
        SWAP    A
        ANL     A,#0FH
        ADD     A,#010H
        CALL    COMMAND  
        RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;      
WRDB:      
        MOV     A,WR_MODE
        JZ      WR_OK
        CLR     A
        MOVC 	A,@A+DPTR
        CPL     A
        JMP     CPL_OK      
WR_OK:  CLR     A
        MOVC 	A,@A+DPTR
CPL_OK: CALL 	SENDDATA
        INC 	DPTR
        DJNZ    WR_NUM,WRDB
        RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
OLEDCLS:
        MOV     WR_BYTE,#000H 
        MOV     PAGETMP,#008H
        MOV     PAGEIN,#007H
        MOV     CHANGEXY,#000H
        MOV     A,WR_MODE
        JZ      PAGELOOP
        MOV     WR_BYTE,#0FFH
PAGELOOP:
        CALL    C_XY
        MOV     R0,#80H
CLSLOOP:MOV     A,WR_BYTE                 ;*WRITE 0;
        CALL    SENDDATA
        DJNZ    R0,CLSLOOP
        DEC     PAGEIN
        DJNZ    PAGETMP,PAGELOOP        
        RET 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  
OLEDINIT:
        CALL    RESET	
        MOV     A,#0A4H        /*SET ENTIRE DISPLAY ON*/
        LCALL   COMMAND      
        MOV     A,#40H         /*set display start line*/
        LCALL   COMMAND        
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        MOV     A,#0A0H        /*re-map(A0/A1)*/
        LCALL   COMMAND
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        MOV     A,#0A6H        /*set normal display*/
        LCALL   COMMAND
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        MOV     A,#0D3H        /*set display offset*/
        LCALL   COMMAND
        MOV     A,#0H          /*no offset*/
        LCALL   COMMAND
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        MOV     A,#0D9H        /*set vp*/
        LCALL   COMMAND
        MOV     A,#22H
        LCALL   COMMAND
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        MOV     A,#0DAH        /*set pin hardware configuration*/
        LCALL   COMMAND
        MOV     A,#12H
        LCALL   COMMAND
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;                                
        MOV     A,#81H         /*set contrast control*/
        LCALL   COMMAND
        MOV     A,#0FFH         
        LCALL   COMMAND
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        MOV     A,#0A8H        /*set multiplex ratio*/
        LCALL   COMMAND
        MOV     A,#03FH        /**/
        LCALL   COMMAND
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        MOV     A,#0ADH        /*set DC-DC*/
        LCALL   COMMAND
        MOV     A,#8AH         /*8B=ON 8A=OF*/
        LCALL   COMMAND
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        MOV     A,#0AFH        /*set display ON/OF AF=ON AE=OF*/
        LCALL   COMMAND
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;      
        MOV     A,#0D5H        /*set clock driver*/
        LCALL   COMMAND
        MOV     A,#0A0H         /*set 100hz*/
        LCALL   COMMAND
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        MOV     A,#0D8H        /*set area color on or off*/
        LCALL   COMMAND
        MOV     A,#0H          /*mono mode*/
        LCALL   COMMAND
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        MOV     A,#0DBH        /*set vcomh*/
        LCALL   COMMAND
        MOV     A,#25H
        LCALL   COMMAND
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;     
        MOV     A,#0C0H        /*set com output(C0/C8)*/
        LCALL   COMMAND
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;   
        RET

RESET:	
	SETB    CS

        SETB    RST
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        CLR     RST
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        SETB    RST
	RET


COMMAND:	
        CLR     DC              ;DC=LOW SEND COMMAND
        CLR     CS
        CALL    SENDDB
        SETB    CS 
        RET

SENDDB:        
        MOV 	TMP1,#008H
LOOP8:  RLC 	A
        MOV 	SDAT,C
        SETB 	SCLK 
        NOP     
        NOP
        NOP
        NOP
        NOP
        CLR 	SCLK
        DJNZ 	TMP1,LOOP8
        RET        
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;        
 
SENDDATA:
        SETB    DC
        CLR     CS
        CALL    SENDDB
        SETB    CS
        ;MOV 	A,#0E3H            /*NOP COMMAND*/       
        ;CALL 	COMMAND
        RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;



POWERON_LOGO:
        DB      00H, 00H, 00H, 00H, 1FH, 20H, 20H, 20H, 1FH, 00H, 20H, 3FH, 20H, 00H, 00H, 00H 
        DB      20H, 3FH, 24H, 2EH, 30H, 00H, 20H, 3FH, 20H, 20H, 1FH, 00H, 04H, 04H, 04H, 04H
        DB      04H, 00H, 04H, 04H, 04H, 04H, 04H, 00H, 00H, 10H, 3FH, 00H, 00H, 00H, 18H, 21H 
        DB      22H, 24H, 18H, 00H, 1BH, 24H, 24H, 24H, 1BH, 00H, 09H, 06H, 1FH, 06H, 09H, 00H
        
        DB      1FH, 24H, 24H, 34H, 03H, 00H, 02H, 0DH, 11H, 3FH, 01H, 00H, 00H, 00H, 00H, 00H 
        DB      00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H
        DB      00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H 
        DB      00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H
        
        DB      00H, 00H, 00H, 00H, 80H, 40H, 40H, 40H, 80H, 00H, 40H,0C0H, 40H, 40H, 40H,0C0H
        DB      40H,0C0H, 40H, 40H,0C0H, 00H, 40H,0C0H, 40H, 40H, 80H, 00H, 00H, 00H, 00H, 00H
        DB      00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 40H,0C0H, 40H, 00H, 00H,0C0H, 40H 
        DB      40H, 40H, 40H, 00H, 80H, 40H, 40H, 40H, 80H, 00H, 00H, 00H, 80H, 00H, 00H, 00H
        
        DB      80H, 40H, 40H, 40H, 80H, 00H, 00H, 00H, 00H,0C0H, 40H, 00H, 00H, 00H, 00H, 00H
        DB      00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H
        DB      00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H
        DB      00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H
        
        DB      00H, 00H, 00H, 00H, 06H, 09H, 08H, 08H, 0CH, 00H, 00H, 06H, 09H, 08H, 08H, 0CH 
        DB      00H, 08H, 0FH, 08H, 08H, 04H, 03H, 00H, 00H, 04H, 04H, 0FH, 00H, 00H, 00H, 00H
        DB      06H, 08H, 09H, 09H, 06H, 00H, 03H, 04H, 08H, 08H, 04H, 03H, 00H, 00H, 06H, 08H 
        DB      09H, 09H, 06H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H
        
        DB      00H, 00H, 48H, 26H, 30H, 01H, 3FH, 20H, 2FH, 20H, 3FH, 00H, 1FH, 00H, 7FH, 00H
        DB      42H, 23H, 10H, 08H, 09H, 09H, 09H, 09H, 7CH, 0BH, 48H, 28H, 08H, 00H, 24H, 25H
        DB      7FH, 45H, 44H, 01H, 7DH, 45H, 45H, 45H, 45H, 7DH, 00H, 00H, 00H, 3FH, 20H, 29H 
        DB      29H, 29H, 2BH, 69H, 2BH, 2DH, 29H, 21H, 21H, 00H, 00H, 00H, 00H, 00H, 00H ,00H
        
        DB      00H, 00H, 00H, 00H, 18H, 08H, 88H, 88H, 70H, 00H, 00H, 18H, 08H, 88H, 88H, 70H 
        DB      00H, 08H,0F8H, 08H, 08H, 10H,0E0H, 00H, 00H, 08H, 08H,0F8H, 08H, 08H, 00H, 00H
        DB      30H, 08H, 08H, 08H,0F0H, 00H,0E0H, 10H, 08H, 08H, 10H,0E0H, 00H, 00H, 30H, 08H 
        DB      08H, 08H,0F0H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H
        
        DB      00H, 00H, 40H,07CH, 80H, 04H,0C8H, 10H,0E0H, 10H,0CCH, 00H,0C8H, 04H,0F8H, 00H 
        DB      00H,0FCH, 08H, 10H, 08H, 08H,0F8H, 10H, 00H,0E0H, 18H, 04H, 1CH, 00H, 60H, 80H
        DB     0FCH, 00H, 84H, 04H, 24H, 24H,0FCH, 24H, 24H, 24H, 04H, 00H, 18H,0E0H, 00H, 00H 
        DB      00H, 08H, 04H,0F8H, 00H, 00H, 00H, 40H, 80H, 00H, 00H, 00H, 00H, 00H, 00H, 00H




NUM1:   DB      000H,042H,0FEH,002H,000H
NUM2:   DB      042H,086H,08AH,092H,062H
NUM3:   DB      044H,092H,092H,092H,06CH
NUM4:   DB      00CH,034H,044H,0FEH,004H
NUM5:   DB      0F4H,092H,092H,092H,00CH
NUM6:   DB      07CH,092H,092H,092H,04CH
NUM7:   DB      080H,080H,09EH,0A0H,0C0H
NUM8:   DB      06CH,092H,092H,092H,06CH
NUM9:   DB      064H,092H,092H,092H,07CH
NUM0:   DB      07CH,08AH,092H,0A2H,07CH




BIG_NUM0: 
        DB      1FH, 3FH, 70H, 60H, 60H, 70H, 3FH, 1FH
        DB     0F8H,0FCH, 0EH, 06H, 06H, 0EH,0FCH,0F8H
BIG_NUM1:
        DB      00H, 08H, 18H, 3FH, 7FH, 00H, 00H, 00H
        DB      00H, 06H, 06H,0FEH,0FEH, 06H, 06H, 00H
BIG_NUM2:
        DB      18H, 38H, 70H, 60H, 61H, 73H, 3FH, 1EH
        DB      1EH, 3EH, 76H,0E6H,0C6H, 86H, 06H, 06H
BIG_NUM3:
        DB      18H, 38H, 71H, 61H, 61H, 73H, 3FH, 1FH
        DB      18H, 1CH, 8EH, 86H, 86H,0CEH,0FCH, 78H
BIG_NUM4:
        DB      00H, 00H, 03H, 0FH, 3CH, 7FH, 7FH, 00H
        DB      30H,0F0H,0F0H, 30H, 30H,0FEH,0FEH, 30H
BIG_NUM5:
        DB      3FH, 7FH, 63H, 63H, 63H, 63H, 61H, 60H
        DB      18H, 1CH, 0EH, 06H, 06H, 8EH,0FCH,0F8H
BIG_NUM6:
        DB      1FH, 3FH, 71H, 61H, 61H, 71H, 38H, 18H
        DB     0F8H,0FCH,0CEH, 86H, 86H,0CEH,0FCH, 78H
BIG_NUM7:
        DB      60H, 60H, 60H, 60H, 61H, 63H, 7FH, 7EH
        DB      00H, 00H, 00H,0FEH,0FEH, 80H, 00H, 00H
BIG_NUM8:
        DB      1EH, 3FH, 73H, 61H, 61H, 73H, 3FH, 1EH
        DB      78H,0FCH,0CEH, 86H, 86H,0CEH,0FCH, 78H
BIG_NUM9:
        DB      1EH, 3FH, 73H, 61H, 61H, 73H, 3FH, 1FH
        DB      18H, 1CH, 8EH, 86H, 86H, 8EH,0FCH,0F8H




END


⌨️ 快捷键说明

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