📄 08ndj.asm
字号:
;-------------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 + -