📄 caoy1.asm
字号:
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,#4H;34H ;JIN TIAN XIU GAI
;MOV A,7DH
ADD A,#30H
LCALL XSASC
MOV A,#6H;35H
;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中断子程序
INT_T0: PUSH ACC
PUSH DPL
PUSH DPH
CLR EA ;定时中断服务程序
CLR TR0
MOV TL0,#0B0H ;关中断,重置定时器初值
MOV TH0,#3CH
DJNZ 37H,INTEND
MOV 37H,#14H
LCALL CL0
INTEND: SETB TR0 ;开中断返回主程序
SETB ET0
SETB EA
RETI
CL0: MOV R0,#40H ;温度测量 5次 子程序
CLR A
CLR C
MOV @R0,A
INC R0
MOV @R0,A
MOV R5,#05H
MOV R0,#40H
CL1: MOV DPTR,#9000H ; 和存入40H(低位),41H(高位)
MOV A,#0H
MOVX @DPTR,A
NOP
;here: sjmp $
MOV R4,#80H
HERE1: DJNZ R4,HERE1
MOVX A,@DPTR
ADD A,@R0
MOV @R0,A
INC R0
CLR A
ADDC A,@R0
MOV @R0,A
MOV R0,#40H
DJNZ R5,CL1
MOV R1,#05H ;求5次平均值存入42H
MOV R4,#08H
MOV A,@R0
MOV R3,A
INC R0
MOV A,@R0
MOV R2,A
LCALL DIV2
MOV R0,#42H
MOV A,R3
MOV @R0,A
ACALL ZH0
CLR C
MOV A,20H
CJNE A,50H,CL3
MOV A,21H
CJNE A,51H,CL3
MOV A,22H
CJNE A,52H,CL3
SETB P1.6 ;测量值等于设置值
SETB P1.4
CL2: RET
CL3: JC CL4
CLR P1.6 ;测量值大于设置值
SETB P1.4
AJMP CL2
CL4: SETB P1.6 ;测量值小于设置值
CLR P1.4
AJMP CL2
;********************************************************
ZH0: MOV R0,#42H ;温度测量值转换成十进制数
MOV A,@R0
MOV B,#03H
MUL AB
MOV R5,A
MOV R4,B
MOV R0,#36H ;转换后的十进制数存放在32H-36H
MOV R6,#0H
MOV R7,#0AH
ZH1: MOV R2,#0H
MOV R3,#0H
ACALL DDIV
MOV A,R3
MOV @R0,A
DEC R0
CJNE R0,#31H,ZH1
MOV R5,#03H
MOV R1,#20H
MOV R0,#34H
ZH2: MOV A,@R0
MOV @R1,A
INC R0
INC R1
DJNZ R5,ZH2 ;有效字段保存在20H21H.22H
RET
;*******************************************************
DIV2: CLR C
MOV A,R3
RLC A
MOV R3,A
MOV A,R2
RLC A
MOV R2,A
MOV F0,C
CLR C
SUBB A,R1
;JB F0,DIV3
JC DIV4
DIV3: MOV R2,A
INC R3
DIV4: DJNZ R4,DIV2
RET
;*********************************************************
DDIV: MOV B,#16
DDV1: CLR C
MOV A,R5
RLC A
MOV R5,A
MOV A,R4
RLC A
MOV R4,A
MOV A,R3
RLC A
MOV R3,A
XCH A,R2
RLC A
XCH A,R2; (A)=(R3)
MOV F0,C
CLR C
SUBB A,R7
MOV R1,A
MOV A,R2
SUBB A,R6
JB F0,DDV2
JC DDV3
DDV2: MOV R2,A
MOV A,R1
MOV R3,A
INC R5
DDV3: DJNZ B,DDV1
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:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -