📄 radio.asm
字号:
tris PA
bcf PCom0
movf LcdRAM00,0
movwf LcdRAMBuf0
movf LcdRAM01,0
movwf LcdRAMBuf1
call CarryDataToSeg
bsf FLcdOff
; bsf FLcdHi
LcdLo1:
movf LcdDriveCnt,0
xorlw 02h
btfss FZ
goto LcdLo2
movlw b'00001101'
tris PA
bcf PCom1
movf LcdRAM10,0
movwf LcdRAMBuf0
movf LcdRAM11,0
movwf LcdRAMBuf1
call CarryDataToSeg
; bsf FLcdOff
; bsf FLcdHi
LcdLo2:
movf LcdDriveCnt,0
xorlw 03h
btfss FZ
goto LcdLo3
movlw b'00001011'
tris PA
bcf PCom2
movf LcdRAM20,0
movwf LcdRAMBuf0
movf LcdRAM21,0
movwf LcdRAMBuf1
call CarryDataToSeg
; bsf FLcdHi
LcdLo3:
movf LcdDriveCnt,0
xorlw 04h
btfss FZ
goto LcdLo4
movlw b'00000111'
tris PA
bcf PCom3
movf LcdRAM30,0
movwf LcdRAMBuf0
movf LcdRAM31,0
movwf LcdRAMBuf1
call CarryDataToSeg
bsf FLcdHi
movlw 001h
movwf LcdDriveCnt
bsf FLcdOff
; bsf FLcdHi
LcdLo4:
btfsc FLcdHi
goto LcdDriveEnd
incf LcdDriveCnt,1
goto LcdDriveEnd
;*****************************
LcdHi:
LcdHi0:
movf LcdDriveCnt,0
xorlw 01h
btfss FZ
goto LcdHi1
movlw b'00001110'
tris PA
bsf PCom0
movlw 0ffh
xorwf LcdRAM00,0
movwf LcdRAMBuf0
movlw 0ffh
xorwf LcdRAM01,0
movwf LcdRAMBuf1
call CarryDataToSeg
bsf FLcdOff
; bsf FLcdOff
LcdHi1:
movf LcdDriveCnt,0
xorlw 02h
btfss FZ
goto LcdHi2
movlw b'00001101'
tris PA
bsf PCom1
movlw 0ffh
xorwf LcdRAM10,0
movwf LcdRAMBuf0
movlw 0ffh
xorwf LcdRAM11,0
movwf LcdRAMBuf1
call CarryDataToSeg
; bsf FLcdHi
LcdHi2:
movf LcdDriveCnt,0
xorlw 03h
btfss FZ
goto LcdHi3
movlw b'00001011'
tris PA
bsf PCom2
movlw 0ffh
xorwf LcdRAM20,0
movwf LcdRAMBuf0
movlw 0ffh
xorwf LcdRAM21,0
movwf LcdRAMBuf1
call CarryDataToSeg
bsf FLcdOff
; bsf FLcdHi
LcdHi3:
movf LcdDriveCnt,0
xorlw 04h
btfss FZ
goto LcdHi4
movlw b'00000111'
tris PA
bsf PCom3
movlw 0ffh
xorwf LcdRAM30,0
movwf LcdRAMBuf0
movlw 0ffh
xorwf LcdRAM31,0
movwf LcdRAMBuf1
call CarryDataToSeg
bcf FLcdHi
movlw 01h
movwf LcdDriveCnt
; bsf FLcdHi
LcdHi4:
btfss FLcdHi
goto LcdDriveEnd
incf LcdDriveCnt,1
goto LcdDriveEnd
LcdDriveEnd:
Page0
goto LcdDriveRet
;*****************************
CarryDataToSeg:
movf LcdRAMBuf0,0
movwf PB
movlw 0fch
andwf PC,1
movlw 003h
andwf LcdRAMBuf1,0
iorwf PC,1
retlw 0
;*****************************
ClearAllLcd:
movlw 000h
tris PA
clrf PA
tris PB
clrf PB
movlw b'00000100'
tris PC
movlw 0fch
andwf PC,1
retlw 0
;*****************************
;*****************************
FillLcdRAM:
Bank1
clrf LcdRAM00
clrf LcdRAM01
clrf LcdRAM10
clrf LcdRAM11
clrf LcdRAM20
clrf LcdRAM21
clrf LcdRAM30
clrf LcdRAM31
FillLed:
btfss FLedFlash
goto FillLedLoop
btfsc F500ms
goto FillHint
FillLedLoop:
btfsc FFMLed
goto DisFMLed
btfsc FAMLed
goto DisAMLed
btfsc FClockLed
goto DisClockLed
btfsc FAlarm1Led
goto DisAlarm1Led
btfsc FAlarm2Led
goto DisAlarm2Led
goto FillHint
DisFMLed:
; Bank1
; bsf FLcdFM
Bank2
movf FMData0,0
movwf BCDData0
movf FMData1,0
movwf BCDData1
call BCDCode
goto DisLedCom
DisAMLed:
; Bank1
; bsf FLcdAM
Bank2
movf AMData0,0
movwf BCDData0
movf AMData1,0
movwf BCDData1
call BCDCode
goto DisLedCom
DisClockLed:
; Bank1
; bsf FLcdDOT
Bank2
movf ClockHour,0
movwf BCDData1
movf ClockMin,0
movwf BCDData0
call BCDCode
goto DisLedCom
DisAlarm1Led:
; Bank1
; bsf FLcdDOT
Bank2
movf Alarm1Hour,0
movwf BCDData1
movf Alarm1Min,0
movwf BCDData0
call BCDCode
goto DisLedCom
DisAlarm2Led:
; Bank1
; bsf FLcdDOT
Bank2
movf Alarm2Hour,0
movwf BCDData1
movf Alarm2Min,0
movwf BCDData0
call BCDCode
goto DisLedCom
DisLedCom:
Bank2
movf KiloBit,0
goto FillKiloLed
FillKiloLedRet:
Bank2
movf HundBit,0
goto FillHundLed
FillHundLedRet:
Bank2
movf TenBit,0
goto FillTenLed
FillTenLedRet:
Bank2
movf OneBit,0
goto FillOneLed
FillOneLedRet:
goto FillHint
FillHint:
DisFMOrAM:
Bank1
btfss FFM
goto DisAMLcd
DisFMLcd:
bsf FLcdFM
goto DisDOT
DisAMLcd:
bsf FLcdAM
goto DisDOT
DisDOT:
btfss FClockLed
goto NoDisDOT
bcf FLcdFM
bcf FLcdAM
Bank3
movlw d'123'
subwf Timer1s,0
Bank1
btfss FC
bsf FLcdDOT
goto FillLcdRAMEnd
NoDisDOT:
FillLcdRAMEnd:
Page0
goto FillLcdRAMRet
FillKiloLed:
call FigureTab
Bank1
movwf DataBuf0
btfsc DataBuf0,0
bsf FLcd1A
btfsc DataBuf0,1
bsf FLcd1B
btfsc DataBuf0,2
bsf FLcd1C
btfsc DataBuf0,3
bsf FLcd1D
btfsc DataBuf0,4
bsf FLcd1E
btfsc DataBuf0,5
bsf FLcd1F
btfsc DataBuf0,6
bsf FLcd1G
FillKiloLedEnd:
goto FillKiloLedRet
FillHundLed:
call FigureTab
Bank1
movwf DataBuf0
btfsc DataBuf0,0
bsf FLcd2A
btfsc DataBuf0,1
bsf FLcd2B
btfsc DataBuf0,2
bsf FLcd2C
btfsc DataBuf0,3
bsf FLcd2D
btfsc DataBuf0,4
bsf FLcd2E
btfsc DataBuf0,5
bsf FLcd2F
btfsc DataBuf0,6
bsf FLcd2G
FillHundLedEnd:
goto FillHundLedRet
FillTenLed:
call FigureTab
Bank1
movwf DataBuf0
btfsc DataBuf0,0
bsf FLcd3A
btfsc DataBuf0,1
bsf FLcd3B
btfsc DataBuf0,2
bsf FLcd3C
btfsc DataBuf0,3
bsf FLcd3D
btfsc DataBuf0,4
bsf FLcd3E
btfsc DataBuf0,5
bsf FLcd3F
btfsc DataBuf0,6
bsf FLcd3G
FillTenLedEnd:
goto FillTenLedRet
FillOneLed:
call FigureTab
Bank1
movwf DataBuf0
btfsc DataBuf0,0
bsf FLcd4A
btfsc DataBuf0,1
bsf FLcd4B
btfsc DataBuf0,2
bsf FLcd4C
btfsc DataBuf0,3
bsf FLcd4D
btfsc DataBuf0,4
bsf FLcd4E
btfsc DataBuf0,5
bsf FLcd4F
btfsc DataBuf0,6
bsf FLcd4G
FillOneLedEnd:
goto FillOneLedRet
;=============================
Org 400h
;=============================
InitAdjustBandTime:
bsf FBandAdjust
InitAdjustClockTime:
bsf FLedFlash
bcf F500ms
Bank3
movlw CAdjustTime
movwf AdjustTime
movlw CTimer500ms
movwf Timer500ms
retlw 0
BandInc:
; bsf FAutoOn
call InitAdjustBandTime
btfss FFM
goto IncAMBand
IncFMBand:
Bank2
movf FMData0,0
movwf DataBuf0
movf FMData1,0
movwf DataBuf1
movlw CFMDataMax0
subwf FMData0,0
btfss FC
decf FMData1,1
movlw CFMDataMax1
subwf FMData1,0
btfss FC
goto IncFMBandLoop
movf DataBuf0,0
movwf FMData0
movf DataBuf1,0
movwf FMData1
goto KeyBandIncEnd
IncFMBandLoop:
movf DataBuf0,0
movwf FMData0
movf DataBuf1,0
movwf FMData1
bsf FSendData
movlw 01h
addwf FMData0,1
movlw 00h
btfsc FC
movlw 01h
addwf FMData1,1
goto KeyBandIncEnd
IncAMBand:
Bank2
movf AMData0,0
movwf DataBuf0
movf AMData1,0
movwf DataBuf1
movlw CAMDataMax0
subwf AMData0,0
btfss FC
decf AMData1,1
movlw CAMDataMax1
subwf AMData1,0
btfss FC
goto IncAMBandLoop
movf DataBuf0,0
movwf AMData0
movf DataBuf1,0
movwf AMData1
goto KeyBandIncEnd
IncAMBandLoop:
movf DataBuf0,0
movwf AMData0
movf DataBuf1,0
movwf AMData1
bsf FSendData
movlw 03h
addwf AMData0,1
movlw 00h
btfsc FC
movlw 01h
addwf AMData1,1
Bank0
movlw 01h
addwf AMAdjust0,1
movlw 00h
btfsc FC
movlw 01h
addwf AMAdjust1,1
; goto KeyBandIncEnd
retlw 0
BandDec:
btfss FFM
goto DecAMBand
DecFMBand:
call InitAdjustBandTime
Bank2
movf FMData0,0
movwf DataBuf0
movf FMData1,0
movwf DataBuf1
movlw CFMDataMin0+1
subwf FMData0,0
btfss FC
decf FMData1,1
movlw CFMDataMin1
subwf FMData1,0
btfsc FC
goto DecFMBandLoop
movf DataBuf0,0
movwf FMData0
movf DataBuf1,0
movwf FMData1
goto KeyBandDecEnd
DecFMBandLoop:
movf DataBuf0,0
movwf FMData0
movf DataBuf1,0
movwf FMData1
bsf FSendData
movlw 01h
subwf FMData0,1
movlw 00h
btfss FC
movlw 01h
subwf FMData1,1
goto KeyBandDecEnd
DecAMBand:
call InitAdjustBandTime
Bank2
movf AMData0,0
movwf DataBuf0
movf AMData1,0
movwf DataBuf1
movlw CAMDataMin0+1
subwf AMData0,0
btfss FC
decf AMData1,1
movlw CAMDataMin1
subwf AMData1,0
btfsc FC
goto DecAMBandLoop
movf DataBuf0,0
movwf AMData0
movf DataBuf1,0
movwf AMData1
goto KeyBandDecEnd
DecAMBandLoop:
movf DataBuf0,0
movwf AMData0
movf DataBuf1,0
movwf AMData1
bsf FSendData
movlw 03h
subwf AMData0,1
movlw 00h
btfss FC
movlw 01h
subwf AMData1,1
Bank0
movlw 01h
subwf AMAdjust0,1
movlw 00h
btfss FC
movlw 01h
subwf AMAdjust1,1
retlw 0
KeyCheck:
movlw 0ffh
tris PB
movwf PB
movlw 007h ;003h
tris PC
iorwf PC,1
movlw CKeyReadDelay
movwf DataBuf0
KeyReadDelayLoop:
decfsz DataBuf0,1
goto KeyReadDelayLoop
clrf DataBuf0
btfsc FKeyPress
goto KeyUnpressCheck
KeyPressCheck:
btfss PKeyBand
goto DecKeyDelayTimePress
btfss PKeyBandInc
goto DecKeyDelayTimePress
btfss PKeyBandDec
goto DecKeyDelayTimePress
btfss PKeyVolInc
goto DecKeyDelayTimePress
btfss PKeyVolDec
goto DecKeyDelayTimePress
btfss PKeyBand1
goto DecKeyDelayTimePress
btfss PKeyBand2
goto DecKeyDelayTimePress
btfss PKeyBand3
goto DecKeyDelayTimePress
btfss PKeyBand4
goto DecKeyDelayTimePress
btfss PKeyBand5
goto DecKeyDelayTimePress
goto InitKeyDelayTime
DecKeyDelayTimePress:
Bank1
decfsz KeyDelayTime,1
goto KeyCheckEnd
bsf FKeyPress
btfss PKeyBand
goto KeyBand
KeyBandRet:
btfss PKeyBandInc
goto KeyBandInc
KeyBandIncRet:
btfss PKeyBandDec
goto KeyBandDec
KeyBandDecRet:
btfss PKeyVolInc
goto KeyVolInc
KeyVolIncRet:
btfss PKeyVolDec
goto KeyVolDec
KeyVolDecRet:
btfss PKeyBand1
goto KeyBand1_P2
KeyBand1Ret:
btfss PKeyBand2
goto KeyBand2_P2
KeyBand2Ret:
btfss PKeyBand3
goto KeyBand3_P2
KeyBand3Ret:
btfss PKeyBand4
goto KeyBand4_P2
KeyBand4Ret:
btfss PKeyBand5
goto KeyBand5_P2
KeyBand5Ret:
goto InitKeyDelayTime
KeyUnpressCheck:
btfss PKeyBand
goto CntPressTime
btfss PKeyBandInc
goto CntPressTime
btfss PKeyBandDec
goto CntPressTime
btfss PKeyVolInc
goto CntPressTime
btfss PKeyVolDec
goto CntPressTime
Bank1
decfsz KeyDelayTime,1
goto KeyCheckEnd
bcf FKeyPress
goto InitKeyDelayTime
CntPressTime:
Bank3
decfsz KeyPressTime,1
goto InitKeyDelayTime
movlw CKeyPressTime
movwf KeyPressTime
bcf FKeyPress
goto InitKeyDelayTime
InitKeyDelayTime:
Bank1
movlw CKeyDelayTime
movwf KeyDelayTime
goto KeyCheckEnd
KeyCheckEnd:
movlw 00h
tris PB
movlw b'00000100'
tris PC
Page0
goto KeyCheckRet
;-------------------------------------
KeyBand:
bcf FAutoOn
bsf FSendData
btfss FFM
goto BsetFM
BclrFM:
bcf FFM
bcf FFMLed
bsf PBand
bsf FAMLed
bcf FClockLed
goto KeyBandEnd
BsetFM:
bsf FFM
bsf FFMLed
bcf FAMLed
bcf PBand
bcf FClockLed
goto KeyBandEnd
KeyBandEnd:
goto KeyBandRet
;-------------------------------------
KeyBandInc:
btfsc PKeyBandDec
goto KeyBandIncOnly
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -