?? 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 + -