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

📄 pronew.asm

📁 工程训练课程设计 可实现温度压力两路参数的监测与控制 LCD界面显示驱动
💻 ASM
📖 第 1 页 / 共 3 页
字号:
	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 + -