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

📄 skz.asm

📁 一个软化水设备的控制系统
💻 ASM
📖 第 1 页 / 共 2 页
字号:
MOV A,21H
ANL A,#3FH
CPL A
ANL A,#3FH
JZ E1
CLR C
MOV REALRUNNO,#00H   

LOOP3:

RRC A
INC REALRUNNO
JNC LOOP3       ;计算工位号
SJMP E2    

E1:

MOV REALRUNNO,#00H

E2:
;POP ACC

RET




;########################

INT2MS:

MOV TL0,#30H
MOV TH0,#0F8H
PUSH PSW
PUSH ACC
push p2

SETB PSW.3


MOV A,DISPBITS
ADD A,#30H;  30H--DISPBUFFER
MOV R0,A
MOV A,@R0
mov p2,a
setb p3.4
nop
clr p3.4 

INC DISPBITS
MOV A,DISPBITS
clr c
subb a,#05h
JNC DISPEND
SJMP RETURN2MS

DISPEND:

MOV DISPBITS,#00H
CLR DISPFLAG
CLR TR0

RETURN2MS:

pop p2
POP ACC
POP PSW

RETI


;#################

KEYSCAN:

ORL P3,#0FH
MOV A,P3
ANL A,#0FH
;MOV 25H,A


;MOV A,25H                 ;取出本次所读键值
XRL A,#0FH                ;低四位
JZ KEYUP                  ;没有按键转走


XRL A,#0FH 
               ;恢复A中键值
;jnb acc.0,KEYIS1
;clr acc.0
CJNE A,25h,KEYne0       ;是否与上次读键相等,不等则转走
          ;时间设置键是否按下,按下则转走处理


jnb acc.0,KEYIS1          ;;;;;;
JNB K1FLAG,KEY1        ;时间设置键是否刚抬起

CLR K1FLAG              ;清时间设置键按下标志
MOV FLASHCOUNT,#00H
SETB UPDATEDISPFLAG
MOV DISPNO,#01H
CLR INNORMALDISPFLAG        ;清非正常标志
clr  flashflag



key1:                     ;其余键判断

JNB ACC.1,KEYIS2
JNB ACC.2,KEYIS3
JNB ACC.3,KEYIS4

AJMP RETURNKEY

KEYne0:

ajmp KEYne

KEYIS1:

JB K1FLAG,KEY1           ;时间设置键(k1)已按下,则转其余键判断
MOV R7,#00H              
CLR KEYCONCLICKFLAG
SETB INNORMALDISPFLAG
SETB K1FLAG
clr 23h.4
lcall output

aJMP KEYYEAR             ;k1刚按下,则不再判断其余键--一次只处理一个按键


KEYIS2:                  ;手工步进键(k2)

MOV R7,#01H
CLR KEYCONCLICKFLAG
aJMP KEYYEAR


KEYIS3:                 ;设置时移位键(k3)

MOV R7,#02H
CLR KEYCONCLICKFLAG
aJMP KEYYEAR

KEYIS4:                 ;增一键

MOV R7,#03H
SETB KEYCONCLICKFLAG

KEYYEAR:

INC KEYLENGTH                   ;键年龄增1
JNB KEYRUNFLAG,KEYRUN           ;是否已执行,没执行转执行
JNB KEYCONCLICKFLAG,RETURNKEY   ;已执行,判断是否允许连击,不允许转退出
MOV A,KEYLENGTH
clr c                 
subb A,#19H           ;允许连击,则判断键年龄(一秒击四次--250ms一次)是否到,不到转退出
jc returnkey

KEYRUN:

SETB KEYRUNFLAG                 ;设置运行标志
MOV KEYLENGTH,#00H              ;键年龄清0
MOV DPTR,#KEYVALUERUN           ;
MOV A,R7
RL A
JMP @A+DPTR

KEYVALUERUN:

AJMP K1
AJMP K2
AJMP K3
AJMP K4

KEYUP:                  ;按键全部抬起

JNB K1FLAG,KEYup1        ;时间设置键是否刚抬起

MOV A,SETTIMENO
RL A
DEC A
ORL A,#20H
MOV R0,A
MOV A,SETTIMEHOUR
MOVX @R0,A
INC R0
MOV A,SETTIMEMINATE
MOVX @R0,A

CLR K1FLAG              ;清时间设置键按下标志
MOV FLASHCOUNT,#00H
SETB UPDATEDISPFLAG
MOV DISPNO,#01H
CLR INNORMALDISPFLAG        ;清非正常标志
clr  flashflag

keyup1:

MOV A,#0FH              ;恢复本次读键值



KEYNE:                  ;相临两次读键值不等,即没有按键

MOV KEYLENGTH,#00H      ;键年龄清零
CLR KEYRUNFLAG          ;清已运行标志
MOV 25h,A            ;保存本次按键值

RETURNKEY:

RET


;##################


K1:


MOV SETTIMENO,#01h        ;当前运行号作为当前设置号

MOV A,SETTIMENO
RL A                       ;
DEC A                      ;
ORL A,#20H                 ;计算时钟芯片内地址--(当前设置号*2-1)+20H
MOV R0,A
MOVX A,@R0                 ;取出原设置时间--小时
MOV SETTIMEHOUR,A          ;放入SETTIMEHOUR

INC R0 
MOVX A,@R0                 ;取出原设置时间--分钟
MOV SETTIMEMINATE,A       ;放入SETTIMEMINATE

MOV A,SETTIMEHOUR          ;
SWAP A                     ;
ANL A,#0FH                 ;取小时的十位
MOV TEMPKEY,A              ;放入调整区
MOV DISPNO,#02H            ;设置显示号
MOV LOOPNO,#00H            ;设置位置号为0
MOV FLASHPOS,#30H          ;闪烁位对应显缓30H


SETB UPDATEDISPFLAG        ;设置更新显缓标志
SETB FLASHFLAG             ;设置闪烁标志


LJMP RETURNKEY

;##########################


K2:

JB K2FLAG,K20              ;             
SETB K2FLAG                ;如第一次按下k2,则设置按下标志

K20:

JB K1FLAG,K2SETTIME        ;如k1按下,则转时间设置处理

jnb runstatusflag,r1
jb faoffflag,r1

clr madarunflag
SETB FAOFFFLAG             ;如k1未按下,则按手工步进处理--关闭阀
MOV FAOFFTIME,#00H         
clr 23H.0
clr 23h.1
clr 23h.2
clr 23h.3
lcall output                 ;输出控制


MOV RUNHOUR,#00H
MOV RUNMINATE,#00H
MOV A,#00H
MOV R0,#40H
MOVX @R0,A                 ;
MOV A,#00H
inc r0
MOVX @R0,A                 ;剩余时间清0,并记录;
MOV a,RUNNO
inc r0
MOVX @R0,A

SETB UPDATEDISPFLAG
MOV DISPNO,#01H            ;设置显示号;

r1:

LJMP RETURNKEY

K2SETTIME:

MOV A,SETTIMENO
RL A
DEC A
ORL A,#20H
MOV R0,A
MOV A,SETTIMEHOUR
MOVX @R0,A
INC R0
MOV A,SETTIMEMINATE
MOVX @R0,A

INC SETTIMENO            
MOV A,SETTIMENO
clr c
subb a,#07h
Jc READTIME
MOV SETTIMENO,#01H

READTIME:

MOV A,SETTIMENO
RL A
DEC A
ORL A,#20H
MOV R0,A
MOVX A,@R0
MOV SETTIMEHOUR,a

INC R0 
MOVX A,@R0
MOV SETTIMEMINATE,a

MOV A,SETTIMEHOUR
SWAP A
ANL A,#0FH
MOV TEMPKEY,A
MOV DISPNO,#02H
MOV LOOPNO,#00H
MOV FLASHPOS,#30H


SETB UPDATEDISPFLAG
SETB FLASHFLAG

LJMP RETURNKEY


;###########################

K3:

jb k1flag,k30


ljmp returnkey

k30:

INC LOOPNO
MOV A,LOOPNO
clr c
subb a,#04h
Jc K31
MOV LOOPNO,#00H

K31:

MOV A,LOOPNO
RL A
MOV DPTR,#K32
JMP @A+DPTR

K32:

AJMP POS1  
AJMP POS2  
AJMP POS3  
AJMP POS4

  
RETURNK3:

JB K3FLAG,K33
SETB K3FLAG

K33:

SETB FLASHFLAG
SETB UPDATEDISPFLAG
MOV DISPNO,#02H            ;设置显示号


LJMP RETURNKEY 



;#################

POS1:


MOV A,SETTIMEMINATE
aNL A,#0F0H
ORL A,TEMPKEY
MOV SETTIMEMINATE,A


MOV A,SETTIMEHOUR
ANL A,#0F0H
SWAP A
MOV TEMPKEY,A
MOV FLASHPOS,#30H


LJMP RETURNK3



POS2:

MOV A,SETTIMEHOUR
ANL A,#0FH
SWAP A
ORL A,TEMPKEY
SWAP A
MOV SETTIMEHOUR,A

MOV A,SETTIMEHOUR
ANL A,#0FH
MOV TEMPKEY,A
MOV FLASHPOS,#31H

LJMP RETURNK3


POS3:

MOV A,SETTIMEHOUR
aNL A,#0F0H
oRL A,TEMPKEY
MOV SETTIMEHOUR,A


MOV A,SETTIMEMINATE
ANL A,#0F0H
SWAP A
MOV TEMPKEY,A
MOV FLASHPOS,#32H

LJMP RETURNK3



POS4:


MOV A,SETTIMEMINATE
ANL A,#0FH
SWAP A
ORL A,TEMPKEY
SWAP A
MOV SETTIMEMINATE,A


MOV A,SETTIMEMINATE
ANL A,#0FH
MOV TEMPKEY,A
MOV FLASHPOS,#33H


LJMP RETURNK3



;#################

K4:


jnb k1flag,returnk4


SETB UPDATEDISPFLAG
SETB FLASHFLAG
INC TEMPKEY
mov a,loopno
cjne a,#02h,k40

clr c
mov a,tempkey
subb a,#06h
jc returnk4
mov tempkey,#00h
sjmp returnk4

k40:

clr c
mov a,tempkey
SUBB A,#0AH

JC RETURNK4
MOV TEMPKEY,#00H

RETURNK4:
mov a,loopno
cjne a,#00h,l1
mov a,settimehour
anl a,#0fh
swap a
orl a,tempkey
swap a
mov settimehour,a
sjmp returnk41

l1:

cjne a,#01h,l2
mov a,settimehour
anl a,#0f0h
;swap a
orl a,tempkey
;swap a
mov settimehour,a
sjmp returnk41

l2:

cjne a,#02h,l3
mov a,settimeminate
anl a,#0fh
swap a
orl a,tempkey
swap a
mov settimeminate,a
sjmp returnk41

l3:

mov a,settimeminate
anl a,#0f0h
orl a,tempkey
mov settimeminate,a


returnk41:

LJMP RETURNKEY



;######################

UPDATEDISPBUFFER:

JNB UPDATEDISPFLAG,LJ
MOV A,DISPNO

DISPNO0:

CJNE A,#00H,DISPNO1
MOV 30H,#09H
MOV 31H,#19H
MOV 32H,#29H
MOV 33H,#39H
MOV 34H,#49H


LJ:

LJMP FLASH

DISPNO1:

CJNE A,#01H,DISPNO2
MOV A,RUNHOUR
ANL A,#0F0H
SWAP A
ORL A,#00H
MOV 30H,A

MOV A,RUNHOUR
ANL A,#0FH
ORL A,#10H
MOV 31H,A

MOV A,RUNMINATE
ANL A,#0F0H
SWAP A
ORL A,#20H
MOV 32H,A

MOV A,RUNMINATE
ANL A,#0FH
ORL A,#30H
MOV 33H,A

MOV A,RUNNO
ORL A,#40H
MOV 34H,A


LJMP FLASH

DISPNO2:

CJNE A,#02H,FLASH
MOV A,SETTIMEHOUR
ANL A,#0F0H
SWAP A
ORL A,#00H
MOV 30H,A

MOV A,SETTIMEHOUR
ANL A,#0FH
ORL A,#10H
MOV 31H,A

MOV A,SETTIMEMINATE
ANL A,#0F0H
SWAP A
ORL A,#20H
MOV 32H,A

MOV A,SETTIMEMINATE
ANL A,#0FH
ORL A,#30H
MOV 33H,A

MOV A,SETTIMENO
ORL A,#40H
MOV 34H,A


FLASH:

CLR UPDATEDISPFLAG

JB INNORMALDISPFLAG,D1
jnb runstatusflag,d0
clr flashflag
INC FLASHCOUNT
MOV A,FLASHCOUNT
clr c
subb A,#32H
Jc RETURNUPDATE
CPL 23h.4
lcall output
MOV FLASHCOUNT,#00H 
SJMP RETURNUPDATE

d0:

clr 23h.4
lcall output
SJMP RETURNUPDATE

D1:

;JNB FLASHFLAG,RETURNUPDATE
INC FLASHCOUNT
MOV A,FLASHCOUNT
clr c
subb A,#19H
Jc d2
CPL BLACKFLAG
MOV FLASHCOUNT,#00H

d2:

MOV R0,FLASHPOS
MOV A,FLASHPOS
ANL A,#0FH
SWAP A
JB BLACKFLAG,BLACK
ORL A,TEMPKEY
SJMP SETFLASH

BLACK:

ORL A,#0FH

SETFLASH:


MOV @R0,A


RETURNUPDATE:

RET

END













































⌨️ 快捷键说明

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