📄 coffee.asm
字号:
;***************System Ram
IE equ 00h
IRQ equ 01h
TM0 equ 02h
Rese03 equ 03h
T0L equ 04h
T0H equ 05h
Rese06 equ 06h
Rese07 equ 07h
PA equ 08h
PB equ 09h
PC equ 0ah
PD equ 0bh
PE equ 0ch
PF equ 0dh
TBR equ 0eh
INX equ 0fh
DPL equ 10h
DPM equ 11h
DPH equ 12h
Rese13 equ 13h
Rese14 equ 14h
PULL equ 15h
PAOUT equ 16h
PBOUT equ 17h
PCOUT equ 18h
PDOUT equ 19h
PEOUT equ 1ah
PFOUT equ 1bh
T0S equ 1ch
Rese1d equ 1dh
WDT equ 1eh
Rese1f equ 1fh
;***************User Ram
LcdFlag equ 20h
LcdRam00 equ 21h
LcdRam01 equ 22h
LcdRam10 equ 23h
LcdRam11 equ 24h
LcdRam20 equ 25h
LcdRam21 equ 26h
LcdRam30 equ 27h
LcdRam31 equ 28h
LcdDriveCnt equ 29h
LcdRamBuf0 equ 2ah
LcdRamBuf1 equ 2bh
Acc equ 2ch
KeyBufData0 equ 2dh
KeyBufData1 equ 2eh
KeyNewData0 equ 2fh
KeyNewData1 equ 30h
KeyOldData0 equ 31h
KeyOldData1 equ 32h
KeyChaData0 equ 33h
KeyChaData1 equ 34h
KeyDelayTime equ 35h
Timer4ms0 equ 36h
Timer4ms1 equ 37h
Acc_Int equ 38h
LcdOnFlag equ 39h
DisFlag equ 3ah
DisBuf equ 3bh
DisBuf1 equ 3ch
DisBuf2 equ 3dh
DisBuf3 equ 3eh
DisBuf4 equ 3fh
TimeHrH equ 40h
TimeHrL equ 41h
TimeMinH equ 42h
TimeMinL equ 43h
TimerHrH equ 44h
TimerHrL equ 45h
TimerMinH equ 46h
TimerMinL equ 47h
DisTemp equ 48h
PowerDelay2s2 equ 49h
PowerDelay2s1 equ 4ah
PowerDelay2s0 equ 4bh
Seg1Buf equ 4ch
Seg2Buf equ 4dh
KeyLongPressTime2 equ 4eh
KeyLongPressTime1 equ 4fh
KeyLongPressTime0 equ 50h
Timer500ms1 equ 51h
Timer500ms0 equ 52h
AdjustTimer15s2 equ 53h
AdjustTimer15s1 equ 54h
AdjustTimer15s0 equ 55h
PABuf equ 56h
PEBuf equ 57h
PFBuf equ 58h
TimeSecH equ 59h
TimeSecL equ 5ah
Time1sH equ 5bh
Time1sL equ 5ch
BuzzerOnTime1 equ 5dh
BuzzerOnTime0 equ 5eh
BuzzerOffTime1 equ 5fh
BuzzerOffTime0 equ 60h
BuzzerReTime equ 61h
Timer60s3 equ 62h
Timer60s2 equ 63h
Timer60s1 equ 64h
Timer60s0 equ 65h
KeyNewData0Buf equ 66h
KeyNewData1Buf equ 67h
KeyNo equ 68h
KeyPressNo equ 69h
TimerFlag equ 70h
SysFlag equ 71h
AccBuf equ 72h
BuzzerFlag equ 73h
;***************Const
Bit0 equ 0001B
Bit1 equ 0010B
Bit2 equ 0100B
Bit3 equ 1000B
Bank0 equ 0000b
Bank1 equ 0001b
Bank2 equ 0010b
Bank3 equ 0011b
CData0 equ 0
CData1 equ 1
CData2 equ 2
CData3 equ 3
CData4 equ 4
CKeyDelayTime equ 12
CTimer4ms1 equ 01h
CTimer4ms0 equ 0fh
CKeyLongPressTime2 equ 01h
CKeyLongPressTime1 equ 0fh
CKeyLongPressTime0 equ 04h
CHrAndMinLongime2 equ 00h
CHrAndMinLongime1 equ 04h
CHrAndMinLongime0 equ 0bh
CAdjustTimer15s2 equ 0eh
CAdjustTimer15s1 equ 0ah
CAdjustTimer15s0 equ 06h
CTimer500ms1 equ 07h
CTimer500ms0 equ 0dh
CTime1sH equ 0fh
CTime1sL equ 0ah
CBuzzerOnTime1 equ 07h ;04h
CBuzzerOnTime0 equ 0dh ;0bh
CBuzzerOffTime1 equ 07h ;04h
CBuzzerOffTime0 equ 0dh ;0bh
CBuzzerReTime equ 05h
CTimer60s3 equ 03h
CTimer60s2 equ 0ah
CTimer60s1 equ 09h
CTimer60s0 equ 08h
;***************Flag
;BuzzerFlag
FBuzzerOn equ Bit0
FBuzzerInt equ Bit1
;DisFlag
FDisTimerLed equ Bit0
FHrAndMinLong equ Bit1
FLongAlready equ Bit2
;LcdOnFlag
FLcdTimeSetOn equ Bit0
FLcdPmOn equ Bit1
FLcdAutoOn equ Bit2
FLcdProgOn equ Bit3
;LcdFlag
FLcdOff equ Bit0
FLcdHi equ Bit1
;TimerFlag
FTimer4ms equ Bit0
FPowerDelay2s equ Bit1
FTimer500ms equ Bit2
FProgPress2s equ Bit3
;SysFlag
F24Hr equ Bit0
FAutoTimeSet equ Bit1
FHeatOn equ Bit2
;IE
IET0 equ Bit2
;PA
PZero equ Bit3
;PEBuf
PLed equ Bit2
PBuzzer equ Bit3
;PFBuf
PHeat equ Bit1
;LcdRam00
FLcdProg equ Bit1
FLcd4d equ Bit2
FLcdAuto equ Bit3
;LcdRam01
FLcd3d equ Bit0
FLcdDot equ Bit1
FLcd2d equ Bit2
FLcdTimeSet equ Bit3
;LcdRam10
FLcd4c equ Bit1
FLcd4e equ Bit2
FLcd3c equ Bit3
;LcdRam11
FLcd3e equ Bit0
FLcd2c equ Bit1
FLcd2e equ Bit2
FLcd1c equ Bit3
;LcdRam20
FLcd4b equ Bit1
FLcd4g equ Bit2
FLcd3b equ Bit3
;LcdRam21
FLcd3g equ Bit0
FLcd2b equ Bit1
FLcd2g equ Bit2
FLcd1b equ Bit3
;LcdRam30
FLcdPm equ Bit0
FLcd4a equ Bit1
FLcd4f equ Bit2
FLcd3a equ Bit3
;LcdRam31
FLcd3f equ Bit0
FLcd2a equ Bit1
FLcd2f equ Bit2
FLcd1adeg equ Bit3
;LcdRam31
;FKK equ Acc,Bit0
;***************IO
PCom equ PC
PComM equ PCOUT
PSeg1 equ PB
PSeg1M equ PBOUT
PSeg2 equ PD
PSeg2M equ PDOUT
PKey1 equ PD
PKey1M equ PDOUT
PKey2 equ PB
PKey2M equ PBOUT
;********************Program*******************
org 000h
jmp Reset
nop
org 002h
jmp Timer0Int
nop
; jmp PortInt
rtni
org 010h
; org 07f0h
LedTable:
tjmp
;Xgfe dcba
rtnw 0011b,1111b ;0
rtnw 0000b,0110b ;1
rtnw 0101b,1011b ;2
rtnw 0100b,1111b ;3
rtnw 0110b,0110b ;4
rtnw 0110b,1101b ;5
rtnw 0111b,1101b ;6
rtnw 0000b,0111b ;7
rtnw 0111b,1111b ;8
rtnw 0110b,1111b ;9
rtnw 0100b,0000b ;9
; end
Reset:
nop
nop
nop
nop
nop
ClrUseRam1:
ldi DPH,00h
ldi DPM,02h
ldi DPL,00h
ClrUseRamLoop1:
ldi INX,00h
adim DPL,01h
ldi Acc,00h
adcm DPM,Bank0
ba3 ClrUseRam2
jmp ClrUseRamLoop1
ClrUseRam2:
ldi DPH,01h
ldi DPM,00h
ldi DPL,00h
ClrUseRamLoop2:
ldi INX,00h
adim DPL,01h
ldi Acc,00h
adcm DPM,Bank0
sbi DPM,04h
bnz ClrUseRamLoop2
sbi DPL,00h
bnz ClrUseRamLoop2
ClrAllRamEnd:
nop
InitPort:
ldi PAOUT,0000b
ldi PBOUT,1111b
ldi PB,0000b
ldi PCOUT,1111b
ldi PC,0000b
ldi PDOUT,1111b
ldi PD,0000b
ldi PEOUT,1100b
ldi PE,0000b
ldi PFOUT,0010b
ldi PF,0000b
InitPortEnd:
InitInt:
ldi TM0,0111b
ldi T0H,08h
ldi T0L,02h
orim IE,IET0
InitIntEnd:
InitPowerData:
; call InitBuzzerTime
ldi LcdDriveCnt,00h
ldi TimeHrH,00h
ldi TimeHrL,00h
ldi TimeMinH,00h
ldi TimeMinL,00h
ldi LcdRam00,0fh
ldi LcdRam01,0fh
ldi LcdRam10,0fh
ldi LcdRam11,0fh
ldi LcdRam20,0fh
ldi LcdRam21,0fh
ldi LcdRam30,0fh
ldi LcdRam31,0fh
ldi PowerDelay2s2,01h
ldi PowerDelay2s1,0fh
ldi PowerDelay2s0,04h
ldi Timer500ms1,CTimer500ms1
ldi Timer500ms0,CTimer500ms0
andim TimerFlag,FPowerDelay2s
ReadHrSet:
ldi PBOUT,0000b
call Delay50us
lda PB,Bank0
sta Acc,Bank0
andim Acc,0011b
sbi Acc,00h
bnz MainLoop
orim SysFlag,F24Hr
ldi PBOUT,00h
ldi PB,00h
ldi TimeHrH,00h
ldi TimeHrL,00h
;*******************************
MainLoop:
ldi Acc,FTimer4ms
and TimerFlag,Bank0
baz MainLoop
andim TimerFlag,0fh^FTimer4ms
ldi WDT,08h
call Heat
call Timer
call Buzzer
call LcdRam
call LedCheck
call KeyCheck
call LcdDrive
jmp MainLoop
;===============
Buzzer:
ldi Acc,FBuzzerOn
and BuzzerFlag,Bank0
baz OffBuzzer_Main
IfDecBuzzerOnTime:
lda BuzzerOnTime0,Bank0
or BuzzerOnTime1,Bank0
baz IfDecBuzzerOffTime
orim BuzzerFlag,FBuzzerInt
ldi Acc,01h
subm BuzzerOnTime0,Bank0
ldi Acc,00h
sbcm BuzzerOnTime1,Bank0
jmp BuzzerEnd
IfDecBuzzerOffTime:
lda BuzzerOffTime0,Bank0
or BuzzerOffTime1,Bank0
baz IfDecBuzzerReTime
andim BuzzerFlag,0fh^FBuzzerInt
ldi Acc,01h
subm BuzzerOffTime0,Bank0
ldi Acc,00h
sbcm BuzzerOffTime1,Bank0
jmp OffBuzzer_Main
IfDecBuzzerReTime:
ldi Acc,01h
subm BuzzerReTime,Bank0
bnz ReGiveBuzzerTime
andim BuzzerFlag,0fh^FBuzzerOn
ReGiveBuzzerTime:
ldi BuzzerOnTime0,CBuzzerOnTime0
ldi BuzzerOnTime1,CBuzzerOnTime1
ldi BuzzerOffTime0,CBuzzerOffTime0
ldi BuzzerOffTime1,CBuzzerOffTime1
jmp OffBuzzer_Main
OffBuzzer_Main:
andim PEBuf,0fh^PBuzzer
sta PE
jmp BuzzerEnd
BuzzerEnd:
rtni
InitBuzzerTime:
orim BuzzerFlag,FBuzzerOn
ldi BuzzerReTime,CBuzzerReTime
ldi BuzzerOnTime0,CBuzzerOnTime0
ldi BuzzerOnTime1,CBuzzerOnTime1
ldi BuzzerOffTime0,CBuzzerOffTime0
ldi BuzzerOffTime1,CBuzzerOffTime1
rtni
;===============
LedCheck:
ldi PEOUT,1100b
ldi Acc,FHeatOn
and SysFlag,Bank0
baz OffLed
OnLed:
orim PEBuf,PLed
sta PE,Bank0
jmp LedCheckEnd
OffLed:
andim PEBuf,0fh^PLed
sta PE,Bank0
jmp LedCheckEnd
LedCheckEnd:
rtni
;===============
Heat:
ldi PFOUT,0010b
ldi Acc,FHeatOn
and SysFlag,Bank0
baz OffHeat
OnHeat:
orim PFBuf,PHeat
sta PF,Bank0
jmp HeatEnd
OffHeat:
andim PFBuf,0fh^PHeat
sta PF,Bank0
jmp HeatEnd
HeatEnd:
rtni
;===============
Timer:
CntPowerDelay2s:
ldi Acc,01h
subm PowerDelay2s0,Bank0
ldi Acc,00h
sbcm PowerDelay2s1,Bank0
ldi Acc,00h
sbcm PowerDelay2s2,Bank0
sbi PowerDelay2s2,00h
bnz CntPowerDelay2sEnd
orim TimerFlag,FPowerDelay2s
CntPowerDelay2sEnd:
CntTimer500ms:
sbim Timer500ms0,01h
ldi Acc,00h
sbcm Timer500ms1,Bank0
bc CntTimer500msEnd
ldi Timer500ms1,CTimer500ms1
ldi Timer500ms0,CTimer500ms0
eorim TimerFlag,FTimer500ms
CntTimer500msEnd:
CntTimer15s:
ldi Acc,FLcdTimeSetOn
and LcdOnFlag,Bank0
bnz CntTimer15sLoop
ldi Acc,FLcdProgOn
and LcdOnFlag,Bank0
bnz CntTimer15sLoop
jmp CntTimer15sEnd
CntTimer15sLoop:
ldi Acc,01h
subm AdjustTimer15s0
ldi Acc,00h
sbcm AdjustTimer15s1
ldi Acc,00h
sbcm AdjustTimer15s2
sbi AdjustTimer15s2,00h
bnz CntTimer15sEnd
call EnterTimeSetOk
call EnterProgSetOk
CntTimer15sEnd:
CntSysTime:
ldi Acc,01h
subm Time1sL,Bank0
ldi Acc,00h
sbcm Time1sH,Bank0
bnz CntSysTimeEnd
ldi Time1sL,CTime1sL
ldi Time1sH,CTime1sH
adim TimeSecL,01h
daa TimeSecL
ldi Acc,00h
adcm TimeSecH
sbi TimeSecH,06h
bnz CntSysTimeEnd
ldi TimeSecL,00h
ldi TimeSecH,00h
adim TimeMinL,01h
daa TimeMinL
ldi Acc,00h
adcm TimeMinH
sbi TimeMinH,06h
bnz CheckAutoTime
ldi TimeMinL,00h
ldi TimeMinH,00h
adim TimeHrL,01h
daa TimeHrL
ldi Acc,00h
adcm TimeHrH,Bank0
sbi TimeHrH,02h
bnz CheckAutoTime
sbi TimeHrL,04h
bnz CheckAutoTime
ldi TimeHrH,00h
ldi TimeHrL,00h
CheckAutoTime:
ldi Acc,FLcdAutoOn
and LcdOnFlag,Bank0
baz CheckAutoTimeEnd
lda TimerHrH,Bank0
eor TimeHrH,Bank0
bnz CheckAutoTimeEnd
lda TimerHrL,Bank0
eor TimeHrL,Bank0
bnz CheckAutoTimeEnd
lda TimerMinH,Bank0
eor TimeMinH,Bank0
bnz CheckAutoTimeEnd
lda TimerMinL,Bank0
eor TimeMinL,Bank0
bnz CheckAutoTimeEnd
orim SysFlag,FHeatOn
call Init60sData
CheckAutoTimeEnd
CntSysTimeEnd:
Cnt60s:
ldi Acc,FHeatOn
and SysFlag,Bank0
baz Cnt60sEnd
ldi Acc,01h
addm Timer60s0,Bank0
ldi Acc,00h
adcm Timer60s1,Bank0
ldi Acc,00h
adcm Timer60s2,Bank0
ldi Acc,00h
adcm Timer60s3,Bank0
ldi Acc,CTimer60s0
sub Timer60s0,Bank0
ldi Acc,CTimer60s1
sbc Timer60s1,Bank0
ldi Acc,CTimer60s2
sbc Timer60s2,Bank0
ldi Acc,CTimer60s3
sbc Timer60s3,Bank0
bnc Cnt60sEnd
andim SysFlag,0fh^FHeatOn
call InitBuzzerTime
Cnt60sEnd:
TimerEnd:
rtni
InitAdjustTime:
orim TimerFlag,FTimer500ms
ldi Timer500ms1,CTimer500ms1
ldi Timer500ms0,CTimer500ms0
ldi AdjustTimer15s2,CAdjustTimer15s2
ldi AdjustTimer15s1,CAdjustTimer15s1
ldi AdjustTimer15s0,CAdjustTimer15s0
rtni
;===============
LcdRam:
ldi Acc,FPowerDelay2s
and TimerFlag,Bank0
baz LcdRamEnd
ldi LcdRam00,00h
ldi LcdRam01,00h
ldi LcdRam10,00h
ldi LcdRam11,00h
ldi LcdRam20,00h
ldi LcdRam21,00h
ldi LcdRam30,00h
ldi LcdRam31,00h
DisFlagLcd:
DisTimerSetLcd:
ldi Acc,FLcdTimeSetOn
and LcdOnFlag,Bank0
baz DisProgLcd
ldi Acc,FTimer500ms
and TimerFlag,Bank0
baz DisProgLcd
orim LcdRam01,FLcdTimeSet
DisProgLcd:
ldi Acc,FLcdProgOn
and LcdOnFlag,Bank0
baz DisProgLcdEnd
ldi Acc,FProgPress2s
and TimerFlag,Bank0
bnz $+2
orim LcdRam00,FLcdProg
ldi Acc,FTimer500ms
and TimerFlag,Bank0
baz $+2
orim LcdRam00,FLcdProg
DisProgLcdEnd:
DisAutoLcd:
ldi Acc,FLcdAutoOn
and LcdOnFlag,Bank0
baz $+2
orim LcdRam00,FLcdAuto
DisDotLcd:
ldi Acc,FLcdTimeSetOn
and LcdOnFlag,Bank0
baz DisDotLcd_Prog
ldi Acc,FTimer500ms
and TimerFlag,Bank0
baz DisDotLcdEnd
orim LcdRam01,FLcdDot
jmp DisDotLcdEnd
DisDotLcd_Prog:
; ldi Acc,FLcdProgOn
; and LcdOnFlag,Bank0
; baz $+2
orim LcdRam01,FLcdDot
jmp DisDotLcdEnd
DisDotLcdEnd:
DisPmLcd:
ldi Acc,FLcdPmOn
and LcdOnFlag,Bank0
baz $+2
orim LcdRam30,FLcdPm
DisTimeCharLcd:
ldi Acc,FDisTimerLed
and DisFlag,Bank0
bnz DisTimerLcd
DisTimeLcd:
ldi Acc,F24Hr
and SysFlag,Bank0
bnz DisTimeLcd_Hr_24
DisTimeLcd_Hr_12:
lda TimeHrH,Bank0
or TimeHrL,Bank0
baz Give12ToTimeHr
ldi Acc,03h
sub TimeHrL,Bank0
ldi Acc,01h
sbc TimeHrH,Bank0
bnc DisTimeLcd_Hr_Direct
DisTimeLcd_Hr_Dec12:
orim LcdRam30,FLcdPm
ldi Acc,02h
sub TimeHrL,Bank0
sta DisBuf2,Bank0
das DisBuf2
ldi Acc,01h
sbc TimeHrH,Bank0
sta DisBuf1,Bank0
jmp DisTimeLcd_Min
Give12ToTimeHr:
ldi DisBuf1,01h
ldi DisBuf2,02h
jmp DisTimeLcd_Min
DisTimeLcd_Hr_24:
DisTimeLcd_Hr_Direct:
lda TimeHrH,Bank0
sta DisBuf1,Bank0
lda TimeHrL,Bank0
sta DisBuf2,Bank0
jmp DisTimeLcd_Min
DisTimeLcd_Min:
lda TimeMinH,Bank0
sta DisBuf3,Bank0
lda TimeMinL,Bank0
sta DisBuf4,Bank0
jmp DisTimeCom
DisTimerLcd:
ldi Acc,FAutoTimeSet
and SysFlag,Bank0
baz DisTimerLcd_NoSet
DisTimerLcd_Set:
ldi Acc,F24Hr
and SysFlag,Bank0
bnz DisTimerLcd_Hr_24
DisTimerLcd_Hr_12:
lda TimerHrH,Bank0
or TimerHrL,Bank0
baz Give12ToTimerHr
ldi Acc,03h
sub TimerHrL,Bank0
ldi Acc,01h
sbc TimerHrH,Bank0
bnc DisTimerLcd_Hr_Direct
DisTimerLcd_Hr_Dec12:
orim LcdRam30,FLcdPm
ldi Acc,02h
sub TimerHrL,Bank0
sta DisBuf2,Bank0
das DisBuf2
ldi Acc,01h
sbc TimerHrH,Bank0
sta DisBuf1,Bank0
jmp DisTimerLcd_Min
Give12ToTimerHr:
ldi DisBuf1,01h
ldi DisBuf2,02h
jmp DisTimerLcd_Min
DisTimerLcd_Hr_24:
DisTimerLcd_Hr_Direct:
lda TimerHrH,Bank0
sta DisBuf1,Bank0
lda TimerHrL,Bank0
sta DisBuf2,Bank0
jmp DisTimerLcd_Min
DisTimerLcd_Min:
lda TimerMinH,Bank0
sta DisBuf3,Bank0
lda TimerMinL,Bank0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -