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

📄 08ndj.asm

📁 本程序里包含MAX7219 X5045 TLC1549 等应用软件 汇编文件
💻 ASM
📖 第 1 页 / 共 3 页
字号:
;-------------07-2型浓度计程序清单-----------
;-------------调试日期20070310---------------
;-------------最后更改日期20070310-----------

;-------------X5045芯片定义-----------
P4	EQU	0E8H		;定义P4口
CS5045 	EQU 	P4.0		;片选端
SO5045 	EQU 	P4.1		;数据出端
CK5045 	EQU 	P4.2		;时钟端
SI5045 	EQU 	P4.3		;数据入端
RAM45	EQU	65H		;子程序占用单元
RAM45_1	EQU	64H

;-------------MAX7219芯片定义-----------
DIN19 	EQU 	P1.0		;数据端
CLK19	EQU	P1.1		;时钟端
LOAD19	EQU	P1.2		;锁存端
RAM19_1	EQU	65H		;子程序占用单元RAM19_1--3
RAM19_2	EQU	64H
RAM19_3	EQU	63H

;-------------TLC1549芯片定义-----------
DA549 	EQU 	P1.3		;数据端
CK549	EQU	P1.5		;时钟端
CS549	EQU	P1.4		;片选端
RAMAD	EQU	10H		;AD值单元(10H11H)

;------------------TLC5615控制线定义----------------
CS5615	EQU	P1.6		;片选线
CK5615	EQU	P1.5		;时钟线
DI5615	EQU	P1.7		;数据线
RAMDA	EQU	46H		;DA值单元(46H47H)

;---------单元定义-------------
DSRAM	EQU	50H		;显示单元区(50H-54H)
RLED1	EQU	2CH		;灯显示(D1-D8)
RLED2	EQU	2DH		;灯显示(D9-D16)
RLED3	EQU	2EH		;灯显示(D17-D24)
RLED4	EQU	2FH		;灯显示(D25-D32)

SDRAM1	EQU	55H		;BCD码设定值(55H56H)
SDRAM2	EQU	57H		;二进制设定值(57H58H)
XZRAM	EQU	59H		;二进制现在值(59H5AH)

RTEMP	EQU	63H		;临时工作单元
RT4MS	EQU	62H		;4ms延时
RT45	EQU	61H		;1s延时(看门狗)
RAMJT	EQU	60H		;计时延时
RKEY	EQU	5FH		;键值单元
TKEY	EQU	5EH		;键延时单元
RSDYS	EQU	5DH		;设定延时单元
TMCY	EQU	5CH		;采样延时单元
GZ1	EQU	12H		;控制延时工作单元GZ1-GZ4
GZ2	EQU	13H
GZ3	EQU	14H
GZ4	EQU	15H

;------------标志单元定义------------
BRST	EQU	20H.1		;看门狗标志
BJT	EQU	20H.2		;计时延时

D1	EQU	RLED1.6
D2	EQU	RLED1.5
D3	EQU	RLED1.4
D4	EQU	RLED1.3
D5	EQU	RLED1.2
D6	EQU	RLED1.1
D7	EQU	RLED1.0
D8	EQU	RLED1.7

D9	EQU	RLED2.6
D10	EQU	RLED2.5
D11	EQU	RLED2.4
D12	EQU	RLED2.3
D13	EQU	RLED2.2
D14	EQU	RLED2.1
D15	EQU	RLED2.0
D16	EQU	RLED2.7

D17	EQU	RLED3.6
D18	EQU	RLED3.5
D19	EQU	RLED3.4
D20	EQU	RLED3.3
D21	EQU	RLED3.2
D22	EQU	RLED3.1
D23	EQU	RLED3.0
D24	EQU	RLED3.7

D25	EQU	RLED4.6
D26	EQU	RLED4.5
D27	EQU	RLED4.4
D28	EQU	RLED4.3
D29	EQU	RLED4.2
D30	EQU	RLED4.1
D31	EQU	RLED4.0
D32	EQU	RLED4.7

;-------------输出线定义---------------
OUT2	EQU	P3.1		;浇饼控制
OUT3	EQU	P3.2		;给水输出
OUT4	EQU	P3.3		;排水输出
OUT5	EQU	P3.4		;蜂鸣输出
OUT6	EQU	P3.5		;过淡输出
OUT7	EQU	P3.6		;过浓输出

;------------延时常数-------------
CN1	EQU	0F9H		;转换系数999/1023=0F9H0FEH
CN2	EQU	0FEH
TNUM	EQU	250		;1s(开机显示延时)
TNUM1	EQU	15		;100ms(灯闪烁延时)

CN3S	EQU	30		;延时30*100ms
CN2S5	EQU	25		;延时25*100ms
CN2S	EQU	20		;延时20*100ms
CN1S5	EQU	15		;延时15*100ms
CN1S	EQU	10		;延时10*100ms
CN0S    EQU     0

;----------程序清单-------------
	ORG 	0000H
	SJMP 	0030H

	ORG 	000BH
	LJMP 	IET0		;定时器T0中断
	
	ORG 	0030H
	MOV 	SP,#65H		;设置堆栈指针
	MOV 	P0,#0FFH	;I/O口初始化
	MOV 	P1,#0FFH
	MOV 	P2,#0FFH
	MOV 	P3,#0FFH
	MOV	P4,#0FH

	MOV	20H,#0		;清标志
	MOV	21H,#0
	MOV	23H,#0
	MOV	24H,#0
	SETB	20H.7		;置初始化显示标志

	MOV	RLED1,#0FFH	;灯显示全亮
	MOV	RLED2,#0FFH
	MOV	RLED3,#0FFH
	MOV	RLED4,#0
	MOV	RAMDA,#01H	;初始化DA值
	MOV	RAMDA+1,#0
		
	MOV 	TMOD,#00000010B	;定时器方式设置
	MOV 	TL0,#06H	;250us定时
	MOV 	TH0,#06H	
	MOV 	RT4MS,#16	;250us*16=4ms定时
	MOV	RT45,#250	;4ms*250=1s
	MOV	TMCY,#125	;采样延时4ms*125=500ms
	MOV	GZ2,#25		;100ms
	SETB 	ET0		;开中断
	SETB 	EA
	SETB 	TR0		;启动T0定时

	LCALL	WS5045		;写X5045的状态
	LCALL	DS5045		;读设定值
	MOV	A,SDRAM1+2	;取新旧片标志
	CJNE	A,#55H,STR1	;是新片吗?
	SJMP	STR2
STR1:	MOV	SDRAM1,#05H	;设定初值
	MOV	SDRAM1+1,#00H
	LCALL	SAVE		;保存数据
STR2:	LCALL	ZBCDH		;设定值转为二进制

	MOV 	RAM19_3,#09H	;译码方式(不用译码)
	MOV 	RAM19_2,#00H
	LCALL 	SM19
	MOV 	RAM19_3,#0AH	;亮度控制(25/32级)
	MOV 	RAM19_2,#0CH
	LCALL 	SM19
	MOV 	RAM19_3,#0BH	;扫描个数(0-6位,共7个)
	MOV 	RAM19_2,#06H
	LCALL 	SM19
	MOV 	RAM19_3,#0CH	;置正常工作状态
	MOV 	RAM19_2,#01H
        LCALL 	SM19

	MOV	A,1FH
	CJNE	A,#55H,STR3
	MOV	RLED1,#0	;灯显示全灭
	MOV	RLED2,#0
	MOV	RLED3,#0
	MOV	RLED4,#0
	SJMP	STR4

STR3:	MOV	1FH,#55H
	MOV	DSRAM,#11	;显'--.-'
	MOV	DSRAM+1,#11
	MOV	DSRAM+2,#11
	LCALL	SM39		
	LCALL	LAMP		;显灯
	MOV	RAMJT,#TNUM	;延时1s
	LCALL	SPJT
	LCALL	KJSS		;开机闪烁
	
STR4:	LCALL	CYCL		;采样处理	
	SETB	D25		;现在指示
	SETB	D32		;自动指示
	SETB	D27		;蜂鸣指示
	SETB	D28		;声音指示
	LCALL	XXZZ		;显现在值
	LCALL	LAMP		;显灯
	LCALL	DAZH		;DA转换
	SETB	21H.3		;DA正常转换标志
	SETB	21H.5		;置输出控制标志
	
;--------------主程序循环------------------------
		
LOOP:	JNB	BRST,LOP1	;无看门狗标志吗?
	LCALL	REST		;防止看门狗复位操作

LOP1:	JNB	20H.0,LOP2	;无设定延时到标志吗?
	LCALL	ZXZZ		;转现在值显示处理
	CLR	20H.0		;清设定延时到标志

LOP2:	JNB	D31,LP22	;无手动指示吗?
	LJMP	GPSCL		;手动给/排水处理	

LP22:	LCALL 	KEY		;采键
	JB 	20H.4,LP21	;有键认可标志吗?
	SJMP 	LOP3
LP21:	LJMP 	DKEY		;转键处理

LOP3:	JNB	20H.6,LOP4	;无采样标志吗?
	LCALL	CYCL		;采样处理

LOP4:	JB	21H.4,LOP5	;有不控制标志吗?
	JNB	21H.5,LOP5	;无输出控制标志吗?
	LCALL	KZCL		;控制处理

LOP5:	LJMP	LOOP

;-----------手动给/排水处理-----------
GPSCL:	JNB	D29,GPS1	;无排水指示吗?
	JNB	P2.2,LOP3	;排水键仍有效吗?
	SETB	OUT4		;关闭排水输出
	CLR	D29		;灭排水指示
	SJMP	GPS2

GPS1:	JNB	D30,LP22	;无给水指示吗?
	JNB	P2.3,LOP3	;给水键仍有效吗?
	SETB	OUT3		;关闭给水输出
	CLR	D30		;灭给水指示
GPS2:	LCALL	LAMP		;指示灯更新
	CLR	20H.3		;清键标志
	CLR	20H.4
	SJMP	LOP3

;--------------键处理---------------
DKEY:	MOV 	A,RKEY		;根据键值转相应键处理
	MOV 	B,#03H
	MUL 	AB
	MOV 	DPTR,#DK1
	JMP 	@A+DPTR
DK1:	LJMP 	BWU		;百位加处理
	LJMP 	BWN		;百位减处理
	LJMP 	SWU		;十位加处理
	LJMP 	SWN		;十位减处理
	LJMP 	GWU		;个位加处理
	LJMP 	GWN		;个位减处理
	LJMP 	XZZ		;现在值处理
	LJMP 	SDZ		;设定值处理
	LJMP	KSY		;声音键处理
	LJMP	KFM		;蜂鸣键处理
	LJMP	KPS		;排水键处理
	LJMP	KGS		;给水键处理
	LJMP	KSD		;手动键处理
	LJMP	KZD		;自动键处理

;------------百位加处理-------------
BWU:	JNB	D26,BWU1	;无设定指示吗?
	MOV	RSDYS,#11	;设定延时10s-11s
	MOV	A,SDRAM1	;取百位
	
	CJNE	A,#9,BWU2	;不为9吗?
	SJMP	BWU1_1          
BWU2:	INC	SDRAM1
        SJMP    DDE
BWU1_1: MOV     SDRAM1,#0H
DDE:
	LCALL	XSDZ		;显设定值
BWU1:	LJMP	DKY_1

;------------百位减处理--------------
BWN:	JNB	D26,BWN1	;无设定指示吗?
	MOV	RSDYS,#11	;设定延时10s-11s
	MOV	A,SDRAM1	;取百位
	CJNE	A,#0,BWN2	;不为0吗?
	SJMP	BWN1_1
BWN2:	DEC	SDRAM1
        SJMP    BWN1_2   
BWN1_1:
        MOV     SDRAM1,#09H
BWN1_2:
	LCALL	XSDZ		;显设定值
BWN1:	LJMP	DKY_1

;------------十位加处理--------------
SWU:	JNB	D26,SWU1	;无设定指示吗?
	MOV	RSDYS,#11	;设定延时10s-11s
	MOV	A,SDRAM1+1	;取十位
	ANL	A,#0F0H
	CJNE	A,#90H,SWU2	;不为90H吗?
	SJMP	SWU1_1
SWU2:	MOV	A,SDRAM1+1
	ADD	A,#10H
	MOV	SDRAM1+1,A
	SJMP    FFG
	
SWU1_1:  MOV     A,SDRAM1
         ANL     A,#0FH
         CJNE    A,#9,SWU1_3
         SJMP    SWU1_2
SWU1_3:  
         INC     SDRAM1
         
                      
SWU1_2:
        MOV     A,SDRAM1+1
        ANL     A,#0FH
        MOV     SDRAM1+1,A	
FFG:
	LCALL	XSDZ		;显设定值
SWU1:	LJMP	DKY_1

;------------十位减处理---------------
SWN:	JNB	D26,SWN1	;无设定指示吗?
	MOV	RSDYS,#11	;设定延时10s-11s
	MOV	A,SDRAM1+1	;取十位
	ANL	A,#0F0H         ;屏蔽掉低4位
	CJNE	A,#0,SWN2	;不为0吗?
	SJMP	SWN1_1
SWN2:	MOV	A,SDRAM1+1
	CLR	C
	SUBB	A,#10H
	MOV	SDRAM1+1,A
	SJMP    HGH
SWN1_1: MOV     A,SDRAM1
        ANL     A,#0FH
        CJNE    A,#0,SWN1_2
        SJMP    SWN1_3
SWN1_2: DEC     SDRAM1
         
SWN1_3: MOV     A,SDRAM1+1
        ANL     A,#0FH
        ADD     A,#90H
        MOV     SDRAM1+1,A
        
HGH:     
	LCALL	XSDZ		;显设定值
SWN1:	LJMP	DKY_1

;------------个位加处理--------------
GWU:	JNB	D26,GWU1	;无设定指示吗?
	MOV	RSDYS,#11	;设定延时10s-11s
	MOV	A,SDRAM1+1	;取个位
	ANL	A,#0FH          ;屏蔽掉高4位 
	CJNE	A,#9,GWU2	;不为9吗?
	SJMP	GWU1_1
GWU2:	INC	SDRAM1+1        ;个位加1
        SJMP    KKJ
GWU1_1: MOV     A,SDRAM1+1
        ANL     A,#0F0H
        CJNE    A,#90H,GWU1_2
        SJMP    GWU1_3
GWU1_2: ADD     A,#10H           ;十位加1
        MOV     SDRAM1+1,A
        LJMP   GWU1_3_2
GWU1_3: MOV    A,SDRAM1
        ANL    A,#0FH
        CJNE   A,#9,GWU1_3_1     ;百位为9?
        SJMP   KKJ
GWU1_3_1:INC   SDRAM1            ;百位加1
         MOV   A,SDRAM1+1
         ANL   A,#0FH
         MOV   SDRAM1+1,A
GWU1_3_2:        
        MOV     A,SDRAM1+1
        ANL      A,#0F0H
        MOV      SDRAM1+1,A
KKJ:
	LCALL	XSDZ		;显设定值
GWU1:	LJMP	DKY_1

;------------个位减处理--------------
GWN:	JNB	D26,GWN1	;无设定指示吗?
	MOV	RSDYS,#11	;设定延时10s-11s
	MOV	A,SDRAM1+1	;取个位
	ANL	A,#0FH
	CJNE	A,#0,GWN2	;不为0吗?
	SJMP	GWN1_1
GWN2:	DEC	SDRAM1+1
        SJMP    LLK
GWN1_1: MOV     A,SDRAM1+1
        ANL     A,#0F0H
        CJNE    A,#0,GWN1_2
        SJMP    GWN1_3
GWN1_2: SUBB    A,#10H
        MOV     SDRAM1+1,A
        LJMP    GWN1_3_1
GWN1_3: MOV     A,SDRAM1
        ANL     A,#0FH
        CJNE    A,#0,GWN1_3_2
        SJMP    LLK
GWN1_3_2:DEC    SDRAM1
         MOV    A,SDRAM1+1
         ANL    A,#0FH
         ADD    A,#90H
         MOV    SDRAM1+1,A                        
        
GWN1_3_1:MOV     A,SDRAM1+1
        ANL     A,#0F0H
        ADD     A,#09H
        MOV     SDRAM1+1,A
LLK:
	LCALL	XSDZ		;显设定值
GWN1:	LJMP	DKY_1

;------------现在值处理-------------
XZZ:	JNB	D26,XZZ1	;无设定指示吗?
	LCALL	ZXZZ		;转现在值显示处理
XZZ1:	LJMP	DKY_1

;------------转现在值显示处理--------------
ZXZZ:	LCALL	SAVE		;保存数据
	LCALL	ZBCDH		;设定值转为二进制
	CLR	D26		;灭设定指示
	SETB	D25		;点亮现在指示
	LCALL	XXZZ		;显现在值
	LCALL	LAMP		;指示灯更新
	RET

;------------设定值处理--------------
SDZ:	JNB	D25,SDZ1	;无现在指示吗?
	MOV	RSDYS,#11	;设定延时10s-11s
	CLR	D25		;灭现在指示
	SETB	D26		;点亮设定指示
	LCALL	XSDZ		;显设定值
	LCALL	LAMP		;指示灯更新
SDZ1:	LJMP	DKY_1

;------------声音键处理--------------
KSY:	CPL	D27		;取反声音指示
	SETB	OUT6		;关闭过淡输出
	SETB	OUT7		;关闭过浓输出
	LCALL	LAMP		;指示灯更新
	LJMP	DKY_1

;------------蜂鸣键处理-------------
KFM:	CPL	D28		;取反蜂鸣指示
	SETB	OUT5		;关闭蜂鸣输出
	LCALL	LAMP		;指示灯更新
	LJMP	DKY_1

;------------排水键处理--------------
KPS:	JNB	D31,DKY_1	;无手动指示吗?
	CLR	OUT4		;开启排水输出
	SETB	D29		;点亮排水指示
	LCALL	LAMP		;指示灯更新
	LJMP	LOP3

;------------给水键处理-------------
KGS:	JNB	D31,DKY_1	;无手动指示吗?
	CLR	OUT3		;开启给水输出
	SETB	D30		;点亮给水指示
	LCALL	LAMP		;指示灯更新
	LJMP	LOP3

;-----------手动键处理--------------
KSD:	JNB	D32,KSD1	;无自动指示吗?
	CLR	D32		;灭自动指示
	CLR	D29		;灭排水指示
	CLR	D30		;灭给水指示
	SETB	OUT3		;关闭给水输出
	SETB	OUT4		;关闭排水输出
	SETB	D31		;点亮手动指示
	LCALL	LAMP		;指示灯更新
	CLR	21H.5		;清输出控制标志
KSD1:	SJMP	DKY_1

;-----------自动键处理-------------
KZD:	JNB	D31,DKY_1	;无手动指示吗?
	CLR	D31		;灭手动指示
	SETB	D32		;点亮自动指示
	LCALL	LAMP		;指示灯更新
	SETB	21H.5		;置输出控制标志

;----------等待键释放处理--------------
DKY_1:	LCALL 	KEY		;等待键释放
	JB 	20H.3,DKY_1
	CLR 	20H.4
	LJMP 	LOP3

;------------键采样-----------
KEY:	CLR	PSW.5		;清查P2口键标志
	MOV	A,P0		;取P0口键状态
	CPL	A
	CJNE	A,#0,KY1	;有键按下吗?

	SETB	PSW.5		;置查P2口键标志
	MOV	A,P2		;取P2口键状态
	CPL	A
	ANL	A,#3FH		;屏蔽高2位
	CJNE	A,#0,KY1	;有键按下吗?
	SJMP	KY5

KY1:	MOV	DSRAM,A		;存键值
	MOV	DPTR,#TABKY	;取键值表
	MOV	R2,#8		;取有效键个数

⌨️ 快捷键说明

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