?? oled.asm
字號:
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 + -