📄 xqb5030a.asm
字号:
MOV A,@EP ; 取表值
MOV LED_1ST,A ; 取选定程序的指示灯状态
CALL GET_WASHTIME ; 取洗衣时间
RET
; ◆◆ 显示数码管高位,判断【水位】键
DISPLAY_4ST
MOV A,LED_4ST
OR A,TWINKLE_DATAH ; 闪烁位
MOV DISP_DATA,A
CALL SEND_DATA ; 段控制
CLRB OUTPUT_LED_4 ; 位控制
CLRB CTRL_LED_4
SETB CTRL_LED_5 ; 下一位显示
NOP
NOP
NOP
NOP
BBS END_BUZZERING,_4ST_END ; 正在结束蜂鸣,按键不响应
BBS TIME_BESPEAK_SUB,_4ST_END ; 正在预约等待,按键不响应
BBS PROC_SPINING,_4ST_END ; 正在脱水,按键不响应
BBS INPUT_KEYVALUE,KEY_TEST_WATLVL
CLRB KEY_WATLVL_L ; 【水位】键没有按下
CLRB KEY_WATLVL_ING
_4ST_END
RET
KEY_TEST_WATLVL ; 检测到【水位】键按下
BBS KEY_WATLVL_ING,_4ST_END
BBS KEY_WATLVL_L,_WATLVL_1
SETB KEY_WATLVL_L
RET
_WATLVL_1
SETB KEY_WATLVL_ING ; 【水位】键正在按下,抬起前不再响应
SETB KEY_BUZZER ; 置鸣响标记
SETB STOP_2S ; 洗衣过程中有键按下,暂停 2″
MOV TIME_BUZZER_4MS,#0 ; 蜂鸣器鸣响计时单元清零
MOV TIME_TURN_4MS,#0 ; 电机转动计时单元清零
MOV TIME_TURN_100MS,#0
MOV A,KEYTIMES_WATLVL
INCW A ; 按键次数 + 1
MOV KEYTIMES_WATLVL,A
CMP KEYTIMES_WATLVL,#4
BLO WATLVL_CTRL_1
MOV KEYTIMES_WATLVL,#0 ; 第 4 次返回
WATLVL_CTRL_1
CMP KEYTIMES_WATLVL,#3
BNE WATLVL_CTRL_2
MOV DW_WATLVL,#20H ; 高水位
JMP WATLVL_CTRL_9
WATLVL_CTRL_2
CMP KEYTIMES_WATLVL,#2
BNE WATLVL_CTRL_3
MOV DW_WATLVL,#10H ; 中水位
JMP WATLVL_CTRL_9
WATLVL_CTRL_3
MOV DW_WATLVL,#0H ; 低水位
WATLVL_CTRL_9
MOVW A,#0
MOV A,KEYTIMES_WATLVL
MOVW A,#TAB_WATLVL
CLRC
ADDCW A
MOVW EP,A
MOV A,@EP
MOV R1,A
AND A,#0FH
MOV LED_3ST,A ; 水位指示灯的值
MOV A,R1
AND A,#30H
MOV DW_WATLVL,A ; 水位分档
MOV A,R1
RORC A
RORC A
RORC A
RORC A
RORC A
RORC A
AND A,#03H
MOV FLAG_WATLVL_BESET,A ; 选定的水位所对应的标记值
CALL GET_WASHTIME ; 取洗衣时间
RET
; ◆◆ 显示数码管低位,判断【预约】键
DISPLAY_5ST
MOV A,LED_5ST
OR A,TWINKLE_DATAL ; 闪烁位
MOV DISP_DATA,A
CALL SEND_DATA ; 段控制
CLRB OUTPUT_LED_5 ; 位控制
CLRB CTRL_LED_5
SETB CTRL_LED_1 ; 下一位显示
NOP
NOP
NOP
NOP
BBS END_BUZZERING,_5ST_END ; 正在结束蜂鸣,按键不响应
BBS TIME_BESPEAK_SUB,_5ST_END ; 正在预约等待,按键不响应
BBS PROC_SOAKING,_5ST_END ; 正在浸泡,按键不响应
BBS PROC_WASHING,_5ST_END ; 正在洗涤,按键不响应
BBS PROC_RINSEING,_5ST_END ; 正在漂洗,按键不响应
BBS PROC_SPINING,_5ST_END ; 正在脱水,按键不响应
BBS INPUT_KEYVALUE,KEY_TEST_BESPEAK
CLRB KEY_BESPEAK_L ; 【预约】键没有按下
CLRB KEY_BESPEAK_1ST
CLRB KEY_BESPEAK_ADD
_5ST_END
RET
KEY_TEST_BESPEAK ; 检测到【预约】键按下
BBS KEY_BESPEAK_L,_BESPEAK_1
SETB KEY_BESPEAK_L
RET
_BESPEAK_1
BBC KEY_BESPEAK_1ST,BESPEAK_CTRL_2
BBS KEY_BESPEAK_ADD,BESPEAK_CTRL_3
CMP TIME_TURN_100MS,#12
BLO _5ST_END
SETB KEY_BESPEAK_ADD ; 预约连续计数
MOV TIME_TURN_4MS,#0
MOV TIME_TURN_100MS,#0
RET
BESPEAK_CTRL_3
CMP TIME_TURN_100MS,#2 ; 每 0.2″加 1
BLO _5ST_END
MOV TIME_TURN_4MS,#0
MOV TIME_TURN_100MS,#0
JMP BESPEAK_CTRL_5
BESPEAK_CTRL_2
SETB KEY_BESPEAK_1ST ; 检测到"预约"键第一次按下
MOV TIME_TURN_4MS,#0 ; 计时 1.5s
MOV TIME_TURN_100MS,#0
SETB KEY_BUZZER ; 置鸣响标记
BESPEAK_CTRL_5
MOV TIME_BUZZER_4MS,#0 ; 蜂鸣器鸣响计时单元清零
MOV A,KEYTIMES_BESPEAK
INCW A
MOV KEYTIMES_BESPEAK,A
CMP KEYTIMES_BESPEAK,#24
BLO BESPEAK_CTRL_1
MOV KEYTIMES_BESPEAK,#0 ; 第 24 次返回
BESPEAK_CTRL_1
MOVW A,#0
MOV A,KEYTIMES_BESPEAK
MOVW A,#TAB_BESPEAK
CLRC
ADDCW A
MOVW EP,A
MOV A,@EP ; 取值
MOV WASHTIME_BESPEAK,A
CALL GET_DISPDATA ; 取显示表值
RET
; ◆◆◆ "过程"按键表 ◆◆◆
TAB_PROC
.DATA.B 0E1H,02DH,069H,0C3H,087H,0F0H
; 上表的说明: 数据的高四位由高到低分别对应脱、漂、洗、浸各过程是否有效(1为有效)
; 低四位由高到低分别对应脱、漂、洗、浸各指示灯是否有效(0为有效)
; 6个数据分别对应按【过程】键的次数
; ◆◆◆ "程序"按键表 ◆◆◆
TAB_PROG
.DATA.B 0EH,0DH,0BH,07H
; 上表的说明: 数据的低四位由高到低分别对应快速、轻柔、加强、标准指示灯是否有效(0为有效)
; 4个数据分别对应按【程序】键的次数
; ◆◆◆ "水位"按键表 ◆◆◆
TAB_WATLVL
.DATA.B 0BH,4DH,09EH,0E7H
; 上表的说明: 数据的低四位由高到低分别对应少量、低位、中位、高位指示灯是否有效(0为有效)
; BIT 8,7 -- 00: 少量水位 选定的水位标记值
; 01: 低位
; 10: 中位
; 11: 高位
; BIT 6,5 -- 00: 低水位
; 01: 中水位
; 10: 高水位
; 4个数据分别对应按【水位】键的次数
; ◆◆◆ "预约"按键表 ◆◆◆
TAB_BESPEAK
.DATA.B 00H,02H,03H,04H,05H,06H,07H,08H,09H,10H,11H,12H
.DATA.B 13H,14H,15H,16H,17H,18H,19H,20H,21H,22H,23H,24H
; 上表的说明: 对应预约时间, BCD码, 单位:小时
; ■■■■■■■■■■■■■■■■■■■■■■■■■
; ■■ ■■
; ■■ 子程序: 移位送 8 位数据 ■■
; ■■ 使用: A,R3(暂存移位次数) ■■
; ■■ ■■
; ■■■■■■■■■■■■■■■■■■■■■■■■■
SEND_DATA
MOV R3,#0
DISP_3
CLRB LED_CLK ; 时钟脉冲
BBS DISP_DATA:7,DISP_1
CLRB LED_DATA ; 数据
JMP DISP_2
DISP_1
SETB LED_DATA
DISP_2
SETB LED_CLK
NOP
NOP
NOP
NOP
MOV A,DISP_DATA
ROLC A ; 左移 1 位
MOV DISP_DATA,A
INC R3
CMP R3,#8 ; 送 8 bit
BLO DISP_3
CLRB LED_CLK
RET
; ■■■■■■■■■■■■■■■■■■■■■■■■■
; ■■ ■■
; ■■ 子程序: 判断【电源】键 ■■
; ■■ ■■
; ■■■■■■■■■■■■■■■■■■■■■■■■■
POWER_CTRL
BBS INPUT_KEYPOWER,KEY_TEST_POWER
CLRB KEY_POWER_L ; 【电源】键没有按下
CLRB KEY_POWER_ING
_POWER_END
RET
KEY_TEST_POWER ; 检测到【电源】键按下
BBS KEY_POWER_ING,_POWER_END
BBS KEY_POWER_L,_POWER_1
SETB KEY_POWER_L
RET
_POWER_1
SETB KEY_POWER_ING ; 【电源】键正在按下,抬起前不再响应
SETB KEY_BUZZER ; 置鸣响标记
MOV TIME_BUZZER_4MS,#0 ; 蜂鸣器鸣响计时单元清零
BBS KEY_POWER,POWER_CTRL_1
SETB KEY_POWER ; 置"上电"
SETB CTRLPOWER ; 控制输出
RET
POWER_CTRL_1
CLRB KEY_POWER ; 置"断电"
CLRB CTRLPOWER ; 控制输出
RET
; ■■■■■■■■■■■■■■■■■■■■■■■■■
; ■■ ■■
; ■■ 子程序: 取选定组合过程对应的洗衣时间 ■■
; ■■ 使用: A,R7,R6 ■■
; ■■ ■■
; ■■■■■■■■■■■■■■■■■■■■■■■■■
GET_WASHTIME
MOV A,FLAG_PROC
AND A,#00001111B ; 取选定的洗衣过程
MOV R7,A
BBC LED_REGULAR,GET_REGULAR ; 根据指示灯状态判断
BBC LED_ENHANCE,GET_ENHANCE
BBC LED_GENTLE,GET_GENTLE
BBC LED_SPEEDY,GET_SPEEDY
RET
GET_REGULAR ; "标准"程序
MOV A,DW_WATLVL ; 水位情况
CLRC
ADDC A,R7
MOV R7,A
MOVW A,#0
MOV A,R7
MOVW A,#TAB_WASHTIME_REGULAR
JMP GET_TIME
GET_ENHANCE ; "加强"程序
MOV A,DW_WATLVL ; 水位情况
CLRC
ADDC A,R7
MOV R7,A
MOVW A,#0
MOV A,R7
MOVW A,#TAB_WASHTIME_ENHANCE
JMP GET_TIME
GET_GENTLE ; "轻柔"程序
MOVW A,#0
MOV A,R7
MOVW A,#TAB_WASHTIME_GENTLE
JMP GET_TIME
GET_SPEEDY ; "快速"程序
MOVW A,#0
MOV A,R7
MOVW A,#TAB_WASHTIME_SPEEDY
GET_TIME
CLRC
ADDCW A
MOVW EP,A
MOV A,@EP
MOV WASHTIME_PROC,A ; 取洗衣时间
CMP WASHTIME_BESPEAK,#0
BNE GET_TIME_END
CALL GET_DISPDATA ; 取显示表值
GET_TIME_END
RET
; ◆◆◆ 各种程序所对应的不同过程的时间表 ◆◆◆
; "标准"程序
TAB_WASHTIME_REGULAR
; 低水位
.DATA.B 00H,00H,13H,00H,00H,00H,31H,00H,09H,00H,00H,00H,27H,00H,39H,54H
; 中水位
.DATA.B 00H,00H,15H,00H,00H,00H,33H,00H,09H,00H,00H,00H,27H,00H,41H,66H
; 高水位
.DATA.B 00H,00H,18H,00H,00H,00H,36H,00H,09H,00H,00H,00H,27H,00H,44H,79H
; "大物"程序
TAB_WASHTIME_ENHANCE
; 低水位
.DATA.B 00H,00H,13H,00H,00H,00H,31H,00H,09H,00H,00H,00H,27H,00H,39H,64H
; 中水位
.DATA.B 00H,00H,15H,00H,00H,00H,33H,00H,09H,00H,00H,00H,27H,00H,41H,76H
; 高水位
.DATA.B 00H,00H,18H,00H,00H,00H,36H,00H,09H,00H,00H,00H,27H,00H,44H,89H
; "快速"程序
TAB_WASHTIME_SPEEDY
.DATA.B 00H,00H,09H,00H,00H,00H,17H,00H,06H,00H,00H,00H,14H,00H,22H,00H
; "轻柔"程序
TAB_WASHTIME_GENTLE
.DATA.B 00H,00H,05H,00H,00H,00H,20H,00H,04H,00H,00H,00H,19H,00H,24H,00H
; ↑ ↑ ↑ ↑ ↑ ↑
; 单洗 洗漂 单脱 漂脱 洗漂脱 浸洗漂脱
;
; 上表的说明: 第 3 字节数据 -- 单洗 FLAG_PROC = xxxx0010
; 第 7 字节数据 -- 洗漂 0110
; 第 9 字节数据 -- 单脱 1000
; 第 13 字节数据 -- 漂脱 1100
; 第 15 字节数据 -- 洗漂脱 1110
; 第 16 字节数据 -- 浸洗漂脱 1111
; 时间单位: 分钟 , 均为 BCD 码
; ■■■■■■■■■■■■■■■■■■■■■■■■■
; ■■ ■■
; ■■ 子程序: 取数码管显示数据 ■■
; ■■ 使用: A,R0,R6,EP ■■
; ■■ ■■
; ■■■■■■■■■■■■■■■■■■■■■■■■■
GET_DISPDATA
MOV R0,A
AND A,#0FH ; 数码管低位
MOV R6,A
MOVW A,#0
MOV A,R6
MOVW A,#TAB_DISPDATA
CLRC
ADDCW A
MOVW EP,A
MOV A,@EP
MOV LED_5ST,A ; 显示值
;
MOV A,R0
RORC A
RORC A
RORC A
RORC A
AND A,#0FH ; 数码管高位
MOV R0,A
CMP A,#0
BNE _H_1
MOV LED_4ST,#0FFH ; 数码管高位暗
RET
_H_1
MOVW A,#0
MOV A,R0
MOVW A,#TAB_DISPDATA
CLRC
ADDCW A
MOVW EP,A
MOV A,@EP
MOV LED_4ST,A ; 显示值
RET
; ▲▲▲ 数码管显示数据表 ▲▲▲
TAB_DISPDATA
.DATA.B 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H
; 0 1 2 3 4 5 6 7
.DATA.B 080H,090H,088H,083H,0C6H,0A1H,086H,08EH
; 8 9 A b C d E F
; ■■■■■■■■■■■■■■■■■■■■■■■■■
; ■■ ■■
; ■■ 子程序: 控制输出 ■■
; ■■ ■■
; ■■■■■■■■■■■■■■■■■■■■■■■■■
CONTROL_OUTPUT
BBS F_INWATER,CTRL_1
CLRB INWATER ; 关闭进水阀
JMP CTRL_2
CTRL_1
SETB INWATER ; 打开进水阀
CTRL_2
BBS F_OUTWATER,CTRL_3
CLRB OUTWATER ; 关闭排水牵引器
JMP CTRL_4
CTRL_3
SETB OUTWATER ; 打开排水牵引器
CTRL_4
BBS F_ELECMOTOR_Z,CTRL_5
CLRB ELECMOTOR_Z ; 电机停正转
JMP CTRL_6
CTRL_5
SETB ELECMOTOR_Z ; 电机正转
CTRL_6
BBS F_ELECMOTOR_F,CTRL_7
CLRB ELECMOTOR_F ; 电机停反转
RET
CTRL_7
SETB ELECMOTOR_F ; 电机反转
RET
; ■■■■■■■■■■■■■■■■■■■■■■■■■
; ■■ ■■
; ■■ 子程序: 各种水流搅拌 ■■
; ■■ 使用: A,EP ■■
; ■■ ■■
; ■■■■■■■■■■■■■■■■■■■■■■■■■
CTRL_WASHING
; 判断选择哪一种洗衣程序
BBC LED_REGULAR,W_REGULAR ; 标准
BBC LED_ENHANCE,W_ENHANCE ; 加强
BBC LED_GENTLE,W_GENTLE ; 轻柔
BBC LED_SPEEDY,W_SPEEDY ; 快速
RET
W_REGULAR ; "标准" 程序
MOV PROG_STEPS,#4 ; 4 步一个周期
MOV A,DW_WATLVL ; 判断水位
CMP A,#20H
BEQ W_REGULAR_HIGH
CMP A,#10H
BEQ W_REGULAR_MIDDLE
CMP A,#0
BEQ W_REGULAR_LOW
RET
W_REGULAR_HIGH
MOVW A,#0
MOV A,ELECTRO_STEPS
MOVW A,#TIMETAB_REGULAR_HIGH ; 高水位: 水流 B
JMP TURN_WASHING
W_REGULAR_MIDDLE
MOVW A,#0
MOV A,ELECTRO_STEPS
MOVW A,#TIMETAB_REGULAR_MIDDLE ; 中水位: 水流 C
JMP TURN_WASHING
W_REGULAR_LOW
MOVW A,#0
MOV A,ELECTRO_STEPS
MOVW A,#TIMETAB_REGULAR_LOW ; 低水位: 水流 D
JMP TURN_WASHING
W_ENHANCE ; "加强" 程序
MOV PROG_STEPS,#4 ; 4 步一个周期
MOV A,DW_WATLVL ; 判断水位
CMP A,#20H
BEQ W_ENHANCE_HIGH
CMP A,#10H
BEQ W_ENHANCE_MIDDLE
CMP A,#0
BEQ W_ENHANCE_LOW
RET
W_ENHANCE_HIGH
MOVW A,#0
MOV A,ELECTRO_STEPS
MOVW A,#TIMETAB_ENHANCE_HIGH ; 高水位: 水流 B
JMP TURN_WASHING
W_ENHANCE_MIDDLE
MOVW A,#0
MOV A,ELECTRO_STEPS
MOVW A,#TIMETAB_ENHANCE_MIDDLE ; 中水位: 水流 C
JMP TURN_WASHING
W_ENHANCE_LOW
MOVW A,#0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -