📄 oled.asm
字号:
;无磁上位机程序:
;功能:手动输入6个点的标定流量,输入范围:0~599升;
; 开始键和结束键在水的流速平稳时使用,
;;键盘定义:
;数字键:0--9,小数点键;
;功能键:开始键、结束键、修改键、发送键、NEXT键
$include (c8051f120.inc)
;****************************************
;****************************************
;I/O口定义:
;OLED显示
OLED_DC EQU P2.1
OLED_RW EQU P2.2
OLED_EN EQU P2.3
OLED_CS EQU P2.4
OLED_RES EQU P2.5
OLED_DATA1 EQU P3.0
OLED_DATA2 EQU P3.1
OLED_DATA3 EQU P3.2
OLED_DATA4 EQU P3.3
OLED_DATA5 EQU P3.4
OLED_DATA6 EQU P3.5
OLED_DATA7 EQU P3.6
OLED_DATA8 EQU P3.7
OLED_DATA EQU P3
// 1 GND GND
// 2 VCC VCC
// 4 D/C P21
// 5 R/W P22
// 6 EN P23
// 7~14 D0~D7 P30~P37
// 15 CS P24
// 16 RES VCC
// 17 M80 VCC
// 18 MS VCC
// 20 GND GND
;**********************************************************
;RAM区定义:
LCD_MODEL EQU 20h ;LCD模式选择:00H:数字模式,01H:汉字模式
POINT_JUDGE EQU 21h ;标定第几点判断标志的寄存器
TIMESOFPASS EQU 22H ;输入修改标定点实际流量的上下限的密码次数:
VALUEOFPOINT EQU 23H ;显示修改上下限的第几温度点
XRAMADDL EQU 24H ;向XRAM写入上下限的地址定义:
XRAMADDH EQU 25H
;**********************************************************
SFRPAGE_SAVE EQU 00H
#define SAMPLE_RATE 50000 // Sample frEQUency in Hz
ORG 0000H
LJMP MAIN
ORG 002BH
Blink SEGMENT CODE
RSEG Blink ; Switch to this code segment.
USING 0 ; Specify register bank for the following
;********************************************************** ; program code.
MAIN:
;观看门狗
MOV SP,#60h
///?LCALL CLOCK
LCALL INIT ;调用初始化子程序
LCALL PORTINIT ;端口初始化
LCALL CLRRAM ;清除RAM:20H--5FH
LCALL INIT_OLED ;OLED初始化
;**************************************
;***************调试区*****************
limrtest:
MOV SFRPAGE,#0Fh
LCALL CLEAR_SCREEN
LCALL ALL_SCREEN
LCALL CLEAR_SCREEN
LCALL DISPLAY_TEST
ajmp limrtest
;**************************************
DISPLAY_TEST:
//李
MOV SFRPAGE,#0Fh
MOV A,#0B0H
CALL WRITE_COMMAND
MOV A,#010H
CALL WRITE_COMMAND
MOV A,#000H
CALL WRITE_COMMAND
MOV DPTR,#TABL0
CLR A
MOV A,#0B0H
CALL WRITE_COMMAND
MOV R0,#000H
CLR A
DIS_LOOPL1:
MOVC A,@A+DPTR
LCALL WRITE_DATA
INC R0
MOV A,R0
CJNE R0,#16,DIS_LOOPL1
MOV SFRPAGE,#0Fh
MOV A,#0B0H
CALL WRITE_COMMAND
MOV A,#010H
CALL WRITE_COMMAND
MOV A,#000H
CALL WRITE_COMMAND
MOV DPTR,#TABH0
CLR A
MOV A,#0B1H
CALL WRITE_COMMAND
MOV R0,#000H
CLR A
DIS_LOOPH1:
MOVC A,@A+DPTR
LCALL WRITE_DATA
INC R0
MOV A,R0
CJNE R0,#16,DIS_LOOPH1
nop
//茂
MOV SFRPAGE,#0Fh
MOV A,#0B0H
CALL WRITE_COMMAND
MOV A,#011H
CALL WRITE_COMMAND
MOV A,#000H
CALL WRITE_COMMAND
MOV DPTR,#TABL1
CLR A
MOV A,#0B0H
CALL WRITE_COMMAND
MOV R0,#000H
CLR A
DIS_LOOPL:
MOVC A,@A+DPTR
LCALL WRITE_DATA
INC R0
MOV A,R0
CJNE R0,#16,DIS_LOOPL
MOV SFRPAGE,#0Fh
MOV A,#0B0H
CALL WRITE_COMMAND
MOV A,#011H
CALL WRITE_COMMAND
MOV A,#000H
CALL WRITE_COMMAND
MOV DPTR,#TABH1
CLR A
MOV A,#0B1H
CALL WRITE_COMMAND
MOV R0,#000H
CLR A
DIS_LOOPH:
MOVC A,@A+DPTR
LCALL WRITE_DATA
INC R0
MOV A,R0
CJNE R0,#16,DIS_LOOPH
nop
//锐
MOV SFRPAGE,#0Fh
MOV A,#0B0H
CALL WRITE_COMMAND
MOV A,#012H
CALL WRITE_COMMAND
MOV A,#000H
CALL WRITE_COMMAND
MOV DPTR,#TABL2
CLR A
MOV A,#0B0H
CALL WRITE_COMMAND
MOV R0,#000H
CLR A
DIS_LOOPL2:
MOVC A,@A+DPTR
LCALL WRITE_DATA
INC R0
MOV A,R0
CJNE R0,#16,DIS_LOOPL2
MOV SFRPAGE,#0Fh
MOV A,#0B0H
CALL WRITE_COMMAND
MOV A,#012H
CALL WRITE_COMMAND
MOV A,#000H
CALL WRITE_COMMAND
MOV DPTR,#TABH2
CLR A
MOV A,#0B1H
CALL WRITE_COMMAND
MOV R0,#000H
CLR A
DIS_LOOPH2:
MOVC A,@A+DPTR
LCALL WRITE_DATA
INC R0
MOV A,R0
CJNE R0,#16,DIS_LOOPH2
nop
//9
MOV SFRPAGE,#0Fh
MOV A,#0B0H
CALL WRITE_COMMAND
MOV A,#013H
CALL WRITE_COMMAND
MOV A,#000H
CALL WRITE_COMMAND
MOV DPTR,#TABL3
CLR A
MOV A,#0B0H
CALL WRITE_COMMAND
MOV R0,#000H
CLR A
DIS_LOOPL3:
MOVC A,@A+DPTR
LCALL WRITE_DATA
INC R0
MOV A,R0
CJNE R0,#8,DIS_LOOPL3
MOV SFRPAGE,#0Fh
MOV A,#0B0H
CALL WRITE_COMMAND
MOV A,#013H
CALL WRITE_COMMAND
MOV A,#000H
CALL WRITE_COMMAND
MOV DPTR,#TABH3
CLR A
MOV A,#0B1H
CALL WRITE_COMMAND
MOV R0,#000H
CLR A
DIS_LOOPH3:
MOVC A,@A+DPTR
LCALL WRITE_DATA
INC R0
MOV A,R0
CJNE R0,#8,DIS_LOOPH3
nop
//8
MOV SFRPAGE,#0Fh
MOV A,#0B0H
CALL WRITE_COMMAND
MOV A,#013H
CALL WRITE_COMMAND
MOV A,#008H
CALL WRITE_COMMAND
MOV DPTR,#TABL4
CLR A
MOV A,#0B0H
CALL WRITE_COMMAND
MOV R0,#000H
CLR A
DIS_LOOPL4:
MOVC A,@A+DPTR
LCALL WRITE_DATA
INC R0
MOV A,R0
CJNE R0,#8,DIS_LOOPL4
MOV SFRPAGE,#0Fh
MOV A,#0B0H
CALL WRITE_COMMAND
MOV A,#013H
CALL WRITE_COMMAND
MOV A,#008H
CALL WRITE_COMMAND
MOV DPTR,#TABH4
CLR A
MOV A,#0B1H
CALL WRITE_COMMAND
MOV R0,#000H
CLR A
DIS_LOOPH4:
MOVC A,@A+DPTR
LCALL WRITE_DATA
INC R0
MOV A,R0
CJNE R0,#8,DIS_LOOPH4
nop
//5
MOV SFRPAGE,#0Fh
MOV A,#0B0H
CALL WRITE_COMMAND
MOV A,#014H
CALL WRITE_COMMAND
MOV A,#000H
CALL WRITE_COMMAND
MOV DPTR,#TABL5
CLR A
MOV A,#0B0H
CALL WRITE_COMMAND
MOV R0,#000H
CLR A
DIS_LOOPL5:
MOVC A,@A+DPTR
LCALL WRITE_DATA
INC R0
MOV A,R0
CJNE R0,#8,DIS_LOOPL5
MOV SFRPAGE,#0Fh
MOV A,#0B0H
CALL WRITE_COMMAND
MOV A,#014H
CALL WRITE_COMMAND
MOV A,#000H
CALL WRITE_COMMAND
MOV DPTR,#TABH5
CLR A
MOV A,#0B1H
CALL WRITE_COMMAND
MOV R0,#000H
CLR A
DIS_LOOPH5:
MOVC A,@A+DPTR
LCALL WRITE_DATA
INC R0
MOV A,R0
CJNE R0,#8,DIS_LOOPH5
nop
RET
;-- 文字: 5 --
;-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=8x16 --
//DB 000,000,011,013,012,00E,000,000,000,000,0F0,008,004,008,008,000
TABH5:
DB 000h,000h,011h,013h,012h,00Eh,000h,000h
TABL5:
DB 000h,000h,0F0h,008h,004h,008h,008h,000h
;-- 文字: 8 --
;-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=8x16 --
//DB 000,000,01E,011,011,01E,000,000,000,000,078,084,084,048,030,000
TABH4:
DB 000h,000h,01Eh,011h,011h,01Eh,000h,000h
TABL4:
DB 000h,000h,078h,084h,084h,048h,030h,000h
;-- 文字: 9 --
;-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=8x16 --
//DB 000h,003h,01Fh,010h,010h,019h,006h,000h,000h,000h,0E0h,090h,048h,084h,000h,000h
TABH3:
DB 000h,003h,01Fh,010h,010h,019h,006h,000h
TABL3:
DB 000h,000h,0E0h,090h,048h,084h,000h,000h
;-- 文字: 锐 --
;-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --
TABH2:
DB 000h,000h,000h,020h,017h,00Dh,005h,00Dh,013h,000h,008h,00Ah,07Bh,005h,002h,001h
TABL2:
DB 000h,038h,004h,004h,004h,0F8h,000h,0C0h,020h,010h,0A8h,090h,0F8h,040h,040h,000h
;-- 文字: 茂 --
;-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --
TABH1:
DB 000h,000h,000h,020h,024h,029h,022h,0F2h,022h,027h,021h,079h,011h,010h,010h,000h
TABL1:
DB 000h,000h,00Eh,002h,004h,088h,050h,020h,0D0h,008h,008h,000h,0E0h,018h,004h,000h
;****************************************
TABH0:
DB 000h,002h,002h,002h,024h,024h,02Bh,032h,0FEh,011h,019h,014h,012h,001h,000h,000h
TABL0:
DB 000h,000h,040h,040h,040h,040h,040h,0DCh,062h,024h,020h,020h,020h,020h,020h,000h
;****************************************
CLEAR_SCREEN:
MOV SFRPAGE,#0Fh
MOV A,#010H
CALL WRITE_COMMAND
MOV A,#000H
CALL WRITE_COMMAND
MOV R1,#0B0H
MOV R0,#000H
CLR_LOOP1:
MOV A,R1
CALL WRITE_COMMAND
CLR_LOOP0:
MOV A,#000H
LCALL WRITE_DATA
INC R0
CJNE R0,#128,CLR_LOOP0
INC R1
CJNE R1,#0B8H,CLR_LOOP1
RET
;****************************************
ALL_SCREEN:
MOV SFRPAGE,#0Fh
MOV A,#010H
CALL WRITE_COMMAND
MOV A,#000H
CALL WRITE_COMMAND
MOV R1,#0B0H
MOV R0,#000H
ALL_LOOP1:
MOV A,R1
CALL WRITE_COMMAND
ALL_LOOP0:
MOV A,#0FFH
LCALL WRITE_DATA
INC R0
CJNE R0,#128,ALL_LOOP0
INC R1
CJNE R1,#0B8H,ALL_LOOP1
RET
;****************************************
INIT_OLED:
MOV SFRPAGE,#0Fh
CLR OLED_CS
LCALL NOPLOOP
CLR OLED_RES
LCALL NOPLOOP
SETB OLED_RES
LCALL NOPLOOP
CLR OLED_DC
LCALL NOPLOOP
CLR OLED_RW
LCALL NOPLOOP
CLR OLED_EN
LCALL NOPLOOP
MOV A,#0AEH
LCALL WRITE_COMMAND
MOV A,#0ADH
LCALL WRITE_COMMAND
MOV A,#08AH
LCALL WRITE_COMMAND
MOV A,#0A8H
LCALL WRITE_COMMAND
MOV A,#03FH
LCALL WRITE_COMMAND
MOV A,#0D3H
LCALL WRITE_COMMAND
MOV A,#000H
LCALL WRITE_COMMAND
MOV A,#040H
LCALL WRITE_COMMAND
MOV A,#0A0H
LCALL WRITE_COMMAND
MOV A,#0C8H
LCALL WRITE_COMMAND
MOV A,#0A6H
LCALL WRITE_COMMAND
MOV A,#0A4H
LCALL WRITE_COMMAND
MOV A,#081H
LCALL WRITE_COMMAND
MOV A,#0FFH
LCALL WRITE_COMMAND
MOV A,#0D5H
LCALL WRITE_COMMAND
MOV A,#060H
LCALL WRITE_COMMAND
MOV A,#0D8H
LCALL WRITE_COMMAND
MOV A,#000H
LCALL WRITE_COMMAND
MOV A,#0D9H
LCALL WRITE_COMMAND
MOV A,#084H
LCALL WRITE_COMMAND
MOV A,#02EH ;禁止水平方向滚动
LCALL WRITE_COMMAND
MOV A,#0AFH
LCALL WRITE_COMMAND
RET
;*************************************
;*************************************
WRITE_COMMAND:
MOV SFRPAGE,#0Fh
CLR OLED_DC
LCALL NOPLOOP
SETB OLED_EN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -