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

📄 oled.asm

📁 VGG12864的OLED的演示程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
			LCALL		NOPLOOP
			CLR			OLED_RW
			LCALL		NOPLOOP
			CLR			OLED_CS
			LCALL		NOPLOOP
			MOV			OLED_DATA,A
			LCALL		NOPLOOP
			SETB		OLED_RW
			LCALL		NOPLOOP
			SETB		OLED_CS
			LCALL		NOPLOOP
			RET
;*************************************
WRITE_DATA:
			MOV    SFRPAGE,#0Fh
			SETB		OLED_DC
			LCALL		NOPLOOP
			SETB		OLED_EN
			LCALL		NOPLOOP
			CLR			OLED_RW
			LCALL		NOPLOOP
			CLR			OLED_CS
			LCALL		NOPLOOP
			MOV			OLED_DATA,A
			LCALL		NOPLOOP
			SETB		OLED_RW
			LCALL		NOPLOOP
			SETB		OLED_CS
			LCALL		NOPLOOP
			RET

;**************************************
NOPLOOP:
			NOP
//			NOP
//			NOP
//			NOP
//			NOP
//			NOP
//			NOP
//			NOP
			RET			

;***************调试区*****************
;**************************************

;********初始化************************
INIT: 
			 MOV    WDTCN,#0deh            ;// disable watchdog timer
       MOV    WDTCN,#0adh            ;
 			 MOV 		SFRPAGE,#0Fh
			 MOV		XBR2,#040H
			 RET

;********端口初始化子程序*******
PORTINIT:
       MOV    SFRPAGE,#0Fh
       MOV    P0MDOUT,#0FFH            ;设置P0端口个管脚为漏极输出方式
			 MOV    P1MDOUT,#0FFH           ;设置管脚1的输出方式P1.6为推挽方式
       MOV    P2MDOUT,#0FFH           ;设置P2端口个管脚为推挽方式
       MOV    P3MDOUT,#0FFH           ;设置P3端口个管脚为推挽方式
			 RET

;**************************************	
	;时钟配置子程序:
;子程序名称:CLOCK
;程序功能:设置系统的时钟在外部晶振模下工作
;调用程序:
CLOCK:
 			MOV 		SFRPAGE,#0Fh
 			MOV 		OSCXCN, #067h            ; enable external crystal选择外部振荡器频率10-30,外读晶体振荡模式
			CLR 		A                       ; wait at least 1ms 
  		DJNZ  	ACC, $                ;  wait ~512us
  		DJNZ		ACC, $                ;  wait ~512us
			DJNZ		ACC, $   
OSC_WAIT:                     ; poll for XTLVLD-->1
  		MOV 		A, OSCXCN            
  		JNB 		ACC.7,OSC_WAIT         	;当oscxcn为1时表明系统外部晶振以稳定可靠工作        
  		MOV 		CLKSEL,#01H
                              ;//Turn on the PLL and increase the system clock by a factor of M/N = 2
	;通过PLL锁项环增大系统工作频率         
	                             ;// MOV     SFRPAGE,CONFIG_PAGE;   ;保存CONFIG_PAGE
      MOV 	  PLL0CN,#04H           	;设置PLL的时钟源为外部晶振                     // Set internal osc. as PLL source:
	    RET


;********清除内部RAM 20H--5FH********
;用到0区R0,R5
CLRRAM:
			MOV			R0,#20H
			MOV			R5,#40H
CLR1:	MOV			@R0,#00H
			INC 		R0
			DJNZ		R5,CLR1
			RET
;********清除内部RAM 20H--5FH********
CLRHIGHRAM:
			MOV			R0,#80H
			MOV			A,#00H
			MOV			R5,#24
CLRHIGH1:
			MOV			@R0,A
			INC			R0
			DJNZ		R5,CLRHIGH1
			RET



;********单字节BCD码转换成压缩BCD码********
DISBCD:
			MOV		R0,#30H
			MOV		R4,#06H
DISB3:MOV		A,@R0
			CJNE	A,#0BH,DISB4
			MOV		@R0,#00H
			INC		R0
			DJNZ	R4,DISB3
DISB4:MOV		R4,#05H
			MOV		R0,#36H
			MOV		R1,#36H
			MOV		A,35H
			CJNE	A,#0AH,DISB2			
			;有小数
			MOV		35H,34H
			MOV		34H,33H
			MOV		33H,32H
			MOV		32H,31H
			MOV		31H,#00H
			JMP		DISB1
DISB2:;无小数
			MOV		32H,33H
			MOV		33H,34H
			MOV		34H,35H
			MOV		35H,36H
			MOV		36H,#00H
DISB1:MOV		A,@R0
			SWAP	A
			DEC		R0
			XCHD	A,@R0
			SWAP	A
			MOV		@R1,A
			DEC		R0
			DEC		R1
			DJNZ	R4,DISB1
			RET
;********单字节角度BCD码转换成压缩BCD码********
;功能:单字节BCD码转换成压缩BCD码
;入口:30H~3
;出口:
ANGBCD:
			MOV		R0,#30H
			MOV		R4,#08H
ANGB3:MOV		A,@R0
			CJNE	A,#0BH,ANGB4
			MOV		@R0,#00H
			INC		R0
			DJNZ	R4,ANGB3
ANGB4: 	
			MOV		R0,#35H
			MOV		R1,#35H
			MOV		A,35H
			CJNE	A,#0AH,NEXT1
			MOV		35H,34H
			MOV		34H,33H
			MOV		33H,32H
			MOV		32H,#00H
			JMP		ANGB1

NEXT1:				
			MOV		A,36H
			CJNE	A,#0AH,NEXT2
			MOV		36H,37H
			MOV		37H,#00H
			MOV		32H,#00H
			JMP		ANGB1
NEXT2:				
			MOV		33H,35H
			MOV		34H,36H
			MOV		35H,37H
			MOV		36H,#00H
			MOV		37H,#00H
			MOV		32H,#00H

ANGB1:	
			MOV		R4,#08H
			MOV		R0,#37H
			MOV		R1,#37H
ANGB0:
			MOV		A,@R0
			SWAP	A
			DEC		R0
			XCHD	A,@R0
			SWAP	A
			MOV		@R1,A
			DEC		R0
			DEC		R1
			DJNZ	R4,ANGB0
			RET

;**************************************
;压缩BCD码转换为非压缩BCD码子程序
YSBCDTBCD:
			MOV			A,35H												;第X点的脉冲数/**STAR**/
			SWAP		A
			ANL			A,#0FH
			MOV			32H,A
			MOV			A,35H
			ANL			A,#0FH
			MOV			33H,A

			MOV			A,36H
			SWAP		A
			ANL			A,#0FH
			MOV			34H,A
			MOV			A,36H
			ANL			A,#0FH
			MOV			35H,A
			
			MOV			A,37H
			SWAP		A
			ANL			A,#0FH
			MOV			36H,A
			MOV			A,37H
			ANL			A,#0FH
			MOV			37H,A						             ;第X点的脉冲数/**OVER**/
			RET


;******************************
	;某点的下限或上限的值读到RAM区中子程序
;子程序名称:XRAMTORAM
;程序功能:某点的下限或上限有高到低读到RAM中46H~4AH中
;使用积存器及RAM:R0 R2 A C XRAMADDL(23H) XRAMADDH(24H) 46H~45H
;入口:
;出口:XRAM中的数据读到RAM中46H~4AH中
;调用程序:
XRAMTORAM:
			MOV		R0,#4AH
			MOV		R2,#05H
XRAMTORAMLOOP:
			MOV		DPL,XRAMADDL
			MOV		DPH,XRAMADDH
			MOVX	A,@DPTR
			MOV		@R0,A
			DEC		R0
			CLR		C
			MOV		A,XRAMADDL
			ADD		A,#01H
			MOV		XRAMADDL,A
			MOV		A,XRAMADDH
			ADDC	A,#00H
			MOV		XRAMADDH,A
			DJNZ	R2,XRAMTORAMLOOP
			RET

;**********************************************
;数据格式转换子程序
;**********************************************				
;********十进制转二进制********
;压缩BCD码的十进制转换为二进制子程序******
;十进制数由高到低依次存入35H-37H,转换后的二进制数由到低高存入38H-39H
;十进制转换为二进制(二进制在在内部存储器中以十六进制存贮)
;影响资源:R0、R1、R2、R3、R4、R6、R7、A、B、CY、PSW、内RAM35H~37H、38H~39H
DEC_BIN:
NIDTB:                                 ;调用十进制转换为2进制子程序
			MOV    R0,#35H
			MOV    R1,#38H
			MOV    R6,#38H
			MOV    R7,#03h
			MOV    R3,#03H
			CLR    A
DTB1:
			MOV    @R1,A
			INC    R1
			DJNZ   R3,DTB1
			MOV    R3,#03H
DTB2:
		  LCALL  DTB3
		  MOV    A,@R0
		  ANL    A,#0F0H
		  SWAP   A
		  LCALL  DTB4
		  LCALL  DTB3
		  MOV    A,@R0
		  ANL    A,#0FH
		  LCALL  DTB4
		  INC    R0
		  DJNZ   R3,DTB2
		  MOV    A,49H                 ;二进制数高子节和低字节交换
		  XCH    A,4AH
		  MOV    49H,A
		  RET
DTB3:
		  MOV    A,R7
		  MOV    R4,A
		  MOV    A,R6
		  MOV    R1,A
		  CLR    C
		  MOV    R2,#00H
DTB5:
		  MOV    A,@R1
		  MOV    B,#0AH
		  PUSH   PSW
		  MUL    AB
		  POP    PSW
		  ADDC   A,R2
		  MOV    @R1,A
		  MOV    R2,B
		  INC    R1
		  DJNZ   R4,DTB5
		  RET
DTB4:
		  MOV    R5,A
		  MOV    A,R6
		  MOV    R1,A
		  MOV    A,R7
		  MOV    R4,A
		  MOV    A,R5
		  ADD    A,@R1
		  MOV    @R1,A
		  INC    R1
		  DEC    R4
		  MOV    A,R4
		  JNZ    DTB6
		  SJMP   DTB7
DTB6:
		  MOV    A,@R1
		  ADDC   A,#00H
		  MOV    @R1,A
		  INC    R1
		  DJNZ   R4,DTB6
DTB7:
		  MOV    4BH,4CH
		  RET
;************************************
;三字节二进制数转换为四个字节十进制数子程序:
;三字节二进制数由高到低依次存放在40H~42H中,
;转化后的十进制数由高到低依次存放在35H~38H中,
;影响资源:R0、R1、R2、R3、R5、R6、R7、CY、PSW
NIBTD:
			MOV		R0,#42H
			MOV		R1,#37H
			MOV		R7,#03H
			NOP
			MOV		A,R0
			MOV		R5,A
			MOV		A,R1
			MOV		R6,A
			MOV		A,R7
			INC		A
			MOV		R3,A
			CLR		A
			MOV		34H,#00H
			MOV		35H,#00H
			MOV		36H,#00H
			MOV		37H,#00H
NBD0:	
			MOV		@R1,A
			DEC		R1
			DJNZ	R3,NBD0
			MOV		A,R7
			MOV		B,#08H
			MUL		AB
			MOV		R3,A
NBD4:	
			MOV		A,R5
			MOV		R0,A
			MOV		A,R7
			MOV		R2,A
			CLR		C
NBD1:
			MOV		A,@R0
			RLC		A
			MOV		@R0,A
			DEC		R0
			DJNZ	R2,NBD1
			MOV		A,R6
			MOV		R1,A
			MOV		A,R7
			MOV		R2,A
			INC		R2
NBD3:
			MOV		A,@R1
			ADDC	A,@R1
			DA		A
			MOV		@R1,A
			DEC		R1
			DJNZ	R2,NBD3
			DJNZ	R3,NBD4
//			MOV		A,34H
//			MOV		34H,37H
//			MOV		37H,A
//			MOV		A,35H
//			MOV		35H,36H
//			MOV		36H,A
			RET
;**********************************************
;延时子程序
;**********************************************
;********NOP延时子程序********
;用到1区寄存器
WAITNOP:
			SETB	 RS0
			MOV		 R6,#0FFH
WNOP1:NOP
			NOP
			DJNZ	 R6,WNOP1
			CLR		 RS0
			RET
;********NOP延时子程序********
WAIT3S:
			SETB	 RS0
			MOV		 R6,#060
WAIT3SLOOP:
			LCALL	 WAIT50MINS
			DJNZ	 R6,WAIT3SLOOP
			CLR		 RS0
			RET
;********NOP延时子程序********
WAIT150ms:
			SETB	 RS0
			MOV		 R5,#010H    ;#01AH
      MOV    R3,#0FFH
			MOV	   R4,#0FFH
W150m2:
			MOV	   R4,#0FFH
W150m1:
			NOP
			NOP
			DJNZ	 R4,W150m1
			DJNZ	 R3,W150m2
			MOV		 R3,#0FFH
			DJNZ	 R5,W150m2
			CLR		 RS0
			RET
;********NOP延时子程序********
WAIT100ms:
			LCALL	 WAIT50ms
			LCALL	 WAIT50ms
			RET
;********NOP延时子程序********
WAIT50ms:
			SETB	 RS0
      MOV    R3,#0FFH
			MOV	   R4,#0FFH
W50m2:
			MOV	   R4,#0FFH
W50m1:
			NOP
			NOP
			DJNZ	 R4,W50m1
			DJNZ	 R3,W50m2
			CLR		 RS0
			RET	    
;********NOP延时子程序********
WAIT50MINS:
//			SETB	 RS0
      MOV    R3,#0FFH
			MOV	   R4,#0FFH
W50MINS2:
			MOV	   R4,#0FFH
W50MINS1:
			NOP
			NOP
			DJNZ	 R4,W50MINS1
			DJNZ	 R3,W50MINS2
//			CLR		 RS0
			RET	  
;********NOP延时子程序********			  
NOP25:  
			SETB	 RS0
			MOV		 R3,#0FAH
NOP251:
			NOP
			NOP
	    DJNZ	 R3,NOP251
	    CLR		 RS0
			RET
;********延时1毫秒*******
WAIT1ms:
			SETB	 RS0
		  MOV    R3,#0AH
W1m2:
			MOV	   R4,#0FFH
W1m1:
			NOP
			NOP
			DJNZ	 R4,W1m1
			DJNZ	 R3,W1m2
			CLR		 RS0
			RET

;********延时100微秒*******
WAIT100us:
			SETB	 RS0
      MOV    R3,#01H
W100u2:
			MOV	   R4,#0FFH
W100u1:
			NOP
			NOP
			DJNZ	 R4,W100u1
			DJNZ	 R3,W100u2
			CLR		 RS0
			RET	
;********延时Xms*********
WAITXms:
			SETB	 RS0
			MOV		 R6,#01H
WAITX1:
			LCALL	 WAIT150ms
			SETB	 RS0
			DJNZ	 R6,WAITX1
			CLR		 RS0
			RET			
		  END

⌨️ 快捷键说明

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