📄 pronew.asm
字号:
MOVC A,@A+DPTR
MOV DPTR,#8000H
MOVX @DPTR,A
INC R2
DJNZ R0,QS0
MOV R0,#00H
MOV R2,#00H
QS1: MOV A,R2
MOV DPTR,#SCRTAB1
MOVC A,@A+DPTR
MOV DPTR,#8000H
MOVX @DPTR,A
INC R2
DJNZ R0,QS1
MOV R0,#00H
MOV R2,#00H
QS2: MOV A,R2
MOV DPTR,#SCRTAB2
MOVC A,@A+DPTR
MOV DPTR,#8000H
MOVX @DPTR,A
INC R2
DJNZ R0,QS2
MOV R0,#00H
MOV R2,#00H
QS3: MOV A,R2
MOV DPTR,#SCRTAB3
MOVC A,@A+DPTR
MOV DPTR,#8000H
MOVX @DPTR,A
INC R2
DJNZ R0,QS3
MOV DPTR,#8001H ;××××前几段一样,注意观察
MOV A,#0B2H
MOVX @DPTR,A
LCALL DY
LCALL CDSET ;LCD初始化
MOV R2,#92H ;进度条地址
MOV R3,#02H
MOV R4,#24H
LCALL CDCM1 ;地址(41*2)
MOV R5,#0CH ;显示12个方块
AAA: ACALL DMOV
LCALL DEL
DJNZ R5,AAA
RET
;---------------------------------------------
DY: MOV R7,#01H
DY1: MOV R2,#0FH
DY11: DJNZ R2,DY11
DJNZ R7,DY1
RET
;-----------------------------------------------------
DMOV: CLR C ;方块动画显示
MOV A,R2
PUSH ACC
MOV A,R3
PUSH ACC
MOV R4,#24H
LCALL CDCM1 ;起始地址
MOV DPTR,#DOT
MOV R6,#08H ;8行8次循环
XSDLP1: LCALL XSDCN ;送出一个数据
MOV B,#10H ;???
LCALL HADRX ;显示坐标
DJNZ R6,XSDLP1 ;发送完一组
POP ACC
MOV R3,A
POP ACC
MOV R2,A
MOV B,#01H
LCALL HADRX ;计算显示首址
RET
;-----------------------------------------------------;延时
DEL: MOV A,R0
PUSH ACC
MOV A,R1
PUSH ACC
MOV A,R2
PUSH ACC
MOV R0,#09H
D1: MOV R1,#0FH
D2: MOV R2,#00H
D3: DJNZ R2,D3
DJNZ R1,D2
DJNZ R0,D1
POP ACC
MOV R2,A
POP ACC
MOV R1,A
POP ACC
MOV R0,A
RET
;---------------------------------------------------------程序界面设置
SCRSET: ACALL SCRBLOCK ;显示上方的黑色区域
MOV DPTR,#TOP1 ;取字码表
LCALL HZXSR ;送显
MOV DPTR,#SHOW1
LCALL HZXSR
MOV DPTR,#DOWN1 ;上限
LCALL HZXSR
MOV DPTR,#DOWN2 ;下限
LCALL HZXSR
MOV DPTR,#LINE ;画竖线
LCALL HZXSR
LCALL SHOWLINE ;画横线
MOV R2,#05H
MOV R3,#03H
MOV R4,#24H
ACALL CDCM1 ;置地址指针位置[显示缓冲区RAM 0000H]
MOV A,51H
ADD A,#30H
LCALL XSASC
MOV A,50H
ADD A,#30H
LCALL XSASC
MOV R2,#0DH
MOV R3,#03H
MOV R4,#24H
ACALL CDCM1 ;置地址指针位置[显示缓冲区RAM 0000H]
MOV A,53H
ADD A,#30H
LCALL XSASC
MOV A,52H
ADD A,#30H
LCALL XSASC
LCALL SHOWLINE
RET
;---------------------------------------------------------显示数字值
SHOWNUM:CLR 0D4H
LCALL ADC ;2E->7E
MOV A,7EH
CJNE A,#01H,SHOWOVER
CLR C
MOV A,51H
SUBB A,7DH ;与上限十位比较51H-7EH
JC SHOWOVER
MOV A,51H
CJNE A,7DH,CONN1
CLR C
MOV A,50H
SUBB A,7CH ;与上限个位比较
JC SHOWOVER
CONN1: CLR C
MOV A,7DH ;与下限十位比较7EH-53H
SUBB A,53H
JC SHOWOVER
MOV A,7DH
CJNE A,53H,GONN3
;AJMP GON2
GON2: CLR C
MOV A,7CH
SUBB A,52H
JC SHOWOVER
GONN3: MOV R2,#87H ;显示湿度
MOV R3,#01H
MOV R4,#24H
ACALL CDCM1 ;置地址指针位置[显示缓冲区RAM 0000H]
;MOV DPTR,#CLTAB
;LCALL HZXSR
MOV A,7DH
ADD A,#30H
LCALL XSASC
MOV A,7CH
ADD A,#30H
LCALL XSASC
MOV DPTR,#HUD ;取字码表
LCALL HZXSR ;送显
AJMP ENDSHOWNUM
SHOWOVER:
MOV DPTR,#OVER ;取字码表
LCALL HZXSR ;送显
;MOV DPTR,#CLTAB
;LCALL HZXSR
ENDSHOWNUM:
;CLR 20H
SETB 0D4H
RET
;---------------------------------------------------------将2e里的东西换到7e里
ADC: MOV R2,#0FH
MOV R0,#2EH
MOV A,@R0
ANL A,#0FH ;百位至7DH
MOV 7DH,A
MOV A,@R0
SWAP A
ANL A,#0FH
;ADD A,#16H
MOV 7EH,A ;千位至7EH
INC R0
MOV A,@R0
ANL A,#0FH
MOV 7BH,A ;个位至7BH
MOV A,@R0
SWAP A
ANL A,#0FH
MOV 7CH,A ;十位至7CH
RET
;---------------------------------------------------------上方的黑块
SCRBLOCK:
PUSH ACC
MOV R2,#00H
MOV R3,#00H
MOV R4,#24H
ACALL CDCM1 ;置地址指针位置[显示缓冲区RAM 0000H]
MOV R4,#0B0H
ACALL CDCM3 ;设置LCD为自动写入状态
MOV R2,#00H
SCRBLOCK1:
ACALL LCDS3 ;连续写过程每次写都要确认STA3=1
MOV A,0FFH
ACALL CDWDT ;将[A]写入LCD数据口
DJNZ R2,SCRBLOCK1
MOV R4,#0B2H
ACALL CDCM3 ;结束自动写状态
POP ACC
RET
;--------------------------------------------------------一条线
SHOWLINE:
PUSH ACC
MOV A,R2
PUSH ACC
MOV A,R3
PUSH ACC
MOV A,R4
PUSH ACC
MOV R2,#10H
MOV R3,#03H
MOV R4,#24H
ACALL CDCM1 ;置地址指针位置[显示缓冲区RAM 49 00]
MOV R4,#0B0H
ACALL CDCM3 ;设置LCD为自动写入状态
MOV R2,#10H
LINE1: ACALL LCDS3 ;连续写过程每次写都要确认STA3=1
MOV A,0FFH
ACALL CDWDT ;将[A]写入LCD状态字=清屏
DJNZ R2,LINE1
MOV R4,#0B2H
ACALL CDCM3 ;结束自动写状态
POP ACC
MOV R4,A
POP ACC
MOV R3,A
POP ACC
MOV R2,A
POP ACC
RET
;--------------------------------------------------------8279初始化
KEYSET: SETB IT1 ;开中断
MOV IE,#84H
CLR 0D4H
MOV 2EH,#00H
MOV 2FH,#00H
MOV DPTR,#0B001H ;命令口
MOV A,#00H ;8*8字符显示,左边输入 外部译码键扫描
MOVX @DPTR,A
MOV A,#32H ;内部时钟,18分频
MOVX @DPTR,A
MOV A,#0DFH ;消除显示
MOVX @DPTR,A
CLR 22H ;设置参数标志位清零
CLR 21H
MOV 40H,#00H
MOV 50H,#05H
MOV 51H,#09H
MOV 52H,#05H
MOV 53H,#00H
RET
;-------------------------------------------------------AD中断子程序
PINT1: PUSH ACC
PUSH DPL
PUSH DPH
PINT2: SETB 0D4H
MOV A,P1
JNB ACC.4,PINT2
JB ACC.0,PEr
JB ACC.2,PL1
SETB 77H
AJMP PL2
PL1: CLR 77H
PL2: JB ACC.3, PL3
SETB 74H
AJMP PL4
PL3: CLR 74H
PL4: MOV A,P1
JNB ACC.5, PL4
MOV R0,#2EH
XCHD A,@R0
PL5: MOV A,P1
JNB ACC.6,PL5
SWAP A
INC R0
MOV @R0,A
PL6: MOV A,P1
JNB ACC.7,PL6
XCHD A,@R0
;SETB 20H
LCALL SHOWNUM
CLR 0D4H
POP DPH
POP DPL
POP ACC
RETI
PEr:; MOV DPTR,#RANGE ;取字码表
; LCALL HZXSR ;送显
SETB 10H
CLR 0D4H
POP DPH
POP DPL
POP ACC
RETI
;-------------------------------------------------------判断结果是否一样
JUG: MOV R2,#0FH
MOV R0,#2EH
MOV A,@R0
ANL A,#0FH ;百位至7DH
MOV 78H,A
MOV A,@R0
SWAP A
ANL A,#0FH
;ADD A,#16H
MOV 79H,A ;千位至7EH
INC R0
MOV A,@R0
ANL A,#0FH
MOV 76H,A ;个位至7BH
MOV A,@R0
SWAP A
ANL A,#0FH
MOV 77H,A ;十位至7CH
CLR C
MOV A,7EH
CJNE A,79H,ENDJUG
MOV A,7DH
CJNE A,78H,ENDJUG
MOV A,7CH
CJNE A,77H,ENDJUG
MOV A,7BH
CJNE A,76H,ENDJUG
CLR 20H
AJMP ENDJUG1
ENDJUG: SETB 20H
ENDJUG1:RET
;-------------------------------------------------------设置参数
SETPARA:ACALL SCRBLOCK ;显示上方的黑色区域
MOV DPTR,#TOP2 ;取字码表
LCALL HZXSR ;送显
MOV DPTR,#DOWN1 ;上限
LCALL HZXSR
MOV DPTR,#DOWN2 ;下限
LCALL HZXSR
MOV DPTR,#LINE ;画竖线
LCALL HZXSR
LCALL SHOWLINE ;画横线
RET
;-------------------------------------------------------显示光标
SHOWCURSOR:
PUSH ACC
MOV A,R2
PUSH ACC
MOV A,R3
PUSH ACC
MOV A,R4
PUSH ACC
MOV A,40H
JB 21H,CU1
ADD A,#05H
AJMP CU2
CU1: ADD A,#0DH
CU2: MOV R2,A
MOV R3,#03H
MOV R4,#24H
ACALL CDCM1 ;置地址指针位置[显示缓冲区RAM 0300H]
MOV A,#7EH
LCALL XSASC
LCALL SHOWLINE
POP ACC
MOV R4,A
POP ACC
MOV R3,A
POP ACC
MOV R2,A
POP ACC
RET
;-------------------------------------------------------显示按键
SHOWKEY:PUSH ACC
MOV A,40H
JB 21H,AD1
ADD A,#04H
AJMP AD2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -