📄 coffee.asm
字号:
sta DisBuf4,Bank0
jmp DisTimeCom
DisTimerLcd_NoSet:
ldi DisBuf1,0ah
ldi DisBuf2,0ah
ldi DisBuf3,0ah
ldi DisBuf4,0ah
jmp DisTimeCom
DisTimeCom:
DisLed1:
ldi Acc,FLcdTimeSetOn
and LcdOnFlag,Bank0
baz DisLed1Loop
ldi Acc,FTimer500ms
and TimerFlag,Bank0
baz DisLed2
DisLed1Loop:
sbi DisBuf1,00h
baz DisLed1_0
sbi DisBuf1,01h
baz DisLed1_1
sbi DisBuf1,02h
baz DisLed1_2
jmp DisLed1End
DisLed1_0:
jmp DisLed1End
DisLed1_1:
orim LcdRam21,FLcd1b
orim LcdRam11,FLcd1c
jmp DisLed1End
DisLed1_2:
orim LcdRam31,FLcd1adeg
orim LcdRam21,FLcd1b
jmp DisLed1End
DisLed1End:
DisLed2:
ldi Acc,FLcdTimeSetOn
and LcdOnFlag,Bank0
baz DisLed2Loop
ldi Acc,FTimer500ms
and TimerFlag,Bank0
baz DisLed3
DisLed2Loop:
ldi TBR,01h
adi DisBuf2,1
call LedTable
sta DisTemp
eorim DisTemp,0fh
lda DisTemp,Bank0
ba0 $+2
orim LcdRam31,FLcd2a
lda DisTemp,Bank0
ba1 $+2
orim LcdRam21,FLcd2b
lda DisTemp,Bank0
ba2 $+2
orim LcdRam11,FLcd2c
lda DisTemp,Bank0
ba3 $+2
orim LcdRam01,FLcd2d
eorim TBR,0fh
lda TBR,Bank0
ba0 $+2
orim LcdRam11,FLcd2e
lda TBR,Bank0
ba1 $+2
orim LcdRam31,FLcd2f
lda TBR,Bank0
ba2 $+2
orim LcdRam21,FLcd2g
DisLed3:
ldi Acc,FLcdTimeSetOn
and LcdOnFlag,Bank0
baz DisLed3Loop
ldi Acc,FTimer500ms
and TimerFlag,Bank0
baz DisLed4
DisLed3Loop:
ldi TBR,01h
adi DisBuf3,1
call LedTable
sta DisTemp
eorim DisTemp,0fh
lda DisTemp,Bank0
ba0 $+2
orim LcdRam30,FLcd3a
lda DisTemp,Bank0
ba1 $+2
orim LcdRam20,FLcd3b
lda DisTemp,Bank0
ba2 $+2
orim LcdRam10,FLcd3c
lda DisTemp,Bank0
ba3 $+2
orim LcdRam01,FLcd3d
eorim TBR,0fh
lda TBR,Bank0
ba0 $+2
orim LcdRam11,FLcd3e
lda TBR,Bank0
ba1 $+2
orim LcdRam31,FLcd3f
lda TBR,Bank0
ba2 $+2
orim LcdRam21,FLcd3g
DisLed4:
ldi Acc,FLcdTimeSetOn
and LcdOnFlag,Bank0
baz DisLed4Loop
ldi Acc,FTimer500ms
and TimerFlag,Bank0
baz DisLed5
DisLed4Loop:
ldi TBR,01h
adi DisBuf4,1
call LedTable
sta DisTemp
eorim DisTemp,0fh
lda DisTemp,Bank0
ba0 $+2
orim LcdRam30,FLcd4a
lda DisTemp,Bank0
ba1 $+2
orim LcdRam20,FLcd4b
lda DisTemp,Bank0
ba2 $+2
orim LcdRam10,FLcd4c
lda DisTemp,Bank0
ba3 $+2
orim LcdRam00,FLcd4d
eorim TBR,0fh
lda TBR,Bank0
ba0 $+2
orim LcdRam10,FLcd4e
lda TBR,Bank0
ba1 $+2
orim LcdRam30,FLcd4f
lda TBR,Bank0
ba2 $+2
orim LcdRam20,FLcd4g
DisLed5:
LcdRamEnd:
rtni
;===============
KeyCheck:
ldi Acc,FPowerDelay2s
and TimerFlag,Bank0
baz KeyCheckEnd
lda PSeg1,Bank0
sta Seg1Buf,Bank0
lda PSeg2,Bank0
sta Seg2Buf,Bank0
ldi PAOUT,00h
ldi PBOUT,00h
ldi PDOUT,00h
call Delay50us
ldi PULL,1100b
call Delay50us
lda PKey1,Bank0
sta KeyNewData0,Bank0
eorim KeyNewData0,0fh
lda PKey2,Bank0
sta KeyNewData1,Bank0
eorim KeyNewData1,0fh
andim KeyNewData1,0011b
ldi Acc,PZero
and PA
bnz $+2
orim KeyNewData1,0100b
ldi PSeg1M,0fh
ldi PSeg2M,0fh
call Delay50us
lda Seg1Buf,Bank0
sta PSeg1,Bank0
lda Seg2Buf,Bank0
sta PSeg2,Bank0
CntKeyPressNo:
ldi KeyNo,06h
ldi KeyPressNo,00h
lda KeyNewData0,Bank0
sta KeyNewData0Buf,Bank0
lda KeyNewData1,Bank0
sta KeyNewData1Buf,Bank0
CntKeyPressNoLoop:
lda KeyNewData0Buf
shr
sta KeyNewData0Buf
bnc $+2
adim KeyPressNo,01h
lda KeyNewData1Buf
shr
sta KeyNewData1Buf
bnc $+2
orim KeyNewData0Buf,Bit3
sbim KeyNo,01h
bnz CntKeyPressNoLoop
ldi Acc,02h
sub KeyPressNo,Bank0
bnc KeyNewCmpeOld
jmp InitKeyDelayTime
KeyNewCmpeOld:
lda KeyNewData0,Bank0
eor KeyOldData0,Bank0
bnz KeyNewCmpeBuf
lda KeyNewData1,Bank0
eor KeyOldData1,Bank0
bnz KeyNewCmpeBuf
IncKeyLongPressTime:
ldi Acc,01h
addm KeyLongPressTime0,Bank0
ldi Acc,00h
adcm KeyLongPressTime1,Bank0
ldi Acc,00h
adcm KeyLongPressTime2,Bank0
ldi Acc,FHrAndMinLong
and DisFlag,Bank0
bnz CheckMinAndHrPress
ldi Acc,CKeyLongPressTime0
sub KeyLongPressTime0,Bank0
ldi Acc,CKeyLongPressTime1
sbc KeyLongPressTime1,Bank0
ldi Acc,CKeyLongPressTime2
sbc KeyLongPressTime2,Bank0
bnc KeyCheckEnd
ldi Acc,Bit0
and KeyOldData0,Bank0
bnz IntoTimeSetStatus
ldi Acc,Bit1
and KeyOldData0,Bank0
bnz IntoTimeSetStatus
ldi Acc,Bit1
and KeyOldData1,Bank0
bnz IntoProgSetStatus
jmp KeyCheckEnd
CheckMinAndHrPress:
ldi Acc,CHrAndMinLongime0
sub KeyLongPressTime0,Bank0
ldi Acc,CHrAndMinLongime1
sbc KeyLongPressTime1,Bank0
ldi Acc,CHrAndMinLongime2
sbc KeyLongPressTime2,Bank0
bnc KeyCheckEnd
ldi Acc,Bit0
and KeyOldData0,Bank0
baz $+2
andim KeyOldData0,0fh^Bit0
ldi Acc,Bit1
and KeyOldData0,Bank0
baz $+2
andim KeyOldData0,0fh^Bit1
jmp KeyCheckEnd
IntoTimeSetStatus:
ldi Acc,FLcdTimeSetOn
and LcdOnFlag,Bank0
bnz SetMinAndHrLongPress
ldi Acc,FLcdProgOn
and LcdOnFlag,Bank0
bnz SetMinAndHrLongPress
andim LcdOnFlag,0fh^FLcdAutoOn
orim LcdOnFlag,FLcdTimeSetOn
orim DisFlag,FLongAlready
call InitAdjustTime
jmp KeyCheckEnd
SetMinAndHrLongPress:
ldi Acc,FLongAlready
and DisFlag,Bank0
bnz KeyCheckEnd
orim DisFlag,FHrAndMinLong
jmp KeyCheckEnd
IntoProgSetStatus:
ldi Acc,FLcdTimeSetOn
and LcdOnFlag,Bank0
bnz KeyCheckEnd
andim LcdOnFlag,0fh^FLcdAutoOn
orim TimerFlag,FProgPress2s
orim LcdOnFlag,FLcdProgOn
jmp KeyCheckEnd
KeyNewCmpeBuf:
lda KeyNewData0,Bank0
eor KeyBufData0,Bank0
bnz KeyNewToBuf
lda KeyNewData1,Bank0
eor KeyBufData1,Bank0
bnz KeyNewToBuf
DecKeyDelayTime:
sbim KeyDelayTime,01h
bnz KeyCheckEnd
KeyDelayTimeEqu0:
lda KeyNewData0,Bank0
or KeyNewData1,Bank0
bnz $+3
andim DisFlag,0fh^FHrAndMinLong
andim DisFlag,0fh^FLongAlready
ldi KeyLongPressTime2,00h
ldi KeyLongPressTime1,00h
ldi KeyLongPressTime0,00h
lda KeyNewData0,Bank0
eor KeyOldData0,Bank0
sta KeyChaData0,Bank0
lda KeyNewData1,Bank0
eor KeyOldData1,Bank0
sta KeyChaData1,Bank0
lda KeyNewData0,Bank0
sta KeyOldData0,Bank0
lda KeyNewData1,Bank0
sta KeyOldData1,Bank0
ldi Acc,Bit0
and KeyChaData0,Bank0
baz $+2
call KeyMin
ldi Acc,Bit1
and KeyChaData0,Bank0
baz $+2
call KeyHr
ldi Acc,Bit2
and KeyChaData0,Bank0
baz $+2
call KeyOff
ldi Acc,Bit3
and KeyChaData0,Bank0
baz $+2
call KeyOn
ldi Acc,Bit0
and KeyChaData1,Bank0
baz $+2
call KeyAuto
ldi Acc,Bit1
and KeyChaData1,Bank0
baz $+2
call KeyProg
ldi Acc,Bit2
and KeyChaData1,Bank0
baz $+2
call ZeroCheck
jmp InitKeyDelayTime
KeyNewToBuf:
lda KeyNewData0,Bank0
sta KeyBufData0,Bank0
lda KeyNewData1,Bank0
sta KeyBufData1,Bank0
jmp InitKeyDelayTime
InitKeyDelayTime:
ldi Acc,CKeyDelayTime
sta KeyDelayTime,Bank0
jmp KeyCheckEnd
KeyCheckEnd:
rtni
;---------------
KeyOn:
ldi Acc,Bit3
and KeyOldData0,Bank0
baz KeyOnEnd
ldi Acc,FLcdTimeSetOn
and LcdOnFlag,Bank0
baz $+2
call EnterTimeSetOk
call Init60sData
orim SysFlag,FHeatOn
andim LcdOnFlag,0fh^FLcdAutoOn
jmp KeyOnEnd
KeyOnEnd:
rtni
;---------------
KeyOff:
ldi Acc,Bit2
and KeyOldData0,Bank0
baz KeyOnEnd
ldi Acc,FLcdTimeSetOn
and LcdOnFlag,Bank0
baz $+2
call EnterTimeSetOk
andim SysFlag,0fh^FHeatOn
andim LcdOnFlag,0fh^FLcdAutoOn
jmp KeyOffEnd
KeyOffEnd:
rtni
;---------------
KeyHr:
ldi Acc,Bit1
and KeyOldData0,Bank0
baz KeyHrEnd
ldi Acc,FLcdTimeSetOn
and LcdOnFlag,Bank0
bnz IncTimeHr
ldi Acc,FLcdProgOn
and LcdOnFlag,Bank0
bnz IncTimerHr
jmp KeyHrEnd
IncTimeHr:
call InitAdjustTime
adim TimeHrL,01h
daa TimeHrL
ldi Acc,00h
adcm TimeHrH,Bank0
sbi TimeHrH,02h
bnz KeyHrEnd
sbi TimeHrL,04h
bnz KeyHrEnd
ldi TimeHrH,00h
ldi TimeHrL,00h
jmp KeyHrEnd
IncTimerHr:
orim SysFlag,FAutoTimeSet
call InitAdjustTime
adim TimerHrL,01h
daa TimerHrL
ldi Acc,00h
adcm TimerHrH,Bank0
sbi TimerHrH,02h
bnz KeyHrEnd
sbi TimerHrL,04h
bnz KeyHrEnd
ldi TimerHrH,00h
ldi TimerHrL,00h
jmp KeyHrEnd
KeyHrEnd:
rtni
;---------------
KeyMin:
ldi Acc,Bit0
and KeyOldData0,Bank0
baz KeyMinEnd
ldi Acc,FLcdTimeSetOn
and LcdOnFlag,Bank0
bnz IncTimeMin
ldi Acc,FLcdProgOn
and LcdOnFlag,Bank0
bnz IncTimerMin
jmp KeyMinEnd
IncTimeMin:
call InitAdjustTime
adim TimeMinL,01h
daa TimeMinL
ldi Acc,00h
adcm TimeMinH
sbi TimeMinH,06h
bnz KeyMinEnd
ldi TimeMinL,00h
ldi TimeMinH,00h
jmp KeyMinEnd
IncTimerMin:
call InitAdjustTime
orim SysFlag,FAutoTimeSet
adim TimerMinL,01h
daa TimerMinL
ldi Acc,00h
adcm TimerMinH
sbi TimerMinH,06h
bnz KeyMinEnd
ldi TimerMinL,00h
ldi TimerMinH,00h
jmp KeyMinEnd
KeyMinEnd:
rtni
;---------------
KeyAuto:
ldi Acc,Bit0
and KeyOldData1,Bank0
baz KeyAutoEnd
ldi Acc,FLcdTimeSetOn
and LcdOnFlag,Bank0
bnz KeyAutoEnd
ldi Acc,FLcdProgOn
and LcdOnFlag,Bank0
bnz KeyAutoEnd
ldi Acc,FAutoTimeSet
and SysFlag,Bank0
baz KeyAutoEnd
ldi Acc,FHeatOn
and SysFlag,Bank0
bnz KeyAutoEnd
ldi Acc,FLcdAutoOn
and LcdOnFlag,Bank0
baz IntoAutoMode_Key
jmp EscAutoMode_Key
EscAutoMode_Key:
andim LcdOnFlag,0fh^FLcdAutoOn
jmp KeyAutoEnd
IntoAutoMode_Key:
orim LcdOnFlag,FLcdAutoOn
jmp KeyAutoEnd
KeyAutoEnd:
rtni
;---------------
KeyProg:
ldi Acc,Bit1
and KeyOldData1,Bank0
baz KeyProgUnpress
KeyProgPress:
ldi Acc,FLcdProgOn
and LcdOnFlag,Bank0
baz IntoDisTimerLcd
EnterProgSetOk_Key:
call EnterProgSetOk
jmp KeyProgEnd
IntoDisTimerLcd:
andim LcdOnFlag,0fh^FLcdTimeSetOn
orim LcdOnFlag,FLcdProgOn
orim DisFlag,FDisTimerLed
jmp KeyProgEnd
KeyProgUnpress:
ldi Acc,FProgPress2s
and TimerFlag,Bank0
bnz KeyProgEnd
andim LcdOnFlag,0fh^FLcdProgOn
andim DisFlag,0fh^FDisTimerLed
jmp KeyProgEnd
KeyProgEnd:
rtni
ZeroCheck:
Init60sData:
ldi Timer60s3,00h
ldi Timer60s2,00h
ldi Timer60s1,00h
ldi Timer60s0,00h
rtni
;---------------
Delay50us:
ldi Acc,0fh
Delay50usLoop:
nop
nop
nop
nop
sbim Acc,01h
bnz Delay50usLoop
rtni
EnterTimeSetOk:
andim LcdOnFlag,0fh^FLcdTimeSetOn
rtni
EnterProgSetOk:
andim LcdOnFlag,0fh^FLcdProgOn
andim DisFlag,0fh^FDisTimerLed
andim TimerFlag,0fh^FProgPress2s
rtni
;===============
LcdDrive:
ldi Acc,FLcdOff
and LcdFlag,Bank0
baz NoOffLcd
andim LcdFlag,0fh^FLcdOff
call OffAllLcd
jmp LcdDriveEnd
NoOffLcd:
; ldi PSeg1M,0fh
; ldi PSeg2M,0fh
; ldi PSeg1,00h
; ldi PSeg2,00h
ldi PComM,00h
ldi PCom,00h
ldi Acc,FLcdHi
and LcdFlag,Bank0
baz LcdLo
LcdHi:
ldi Acc,CData0
eor LcdDriveCnt,Bank0
baz LcdHi0
ldi Acc,CData1
eor LcdDriveCnt,Bank0
baz LcdHi1
ldi Acc,CData2
eor LcdDriveCnt,Bank0
baz LcdHi2
ldi Acc,CData3
eor LcdDriveCnt,Bank0
baz LcdHi3
jmp LcdDriveEnd
LcdHi0:
lda LcdRam00,Bank0
sta LcdRamBuf0,Bank0
lda LcdRam01,Bank0
sta LcdRamBuf1,Bank0
call SetLcdSeg
ldi PComM,0001b
ldi PCom,1110b
orim LcdFlag,FLcdOff
jmp IncLcdDriveCnt
LcdHi1:
lda LcdRam10,Bank0
sta LcdRamBuf0,Bank0
lda LcdRam11,Bank0
sta LcdRamBuf1,Bank0
call SetLcdSeg
ldi PComM,0010b
ldi PCom,1101b
; orim LcdFlag,FLcdOff
jmp IncLcdDriveCnt
LcdHi2:
lda LcdRam20,Bank0
sta LcdRamBuf0,Bank0
lda LcdRam21,Bank0
sta LcdRamBuf1,Bank0
call SetLcdSeg
ldi PComM,0100b
ldi PCom,1011b
orim LcdFlag,FLcdOff
jmp IncLcdDriveCnt
LcdHi3:
lda LcdRam30,Bank0
sta LcdRamBuf0,Bank0
lda LcdRam31,Bank0
sta LcdRamBuf1,Bank0
call SetLcdSeg
ldi PComM,1000b
ldi PCom,0111b
andim LcdFlag,0fh^FLcdHi
jmp ClrLcdDriveCnt
LcdLo:
ldi Acc,CData0
eor LcdDriveCnt,Bank0
baz LcdLo0
ldi Acc,CData1
eor LcdDriveCnt,Bank0
baz LcdLo1
ldi Acc,CData2
eor LcdDriveCnt,Bank0
baz LcdLo2
ldi Acc,CData3
eor LcdDriveCnt,Bank0
baz LcdLo3
jmp LcdDriveEnd
LcdLo0:
ldi Acc,0fh
eor LcdRam00,Bank0
sta LcdRamBuf0,Bank0
ldi Acc,0fh
eor LcdRam01,Bank0
sta LcdRamBuf1,Bank0
call SetLcdSeg
ldi PComM,0001b
ldi PCom,0001b
orim LcdFlag,FLcdOff
jmp IncLcdDriveCnt
LcdLo1:
ldi Acc,0fh
eor LcdRam10,Bank0
sta LcdRamBuf0,Bank0
ldi Acc,0fh
eor LcdRam11,Bank0
sta LcdRamBuf1,Bank0
call SetLcdSeg
ldi PComM,0010b
ldi PCom,0010b
; orim LcdFlag,FLcdOff
jmp IncLcdDriveCnt
LcdLo2:
ldi Acc,0fh
eor LcdRam20,Bank0
sta LcdRamBuf0,Bank0
ldi Acc,0fh
eor LcdRam21,Bank0
sta LcdRamBuf1,Bank0
call SetLcdSeg
ldi PComM,0100b
ldi PCom,0100b
orim LcdFlag,FLcdOff
jmp IncLcdDriveCnt
LcdLo3:
ldi Acc,0fh
eor LcdRam30,Bank0
sta LcdRamBuf0,Bank0
ldi Acc,0fh
eor LcdRam31,Bank0
sta LcdRamBuf1,Bank0
call SetLcdSeg
ldi PComM,1000b
ldi PCom,1000b
; orim LcdFlag,FLcdHi
jmp ClrLcdDriveCnt
ClrLcdDriveCnt:
ldi LcdDriveCnt,00h
jmp LcdDriveEnd
IncLcdDriveCnt:
adim LcdDriveCnt,01h
jmp LcdDriveEnd
LcdDriveEnd:
rtni
OffAllLcd:
ldi PComM,0fh
ldi PCom,00h
ldi PSeg1M,0fh
ldi PSeg1,00h
ldi PSeg2M,0fh
ldi PSeg2,00h
rtni
SetLcdSeg:
ldi PSeg1M,0fh
ldi PSeg2M,0fh
lda LcdRamBuf0,Bank0
sta PSeg1,Bank0
lda LcdRamBuf1,Bank0
sta PSeg2,Bank0
rtni
Timer0Int:
sta AccBuf,Bank0
andim IRQ,0fh^IET0
ldi Acc_Int,FBuzzerInt
and BuzzerFlag,Bank0
baz Cnt4ms
eorim PEBuf,PBuzzer
sta PE
Cnt4ms:
sbim Timer4ms0,01h
ldi Acc_Int,00h
sbcm Timer4ms1,Bank0
bc Cnt4msEnd
ldi Timer4ms0,CTimer4ms0
ldi Timer4ms1,CTimer4ms1
orim TimerFlag,FTimer4ms
; ldi PAOUT,0fh
; eorim PA,Bit0
Cnt4msEnd:
Timer0IntEnd:
orim IE,IET0
lda AccBuf,Bank0
rtni
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -