📄 cjy20.asm
字号:
MOV LCDHORZ,#0
;********************************
;读取键盘扫描码
;********************************
FUNC_GPHPRES_A:
LCALL KEY
JB KEYWB,FUNC_GPHPRES_B
LJMP FUNC_GPHPRES_A
FUNC_GPHPRES_B:
CJNE A,#KCODE_CNCL,FUNC_GPHPRES_C
LJMP MAIN_11 ;返回主程序
FUNC_GPHPRES_C:
CJNE A,#KCODE_ENTR,FUNC_GPHPRES_A
;保存采集数据
CLR A ;计算48次采集的累计值
MOV TEMP0,A
MOV TEMP1,A
MOV TEMP2,A
MOV R5,#48
MOV R0,#(SPIDBUF+20H)
FUNC_GPHPRES_6A:
MOV B,@R0
INC R0
MOV A,@R0
INC R0
ADD A,TEMP0
MOV TEMP0,A
MOV A,B
ADDC A,TEMP1
MOV TEMP1,A
MOV A,#0
ADDC A,TEMP2
MOV TEMP2,A
DJNZ R5,FUNC_GPHPRES_6A
MOV R2,#0 ;被除数
MOV R3,TEMP2
MOV R4,TEMP1
MOV R5,TEMP0
MOV R6,#0
MOV R7,#48 ;除以48
;(R2R3R4R5)/(R6R7)=>(R2R3R4R5)
LCALL IDIV
MOV ADCVAL1,R4
MOV ADCVAL0,R5
;AT45D04存储卡操作-写
LCALL DS1629RCV ;读取实时日历时钟
MOV R1,#SPIDBUF
MOV R0,#(I2CDBUF+1)
MOV A, @R0 ;取分钟字节
MOV @R1,A
INC R1
INC R0
MOV A, @R0 ;取小时字节
MOV @R1,A
INC R1
INC R0
INC R0
MOV A, @R0 ;取天字节
MOV @R1,A
INC R1
INC R0
MOV A, @R0 ;取月字节
MOV @R1,A
INC R1
INC R0
MOV A, @R0 ;取年字节
MOV @R1,A
INC R1
MOV @R1,#00 ;工号0
INC R1
MOV @R1,#00 ;工号1
INC R1
MOV @R1,#00 ;工号2
INC R1
MOV @R1,TPVAL1 ;填写温度值
INC R1
MOV @R1,TPVAL0
INC R1
MOV @R1,ADCVAL1 ;填写压力值
INC R1
MOV @R1,ADCVAL0
MOV SPIADR,#0
MOV SPINBYT,#12 ;保存采集时间、工号、温度和压力等12个字节数据
LCALL RAM_ADD
LCALL AT45D04WRNBYT ;SPI存储器写
MOV SPIADR,#0
MOV SPINBYT,#12 ;保存采集时间、工号、温度和压力等12个字节数据
LCALL RAM_ADD
LCALL AT45D04CARDWRNBYT ;SPI存储卡写
LJMP MAIN_11 ;返回主程序
;===================================================
; 电流采集处理程序
; 2002/4/20
;===================================================
FUNC_CURR:
LCALL LCDCLEAR ;LCD清屏
MOV DPTR,#SCRN7108 ;显示电流采集文本界面
LCALL LCDDISPLAY ;LCD字符显示程序
FUNC_TXTCURR_1:
MOV WELLMING,#30H
MOV LIE,#0
LCALL WELLM
LCALL CGAIN32 ;GAIN=32 AD采集
LCALL BUZZ600
;*******************************************
;用ASC FIXEDSYS字符向LCD输出10进制AD转换值
;*******************************************
MOV R2,ADCVAL1 ;16进制到10进制双字节转换
MOV R3,ADCVAL0
MOV R7,#16
MOV WELLMING,#16H
MOV LIE,#38H
LCALL PA_DISP
;********************************
;读取键盘扫描码
;********************************
LCALL KEY
JB KEYWB,FUNC_GPHCURR_1
LJMP FUNC_TXTCURR_1
FUNC_GPHCURR_1:
CJNE A,#KCODE_CNCL,FUNC_GPHCURR_1A
LJMP MAIN_11 ;返回主程序
FUNC_GPHCURR_1A:
CJNE A,#KCODE_DOWN,FUNC_TXTCURR_1
;按[向下]键,进入图形显示状态
FUNC_GPHCURR_2:
LCALL LCDCLEAR ;LCD清屏
MOV DPTR,#SCRN7110 ;显示电流采集图形界面
LCALL LCDDISPLAY ;LCD字符显示程序
LCALL LCD_WLINE ;屏幕绘直线
MOV LCDHORZ,#0 ;从0列开始显示图形
FUNC_GPHCURR_4:
LCALL CGAIN32 ;GAIN=32 AD采集
MOV A,LCDHORZ
MOV B,#48
DIV AB
CJNE A,#1,FUNC_GPHCURR_4A
MOV A,B
RL A ;2倍
ADD A,#(SPIDBUF+20H);偏移20H
MOV R0,A
MOV @R0,ADCVAL1
INC R0
MOV @R0,ADCVAL0
INC R0
FUNC_GPHCURR_4A:
LCALL BUZZ300X
;用ASC FIXEDSYS字符向LCD输出10进制AD转换值
MOV R2,ADCVAL1 ;16进制到10进制双字节转换
MOV R3,ADCVAL0
MOV R7,#16
MOV WELLMING,#07H
MOV LIE,#00H
LCALL PA_DISP
;屏幕绘点
MOV A,ADCVAL1
CLR C
RRC A ;AD转换值除以
;CLR C
;RRC A
MOV B,#54 ;LCD显示数据的D0为对应屏幕相应页的顶点
XCH A,B
SUBB A,B
JNC FUNC_GPHCURR_4B
CLR A
FUNC_GPHCURR_4B:
SETB ACC.7 ;设置绘点标志
MOV LCDLNE,A ;行地址设置
MOV LCDCOL,LCDHORZ ;列地址设置
LCALL LCD_WDOT ;调用绘点程序
;********************************
;读取键盘扫描码
;********************************
LCALL KEY
JB KEYWB,FUNC_GPHCURR_5
LJMP FUNC_GPHCURR_8
FUNC_GPHCURR_5:
CJNE A,#KCODE_CNCL,FUNC_GPHCURR_6
LJMP MAIN_11 ;返回主程序
FUNC_GPHCURR_6:
CJNE A,#KCODE_DOWN,FUNC_GPHCURR_8
LJMP FUNC_CURR ;按下[向下]键,进入文本显示状态
JUMP_FUNC_GPHCURR_4:
LJMP FUNC_GPHCURR_4
FUNC_GPHCURR_8:
INC LCDHORZ
MOV A,LCDHORZ
CJNE A,#80H,JUMP_FUNC_GPHCURR_4
LCALL LCDCLEAR ;LCD清屏
MOV DPTR,#SCRN7104A ;显示[是否确认采集]界面
LCALL LCDDISPLAY ;LCD字符显示程序
LCALL DELAY ;延时
MOV LCDHORZ,#0
;********************************
;读取键盘扫描码
;********************************
FUNC_GPHCURR_A:
LCALL KEY
JB KEYWB,FUNC_GPHCURR_B
LJMP FUNC_GPHCURR_A
FUNC_GPHCURR_B:
CJNE A,#KCODE_CNCL,FUNC_GPHCURR_C
LJMP MAIN_11 ;返回主程序
FUNC_GPHCURR_C:
CJNE A,#KCODE_ENTR,FUNC_GPHCURR_A
MOV R0,#(SPIDBUF+20H) ;96个字节数据传送
MOV R1,#SPIDBUF
MOV R7,#96
FUNC_GPHCURR_6A:
MOV A,@R0
MOV @R1,A
INC R0
INC R1
DJNZ R7,FUNC_GPHCURR_6A
MOV SPIADR,#0CH ;在温度和压力值后记录电流采集数据
MOV SPINBYT,#96 ;48个连续数据
LCALL RAM_ADD
LCALL AT45D04WRNBYT ;SPI存储器写
MOV SPIADR,#0CH ;在温度和压力值后记录电流采集数据
MOV SPINBYT,#96 ;48个连续数据
LCALL RAM_ADD
LCALL AT45D04CARDWRNBYT ;SPI存储卡写
LJMP MAIN_11 ;返回主程序
;===================================================
; 系统用户帮助
; 2002/05/08
;===================================================
FUNC_SYSTEM:
LCALL LCDCLEAR ;LCD清屏
MOV DPTR,#SCRN800 ;获取用户帮助界面首址
LCALL LCDDISPLAY ;LCD字符显示程序
;********************************
;读取键盘扫描码
;********************************
FUNC_SYSTEM01:
LCALL KEY
JB KEYWB,FUNC_SYSTEM04
LJMP FUNC_SYSTEM01
FUNC_SYSTEM04:
CJNE A,#KCODE_CNCL,FUNC_SYSTEM05
LJMP MAIN_11 ;返回主程序
FUNC_SYSTEM05:
CJNE A,#KCODE_1,FUNC_SYSTEM07
;********************************
;显示用户帮助界面1
;********************************
LCALL LCDCLEAR ;LCD清屏
MOV DPTR,#SCRN820 ;获取用户帮助界面1首址
LCALL LCDDISPLAY ;LCD字符显示程序
LJMP FUNC_SYSTEM01
FUNC_SYSTEM07:
CJNE A,#KCODE_2,FUNC_SYSTEM08
;********************************
;显示用户帮助界面2
;********************************
LCALL LCDCLEAR ;LCD清屏
MOV DPTR,#SCRN830 ;获取用户帮助界面2首址
LCALL LCDDISPLAY ;LCD字符显示程序
LJMP FUNC_SYSTEM01
FUNC_SYSTEM08:
CJNE A,#KCODE_3,CARD_EEPROM
;********************************
;显示数据拷贝界面
;********************************
LCALL LCDCLEAR ;LCD清屏
MOV DPTR,#SCRN890 ;获取数据拷贝界面首址
LCALL LCDDISPLAY ;LCD字符显示程序
COPY_K:
LCALL KEY
JB KEYWB,COPY_K1
LJMP COPY_K
COPY_K1:
CJNE A,#KCODE_CNCL,COPY_K2
LJMP MAIN_11 ;返回主程序
COPY_K2:
CJNE A,#KCODE_ENTR,COPY_K
CLR TR0
MOV R2,#128
MOV R3,#00H
COPY_1:
MOV A,#PCDATAL
ADD A,R3
MOV SPIPGL,A
MOV A,#PCDATAH
ADDC A,#00H
MOV SPIPGH,A
MOV SPIADR,#0
MOV SPINBYT,#110
LCALL AT45D04RDNBYT ;SPI存储器读
MOV A,#PCDATAL
ADD A,R3
MOV SPIPGL,A
MOV A,#PCDATAH
ADDC A,#00H
MOV SPIPGH,A
MOV SPIADR,#0
MOV SPINBYT,#110
LCALL AT45D04CARDWRNBYT;SPI存储卡写
LCALL SPIRDYCHK
INC R3
DJNZ R2,COPY_1
SETB TR0
LJMP FUNC_SYSTEM
CARD_EEPROM:
CJNE A,#KCODE_4,FUNC_SYSTEMM
;********************************
;显示数据拷贝界面
;********************************
LCALL LCDCLEAR ;LCD清屏
MOV DPTR,#SCRN890 ;获取数据拷贝界面首址
LCALL LCDDISPLAY ;LCD字符显示程序
CARD_EEPROMK:
LCALL KEY
JB KEYWB,CARD_EEPROMK1
LJMP CARD_EEPROMK
CARD_EEPROMK1:
CJNE A,#KCODE_CNCL,CARD_EEPROMK2
LJMP MAIN_11 ;返回主程序
CARD_EEPROMK2:
CJNE A,#KCODE_ENTR,CARD_EEPROMK
CLR TR0
MOV R2,#128
MOV R3,#00H
CARD_EEPROM1:
MOV A,#PCDATAL
ADD A,R3
MOV SPIPGL,A
MOV A,#PCDATAH
ADDC A,#00H
MOV SPIPGH,A
MOV SPIADR,#0
MOV SPINBYT,#110
LCALL AT45D04CARDRDNBYT;SPI存储卡写
MOV A,#PCDATAL
ADD A,R3
MOV SPIPGL,A
MOV A,#PCDATAH
ADDC A,#00H
MOV SPIPGH,A
MOV SPIADR,#0
MOV SPINBYT,#110
LCALL AT45D04WRNBYT ;SPI存储器读
LCALL SPIRDYCHK
INC R3
DJNZ R2,CARD_EEPROM1
SETB TR0
LJMP FUNC_SYSTEM
FUNC_SYSTEMM:
; LCALL VER_ID
LJMP FUNC_SYSTEM
$Include(swclib.asm)
;===================================================
; LIBRARY.ASM
; 采集系统所需的通用子程序
; 2002/05/03
;===================================================
$Include(Library.asm)
;===================================================
; LCD中英文字符编码表
; 2001/12/15
;===================================================
$Include(Chrbmap.asm)
$Include(IAP.asm)
;===================================================
; 日历修改功能(此段程序暂时不用)
; 2002/3/5
;===================================================
;***************************************
;初始化显示缓冲区
;***************************************
DATEFILL:
MOV R0,#0D0H ;CPU内部RAM地址
MOV DPTR,#DATEFILLBUF ;填充数据地址
MOV R7,#34
DATEFILL_1:
CLR A
MOVC A,@A+DPTR
MOV @R0,A
INC R0
INC DPTR
DJNZ R7,DATEFILL_1
RET
DATEFILLBUF: ;填充数据区
DB 010H,003H,03FH
DB 010H,004H,03FH
DB 010H,007H,03FH
DB 010H,008H,03FH
DB 010H,00BH,03FH
DB 010H,00CH,03FH
DB 032H,005H,125 ;?
DB 012H,007H,03FH
DB 012H,008H,03FH
DB 012H,00AH,03FH
DB 012H,00BH,03FH
DB 0FFH ;显示数据结束
;***************************************
;初始化显示缓冲区
;***************************************
DATEMODY:
LCALL DATEFILL ;日历修改数据填充
MOV R0,#0D0H ;获取时钟修改界面首址
LCALL LCDDISPLAYRAM ;LCD字符显示程序
SJMP $
;============================================
;判断采集次数
;2002/3/9
;============================================
GLOGSEQ:
MOV R0,#(I2CDBUF+2) ;小时值
MOV A,@R0
CLR C
SUBB A,#LOGTME3 ;判断是否为第四次采集
JB CY,GLOGSEQ_1 ;<指定采集时间
MOV LOGSEQ,#3 ;设为指定采集次序
RET
GLOGSEQ_1:
MOV A,@R0
CLR C
SUBB A,#LOGTME2 ;判断是否为第三次采集
JB CY,GLOGSEQ_2 ;<指定采集时间
MOV LOGSEQ,#2 ;设为指定采集次序
RET
GLOGSEQ_2:
MOV A,@R0
CLR C
SUBB A,#LOGTME1 ;判断是否为第二次采集
JB CY,GLOGSEQ_3 ;<指定采集时间
MOV LOGSEQ,#1 ;设为指定采集次序
RET
GLOGSEQ_3:
MOV LOGSEQ,#0 ;其他时间设为第一次采集
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -