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

📄 cjy20.asm

📁 便携式压力传感器
💻 ASM
📖 第 1 页 / 共 3 页
字号:
	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 + -