📄 display2.dt.bak
字号:
;=======================================
;create by daiwenchao on 2004/12/1
;程序空间占用1.7K
;初步调试通过,除NTC外,其余功能均实现
;版本号 LD3902-1.0
;关键处均有详细中文注释
;=======================================
;To define the general (Status) registers
R0 EQU 0
R1 EQU 1
TCC EQU 1
R2 EQU 2
PC EQU 2
R3 EQU 3
STATUS EQU 3
R4 EQU 4
PSR EQU 4
R5 EQU 5
PORT5 EQU 5
R6 EQU 6
PORT6 EQU 6
R7 EQU 7
PORT7 EQU 7
R8 EQU 8
R9 EQU 9
RA EQU 0XA
RB EQU 0XB
R3F EQU 0X3F
IOC50 EQU 0X5
IOC60 EQU 0X6
IOC70 EQU 0X7
IOCB0 EQU 0XB
IOCE0 EQU 0XE
IOCF0 EQU 0XF
KEYTEST EQU 0X0D;键值存放缓冲区
KEYRESULT EQU 0X0E;键值结果存放处
; .0 cancel SW1 P60.0
; .1 defrost SW3 P60.1
; .2 reheat SW4 P60.2
; .3 darker SW5 P60.3
; .4 ligher SW6 P60.4
; .5 start SW2 P60.7
KEYSCAN_TIME EQU 0X0F;键盘扫描时间缓冲区
_100US EQU 0X10;2.5MS计时缓冲区
DISP_BUF EQU 0X11;段时序缓冲区
DISP_REAL EQU 0X12;段时序实际存放处
DISPBUF0 EQU 0X14;显示缓冲区1
DISPBUF1 EQU 0X15;显示缓冲区2
DISPBUF2 EQU 0X16;显示缓冲区3
MODEBUF EQU 0X17;模式缓冲区
;.0解冻模式
;.1重新加热模式
;.2正常模式
RUNALLOW EQU 0X18;按START键开始运行标志
;.0运行加热状态
;.1马达上升
;.2马达下降
DARKE_GRADE EQU 0X19;颜色档位缓冲区
TESTERROR_FLAG EQU 0X1A;各种检测警告方式标志
;.0;刚上电标志
;.1;未进入烘烤状态按CANCEL键标志
;.2;面包烤完或烘烤中按CANCEL键标志
;.3;烘烤时按CANCEL键标志
;.4;按下START键,20S内未检测下限计时标志
;.5;按下START键,8S内检测到下限计时标志
;.6;同时检测出上限开关有效标志
;.7;睡眠计时标志
RUN2_5MS EQU 0X1B;运行时的计时
RUN_500MS EQU 0X1C;运行100MS计时
RUN_2S EQU 0X1D;运行2秒计时
TEST_UPTIME EQU 0X1E;刚开始上电28S内检测上限行程开关计时
TEST_UPTIME1 EQU 0X1F;未进入烧烤状态按CANCEL键28S内检测上限行程开关计时
TEST_UPTIME2 EQU 0X2B;面包烤完或烧烤过程中按CANCEL键8S内检测到上限行程开关计时
TEST_UPTIME3 EQU 0X21;正常烧烤状态下按CANCEL键20S内为发现上限性车形成开关计时
TEST_DOWNTIME EQU 0X22;按下START键20S内未检测到下限行程开关计时
TEST_DOWNTIME1 EQU 0X23;按下START键8S内发现下限行程开关计时
TEST_SLEEPTIME EQU 0X24;未运行状态下,2分中进入睡眠模式计时
T1S_FLAG EQU 0X25;液晶闪烁效果处理
TESTSELF_TIME EQU 0X26;自检时间
RUN_STARTFLAG EQU 0X27;开机计时标志
ERROR_MODE EQU 0X28;出错模式标志
VOICE_FLAG EQU 0X29;蜂鸣器运行标志
VOICE_TIME EQU 0X2A;蜂鸣器频率时间
MOTOR_MOVE EQU 0X31;马达上升下降标志
;.0马达上升
;.1马达下降
SLEEP_MODE EQU 0X2D;睡眠模式
KEY_SKIPFLAG EQU 0X2E;键弹起标志,
;==0键未弹起
;==1键弹起
KEYRESULT_BUF EQU 0X2F;历史键值存放缓冲区,为判断键是否被弹起和前端的消抖用。
KEYFIRST_FLAG EQU 0X30;处理前端消抖时,判断键是否曾经被按下的标志
ADDORSUBCHANGE_FLAG EQU 0X32;运行时候按加减键标志(运行时候按+-键则时间处理部分有所不同)
DISPBITTIME_FLAG EQU 0X36
VOICE_BEEP EQU 0X37;蜂鸣器驱动
VOICE_ERROR EQU 0X38;出错模式4声响标志
RUN25MS EQU 0X39
;=============================
;+++++++程序在这里开始了++++++
;=============================
ORG 0X0FFF
JMP RESET
ORG 0X000
NOP
;=============================
;+++++++中断服务程序入口++++++
;=============================
IN_INT:
DISI
MOV R8,A
SWAP R8
MOV A,STATUS
MOV R9,A
SWAP R9
MOV A,R4
MOV RA,A
SWAP RA
BC R3,5
BC R3,6
INT_TIME:
JBC R3F,0
JMP TBT
BC R3F,0
JMP INT_END
;==============================
;++++++至此入口定时器溢出++++++
;++++++溢出时间为100US+++++++++
;++++++在此入口处理蜂鸣器频率++
;==============================
TBT:
INC _100US
JBC VOICE_FLAG,0
JMP VOICE1
JBC VOICE_FLAG,1
JMP VOICE3
JBC VOICE_FLAG,2
JMP VOICE1
JMP VOICE_END
VOICE3:
JBC VOICE_ERROR,0
JMP VOICE1
JMP VOICE_END
VOICE1:
COM VOICE_BEEP
JBS VOICE_BEEP,0
JMP VOICE2
MOV A,@0B00100000
OR PORT5,A
JMP VOICE_END
VOICE2:
MOV A,@0B11011111
AND PORT5,A
VOICE_END:
MOV A,@20
SUB A,_100US
JBC STATUS,0
JMP IS_FULL
JMP TBT_END
;==============================
;+++++转到此入口则2.ms时间到
;+++++处理键扫描
;+++++液晶段码时序标志
;+++++闪烁效果的取反
;+++++蜂鸣器计时
;==============================
IS_FULL:
CLR _100US
BS DISPBITTIME_FLAG,0;液晶显示时序标志
INC KEYSCAN_TIME ;键盘扫描时间
;==============================
;==============================
INC RUN2_5MS
MOV A,@10
SUB A,RUN2_5MS
JBS STATUS,0
JMP TBT_END
;==============================
;++++++++++25MS入口++++++++++++
;==============================
RUN25MS_ENTER:
CLR RUN2_5MS
JBC VOICE_FLAG,0 ;蜂鸣器处理
JMP INCVOICE_TIME
JBC VOICE_FLAG,1
JMP INCVOICE_TIME
JBC VOICE_FLAG,2
JMP INCVOICE_TIME
JMP END_VOICE
INCVOICE_TIME:
INC VOICE_TIME
END_VOICE:
INC RUN25MS
MOV A,@20
SUB A,RUN25MS
JBS STATUS,0
JMP TBT_END
;=============================
;++++++++++500MS入口++++++++++
;++此入口处理马达上升下降图标
;++液晶闪烁效果的处理+++++++++
;=============================
CLR RUN25MS
COM T1S_FLAG ;液晶闪烁效果标志每0.5秒一次
BC STATUS,0
RLC MOTOR_MOVE
JBS MOTOR_MOVE,4
JMP RUN_500MSINC
CLR MOTOR_MOVE
BS MOTOR_MOVE,0
RUN_500MSINC:
INC RUN_500MS
MOV A,@4
SUB A,RUN_500MS
JBS STATUS,0
JMP TBT_END
CLR RUN_500MS
;=============================
;++++开机自检时间的计时+++++++
;+此入口以下则时间单位为2秒+++
;=============================
INC TESTSELF_TIME
;=============================
;+++++处理运行时间入口++++++++
;=============================
JUDGERUN_TIME:
JBC RUNALLOW,0
JMP RUNINC_2S
JMP RUNCLR_2S
RUNINC_2S:
INC RUN_2S
CLR TEST_SLEEPTIME
JMP ERRTEST_ENTRANCE
RUNCLR_2S:
CLR RUN_2S
INC TEST_SLEEPTIME
;=============================
;++此入口为各种错误检验计时+++
;=============================
ERRTEST_ENTRANCE:
JBS TESTERROR_FLAG,0
JMP TEST_UPLIMIT
INC TEST_UPTIME
TEST_UPLIMIT:
JBS TESTERROR_FLAG,1
JMP TEST_UPLIMIT1
INC TEST_UPTIME1
TEST_UPLIMIT1:
JBS TESTERROR_FLAG,2
JMP TEST_UPLIMIT2
INC TEST_UPTIME2
TEST_UPLIMIT2:
JBS TESTERROR_FLAG,3
JMP TEST_DOWNLIMIT
INC TEST_UPTIME3
TEST_DOWNLIMIT:
JBS TESTERROR_FLAG,4
JMP TEST_DOWNLIMIT1
INC TEST_DOWNTIME
TEST_DOWNLIMIT1:
JBS TESTERROR_FLAG,5
JMP TBT_END
INC TEST_DOWNTIME1
TBT_END:
BC R3F,0
MOV A,@206
MOV TCC,A
INT_END:
SWAPA RA
MOV R4,A
SWAPA R9
MOV STATUS,A
SWAPA R8
RETI
;==========================
;+++++++++中断结束+++++++++
;==========================
;==========================
;++上电复位后,转至此入口++
;==========================
ORG 0X0080
RESET:
JMP START
ADD A,@0XFF
ADD A,@0XFF
ADD A,@0XFF
ADD A,@0XFF
ADD A,@0XFF
ADD A,@0XFF
ADD A,@0XFF
ADD A,@0XFF
START:
DISI
WDTC
MOV A,@0X08
MOV R4,A
CLR_RAM:
CLR R0
INC R4
MOV A,R4
SUB A,@0x3f
JBC R3,0
JMP CLR_RAM
MOV A,@0X40+0X20
MOV R4,A
CLR_BANK1:
CLR R0
INC R4
MOV A,R4
SUB A,@0X40+0X3E
JBC R3,0
JMP CLR_BANK1
MOV A,@0X80+0X20
MOV R4,A
CLR_BANK2:
CLR R0
INC R4
MOV A,R4
SUB A,@0X80+0X3E
JBC R3,0
JMP CLR_BANK2
MOV A,@0XC0+0X20
MOV R4,A
CLR_BANK3:
CLR R0
INC R4
MOV A,R4
SUB A,@0XC0+0X3E
JBC R3,0
JMP CLR_BANK3
CLR R4
MOV A,@0B00000000;I/O口的设置
IOW IOC70
CLR PORT7
MOV A,@0B00000000
IOW IOC60
CLR PORT6
MOV A,@0B11000111;p56,57为上下限行程开关的检测
IOW IOC50 ;P55,54,43为蜂鸣器马达和加热口的控制设为输出
CLR PORT5
CLR _100US
CLR DISP_BUF
CLR DISP_REAL
CLR KEYTEST
CLR KEYRESULT
CLR KEYSCAN_TIME
BS DISP_BUF,0
BS DISP_REAL,0
BS T1S_FLAG,0
CLR DARKE_GRADE
BS DARKE_GRADE,0
CLR TESTSELF_TIME
BC RUN_STARTFLAG,0
CLR TESTERROR_FLAG
BS TESTERROR_FLAG,0;刚开始上电计时标志,出错模式检验
CLR MODEBUF
BS MODEBUF,2
CLR MOTOR_MOVE
BS MOTOR_MOVE,0
CLR RUNALLOW
BS RUNALLOW,1
BC SLEEP_MODE,0
CLR VOICE_BEEP
BS VOICE_BEEP,1
BC KEYFIRST_FLAG,0
CLR KEY_SKIPFLAG
CLR KEYRESULT_BUF
CLR VOICE_TIME
BS VOICE_FLAG,2
MOV A,@255
MOV DISPBUF0,A
MOV DISPBUF1,A
MOV DISPBUF2,A
MOV A,@0X00 ;2频
CONTW
MOV A,@6
MOV TCC,A
MOV A,@0B00000001
IOW IOCF0
NOP
ENI
MAIN:
CALL KEY_SCAN ;键盘扫描
CALL SET_MODE ;模式设定
WDTC
CALL DISP_MODE ;模式显示
WDTC
CALL MOTOR_RUN ;马达动作
WDTC
CALL TEST_VOICE ;蜂鸣器
BS STATUS,5
BC STATUS,6
CALL TEST_ERROR ;出错检验
WDTC
CALL RUN_OPERATE ;运行处理
WDTC
CALL DISPLAY ;显示实体
BC STATUS,5
BC STATUS,6
WDTC
JMP MAIN
;========================
;+++++++主程序结束+++++++
;========================
;========================
;+++++蜂鸣器控制程序+++++
;========================
TEST_VOICE:
JBC VOICE_FLAG,0
JMP NOR_VOICE
JBC VOICE_FLAG,1
JMP ERR_VOICE
JBC VOICE_FLAG,2
JMP LONG_VOICE
JMP TESTVOICE_END
NOR_VOICE:
MOV A,@5
SUB A,VOICE_TIME
JBS STATUS,0
JMP TESTVOICE_END
CLR VOICE_TIME
BC VOICE_FLAG,0
JMP TESTVOICE_END
ERR_VOICE:
MOV A,@17
SUB A,VOICE_TIME
JBS STATUS,0
JMP SET_VOICE
MOV A,@32
SUB A,VOICE_TIME
JBS STATUS,0
JMP CLR_VOICE
MOV A,@47
SUB A,VOICE_TIME
JBS STATUS,0
JMP SET_VOICE
MOV A,@62
SUB A,VOICE_TIME
JBS STATUS,0
JMP CLR_VOICE
MOV A,@77
SUB A,VOICE_TIME
JBS STATUS,0
JMP SET_VOICE
MOV A,@92
SUB A,VOICE_TIME
JBS STATUS,0
JMP CLR_VOICE
MOV A,@107
SUB A,VOICE_TIME
JBS STATUS,0
JMP SET_VOICE
CLR VOICE_TIME
CLR VOICE_FLAG
CLR VOICE_ERROR
JMP TESTVOICE_END
CLR_VOICE:
BC VOICE_ERROR,0
JMP TESTVOICE_END
SET_VOICE:
BS VOICE_ERROR,0
JMP TESTVOICE_END
LONG_VOICE:
MOV A,@15
SUB A,VOICE_TIME
JBS STATUS,0
JMP TESTVOICE_END
CLR VOICE_TIME
BC VOICE_FLAG,2
JMP TESTVOICE_END
TESTVOICE_END:
RET
;====================
;+++键盘扫描子程序+++
;====================
KEY_SCAN:
MOV A,@10 ;键扫描时间判断
SUB A,KEYSCAN_TIME
JBS STATUS,2
JMP KEY_RETURN
CLR KEYSCAN_TIME
;================================
NOP
MOV A,@0B10011111
IOW IOC60
CALL DELAY
NOP
MOV A,PORT6
MOV KEYTEST,A
JBS KEY_SKIPFLAG,0
JMP KEY_SCANSW100 ;弹起则转查询,存储键值
JMP KEY_SCANSKIP ;未弹起则转查询是否有键按下
;有则置位弹器标志,没有则复位弹起标志
KEY_SCANSW100:
JBS KEYFIRST_FLAG,0;两次比较标志
JMP KEY_SCANSW1
BC KEYFIRST_FLAG,0
JBC KEYTEST,0
JMP KEY_COMPARE1
JBS KEYRESULT_BUF,0
JMP KEY_COMRETURN
BS KEYRESULT,0
BS KEY_SKIPFLAG,0
JMP KEY_JUDSLEORNORM
KEY_COMPARE1:
JBC KEYTEST,1
JMP KEY_COMPARE2
JBS KEYRESULT_BUF,1
JMP KEY_COMRETURN
BS KEYRESULT,1
BS KEY_SKIPFLAG,0
JMP KEY_JUDSLEORNORM
KEY_COMPARE2:
JBC KEYTEST,2
JMP KEY_COMPARE3
JBS KEYRESULT_BUF,2
JMP KEY_COMRETURN
BS KEYRESULT,2
BS KEY_SKIPFLAG,0
JMP KEY_JUDSLEORNORM
KEY_COMPARE3:
JBC KEYTEST,3
JMP KEY_COMPARE4
JBS KEYRESULT_BUF,3
JMP KEY_COMRETURN
BS KEYRESULT,3
BS KEY_SKIPFLAG,0
JMP KEY_JUDSLEORNORM
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -