📄 cjy20.asm
字号:
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 + -