📄 核终.asm
字号:
LCALL BCD_P2
MOV QUALITY_H,7EH
MOV QUALITY_M,DPH
MOV QUALITY_L,DPL ;键入质量值的压缩BCD码
;或存在RAM6264中
ORL P1,#0FFH
ANL P1,#3FH
MOV DPTR,#0502H ;外部 RAM 地址,存"质量"
LCALL RAM_ADR
MOV A,QUALITY_H ;存质量
MOVX @DPTR,A
INC DPTR
MOV A,QUALITY_M
MOVX @DPTR,A
INC DPTR
MOV A,QUALITY_L
MOVX @DPTR,A
;*********************************
MOV A,QUALITY_H ;存参与计算的质量 0509H
ANL A,#0FH
JZ END_WEIGHT
ENDWT:
CLR C
MOV A,QUALITY_L
ANL A,#0FH
SUBB A,#5
JNC ENDWT1
;*****************
MOV A,QUALITY_L
ANL A,#0F0H
SWAP A
MOV QUALITY_L,A
MOV A,QUALITY_M
ANL A,#0FH
SWAP A
ADD A,QUALITY_L
MOV QUALITY_L,A
MOV A,QUALITY_M
ANL A,#0F0H
ADD A,QUALITY_H
SWAP A
MOV QUALITY_M,A
LJMP END_WEIGHT
ENDWT1: ; 作最低位的四舍五入处理
MOV A,QUALITY_L
ANL A,#0F0H
SWAP A
MOV QUALITY_L,A
MOV A,QUALITY_M
ANL A,#0FH
SWAP A
ADD A,QUALITY_L
MOV QUALITY_L,A
MOV A,QUALITY_M
ANL A,#0F0H
ADD A,QUALITY_H
SWAP A
MOV QUALITY_M,A
MOV A,QUALITY_L
MOV PBCD_L,A
MOV A,QUALITY_M
MOV PBCD_H,A
LCALL PBCD_BINARY
CLR C ; 加 1 处理
MOV A,BINARY_L
ADDC A,#1
MOV BINARY_L,A
MOV A,BINARY_H
ADDC A,#0
MOV BINARY_H,A
LJMP END_WEI
;*****************************
END_WEIGHT:
MOV A,QUALITY_L
MOV PBCD_L,A
MOV A,QUALITY_M
MOV PBCD_H,A
LCALL PBCD_BINARY
END_WEI:
ORL P1,#0FFH
ANL P1,#3FH
MOV DPTR,#0509H ;外部 RAM 地址,存"质量"
LCALL RAM_ADR
MOV A,BINARY_H ;存质量
MOVX @DPTR,A
INC DPTR
MOV A,BINARY_L
MOVX @DPTR,A
ORL P1,#0FFH
LCALL LCD_MINGL
MOV RAM_CUL,#01H
LJMP MAIN
;***********************************************
CHANGE: NOP ;修正值
LCALL CLR_LCDDAT
MOV LCDSTATE,#0FH
LCALL LCD_PLEASE ;LCD 状态栏显示"修正值"字样
MOV LCD_BUFFER,#11H
MOV LCD_BUFFER+1,#0EH
MOV LCD_BUFFER+2,#10H
MOV LCD_BUFFER+3,#10H
MOV LCD_BUFFER+4,#10H
MOV O_X,#0D5H
MOV O_Y,#01H
LCALL WRI_DATA ;;LCD 状态栏显示"数据 1.000"
LCALL H7A
;MOV R1,#7EH
CHANGE1: JB H7279_KEY,$ ;有键按下?(H7279_KEY=0)
LCALL GETKEY
JB ACC.4,COMMANDG
MOV 7EH,7DH
MOV 7DH,7CH
MOV 7CH,7BH
MOV 7BH,A
MOV A,#10H
ADD A,7EH ;转换成 LCD 显示码
MOV LCD_BUFFER,A
MOV A,#10H
ADD A,7DH
MOV LCD_BUFFER+2,A
MOV LCD_BUFFER+1,#0EH
MOV A,#10H
ADD A,7CH
MOV LCD_BUFFER+3,A
MOV A,#10H
ADD A,7BH
MOV LCD_BUFFER+4,A
MOV O_X,#0D5H
MOV O_Y,#01H
LCALL WRI_DATA ;;LCD 状态栏显示"数据"
AJMP CHANGE1
COMMANDG: CJNE A,#18H,CHANGE1 ;是"确认"键"吗? N 转
MOV R0,#7BH
LCALL BCD_P2
MOV PBCD_H,DPH
MOV PBCD_L,DPL
LCALL PBCD_BINARY ;把键入的修正值转换成十进制
MOV MODIFY_H,PBCD_H
MOV MODIFY_L,PBCD_L ; MODIFY = 十进制的修正值
;或存在RAM6264中
ORL P1,#0FFH
ANL P1,#3FH
MOV DPTR,#0505H ;外部 RAM 地址,存"修正值"
LCALL RAM_ADR
MOV A,MODIFY_H
MOVX @DPTR,A
INC DPTR
MOV A,MODIFY_L
MOVX @DPTR,A
ORL P1,#0FFH
LCALL LCD_MINGL
MOV RAM_CUL,#01H
LJMP MAIN
;***************************************************;
TIME: NOP ;时间
LCALL CLR_LCDDAT
MOV LCDSTATE,#07H
LCALL LCD_PLEASE ;LCD 状态栏显示"时间"字样
MOV LCD_BUFFER,#10H
MOV O_X,#0D5H
MOV O_Y,#01H
LCALL WRI_DATA ;;LCD 状态栏显示"数据 0"
LCALL H7A
TIME1: JB H7279_KEY,$ ;有键按下?(H7279_KEY=0)
LCALL GETKEY
JB ACC.4,COMMANDT
MOV 7EH,A
MOV A,#10H
ADD A,7EH ;转换成 LCD 显示码
MOV LCD_BUFFER,A
MOV O_X,#0D5H
MOV O_Y,#01H
LCALL WRI_DATA ;;LCD 状态栏显示"数据"
AJMP TIME1
COMMANDT: CJNE A,#18H,TIME1 ;是"确认"键"吗? N 转
MOV O_X,#0F5H
MOV O_Y,#00H
LCALL WRI_DATA ;;LCD "质量"显示"数据 ??"
MOV TIMER,7EH
;或存在RAM6264中
ORL P1,#0FFH
ANL P1,#3FH
MOV DPTR,#0501H ;外部 RAM 地址,存"时间"
LCALL RAM_ADR
MOV A,TIMER
MOVX @DPTR,A
ORL P1,#0FFH
LCALL LCD_MINGL
MOV RAM_CUL,#01H
LJMP MAIN
;*******************************
UPDOWN: NOP
INC NUMBER_HAO
MOV A,NUMBER_HAO
CLR C
SUBB A,NUMBERMAX
JC UPCHECK
MOV NUMBER_HAO,NUMBERMIN
UPCHECK: LCALL LCD_DISP ;显示当前"编号"的数据结果
LCALL LCD_MINGL
MOV RAM_CUL,#01H
LJMP MAIN
;***************
CHECK: LCALL CLR_LCDDAT ;检查
MOV LCDSTATE,#0BH
LCALL LCD_PLEASE ;LCD 状态栏显示"检查"字样
MOV LCD_BUFFER+1,#11H
MOV LCD_BUFFER,#10H
MOV O_X,#0D5H
MOV O_Y,#01H
LCALL WRI_DATA ;;LCD 状态栏显示"数据 00"
LCALL H7A
;MOV R1,#7EH
CHECK2: JB H7279_KEY,$ ;有键按下?(H7279_KEY=0)
LCALL GETKEY
JB ACC.4,COMMANDC
MOV 7EH,7DH
MOV 7DH,A
MOV A,#10H
ADD A,7EH ;转换成 LCD 显示码
MOV LCD_BUFFER,A
MOV A,#10H
ADD A,7DH
MOV LCD_BUFFER+1,A
MOV O_X,#0D5H
MOV O_Y,#01H
LCALL WRI_DATA ;;LCD 状态栏显示"数据"
AJMP CHECK2
COMMANDC: CJNE A,#18H,CHECK1 ;是"确认"键"吗? N 转
MOV R0,#7DH
LCALL BCD_P
MOV NUMBERMAX,A
MOV PBCD_H,#00H
MOV PBCD_L,NUMBERMAX
LCALL PBCD_BINARY ;把当前键入的编号值转换成十进制
MOV NUMBERMAX,PBCD_L ; NUMBERMAX = 十进制的编号值
LCALL LCD_MINGL
MOV RAM_CUL,#01H
LJMP MAIN
CHECK1: CJNE A,#17H,CHECK2
MOV R0,#7DH
LCALL BCD_P
MOV NUMBERMIN,A
MOV PBCD_H,#00H
MOV PBCD_L,NUMBERMIN
LCALL PBCD_BINARY ;把当前键入的编号值转换成十进制
MOV NUMBERMIN,PBCD_L ; NUMBERMIN = 十进制的编号值
LJMP CHECK2
;**********************
ZERO: LCALL CLR_LCDDAT
MOV LCD_BUFFER,#14H
MOV O_X,#0F5H
MOV O_Y,#00H
LCALL WRI_DATA ;;LCD "质量"显示"数据 ??"
MOV TIMER,#4
LCALL LCD_MINGL
MOV RAM_CUL,#01H
LJMP MAIN
;***************************
PICI: NOP ; # 命令键
LCALL LCD_PICI ;显示当前"编号"的批次的数据结果
INC RAM_CUH
INC RAM_CUH
INC RAM_CUL
MOV A,RAM_CUL
CLR C
SUBB A,#09H ; 8次
JC GOONPC
MOV RAM_CUH,#00H
MOV RAM_CUL,#01H
GOONPC:
mov a,#00h
LJMP MAIN
;
;#############################
; INT1 中断时,采样.CAI_SHU_D记录采样次数(MAX=200)
; 根据timer的值延时一段时间后再测,并显示.在这一段时间里
; 检测10次,取平均值显示,并存(批次)档.
WORKING:
CLR EA
MOV RAM_CUH,#00H ;批次次数
MOV CAI_SHU_D,#00H ;采样点初值
MOV R6,#0AH ; 在TIMER时间段里采样10次平均
LCALL N2
mov r4,a
LCALL D100MS
SETB EX1 ;允许 INT1 中断
SETB EA ; INT0
WORKLOOP:
JB H7279_KEY,NEXT_WORK
LCALL GETKEY1
JNB KEY_ZERO,ENDWORK ; 有"清零"键?
JNB KEY_OK,ENDWORK ; 有"确定"键?
NEXT_WORK:
JB P3.3,WORKLOOP
LCALL N2
mov r4,a
LCALL D100MS
LCALL ADDSHUJU ; 计算面积,累计十次采样值
MOV CAI_SHU_D,#00H ;采样点初值
DJNZ R6,WORKLOOP
CLR EA
;** 调计算含油率程序
LCALL JIEGOU
MOV A,RAM_CUH
CLR C
SUBB A,#08H
JNC SAVEPC
MOV RAM_CUH,#00H ;存批次次数 8
SAVEPC:
lcall savehyl
LJMP WORKLOOP
ENDWORK: clr ea
SETB KEY_OK
SETB KEY_ZERO
LJMP MAIN
;***********
; 2 的 N-1 次方子程序 (N=1--9)
;
N2: SETB C
CLR A
MOV R4,TIMER
NLP1: RLC A
DJNZ R4,NLP1
RET
D100MS: MOV R7,#194
D100MS1: MOV R5,#0FFH
DJNZ R5,$
DJNZ R7,D100MS1
DJNZ R4,D100MS
RET
;***************************
AD_INT1: CLR EA
LCALL AD574
MOV A,CAI_SHU_D
INC A
MOV CAI_SHU_D,A
CLR C
SUBB A,#200
JNC ENDADINT
JNB P3.3,AD_INT1
ENDADINT: JNB P3.3,$
RETI
;**
;***************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -