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

📄 cjy20.asm

📁 便携式压力传感器
💻 ASM
📖 第 1 页 / 共 3 页
字号:

	MOV     DPTR,#ASCSONGBMAP       ;确定字符字模块首地址
	LCALL   LCDCHNASCWR             ;调用LCD中文ASC写程序

	MOV     BROW_CONUT,#00H
CURR_BROW_1:
	MOV     WELLMING,#24H
	MOV     LIE,#30H

	MOV     A,BROW_CONUT
	LCALL   H_BCD
	MOV     R0,#(SPIDBUF+12)     ;电流数据起始地址 
	MOV     A,BROW_CONUT
	RL      A
	ADD     A,R0
	MOV     R0,A
	MOV     A,@R0
	MOV     R2,A                    ;16进制到10进制双字节转换
	INC     R0
	MOV     A,@R0
	MOV     R3,A
	MOV     R7,#16

	MOV     WELLMING,#26H
	MOV     LIE,#30H
	LCALL   PA_DISP

	;********************************
	;读取键盘扫描码
	;********************************
	LCALL   KEY
	JB      KEYWB,CURR_BROW_2
	LJMP    CURR_BROW_1

CURR_BROW_2:
	LCALL   BUZZ500                 ;蜂鸣器=500HZ
	CJNE    A,#KCODE_CNCL,CURR_BROW_ENTR
	LCALL   DELAY
	LJMP    CURR_BROW_RET

CURR_BROW_ENTR:
	CJNE    A,#KCODE_ENTR,CURR_BROW_UP
	LCALL   DELAY
	LJMP    CURR_BROW_RET

CURR_BROW_UP:
	CJNE    A,#KCODE_UP,CURR_BROW_DOWN      ;加1
	MOV     A,BROW_CONUT
	CJNE    A,#47,CURR_BROW_UP1
	MOV     BROW_CONUT,#0
	LJMP    CURR_BROW_1
CURR_BROW_UP1:
	INC     BROW_CONUT
	LJMP    CURR_BROW_1

CURR_BROW_DOWN:
	CJNE    A,#KCODE_DOWN,CURR_BROW_4       ;减1
	MOV     A,BROW_CONUT
	CJNE    A,#0,CURR_BROW_DOWN1
	MOV     BROW_CONUT,#47
	LJMP    CURR_BROW_1
CURR_BROW_DOWN1:
	DEC     BROW_CONUT
CURR_BROW_4:
	LJMP    CURR_BROW_1
CURR_BROW_RET:
	RET

H_BCD:
	MOV     B,#100
	DIV     AB
	MOV     R5,A
	MOV     A,B 
	MOV     B,#10
	DIV     AB
	ANL     A,#0FH
	SWAP    A
	ORL     A,B
	MOV     R6,A

	MOV     LCDXPG,WELLMING
	MOV     LCDCOL,LIE                
	MOV     LCDCHR,R5               ;显示百位值
	MOV     DPTR,#ASCSONGBMAP       ;确定字符字模块首地址
	LCALL   LCDCHNASCWR             ;调用LCD中文ASC写程序

	MOV     LCDXPG,WELLMING
	MOV     A,#08H
	ADD     A,LIE
	MOV     LCDCOL,A
	MOV     A,R6
	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     A,R6
	ANL     A,#0FH
	MOV     LCDCHR,A                ;显示个位值
	MOV     DPTR,#ASCSONGBMAP       ;确定字符字模块首地址
	LCALL   LCDCHNASCWR             ;调用LCD中文ASC写程序
	RET     

;===================================================
; 时间设定程序
; 2002/4/20
;===================================================
FUNC_TIME:
	;********************************
	;显示时钟界面
	;********************************
	;AT45D04存储卡操作-读设备时间信息
	MOV     SPIPGH,#0;DATE_TIMWH  ;在830H开始读8个字节
	MOV     SPIPGL,#8
	MOV     SPIADR,#30
	MOV     SPINBYT,#8
	LCALL   AT45D04CARDRDNBYT       ;SPI存储卡读

	MOV     R0,#(SPIDBUF+7)
	MOV     A,@R0
	CJNE    A,#0FFH,FUNC_TIME_0
	LJMP    MAIN_11                 ;不需修改时

FUNC_TIME_0:                          ;要求修改时
	MOV     R0,#SPIDBUF
	MOV     R1,#I2CDBUF
	MOV     R7,#7
FUNC_TIME_1:
	MOV     A,@R0
	MOV     @R1,A
	INC     R0
	INC     R1
	DJNZ    R7,FUNC_TIME_1
	
	LCALL   DS1629LDDISP
	MOV     R0,#RTCBUF
	LCALL   LCDDISPLAYRAM

	MOV     R0,#(I2CDBUF+6) ;移动数据
	MOV     R1,#(I2CDBUF+8)
	MOV     R7,#7
FUNC_TIME_2:
	MOV     A,@R0
	MOV     @R1,A
	DEC     R0
	DEC     R1
	DJNZ    R7,FUNC_TIME_2

FUNC_TIME_3:
	;********************************
	;读取键盘扫描码
	;********************************
	LCALL   KEY
	JB      KEYWB,FUNC_TIME_4
	LJMP    FUNC_TIME_3

FUNC_TIME_4:
	LCALL   BUZZ500                 ;蜂鸣器=500HZ

	CJNE    A,#KCODE_CNCL,FUNC_TIME_5
	LJMP    MAIN_11                 ;按下[取消]键,返回

FUNC_TIME_5:
	CJNE    A,#KCODE_ENTR,FUNC_TIME_3
					        ;按下[确认]键,修改时间
	MOV     R0,#I2CDBUF             ;执行I2C器件写操作
	MOV     @R0,#0C0H               ;=0C0H(ACCESS CLOCK),即RTC存取操作
	INC     R0
	MOV     @R0,#00H                ;器件内部时间寄存器首址
	MOV     SLA,#DS1629
	MOV     I2CNUMBYT,#9            ;连续写9个字节
	LCALL   I2CWRNBYTP

	;AT45D04存储卡操作-写设备时间修改标志
	MOV     R0,#SPIDBUF
	MOV     @R0,#0FFH               ;设置时间修改标志,表明不再需要修改时间
	MOV     SPIPGH,#0
	MOV     SPIPGL,#8
	MOV     SPIADR,#37
	MOV     SPINBYT,#1
	LCALL   AT45D04CARDWRNBYT       ;SPI存储卡读
	LJMP    MAIN_11

;===================================================
; 井号选择处理程序
; 2002/05/08
;===================================================
FUNC_WELL:
	;显示井号选择界面
	LCALL   LCDCLEAR        ;LCD清屏
	MOV     DPTR,#SCRN7100  ;获取选井界面首址
	LCALL   LCDDISPLAY      ;LCD字符显示程序

	LCALL   WELL_NO

	MOV     WELLMING,#34H
	MOV     LIE,#0H
	LCALL   WELLM

	PUSH    WELLNUM         ;当前井号值入栈


	;********************************
	;读取键盘扫描码
	;********************************
FUNC_WELL_1:
	LCALL   KEY
	JB      KEYWB,FUNC_WELL_2
	LJMP    FUNC_WELL_1

FUNC_WELL_2:
	LCALL   BUZZ500                 ;蜂鸣器=500HZ

	CJNE    A,#KCODE_CNCL,FUNC_WELL_ENTR
	POP     WELLNUM                 ;按下[取消]键,WELLNUM不变
	
	MOV     WELLMING,#34H
	MOV     LIE,#0H
	LCALL   WELLM

	LCALL   DELAY
	LJMP    MAIN_11

FUNC_WELL_ENTR:
	CJNE    A,#KCODE_ENTR,FUNC_WELL_21
	POP     ACC                       ;按下[确认]键,WELLNUM为新值
	LCALL   DELAY
	LJMP    MAIN_11

FUNC_WELL_21:
	CJNE    A,#KCODE_UP,FUNC_WELL_22  ;井号加1
	MOV     A,WELLNUM
	CJNE    A,#31,FUNC_WELL_21A
	MOV     WELLNUM,#0
	LJMP    FUNC_WELL_3
FUNC_WELL_21A:
	INC     WELLNUM
	LJMP    FUNC_WELL_3

FUNC_WELL_22:
	CJNE    A,#KCODE_DOWN,FUNC_WELL_1 ;井号减1
	MOV     A,WELLNUM
	CJNE    A,#0,FUNC_WELL_22A
	MOV     WELLNUM,#31
	LJMP    FUNC_WELL_3
FUNC_WELL_22A:
	DEC     WELLNUM

FUNC_WELL_3:
	LCALL   WELL_NO
	
	MOV     WELLMING,#34H           ;显示中文井名
	MOV     LIE,#0H
	LCALL   WELLM

	LJMP    FUNC_WELL_1

WELL_NO:
	MOV     R2,WELLNUM              ;单字节16-10进制转换
	INC     R2                      ;从1开始计数
	MOV     R7,#8
	LCALL   IBTD
	;循环控制变量R7=8时,单字节;
	;            R7=16, 双字节。
	;输入:R2 R3
	;输出:R4 R5 R6
	MOV     WELLMING,#20H
	MOV     LIE,#0CH

	MOV     R0,#SPIDBUF             ;将井号更改为当前值
	MOV     @R0,WELLMING
	INC     R0
	MOV     @R0,LIE
	INC     R0
	MOV     A,R6
	SWAP    A
	ANL     A,#0FH
	MOV     @R0,A           ; 井号十位值
	INC     R0
	
	MOV     @R0,WELLMING
	INC     R0
	INC     LIE
	MOV     @R0,LIE
	INC     R0
	MOV     A,R6
	ANL     A,#0FH
	MOV     @R0,A           ; 井号个位值
	INC     R0
	
	MOV     @R0,#0FFH
	MOV     R0,#SPIDBUF
	LCALL   LCDDISPLAYRAM
	RET

	;********************************
	; LCD字符(井名)显示程序(使用FLASH ROM)
	;********************************
WELLM:
	MOV     DPTR,#(WELLNAMEABL+400H)
	MOV     LCDBYTE1,LIE
	LCALL   LCDDISPLAYWM
	MOV     DPTR,#WELLNAMEABL
	MOV     A,WELLNUM
	MOV     B,#20H
	MUL     AB
	ADD     A,DPL
	MOV     DPL,A
	MOV     A,B
	ADDC    A,DPH
	MOV     DPH,A
	MOV     LIE,LCDBYTE1
	LCALL   LCDDISPLAYWM
	RET
LCDDISPLAYWM:
	CLR     A
	MOVC    A,@A+DPTR
	CJNE    A,#0FFH,LCDDISPLAYWM_0  ;LCD显示是否结束
	RET                             ;是,则返回

LCDDISPLAYWM_0:
	ANL     WELLMING,#0FH
	ORL     A,WELLMING
	MOV     LCDBYTE0,A
	INC     DPTR

	CLR     A
	MOVC    A,@A+DPTR
	MOV     LCDBYTE2,A
	INC     DPTR

	MOV     A,LCDBYTE0
	ANL     A,#07H
	MOV     LCDXPG,A

	MOV     A,LIE
	ANL     A,#0FH
	RL      A                      ;左移3位(即: X8)
	RL      A
	RL      A
	MOV     LCDCOL,A

	MOV     LCDCHR,LCDBYTE2

	MOV     A,LCDBYTE0
	SWAP    A
	ANL     A,#03H
	PUSH    DPH                   ;LCD字符显示缓冲区指针入栈
	PUSH    DPL
	CJNE    A,#0,LCDDISPLAYWM_1
				            ;以下为英文ASCII字符处理程序
	LCALL   LCDASCIIWR            ;向LCD写一个英文ASCII字符
	SJMP    LCDDISPLAYWM_4
	
LCDDISPLAYWM_1:
	CJNE    A,#1,LCDDISPLAYWM_2
				            ;以下为中文ASCFIXED字符处理程序
	MOV     DPTR,#ASCFIXEDBMAP
	LCALL   LCDCHNASCWR           ;向LCD写一个ASCFIXED字符
	SJMP    LCDDISPLAYWM_4

LCDDISPLAYWM_2:
	CJNE    A,#2,LCDDISPLAYWM_3
				            ;以下为中文ASCSONG字符处理程序
	MOV     DPTR,#ASCSONGBMAP
	LCALL   LCDCHNASCWR           ;向LCD写一个ASCSONG字符
	SJMP    LCDDISPLAYWM_4

LCDDISPLAYWM_3:
	;以下为中文字符处理程序
	LCALL   LCDCHNWR              ;向LCD写一个中文字符
	INC     LIE
LCDDISPLAYWM_4:
	INC     LIE
	POP     DPL                   ;LCD字符显示缓冲区指针出栈
	POP     DPH
	SJMP    LCDDISPLAYWM

	;===================================================
	; 压力采集处理程序
	; 2002/05/06
	;===================================================
FUNC_PRES:

	LCALL   LCDCLEAR        ;LCD清屏
	MOV     DPTR,#SCRN7105  ;显示压力采集文本界面
	LCALL   LCDDISPLAY      ;LCD字符显示程序

FUNC_TXTPRES_1:
	MOV     WELLMING,#30H
	MOV     LIE,#0H
	LCALL   WELLM

	LCALL   PGAIN32         ;GAIN=32 AD采集
	LCALL   BUZZ800

	MOV     R2,ADCVAL1      ;16进制到10进制双字节转换
	MOV     R3,ADCVAL0
	MOV     R7,#16

	MOV     WELLMING,#26H
	MOV     LIE,#38H
	LCALL   PALI_DISP

	;********************************
	;读取键盘扫描码
	;********************************
	LCALL   KEY
	JB      KEYWB,FUNC_GPHPRES_1
	LJMP    FUNC_TXTPRES_1

FUNC_GPHPRES_1:
	CJNE    A,#KCODE_CNCL,FUNC_GPHPRES_1A
	LJMP    MAIN_11          ;返回主程序
FUNC_GPHPRES_1A:
	CJNE    A,#KCODE_DOWN,FUNC_TXTPRES_1
				;按下[向下]键,进入图形显示状态
FUNC_GPHPRES_2:
	LCALL   LCDCLEAR        ;LCD清屏
	MOV     DPTR,#SCRN7106  ;显示压力采集图形界面
	LCALL   LCDDISPLAY      ;LCD字符显示程序

	LCALL   LCD_WLINE       ;屏幕绘直线
	MOV     LCDHORZ,#0      ;从0列开始显示图形
FUNC_GPHPRES_4:
	LCALL   PGAIN32         ;GAIN=32 AD采集
	MOV     A,LCDHORZ
	MOV     B,#48
	DIV     AB
	CJNE    A,#1,FUNC_GPHPRES_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_GPHPRES_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   PALI_DISP

	;屏幕绘点
	MOV     A,ADCVAL1
	CLR     C
	RLC     A                       ;AD转换值乘以
	CLR     C
	RLC     A
	MOV     B,#54                   ;LCD显示数据的D0为对应屏幕相应页的顶点
	XCH     A,B
	SUBB    A,B
	JNC     FUNC_GPHPRES_4B
	CLR     A
FUNC_GPHPRES_4B:
	SETB    ACC.7                   ;设置绘点标志
	MOV     LCDLNE,A                ;行地址设置
	MOV     LCDCOL,LCDHORZ          ;列地址设置
	LCALL   LCD_WDOT                ;调用绘点程序

	;********************************
	;读取键盘扫描码
	;********************************
	LCALL   KEY
	JB      KEYWB,FUNC_GPHPRES_5
	LJMP    FUNC_GPHPRES_8
FUNC_GPHPRES_5:
	CJNE    A,#KCODE_CNCL,FUNC_GPHPRES_6
	LJMP    MAIN_11          ;返回主程序

FUNC_GPHPRES_6:
	CJNE    A,#KCODE_DOWN,FUNC_GPHPRES_8
	LJMP    FUNC_PRES        ;按下[向下]键,进入文本显示状态
JUMP_FUNC_GPHPRES_4:
	LJMP    FUNC_GPHPRES_4
FUNC_GPHPRES_8:
	INC     LCDHORZ
	MOV     A,LCDHORZ
	CJNE    A,#80H,JUMP_FUNC_GPHPRES_4

	LCALL   LCDCLEAR        ;LCD清屏
	MOV     DPTR,#SCRN7104A ;获取显示缓冲区首址-是否确认采集?
	LCALL   LCDDISPLAY      ;LCD字符显示程序
	LCALL   DELAY           ;延时

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -