📄 cjy20.asm
字号:
; 井场综合数据采集仪 CJY20.ASM
; 2002/05/15
$Include(resource.asm)
$Include(chrcode.asm)
;********************************
; 主程序
;********************************
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP INTT0
ORG 0028H
DB 00H,00H,00H,00H,00H,01H
ORG 0030H
MAIN:
;********************************
;系统参数初始化设置
;********************************
MOV SP,#58H
MOV AUXR,#00H ;EXTRAM=0使用内部ERAM
MOV WELLNUM,#00H ;复位后,每次从第一口井开始
;********************************
;系统控制初始化
;********************************
CLR LCDBKLT ;关闭背光
LCALL LCDCLEAR ;LCD清屏
SETB LCDBKLT ;打开背光
;********************************
;显示公司标识
;********************************
MOV DPTR,#SCRN100 ;获取首址
LCALL LCDDISPSCRN ;调用LCD全屏点阵显示程序
LCALL DELAY ;延时
;********************************
;开机音
;********************************
LCALL BUZZ200 ;蜂鸣器=200HZ
LCALL BUZZ300 ;蜂鸣器=300HZ
LCALL BUZZ400 ;蜂鸣器=400HZ
LCALL BUZZ500 ;蜂鸣器=500HZ
LCALL BUZZ600 ;蜂鸣器=600HZ
LCALL BUZZ700 ;蜂鸣器=700HZ
LCALL BUZZ800 ;蜂鸣器=800HZ
;********************************
;欢迎使用
;********************************
; LCALL LCDCLEAR ;LCD清屏
; MOV DPTR,#SCRN7104A ;获取欢迎使用界面首址
; LCALL LCDDISPLAY ;LCD字符显示程序
;LOOP1:LJMP LOOP1
LCALL LCDCLEAR ;LCD清屏
MOV DPTR,#SCRN200 ;获取欢迎使用界面首址
LCALL LCDDISPLAY ;LCD字符显示程序
LCALL DELAY ;延时
LCALL DELAY ;延时
;********************************
;SPI总线ATMEL DATAFLASH存取测试
;********************************
;********************************
;定时器0配置
;********************************
MOV TMOD,#01H
MOV TL0,#0B0H
MOV TH0,#3CH
SETB EA
SETB ET0
SETB TR0
MAIN_11:
;********************************
;显示仪器时钟界面
;********************************
LCALL LCDCLEAR ;LCD清屏
MOV DPTR,#SCRN420 ;获取时钟界面首址
LCALL LCDDISPLAY ;LCD字符显示程序
MAIN_1:
;软启动控制
CLR MRDY ;通知PIC单片机可以关电
;********************************
;检测IC存储卡是否插好
;********************************
JNB ICG,MAIN_4 ;ICG=1,IC卡未插好
;********************************
;确认IC数据卡是否插好
;********************************
MAIN_3:
LCALL LCDCLEAR ;LCD清屏
MOV DPTR,#SCRN300 ;获取确认IC数据卡界面首址
LCALL LCDDISPLAY ;LCD字符显示程序
LCALL DELAY ;延时
JB ICG,MAIN_3 ;ICG=1,IC卡未插好
LJMP MAIN_11
;********************************
;读取并显示时间
;********************************
MAIN_4:
LCALL DS1629RCV ;读取7个字节实时日历时钟数据
LCALL GLOGSEQ ;判断采集次数
LCALL DS1629LDDISP ;对DS1629RTC显示时间,温度进行调整
MOV R0,#RTCBUF
LCALL LCDDISPLAYRAM
MOV LCDXPG,#24H
MOV LCDCOL,#64
MOV A,LOGSEQ
ADD A,#1
MOV LCDCHR,A ;显示采集顺序号
MOV DPTR,#ASCSONGBMAP ;确定字符字模块首地址
LCALL LCDCHNASCWR ;调用LCD中文ASC写程序
MOV LCDXPG,#24H ;第4页
MOV LCDCOL,#56 ;第48列
MOV LCDCHR,#3FH ;代码"-"=0DH
MOV DPTR,#ASCFIXEDBMAP ;确定字符字模块首地址
LCALL LCDCHNASCWR ;调用LCD中文ASC写程序
MOV LCDXPG,#24H ;第4页
MOV LCDCOL,#72 ;第72列
MOV LCDCHR,#3FH ;代码"-"=0DH
MOV DPTR,#ASCFIXEDBMAP ;确定字符字模块首地址
LCALL LCDCHNASCWR ;调用LCD中文ASC写程序
;********************************
;读取并显示温度值
;********************************
LCALL LM74GDATA ;读数据寄存器中的温度转换值(两字节)
;********************************
;读取A/D转换值
;********************************
;LCALL ADCGAIN32 ;GAIN=32
;********************************
;读取键盘扫描码
;********************************
LCALL KEY
JB KEYWB,MAIN_2
LJMP MAIN_1
MAIN_2:
LCALL BUZZ500 ;蜂鸣器=500HZ
;程序转至对应的功能处理子程序
MOV A,KEYCD0
XRL A,#KCODE_SYS ;[系统]键按下
JZ JUMP_FUNC_SYSTEM
MOV A,KEYCD0
XRL A,#KCODE_TIME ;[时间]键按下
JZ JUMP_FUNC_TIME
MOV A,KEYCD0
XRL A,#KCODE_WELL ;[井号]键按下
JZ JUMP_FUNC_WELL
MOV A,KEYCD0
XRL A,#KCODE_PRES ;[压力]键按下
JZ JUMP_FUNC_PRES
MOV A,KEYCD0
XRL A,#KCODE_CURR ;[电流]键按下
JZ JUMP_FUNC_CURR
MOV A,KEYCD0
XRL A,#KCODE_BROW ;[浏览]键按下
JZ JUMP_FUNC_BROW
LJMP MAIN_1
;===================================================
; 键盘功能跳转
; 2002/05/08
;===================================================
JUMP_FUNC_SYSTEM:
CLR MRDY ;允许PIC单片机关电
LJMP FUNC_SYSTEM
JUMP_FUNC_TIME:
SETB MRDY ;通知PIC单片机不允许关电
LJMP FUNC_TIME
JUMP_FUNC_WELL:
SETB MRDY ;通知PIC单片机不允许关电
LJMP FUNC_WELL
JUMP_FUNC_PRES:
SETB MRDY ;通知PIC单片机不允许关电
LJMP FUNC_PRES
JUMP_FUNC_CURR:
LJMP FUNC_CURR
JUMP_FUNC_BROW:
CLR MRDY ;允许PIC单片机关电
LJMP FUNC_BROW
INTT0:PUSH ACC
PUSH PSW
MOV TL0,#0B0H
MOV TH0,#3CH
INC MSCOUNT
MOV A,MSCOUNT
CJNE A,#20,T01
MOV MSCOUNT,#00
INC TCOUNT
MOV A,TCOUNT
CJNE A,#20,T02
CLR LCDBKLT
T01: POP PSW
POP ACC
RETI
T02: CJNE A,#120,T01
CLR MRDY
CLR MDOWN
MOV TCOUNT,#00H
LJMP T01
;===================================================
; 数据浏览处理程序
; 2002/4/20
;===================================================
FUNC_BROW:
LCALL LCDCLEAR ;LCD清屏
MOV DPTR,#SCRN7210 ;获取数据浏览显示界面首址
LCALL LCDDISPLAY ;LCD字符显示程序
;********************************
;读取键盘扫描码
;********************************
BROW_1:
LCALL KEY
JB KEYWB,BROW_2
LJMP BROW_1
BROW_2:
LCALL BUZZ500 ;蜂鸣器=500HZ
CJNE A,#KCODE_CNCL,BROW_3
LCALL DELAY
LJMP MAIN_11
BROW_3:
CJNE A,#KCODE_1,BROW_4
SETB DATA_DISPB
LCALL BROW_DATA
LJMP FUNC_BROW
BROW_4:
CJNE A,#KCODE_2,BROW_1
CLR DATA_DISPB
LCALL BROW_DATA
LJMP FUNC_BROW
BROW_DATA:
LCALL LCDCLEAR ;LCD清屏
MOV DPTR,#SCRN7200 ;获取数据浏览显示界面首址
LCALL LCDDISPLAY ;LCD字符显示程序
MOV WELLMING,#30H ;中文井名显示
MOV LIE,#0H
LCALL WELLM
BROW_DATA_1:
;读采集时间、工号、温度、压力和电流等128字节数据
MOV SPIADR,#0
MOV SPINBYT,#110
LCALL RAM_ADD
JNB DATA_DISPB,BROW_DATA2
LCALL AT45D04CARDRDNBYT;AT45D04存储卡读
LJMP BROW_DATA3
RAM_ADD:
MOV A,WELLNUM
RL A
RL A
ADD A,LOGSEQ
ADD A,#PCDATAL
MOV SPIPGL,A
MOV A,#PCDATAH
ADDC A,#00H
MOV SPIPGH,A
RET
BROW_DATA2:
LCALL AT45D04RDNBYT ;SPI存储器读
BROW_DATA3:
MOV WELLMING,#22H ;采集顺序数显示
MOV LIE,#28H
MOV LCDXPG,WELLMING
MOV LCDCOL,LIE
MOV A,LOGSEQ
ADD A,#1
MOV LCDCHR,A ;显示采集顺序号
MOV DPTR,#ASCSONGBMAP ;确定字符字模块首地址
LCALL LCDCHNASCWR ;调用LCD中文ASC写程序
;温度值显示
MOV WELLMING,#22H
MOV LIE,#58H
MOV R0,#(SPIDBUF+8) ;温度值地址
MOV A,@R0
CJNE A,#0FFH,FUNC_BROWW_1
LJMP FUNC_BROWY_RET
FUNC_BROWW_1:
CJNE A,#01H,FUNC_BROWW_2
MOV A,WELLMING
ANL A,#0FH
ORL A,#10H
MOV LCDXPG,A
MOV LCDCOL,LIE
MOV LCDCHR,#3FH ;温度符号位
MOV DPTR,#ASCFIXEDBMAP ;确定字符字模块首地址
LCALL LCDCHNASCWR ;调用LCD西文ASC写程序
LJMP FUNC_BROWW_3
FUNC_BROWW_2:
MOV LCDXPG,WELLMING
MOV LCDCOL,LIE
MOV LCDCHR,#3FH ;温度符号位
MOV DPTR,#ASCSONGBMAP ;确定字符字模块首地址
LCALL LCDCHNASCWR ;调用LCD西文ASC写程序
FUNC_BROWW_3:
MOV LCDXPG,WELLMING
MOV A,#08H
ADD A,LIE
MOV LCDCOL,A
MOV R0,#(SPIDBUF+9) ;温度值地址
MOV A,@R0
SWAP A
ANL A,#0FH
MOV LCDCHR,A ;温度十位值
MOV DPTR,#ASCSONGBMAP ;确定字符字模块首地址
LCALL LCDCHNASCWR ;调用LCD西文ASC写程序
MOV LCDXPG,WELLMING
MOV A,#10H
ADD A,LIE
MOV LCDCOL,A
MOV R0,#(SPIDBUF+9) ;温度值地址+1
MOV A,@R0
ANL A,#0FH
MOV LCDCHR,A ;温度十位值
MOV DPTR,#ASCSONGBMAP ;确定字符字模块首地址
LCALL LCDCHNASCWR ;调用LCD西文ASC写程序
FUNC_BROWW_RET:
;井压力值显示
;用ASC FIXEDSYS字符向LCD输出10进制AD转换值
MOV R0,#(SPIDBUF+10) ;温度值地址
; MOV A,@R0
; CJNE A,#0FFH,FUNC_BROWY_1
; LJMP FUNC_BROWY_RET
FUNC_BROWY_1:
MOV R0,#(SPIDBUF+10) ;值地址
MOV A,@R0
MOV R2,A ;16进制到10进制双字节转换
INC R0
MOV A,@R0
MOV R3,A ;16进制到10进制双字节转换
MOV R7,#16
MOV WELLMING,#24H
MOV LIE,#30H
LCALL PALI_DISP
FUNC_BROWY_RET:
;电流
MOV R5,#47
MOV R0,#(SPIDBUF+12) ;值地址
MOV A,@R0
CJNE A,#0FFH,FUNC_BROWC_1
LJMP FUNC_BROWC_RET
FUNC_BROWC_1:
INC R0
MOV MINH,A
MOV MAXH,A
MOV A,@R0
INC R0
MOV MINL,A
MOV MAXL,A
MAX_B:
SETB C
MOV A,@R0
INC R0
MOV B,A
MOV A,@R0
SUBB A,MAXL
MOV A,B
SUBB A,MAXH
JC MAXRET
MOV A,@R0
MOV MAXL,A
MOV MAXH,B
MAXRET:
CLR C
MOV A,@R0
SUBB A,MINL
MOV A,B
SUBB A,MINH
JNC MINRET
MOV A,@R0
MOV MINL,A
MOV MINH,B
MINRET:
INC R0
DJNZ R5,MAX_B
MOV R2,MINH ;最小电流值处理与显示
MOV R3,MINL
MOV R7,#16
MOV WELLMING,#26H
MOV LIE,#20H
LCALL PA_DISP
MOV R2,MAXH ;最大电流值处理与显示
MOV R3,MAXL
MOV R7,#16
MOV WELLMING,#26H
MOV LIE,#50H
LCALL PA_DISP
FUNC_BROWC_RET:
;********************************
;读取键盘扫描码
;********************************
FUNC_BROW_2:
LCALL KEY
JB KEYWB,FUNC_BROW_3
LJMP FUNC_BROW_2
FUNC_BROW_3:
LCALL BUZZ500 ;蜂鸣器=500HZ
CJNE A,#KCODE_CNCL,FUNC_BROW_ENTR
LCALL DELAY
RET
FUNC_BROW_ENTR:
; CJNE A,#KCODE_ENTR,FUNC_BROW_UP
; LCALL DELAY
; LJMP BROW_DATA_1
FUNC_BROW_UP:
CJNE A,#KCODE_UP,FUNC_BROW_DOWN ;加1
MOV A,LOGSEQ
CJNE A,#3,FUNC_BROW_UP1
MOV LOGSEQ,#0
LJMP BROW_DATA
FUNC_BROW_UP1:
INC LOGSEQ
LJMP BROW_DATA
FUNC_BROW_DOWN:
CJNE A,#KCODE_DOWN,FUNC_BROW_4 ;减1
MOV A,LOGSEQ
CJNE A,#0,FUNC_BROW_DOWN1
MOV LOGSEQ,#3
LJMP BROW_DATA
FUNC_BROW_DOWN1:
DEC LOGSEQ
LJMP BROW_DATA
FUNC_BROW_4:
CJNE A,#KCODE_CURR,FUNC_BROW_5
LCALL CURR_BROW
LJMP BROW_DATA
FUNC_BROW_5:
LJMP FUNC_BROW_2
CURR_BROW:
LCALL LCDCLEAR ;LCD清屏
MOV DPTR,#SCRN7250 ;获取电流浏览界面首址
LCALL LCDDISPLAY ;LCD字符显示程序
MOV WELLMING,#30H ;中文井名显示
MOV LIE,#0H
LCALL WELLM
MOV WELLMING,#22H ;采集顺序数显示
MOV LIE,#28H
MOV LCDXPG,WELLMING
MOV LCDCOL,LIE
MOV A,LOGSEQ
ADD A,#1
MOV LCDCHR,A ;显示采集顺序号
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -