⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cjy20.asm

📁 便携式压力传感器
💻 ASM
📖 第 1 页 / 共 3 页
字号:
	; 井场综合数据采集仪 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 + -