⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 caoy1.asm

📁 工程训练课程设计 温度压力流量三路信号监测与控制 LCD界面显示
💻 ASM
📖 第 1 页 / 共 3 页
字号:
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 + -