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

📄 2007-12-26lcd_tempkz.asm

📁 测温应用单片机控制
💻 ASM
📖 第 1 页 / 共 3 页
字号:
;*******************************************************************
;
;STC89C52,液晶控制,T6963C-----CM240128	 控制
;
;*******************************************************************
				DAT1 	EQU 50H				;第一参数单元 用到50H~56H
				DAT2 	EQU 51H 			;第二参数/数据单元
				COM 	EQU 52H 			;指令代码单元
				CODEA 	EQU 53H 			;汉字字符代码
				COUNT 	EQU 54H				;西文字符的个数(8*8)
				O_Y 	EQU 55H 			;Y坐标
				O_X 	EQU 56H 			;X坐标
				C_ADD 	EQU 6000H 			;指令通道地址
				D_ADD 	EQU 4000H 			;数据通道地址
 				
				QD1 	EQU P1.7   			;设定P0.4为总线口 等同于QD1
				KEY1	EQU	P1.0
				KEY2	EQU	P1.1
				KEY3	EQU	P1.2
				KEY4	EQU	P0.7
				
;-------------------------------------------------------------------
;定义指令代码常量
				SETCUR	EQU	21H				;光标指针设置
				SETAM	EQU	22H				;CGRAM偏置地址设置
				SETADP	EQU	24H				;地址指针位置
				TXTHEA	EQU	40H				;文本区首址
				TXTWID	EQU	41H				;文本区宽度
				MAPHEA	EQU	42H				;图形区首址
				MAPWID	EQU	43H				;图形区宽度
;显示方式设置  	;内部字符发生器CGROM			
				MODS00	EQU	80H				;文本与图形或关系显示
				MODS01	EQU	81H				;文本与图形异或关系显示
				MODS03	EQU	83H				;文本与图形与关系显示
				MODS04 	EQU	84H				;文本与图形双字节
				;字符发生器CGRAM
				MODS10	EQU	88H				;文本与图形或关系显示
				MODS11	EQU	89H				;文本与图形异或关系显示
				MODS13	EQU	8BH				;文本与图形与关系显示
				MODS14	EQU	8CH				;文本与图形双字节
				;字属性
				WORD0	EQU	00H				;正向显示
				WORD5	EQU	05H				;负向显示
				WORD3	EQU	03H				;禁止显示正向
				WORD4	EQU	04H				;禁止显示负向
				;显示状态
				DPMD00	EQU	90H				;
				DPMD01	EQU	91H				;
				DPMD02	EQU	90H
				ORG		0000H
				LJMP	MAIN
				;ORG		0003H
				;ORG		000BH
				;ORG		0013H
				;ORG		001BH
				;ORG		0023H
;*******************************************************************
;
;主程序区
;
;*******************************************************************

MAIN:		
			MOV		SP,#60H
			MOV		7CH,#00H
			MOV		75H,#00H
			MOV		76H,#00H
			MOV		77H,#00H
			MOV		44H,#0AH
			MOV		78H,#00H
			MOV		79H,#00H
			MOV		7AH,#00H
			MOV		7BH,#0BH				;+/-#0CH
			
MAINL:		MOV		2CH,#00H				;
			MOV		2DH,#00H				;
			MOV		2EH,#10					;光标位置设置
			MOV		2FH,#7
			CLR		2AH.0					;标志位
			LCALL	LCDINT
			LCALL	CLEAR1
			MOV		COUNT,#08H
			MOV		DPTR,#HZD
			MOV		4AH,#0
			MOV		4BH,#5					;X
			MOV		4CH,#20					;Y
			LCALL	SWXS 
			MOV		DPTR,#HZD
			INC		4BH
			INC		4BH
			INC		4AH

			LCALL	SWXS
			MOV		DPTR,#HZD
			INC		4BH
			INC		4BH
			INC		4AH
			LCALL	SWXS
			MOV		3FH,4BH
			
PPP:		
			LCALL	GET_TEMP
			LCALL	COUTKEY
			MOV		DPTR,#HZD
			MOV		4AH,#3
			MOV		4BH,49H					;X
			INC		4BH						
			MOV		4CH,#20					;Y
			LCALL	SWXS
			
			LCALL	KEYSUB					; 
			JB		2AH.0,JZH0
			LCALL	DATACAMP
JZH0:
			JB		P3.2,PPP
			LJMP	MAINL
		

;*******************************************************************
;
;子程序区
;
;*******************************************************************

;*******************************************************************
;
;温度测量数据转换子程序区
;
;*******************************************************************

;*******************************************************************
;DS18B20数字温度传感器程序
;*******************************************************************
GET_TEMP:
			CLR 	PSW.4
			SETB 	PSW.3					;设置工作寄存器当前所在的区域 1组寄存器
			CLR 	EA 						;使用ds1820一定要禁止任何中断产生
			LCALL 	INT 					;调用初使化子程序
			MOV 	A,#0CCH
			LCALL 	WRITE 					;送入跳过ROM命令
			MOV 	A, #44H
			LCALL 	WRITE 					;送入温度转换命令
			LCALL 	INT 					;温度转换完全,再次初使化ds1820
			MOV		A,#0CCH
			LCALL 	WRITE 					;送入跳过ROM命令
			MOV 	A,#0BEH
			LCALL	WRITE 					;送入读温度暂存器命令
			LCALL 	READ
			MOV 	R7,A 					;读出温度值低字节存入R7
			LCALL 	READ
			MOV 	R6,A 					;读出谩度值高字节存入R6
			SETB 	EA
			CLR		PSW.4
			CLR		PSW.3
			MOV		R3,0FH
			MOV		R2,0EH
			RET
INT: 										;初始化ds1820子程序
			CLR 	EA
L0:
			CLR 	QD1 					;ds1820总线为低复位电平
			MOV 	R7,#200
L1:
			CLR 	QD1
			DJNZ 	R7,L1 					;总线复位电平保持400us
			SETB 	QD1 					;释放ds1820总线
			MOV 	R7,#30
L4:
			DJNZ 	R7,L4 					;释放ds1820总线保持60us
			CLR 	C 						;清存在信号
			ORL 	C,QD1
			JC 		L0 						;存在吗?不存在则重新来
			MOV 	R7,#80
L5:
			ORL 	C,QD1
			JC 		L3
			DJNZ 	R7,L5
			SJMP 	L0
L3:
			MOV 	R7,#240
L2:
			DJNZ 	R7,L2
			RET
WRITE: 										;向ds1820写操作命令子程序
			CLR 	EA
			MOV 	R6,#8 					;写入ds1820的bit数,一个字节8个bit
WR1:
			SETB 	QD1
			MOV 	R5,#8
			RRC 	A 						;把一个字节data(A)分成8个bit环移给 C
			CLR 	QD1 					;开始写入ds1820总线要处于复位(低)状态
WRA2:
			DJNZ 	R5,WRA2 				;ds1820总线复位保持16us
			MOV 	QD1,C 					;写入一个bit
			MOV 	R5,#20
WR3:
			DJNZ 	R5,WR3 					;等待40us
			DJNZ 	R6,WR1 					;写入下一个bit
			SETB	QD1 					;重新释放ds1820总线
			RET
READ:
			CLR 	EA
			MOV 	R6,#8 					;连续读8个bit
RE1:
			CLR 	QD1 					;读前总线保持为低
			MOV 	R5,#4
			NOP
			SETB 	QD1 					;开始读总线释放
RE2:
			DJNZ 	R5,RE2 					;持续8us
			MOV 	C,QD1 					;从ds1820总线读得一个bit
			RRC 	A 						;把读得的位值环移给 A
			MOV 	R5,#30
RE3:
			DJNZ 	R5,RE3 					;持续60us
			DJNZ 	R6,RE1 					;读下一个bit
			SETB 	QD1 					;重新释放ds1820总线
			RET
		

;*******************************************************************
;数据处理
;*******************************************************************
COUTKEY:									;(R2R3)
		
			MOV		A,R3
			ANL		A,#00FH
			MOV		39H,A					;.XXXX,39H小数部分		
			MOV		A,R3
			ANL		A,#0F0H
			SWAP	A
			MOV		3AH,A
			MOV		A,R2
			ANL		A,#07H
			SWAP	A						;
			ORL		A,3AH
			MOV		3AH,A					;XXXXXXX. 3AH整数部分
			MOV		A,R2
			ANL		A,#0F8H
			RR		A
			RR		A
			RR		A
			MOV		3BH,A					;+/-  3BH符号部分
			MOV		A,3BH
			CJNE	A,#00H,ZZZX				;1F;跳转到负数处理部分
			MOV		R3,3AH
			LJMP	ZZZY					;跳转到整数处理部分
ZZZX:	
											;负数处理部分
			MOV		R2,3AH
			LCALL	FSQF
			MOV		R3,A
	
ZZZY:
			LCALL	ZSCL					;整数处理部分
		
			MOV		R4,39H					;小数处理部分
			LCALL	XSCL
			MOV		A,3BH
			CJNE	A,#01FH,WECT
			MOV		40H,35H
			MOV		41H,36H
			MOV		42H,37H
			MOV		43H,38H
			MOV		44H,#0AH
			MOV		45H,3CH
			MOV		46H,3DH
			MOV		47H,3EH
			MOV		48H,#0CH
			MOV		2DH,48H
			MOV		4BH,3FH
			SETB	RS1
			MOV		R0,#48H
			MOV		4CH,#20
			LCALL	DISPEN
			CLR		RS1
			MOV		R1,#40H
			LJMP	WEXIT
WECT:
		
			MOV		40H,35H
			MOV		41H,36H
			MOV		42H,37H
			MOV		43H,38H
			MOV		44H,#0AH
			MOV		45H,3CH
			MOV		46H,3DH
			MOV		47H,3EH
			MOV		48H,#0BH
			MOV		2DH,48H
			MOV		4BH,3FH
			SETB	RS1
			MOV		R0,#48H
			MOV		4CH,#20
			LCALL	DISPEN
			CLR		RS1
			MOV		R1,#40H
			LJMP	WEXIT

WEXIT:
			RET
;--------------------------------------------------------------------
FSQF:										;负数取反+1;入口R2
			MOV		A,R2
			XRL		A,#07FH
			ADD		A,#1
			RET
ZSCL:										;正数据处理;入口R3
			MOV		3CH,#00H				;各位
			MOV		3DH,#00H				;十位
			MOV		3EH,#00H				;百位
			MOV		A,R3
			MOV		B,#10
			DIV		AB
			MOV		3CH,B
			MOV		B,#10
			DIV		AB
			MOV		3DH,B
			MOV		B,#10
			DIV		AB
			MOV		3EH,B
			RET
XSCL:										;小数处理;入口R4
			MOV		35H,#00H		   		;0.000X
			MOV		36H,#00H				;0.00X0
			MOV		37H,#00H				;0.0X00
			MOV		38H,#00H				;0.X000
			MOV		21H,#00H
			MOV		R5,#01H
			MOV		A,#01H
			ANL		A,R4
	
			JNB		ACC.0,GOTO01
			MOV		A,35H
			ADD		A,#5
			MOV		35H,A
			MOV		A,36H
			ADD		A,#2
			MOV		36H,A
			MOV		A,37H
			ADD		A,#6
			MOV		37H,A
			MOV		A,38H
			ADD		A,#0
			MOV		38H,A
			SETB	21H.0
GOTO01:
			MOV		A,#2H
			ANL		A,R4
	
			JNB		ACC.1,GOTO02
			MOV		A,35H
			ADD		A,#0
			MOV		35H,A
			MOV		A,36H
			ADD		A,#5
			MOV		36H,A
			MOV		A,37H
			ADD		A,#2
			MOV		37H,A
			MOV		A,38H
			ADD		A,#1
			MOV		38H,A
			SETB	21H.1
GOTO02:	
			MOV		A,#4H
			ANL		A,R4
	
			JNB		ACC.2,GOTO03
			MOV		A,35H
			ADD		A,#0
			MOV		35H,A
			MOV		A,36H
			ADD		A,#0
			MOV		36H,A
	
			JNB		21H.0,CJPE
			JNB		21H.1,CJPF
			MOV		37H,#3
			MOV		A,38H
			ADD		A,#1
			MOV		38H,A
			LJMP	CJPG
CJPF:	
			MOV		37H,#1
			MOV		A,38H
			ADD		A,#1
			MOV		38H,A
			LJMP	CJPG
CJPE:	
			MOV		A,37H
			ADD		A,#5
			MOV		37H,A
CJPG:
			MOV		A,38H
			ADD		A,#2
			MOV		38H,A
			SETB	21H.2
GOTO03:	
			MOV		A,#8H
			ANL		A,R4
	
			JNB		ACC.3,GOTO04
			MOV		A,35H
			ADD		A,#0
			MOV		35H,A
			MOV		A,36H
			ADD		A,#0
			MOV		36H,A
			MOV		A,37H
			ADD		A,#0
			MOV		37H,A
			MOV		A,38H
			ADD		A,#5
			MOV		38H,A
			SETB	21H.3					;
GOTO04:
		
			RET

			
DISPEN:		MOV		DPTR,#WORDDM
			MOV		4AH,@R0
			INC		4BH
			
			LCALL	SWXS
			DEC		R0
			CJNE	R0,#3FH,DISPEN
			MOV		49H,4BH
			;CLR		RS1
			RET

;*******************************************************************
;
;键盘子程序,
;
;*******************************************************************
KEYEND0:
			LJMP	KEYENDN
KEYSUB:	
			
			JB		P1.0,KEYAD
			LCALL	YS20
			JNB		P1.0,$
			SETB	2AH.0
KEYSUB1:	
			MOV		DPTR,#SETDM
			MOV		4AH,#0
			MOV		4BH,#5					;X
			MOV		4CH,#50					;Y ''''''''
			LCALL	SWXS 
			MOV		DPTR,#SETDM
			INC		4BH
			INC		4BH
			INC		4AH
			LCALL	SWXS
			MOV		DPTR,#SETDM
			INC		4BH
			INC		4BH
			INC		4AH
			LCALL	SWXS
			MOV		2BH,4BH
			MOV		40H,7CH
			MOV		41H,75H
			MOV		42H,76H
			MOV		43H,77H
			MOV		44H,#0AH
			MOV		45H,78H
			MOV		46H,79H
			MOV		47H,7AH
			MOV		48H,7BH
			MOV		4BH,2BH
			
			SETB	RS1
			
			MOV		R0,#48H
			MOV		4CH,#50
			LCALL	DISPEN
			CLR		RS1
			
			MOV		DAT1,2EH;#10		;光标位置设置
			MOV		R1,	#48H			;
			MOV		DAT2,2FH;#7			;
			LCALL	CURSORSET			;
			
			LJMP	KEYEND
KEYSNB:		LJMP	KEYSB
KEYAD:		
			JB		P1.4,KEYSNB			;
			LCALL	YS20
			JNB		P1.4,$
KAD1:		
			MOV		A,2CH
			CLR		C
			SUBB	A,#00
			JNZ		KAD2
			MOV		A,7BH
			CJNE	A,#0CH,KAD11
			MOV		7BH,#0BH
			LCALL	XS
			LJMP	KEYUP
KAD11:	
			MOV		7BH,#0CH
			LCALL	XS
			LJMP	KEYEND
KAD2:		
			MOV		A,2CH
			CLR		C
			SUBB	A,#01
			JNZ		KAD3
			INC		7AH
			MOV		A,7AH
			CJNE	A,#0AH,KADV
			MOV		7AH,#00H
			LCALL	XS
			LJMP	KEYUP

KAD3:
					
			MOV		A,2CH
			CLR		C
			SUBB	A,#02
			JNZ		KAD4
			INC		79H
			MOV		A,79H
			CJNE	A,#0AH,KADV
			MOV		79H,#00H
			LCALL	XS
			LJMP	KEYUP

KAD4:
					
			MOV		A,2CH
			CLR		C
			SUBB	A,#03
			JNZ		KAD5
			INC		78H
			MOV		A,78H
			CJNE	A,#0AH,KADV
			MOV		78H,#00H
			LCALL	XS
			LJMP	KEYUP
KAD5:
					
			MOV		A,2CH
			CLR		C
			SUBB	A,#04
			JNZ		KAD6
			INC		77H
			MOV		A,77H
			CJNE	A,#0AH,KADV
			MOV		77H,#00H
			LCALL	XS
			LJMP	KEYUP
KADV:	
			
			LCALL	XS
			LJMP	KEYEND
KAD6:
					
			MOV		A,2CH
			CLR		C
			SUBB	A,#05
			JNZ		KAD7
			INC		76H
			MOV		A,76H
			CJNE	A,#0AH,KADV
			MOV		76H,#00H
			LCALL	XS
			LJMP	KEYUP
KAD7:
					
			MOV		A,2CH
			CLR		C
			SUBB	A,#06
			JNZ		KAD8
			INC		75H
			MOV		A,75H
			CJNE	A,#0AH,KADV
			MOV		75H,#00H
			LCALL	XS
			LJMP	KEYUP
KAD8:
					
			MOV		A,2CH
			CLR		C
			SUBB	A,#07
			JNZ		KAD9
			INC		7CH
			MOV		A,7CH
			CJNE	A,#0AH,KADV
			MOV		7CH,#00H

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -