📄 main.asm
字号:
;显示频率
CALL ConvertFm
CALL LcdShowFm
;显示频道
MOV A,FmChannel
CALL LcdShowCh
;通知发射模块改变频率
MOV A,FmMode
CALL SpiFmWrite
;清CH标志
BC FmChange,BIT_CH_CHG
JMP Main
;----------------------------------------------------
labModeChange:
JBC MenuMode,0
JMP labSaveDone
;保存频道
MOV A,@ChAddress
MOV I2cAddr,A
MOV A,FmChannel
MOV I2cData,A
CALL I2cWrite
CALL Delay5ms
;保存频率
MOV A,FmChannel
MOV I2cAddr,A
MOV A,FmMode
MOV I2cData,A
CALL I2cWrite
CALL Delay5ms
labSaveDone:
;显示频率(87.5-108.0)
MOV A,FmMode
CALL ConvertFm
CALL LcdShowFm
;显示频道(1~8)
MOV A,FmChannel
CALL LcdShowCh
;改变频率
MOV A,FmMode
CALL SpiFmWrite
;清标志
BC FmChange,BIT_MD_CHG
;调试读出的数据
;JMP Debug24C02
JMP Main
;===============================================
; Function:DigitChar(A)
;===============================================
TblDigitChar:
;[?]-[D|E|G|F,H|C|B|A]
;[0]-[1,1,0,1-0,1,1,1][D7]
;[1]-[0,0,0,0-0,1,1,0][06]
;[2]-[1,1,1,0-0,0,1,1][E3]
;[3]-[1,0,1,0-0,1,1,1][A7]
;[4]-[0,0,1,1-0,1,1,0][36]
;[5]-[1,0,1,1-0,1,0,1][B5]
;[6]-[1,1,1,1-0,1,0,1][F5]
;[7]-[0,0,0,0-0,1,1,1][07]
;[8]-[1,1,1,1-0,1,1,1][F7]
;[9]-[1,0,1,1-0,1,1,1][B7]
;[-]-[0,0,1,0-0,0,0,0][20]
;[ ]-[0,0,0,0-0,0,0,0][00]
AND A,@0x0f
ADD PC, A
RETL @0xD7 ;0
RETL @0x06 ;1
RETL @0xE3 ;2
RETL @0xA7 ;3
RETL @0x36 ;4
RETL @0xB5 ;5
RETL @0xF5 ;6
RETL @0x07 ;7
RETL @0xF7 ;8
RETL @0xB7 ;9
RETL @0x20 ;A
RETL @0x00 ;B
RETL @0x00 ;C
RETL @0x00 ;D
RETL @0x00 ;E
RETL @0x00 ;F
;Return And Load to A
;===============================================
; Function:TblDataIcon(A)
;===============================================
TblDataIcon:
;[X]-[7|6|5|4,3|2|1|0]
;[1]-[0,0,0,0-1,0,0,0][08]
;[2]-[0,0,0,0-0,1,0,0][04]
;[3]-[0,0,0,0-0,0,1,0][02]
;[4]-[0,0,0,0-0,0,0,1][01]
;[5]-[0,0,0,1-0,0,0,0][10]
;[6]-[0,0,1,0-0,0,0,0][20]
;[7]-[0,1,0,0-0,0,0,0][40]
;[8]-[1,0,0,0-0,0,0,0][80]
AND A,@0x07
ADD PC, A
RETL @0x08 ;1
RETL @0x04 ;2
RETL @0x02 ;3
RETL @0x01 ;4
RETL @0x10 ;5
RETL @0x20 ;6
RETL @0x40 ;7
RETL @0x80 ;8
;Return And Load to A
;====================================================
; function: ReadKeys()
;====================================================
ReadKey:
;连续按键检查
CLR PressCnt0
CLR PressCnt1
MOV A,@100
MOV RepeatKeys,A
;测试是否按键按下!
BS KeyPort,KeyUp
CALL Delay5ms
JBS KeyPort,KeyUp
JMP DoKeyUP
BS KeyPort,KeyDown
CALL Delay5ms
JBS KeyPort,KeyDown
JMP DoKeyDown
BS KeyPort,KeyMenu
CALL Delay5ms
JBS KeyPort,KeyMenu
JMP DoKeyMenu
JMP ReadKeyDone
;--------------------------------------------------------
DoKeyUp:
;背光重计时
CLR LedCnt1
;开背光
BS LedPort,LedLight
; Do While KeyUp Up
WDTC
;在调整模式才有效
JBS MenuMode,0
JMP LoopUpTest
;显示数据,其实也当延时来用
MOV A,FmMode
CALL ConvertFm
CALL LcdShowFm
;累计数据
INC PressCnt0
JBC STATU,C
INC PressCnt1
;if(PressCnt1 > RepeatKeys)
; FmMode ++;ShowFm();
MOV A,PressCnt1
SUB A,RepeatKeys
JBC STATU,C
JMP LoopUpTest
;RepeatKeys = 5;
MOV A,@5
MOV RepeatKeys,A
CLR PressCnt1
INC FmMode
CALL CheckModeUp
;ShowFm(A)
MOV A,FmMode
CALL ConvertFm
CALL LcdShowFm
LoopUpTest:
JBS KeyPort,KeyUp
JMP DoKeyUp
JBS MenuMode,0
JMP DoChUp
DoFmUp:
INC FmMode
BS FmChange,BIT_FM_CHG
JMP ReadKeyDone
DoChUp:
INC FmChannel
BS FmChange,BIT_CH_CHG
JMP ReadKeyDone
;--------------------------------------------------------
DoKeyDown:
;重新计时
CLR LedCnt1
;开背光
BS LedPort,LedLight
; Do While KeyDown Up
WDTC
;在调整模式才有效
JBS MenuMode,0
JMP LoopDownTest
;显示数据,其实也当延时来用
MOV A,FmMode
CALL ConvertFm
CALL LcdShowFm
;累计数据
INC PressCnt0
JBC STATU,C
INC PressCnt1
;if(PressCnt1 > 100)
; FmMode ++;ShowFm();
MOV A,PressCnt1
SUB A,RepeatKeys
JBC STATU,C
JMP LoopDownTest
MOV A,@5
MOV RepeatKeys,A
CLR PressCnt1
DEC FmMode
CALL CheckModeDown
MOV A,FmMode
CALL ConvertFm
CALL LcdShowFm
LoopDownTest:
JBS KeyPort,KeyDown
JMP DoKeyDown
JBS MenuMode,0
JMP DoChDown
DoFmDown:
DEC FmMode
BS FmChange,BIT_FM_CHG
JMP ReadKeyDone
DoChDown:
DEC FmChannel
BS FmChange,BIT_CH_CHG
JMP ReadKeyDone
;--------------------------------------------------------
DoKeyMenu:
;重新计时
CLR LedCnt1
;开背光
BS LedPort,LedLight
; Do While KeyMenu Up
WDTC
JBS KeyPort,KeyMenu
JMP DoKeyMenu
INC MenuMode
MOV A,@0x01
AND MenuMode,A
;保存模式(从FM-CH,需要保存)
BS FmChange,BIT_MD_CHG
JMP ReadKeyDone
ReadKeyDone:
MOV A,@0x07
AND FmChannel,A
MOV A,@0x01
AND MenuMode,A
NOP
NOP
RET
;====================================================
; function: ConvertFm(A)->(0875 + A)
;====================================================
ConvertFm:
MOV A_buff,A
;L4~L1=0875
MOV A,@MIN_C4
MOV L4,A
MOV A,@MIN_C3
MOV L3,A
MOV A,@MIN_C2
MOV L2,A
MOV A,@MIN_C1
MOV L1,A
;if(A==0)goto done
MOV A,A_buff
JBC STATU,Z
JMP CheckDone
CheckLoopAll:
MOV A,@4
MOV N1,A
MOV A,@L1
MOV R4,A
CheckLoopOne:
MOV A,R0
AND A,@0x0f
ADD A,@1
DAA
MOV R0,A
JBS R0,4
JMP CheckNext
INC R4
DJZ N1
JMP CheckLoopOne
CheckNext:
DJZ A_buff
JMP CheckLoopAll
CheckDone:
; 数据高位可能不对!必须去掉!
MOV A,L4
AND A,@0x0f
MOV L4,A
MOV A,L3
AND A,@0x0f
MOV L3,A
MOV A,L2
AND A,@0x0f
MOV L2,A
MOV A,L1
AND A,@0x0f
MOV L1,A
RET
;====================================================
; function: CheckModeData(A) ->(0875 + A)
;====================================================
CheckModeUp:
MOV A,FmMode
SUB A,@MAX_STEP
JBC STATU,C
CLR FmMode
RET
;====================================================
; function: CheckModeData(A) ->(0875 + A)
;====================================================
CheckModeDown:
MOV A,FmMode
SUB A,@MAX_STEP
JBC STATU,C
JMP CheckDownEnd
MOV A,@MAX_STEP
MOV FmMode,A
CheckDownEnd:
NOP
RET
;===============================================
; Function:Delay5ms(N1,N2)2500=5ms
;===============================================
;for(N1=0;N1<25;N1++)
; for(N2=0;N2<98;N2++) 2000/400K=5
; NOP(); 400,000HZ, 2.5ns
Delay5ms:
WDTC
MOV A,@25
MOV N1,A
D5MS_1:
MOV A,@98
MOV N2,A
D5MS_2:
DJZ N2
JMP D5MS_2
;D5MS_1:
DJZ N1
JMP D5MS_1
CLRA
RET
;===============================================
; Function:Clean()
;===============================================
Clean:
MOV A,@0x10
MOV R4,A
Loop:
; CLR R0 ==> [R4]=0
CLR R0
INC R4
MOV A,R4
OR A,@0B11000000
BC STATU,Z
XOR A,@0xF0
JBS STATU,Z
JMP Loop
RET
;===============================================
; Includes Other Functions.
;===============================================
include "I2cProc.h"
include "SpiProc.h"
include "LcdProc.h"
END
;===============================================
; End of file.
;===============================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -