📄 swclib.asm
字号:
D_T_SET:
MOV R0,#SPIDBUF
MOV @R0,#00H ;秒值
INC R0
MOV @R0,#30H ;分值
INC R0
MOV @R0,#08H ;时值
INC R0
MOV @R0,#05H ;星期值
INC R0
MOV @R0,#03H ;日值
INC R0
MOV @R0,#05H ;月值
INC R0
MOV @R0,#02H ;年值
INC R0
MOV @R0,#00H ;时间设置标志
MOV R0,#SPIDBUF
;********************************
;SPI总线ATMEL DATAFLASH存取测试
;********************************
;AT45D04存储卡操作-写
MOV SPIPGH,#0
MOV SPIPGL,#8
MOV SPIADR,#30
MOV SPINBYT,#8
LCALL AT45D04CARDWRNBYT ;SPI存储卡写
RET
TIME_SET:
LCALL LCDCLEAR ;LCD清屏
MOV DPTR,#SCRN7310 ;获取选井界面首址
LCALL LCDDISPLAY ;LCD字符显示程序
;********************************
;读取并显示时间
;********************************
LCALL DS1629RCV ;读取实时日历时钟
LCALL DS1629TSET
MOV R0,#RTCBUF
LCALL LCDDISPLAYRAM
TIME_SET1:
;********************************
;读取键盘扫描码
;********************************
LCALL KEY
JB KEYWB,TIME_SET2
LJMP TIME_SET1
TIME_SET2:
CJNE A,#KCODE_CNCL,TIME_SET3
LJMP MAIN_11 ;按下[取消]键,返回
TIME_SET3:
CJNE A,#KCODE_ENTR,TIME_SET1
MOV R0,#I2CDBUF
MOV @R0,#0C0H ;=0C0H(ACCESS CLOCK),即RTC存取操作
INC R0
MOV @R0,#00H
INC R0
MOV @R0,#00H
INC R0
MOV @R0,#00H
INC R0
MOV @R0,#12H
INC R0
MOV @R0,#5
INC R0
MOV @R0,#26H
INC R0
MOV @R0,#04H
INC R0
MOV @R0,#02H
MOV R0,#I2CDBUF ;执行I2C器件写操作
MOV SLA,#DS1629
MOV I2CNUMBYT,#9 ;连续写9个字节
LCALL I2CWRNBYTP
LJMP MAIN_11
WRCAED:
MOV R2,#16
MOV R3,#0
WRCAED2:
MOV R0,#SPIDBUF
MOV R1,#80H
MOV DPTR,#CHINESEBMAP;确定字符字模块首地址
MOV A,R3 ;取代码
MOV B,#80H ;字模块宽度为32个字节
MUL AB ;代码×16
ADD A,DPL ;字符字模块首地址
MOV DPL,A ;=字模库首地址+代码×16
MOV A,B
ADDC A,DPH
MOV DPH,A
WRCAED1:
MOVC A,@A+DPTR
MOV @R0,A
INC R0
INC DPTR
MOV A,#0
DJNZ R1,WRCAED1
MOV A,R3 ;取代码
MOV B,#80H ;字模块宽度为32个字节
MUL AB ;代码×16
MOV SPIADR,A
MOV A,#WELLDATAL
ADD A,B
MOV SPIPGL,A
MOV SPIPGH,WELLDATAH
MOV SPINBYT,#80H
LCALL AT45D04CARDWRNBYT
LCALL SPIRDYCHK
INC R3
DJNZ R2,WRCAED2
RET
WRCAED_WELL:
MOV R2,#16
MOV R3,#0
MOV R0,#SPIDBUF
MOV A,#3
MOV @R0,A
INC R0
MOV A,#1
MOV @R0,A
INC R0
MOV A,#2
MOV @R0,A
INC R0
MOV A,#3FH
MOV @R0,A
INC R0
MOV A,#2
MOV @R0,A
INC R0
MOV A,#1
MOV @R0,A
INC R0
MOV A,#2
MOV @R0,A
INC R0
MOV A,#3
MOV @R0,A
INC R0
MOV A,#0FFH
MOV @R0,A
INC R0
MOV A,#0FFH
MOV @R0,A
INC R0
MOV R0,#SPIDBUF
MOV SPIADR,#0
MOV A,#WELLDATAL
ADD A,B
MOV SPIPGL,#WELLDATAL
MOV SPIPGH,#WELLDATAH
MOV SPINBYT,#20H
LCALL SPIRDYCHK
LCALL AT45D04CARDWRNBYT
RET
WRCAEDC:
MOV R3,#1
WRCAEDC2:
MOV R0,#SPIDBUF
MOV R1,#80H
MOV DPTR,#CHINESEBMAP;确定字符字模块首地址
MOV A,R3 ;取代码
MOV B,#80H ;字模块宽度为32个字节
MUL AB ;代码×16
ADD A,DPL ;字符字模块首地址
MOV DPL,A ;=字模库首地址+代码×16
MOV A,B
ADDC A,DPH
MOV DPH,A
WRCAEDC1:
MOVC A,@A+DPTR
MOV @R0,A
INC R0
INC DPTR
MOV A,#0
DJNZ R1,WRCAEDC1
MOV A,R3 ;取代码
MOV B,#80H ;字模块宽度为32个字节
MUL AB ;代码×16
MOV SPIADR,#0;A
MOV A,#WELLDATAL
ADD A,R3;B
MOV SPIPGL,A
MOV SPIPGH,WELLDATAH
MOV SPINBYT,#80H
LCALL AT45D04CARDWRNBYT
LCALL SPIRDYCHK
RET
RAMWR:
MOV R1,#80H
MOV A,#55H
MOV DPTR,#100H ;确定字符字模块首地址
RAMWR1:
MOVX @DPTR,A ;取代码
INC DPTR
; INC A
DJNZ R1,RAMWR1
RET
RAMRD:
MOV R1,#80H
MOV R0,#80H
MOV DPTR,#100H ;确定字符字模块首地址
RAMRD1:
MOVX A,@DPTR
MOV @R0,A
INC R0
INC DPTR
DJNZ R1,RAMRD1
RET
PA_DISP:
LCALL IBTD
;循环控制变量R7=8时,单字节;
; R7=16, 双字节。
;输入:R2 R3
;输出:R4 R5 R6
MOV A,R6
PUSH ACC
PUSH ACC
MOV A,R5
PUSH ACC ;结果入栈
PUSH ACC
MOV A,R4
PUSH ACC ;结果入栈
MOV LCDXPG,WELLMING
MOV LCDCOL,LIE
POP ACC
ANL A,#0FH
MOV LCDCHR,A ;代码:电流千位值
MOV A,WELLMING
SWAP A
ANL A,#07H
CJNE A,#00H,DIANLIOU_DISP1
MOV DPTR,#ASCFIXEDBMAP
LCALL LCDASCIIWR
LJMP DIANLIOU_DISP2
DIANLIOU_DISP1:
MOV DPTR,#ASCSONGBMAP ;确定字符字模块首地址
LCALL LCDCHNASCWR ;调用LCD西文ASC写程序
DIANLIOU_DISP2:
MOV LCDXPG,WELLMING
MOV A,#00H
ADD A,LIE
MOV LCDCOL,A
POP ACC
SWAP A
ANL A,#0FH
MOV LCDCHR,A ;代码:电流百位值
MOV A,WELLMING
SWAP A
ANL A,#07H
CJNE A,#00H,DIANLIOU_DISP3
MOV DPTR,#ASCFIXEDBMAP
LCALL LCDASCIIWR
LJMP DIANLIOU_DISP4
DIANLIOU_DISP3:
MOV DPTR,#ASCSONGBMAP ;确定字符字模块首地址
LCALL LCDCHNASCWR ;调用LCD西文ASC写程序
DIANLIOU_DISP4:
MOV LCDXPG,WELLMING
MOV A,#08H
ADD A,LIE
MOV LCDCOL,A
POP ACC
ANL A,#0FH
MOV LCDCHR,A ;代码:电流十位值
MOV A,WELLMING
SWAP A
ANL A,#07H
CJNE A,#00H,DIANLIOU_DISP5
MOV DPTR,#ASCFIXEDBMAP
LCALL LCDASCIIWR
LJMP DIANLIOU_DISP6
DIANLIOU_DISP5:
MOV DPTR,#ASCSONGBMAP ;确定字符字模块首地址
LCALL LCDCHNASCWR ;调用LCD西文ASC写程序
DIANLIOU_DISP6:
MOV LCDXPG,WELLMING
MOV A,#10H
ADD A,LIE
MOV LCDCOL,A
POP ACC
SWAP A
ANL A,#0FH
MOV LCDCHR,A ;代码:电流个位值
MOV A,WELLMING
SWAP A
ANL A,#07H
CJNE A,#00H,DIANLIOU_DISP7
MOV DPTR,#ASCFIXEDBMAP
LCALL LCDASCIIWR
LJMP DIANLIOU_DISP8
DIANLIOU_DISP7:
MOV DPTR,#ASCSONGBMAP ;确定字符字模块首地址
LCALL LCDCHNASCWR ;调用LCD西文ASC写程序
DIANLIOU_DISP8:
MOV LCDXPG,WELLMING
MOV A,#20H
ADD A,LIE
MOV LCDCOL,A
POP ACC
ANL A,#0FH
MOV LCDCHR,A ;代码:电流十分位值
MOV A,WELLMING
SWAP A
ANL A,#07H
CJNE A,#00H,DIANLIOU_DISP9
MOV DPTR,#ASCFIXEDBMAP
LCALL LCDASCIIWR
LJMP DIANLIOU_DISPA
DIANLIOU_DISP9:
MOV DPTR,#ASCSONGBMAP ;确定字符字模块首地址
LCALL LCDCHNASCWR ;调用LCD西文ASC写程序
DIANLIOU_DISPA:
RET
PALI_DISP:
LCALL IBTD
;循环控制变量R7=8时,单字节;
; R7=16, 双字节。
;输入:R2 R3
;输出:R4 R5 R6
MOV A,R6
PUSH ACC
PUSH ACC
MOV A,R5
PUSH ACC ;结果入栈
PUSH ACC
MOV A,R4
PUSH ACC ;结果入栈
MOV LCDXPG,WELLMING
MOV LCDCOL,LIE
POP ACC
ANL A,#0FH
MOV LCDCHR,A ;代码:压力十位值
MOV A,WELLMING
SWAP A
ANL A,#07H
CJNE A,#00H,YALI_DISP1
MOV DPTR,#ASCFIXEDBMAP
LCALL LCDASCIIWR
LJMP YALI_DISP2
YALI_DISP1:
MOV DPTR,#ASCSONGBMAP ;确定字符字模块首地址
LCALL LCDCHNASCWR ;调用LCD西文ASC写程序
YALI_DISP2:
MOV LCDXPG,WELLMING
MOV A,#08H
ADD A,LIE
MOV LCDCOL,A
POP ACC
SWAP A
ANL A,#0FH
MOV LCDCHR,A ;代码:压力个位值
MOV A,WELLMING
SWAP A
ANL A,#07H
CJNE A,#00H,YALI_DISP3
MOV DPTR,#ASCFIXEDBMAP
LCALL LCDASCIIWR
LJMP YALI_DISP4
YALI_DISP3:
MOV DPTR,#ASCSONGBMAP ;确定字符字模块首地址
LCALL LCDCHNASCWR ;调用LCD西文ASC写程序
YALI_DISP4:
MOV LCDXPG,WELLMING
MOV A,#18H
ADD A,LIE
MOV LCDCOL,A
POP ACC
ANL A,#0FH
MOV LCDCHR,A ;代码:压力十分位值
MOV A,WELLMING
SWAP A
ANL A,#07H
CJNE A,#00H,YALI_DISP5
MOV DPTR,#ASCFIXEDBMAP
LCALL LCDASCIIWR
LJMP YALI_DISP6
YALI_DISP5:
MOV DPTR,#ASCSONGBMAP ;确定字符字模块首地址
LCALL LCDCHNASCWR ;调用LCD西文ASC写程序
YALI_DISP6:
MOV LCDXPG,WELLMING
MOV A,#20H
ADD A,LIE
MOV LCDCOL,A
POP ACC
SWAP A
ANL A,#0FH
MOV LCDCHR,A ;代码:压力百分位值
MOV A,WELLMING
SWAP A
ANL A,#07H
CJNE A,#00H,YALI_DISP7
MOV DPTR,#ASCFIXEDBMAP
LCALL LCDASCIIWR
LJMP YALI_DISP8
YALI_DISP7:
MOV DPTR,#ASCSONGBMAP ;确定字符字模块首地址
LCALL LCDCHNASCWR ;调用LCD西文ASC写程序
YALI_DISP8:
MOV LCDXPG,WELLMING
MOV A,#28H
ADD A,LIE
MOV LCDCOL,A
POP ACC
ANL A,#0FH
MOV LCDCHR,A ;代码:压力千分位值
MOV A,WELLMING
SWAP A
ANL A,#07H
CJNE A,#00H,YALI_DISP9
MOV DPTR,#ASCFIXEDBMAP
LCALL LCDASCIIWR
LJMP YALI_DISPA
YALI_DISP9:
MOV DPTR,#ASCSONGBMAP ;确定字符字模块首地址
LCALL LCDCHNASCWR ;调用LCD西文ASC写程序
YALI_DISPA:
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -