📄 oki80second_1.dt.bak
字号:
R0 == 0X00
TCC == 0X01
PC == 0X02
STATUS == 0X03
C == 0 ; Carry flag
DC == 1 ; Auxiliary carry flag
Z == 2 ; Zero flag
P == 3 ; Power down flag
T == 4 ; Timeout flag
RSR == 0X04
PORT5 == 0X05
PORT6 == 0X06
INTERRUPT == 0X0F
LED == 4 ;led display
SDA == 6 ;i2c data
SCL == 7 ;i2c clock
UPkey == 1 ;up key
DOWNkey == 2 ;down
cs == 0 ;lcd en
CK == 2 ;lcd clock\1415 clock
DA == 3 ;lcd data\1415da
ce == 1 ;1415 en
;--------------------------------------------
CONT == 0X01
IOC5 == 0X05
IOC6 == 0X06
IOCB == 0X0B
IOCC == 0X0C
IOCD == 0X0D
IOCE == 0X0E
IOCF == 0X0F
PROT_I2C == 0x06
;--------------------------------------------------------------------
;Control Registers Define
MOVE_TIME == 0X10
DATA1 == 0X11
KEYTIME == 0X12
FLAG == 0x13
havedata == 0 ; 0 1 I2C have data 0 no have data
LOSEFLAG == 1 ; 0 KEY NO LOSE 1 KEY LOSE
ack == 2 ;
outack == 3
updownflag == 4
ledflag == 5
i2cflag == 6
DATA == 0X14
I2CDATA_HIGH == 0X15
I2CDATA_LOW == 0X16
ADDRESS == 0X17
BCDDATA == 0X18
BCDDATA1 == 0X19
BCDDATA2 == 0X1a
BCDDATA3 == 0X1b
DATATEMP == 0X1c
BCDTEMP_HIGH == 0X1d
BCDTEMP_LOW == 0X1e
MOVE_TIMETEMP == 0X1f
COMMAND == 0X20
LCDRAM == 0X21
LCD_MAP == 0X22
E_BUFFER == 0x23
SLAVE == 0x24
MOVETIME2 == 0X25
;--------------------------------------------------------------------
;--------------------------------
ORG 0 ;RESET VECTOR
DISI ;disable interrupt
jmp stinit
org 8
jmp INT_PRO
org 0x15
stinit:
CALL INIT
bs flag,ledflag
CALL lcdinit
bc port6,led
call read24c01
nop
mov a,i2cdata_high
sub a,@0x04
jbs status,z
jmp banduani2chi
mov a,i2cdata_low ; i2cdata_high==4
sub a,@0x38
jbs status,c
jmp INIDATA
jmp datato1415
banduani2chi: ;
mov a,i2cdata_high
sub a,@0x03
jbs status,z
jmp INIDATA
mov a,i2cdata_low
sub a,@0x6b
jbc status,c
jmp INIDATA
jmp datato1415
;-------------------------------------- 赋 原始数据给 I2C
INIDATA:
MOV A,@0X03
mov I2CDATA_HIGH,A ; 87.5 MHz
MOV A,@0X6B
mov I2CDATA_LOW,A
call e_w
call writeto1415 ; to 1415
call HEX_TO_BCD
CALL LCDDISPLAY ; to display
JMP MAIN_START_1
;--------------------------------------------------------------
dispdatatab:
ADD PC,A
RETL @00001111B ; 0
RETL @00000111B ; 1
RETL @00001101B ; 2
RETL @00001111B ; 3
RETL @00000111B ; 4
RETL @00001011b ; 5
RETL @00001011B ; 6
RETL @00001111B ; 7
RETL @00001111B ; 8
RETL @00001111B ; 9
dispdatatab_2:
ADD PC,A
RETL @00001011B ; 0
RETL @00000000B ; 1
RETL @00000111B ; 2
RETL @00000101B ; 3
RETL @00001100B ; 4
RETL @00001101b ; 5
RETL @00001111B ; 6
RETL @00000000B ; 7
RETL @00001111B ; 8
RETL @00001101B ; 9
dispdatatab_1:
ADD PC,A
RETL @00001000b ; 0
RETL @00001110b ; 1
;-------------------------------------
datato1415:
CALL writeto1415
CALL HEX_TO_BCD
CALL LCDDISPLAY
;-------------------------------------- main 入口
MAIN_START_1:
call delay1s
bs port6,led
MAIN_START:
wdtc
; mov a,@0x02
; iow iocf
; disi
; MOV A,@0X0
; IOW IOCE ;DISABLE WDT
; nop
; mov pORT6,pORT6
; NOP
; SLEP
; nop
; nop
; nop
; MOV A,@0X80
; IOW IOCE ;ENABLE WDT
; WDTC ;CLEAR WDT
jbc port6,upkey
jmp mainstart_2
jmp upkeytab
mainstart_2:
jbc port6,downkey
jmp MAIN_START
upkeytab:
WDTC ;CLEAR WDT
CALL DELAY10MS
JBC PORT6,UPkey
JMP DOWNKEYTAB
JMP UPKEYPROCE
DOWNKEYTAB:
JBC PORT6,DOWNkey
JMP MAIN_START
JMP DOWNKEYPROCE
;--------------------------------------------- UPKEY PROCE PROGRAM
UPKEYPROCE:
bc port6,led
CLR KEYTIME
UPKEYPROCELOOP:
wdtc
INC KEYTIME
MOV A,I2CDATA_HIGH
SUB A,@4
JBS STATUS,Z
JMP UPI2C3
UPI2C4:
INC I2CDATA_LOW
MOV A,@0X39
SUB A,I2CDATA_LOW
JBS STATUS,C
JMP UPKEYPROCE_2
UPRESET:
MOV A,@3
MOV I2CDATA_HIGH,A
MOV A,@0X6B
MOV I2CDATA_LOW,A
JMP UPKEYPROCE_2
UPI2C3:
MOV A,I2CDATA_HIGH
SUB A,@3
JBS STATUS,Z
JMP UPRESET
UPI2C3_1:
INC I2CDATA_LOW
MOV A,I2CDATA_LOW
SUB A,@0X00
JBS STATUS,Z
JMP UPKEYPROCE_2
UPI2C3_:
INC I2CDATA_HIGH
CLR I2CDATA_LOW
UPKEYPROCE_2:
CALL writeto1415
CALL HEX_TO_BCD
nop
CALL LCDDISPLAY
MOV A,@3
SUB A,KEYTIME
JBS STATUS,C ; 前三次一秒变一次
JMP UPKEYPROCE_3
JMP UPKEYPROCE_4
UPKEYPROCE_3:
CALL KEYDELAY500MS
JMP UPKEYPROCE_5
UPKEYPROCE_4:
CALL KEYDELAY100MS
MOV A,@10
MOV KEYTIME,A
UPKEYPROCE_5:
JBS port6,UPKEY
JMP UPKEYPROCELOOP
CALL e_w
CALL LEDDELAY
JBS FLAG,LOSEFLAG
JMP KEYDELAYUP
BS port6,LED
jmp main_start
KEYDELAYUP:
CALL e_w
JBC port6,UPKEY
JMP DOWNKEYPROCE
JMP UPKEYPROCe
KEYDELAYUP_1:
;JBC port6,DOWNKEY
;JMP main_start
;JMP UPKEYPROCELOOP
;--------------------------------------------- DOWNKEY PROCE PROGRAM
DOWNKEYPROCE:
bC port6,led
CLR KEYTIME
DOWNKEYPROCELOP:
wdtc
INC KEYTIME
MOV A,I2CDATA_HIGH
SUB A,@4
JBS STATUS,Z
JMP DOWNI2C3
DOWNI2C4:
DEC I2CDATA_LOW
MOV A,@0Xff
SUB A,I2CDATA_LOW
JBS STATUS,Z
JMP DOWNKEYPROCE_2
DEC I2CDATA_HIGH
MOV A,@0XFF
MOV I2CDATA_LOW,A
JMP DOWNKEYPROCE_2
DOWNRESET:
MOV A,@3
MOV I2CDATA_HIGH,A
MOV A,@0X6C
MOV I2CDATA_LOW,A
JMP DOWNKEYPROCE_2
DOWNI2C3:
MOV A,I2CDATA_HIGH
SUB A,@3
JBS STATUS,Z
JMP DOWNRESET
DOWNI2C3_1:
DEC I2CDATA_LOW
MOV A,I2CDATA_LOW
SUB A,@0X6A
JBS STATUS,C
JMP DOWNKEYPROCE_2
DOWNI2C3_:
MOV A,@0X04
MOV I2CDATA_HIGH,A
MOV A,@0X38
MOV I2CDATA_LOW,A
DOWNKEYPROCE_2:
CALL writeto1415
CALL HEX_TO_BCD
CALL LCDDISPLAY
MOV A,@3
SUB A,KEYTIME
JBS STATUS,C ; 前三次一秒变一次
JMP DOWNKEYPROCE_3
JMP DOWNKEYPROCE_4
DOWNKEYPROCE_3:
CALL KEYDELAY500MS
JMP DOWNKEYPROCE_5
DOWNKEYPROCE_4:
CALL KEYDELAY100MS
MOV A,@10
MOV KEYTIME,A
DOWNKEYPROCE_5:
JBS port6,DOWNKEY
JMP DOWNKEYPROCELOP
CALL e_w
CALL LEDDELAY
JBS FLAG,LOSEFLAG
JMP KEYDELAYDOWN
BS port6,LED
jmp main_start
KEYDELAYDOWN:
CALL e_w
JBC port6,UPKEY
JMP DOWNKEYPROCE
JMP UPKEYPROCE
;----------------------------------------- backlight 延时程序
LEDDELAY:
BC FLAG,LOSEFLAG
MOV A,@250
MOV MOVE_TIMETEMP,A
LEDROULOP:
MOV A,@250
WDTC ;CLEAR WDT
MOV move_time,A
jbc port6,upkey
jmp cyROULOP
jmp LEDROULOP_5
cyROULOP:
jbs port6,downkey
jmp LEDROULOP_5
LEDROULOP_4:
wdtc
DJZ move_time
jmp LEDROULOP_3
JMP LEDROULOP_2
LEDROULOP_3:
CALL DLY
CALL DLY
CALL DLY
CALL DLY
CALL DLY
CALL DLY
JMP LEDROULOP_4
LEDROULOP_2:
DJZ MOVE_TIMETEMP
JMP LEDROULOP
LEDROULOP_1:
BS FLAG,LOSEFLAG
nop
LEDROULOP_5:
RET
;-------------------------------------------
KEYDELAY500MS:
MOV A,@250
MOV MOVE_TIMETEMP,A
JMP ROULOP
KEYDELAY100MS:
MOV A,@20
MOV MOVE_TIMETEMP,A
JMP ROULOP
KEYDELAY10MS:
MOV A,@1
MOV MOVE_TIMETEMP,A
ROULOP:
MOV A,@250
WDTC ;CLEAR WDT
MOV move_time,A
jbC port6,upkey
jmp cROULOP
jmp ROULOP_4
cROULOP:
jbC port6,downkey
jmp ROULOP_1
ROULOP_4:
wdtc
DJZ move_time
jmp ROULOP_3
JMP ROULOP_2
ROULOP_3:
NOP
NOp
call dly
CALL DLY
JMP ROULOP_4
ROULOP_2:
DJZ MOVE_TIMETEMP
JMP ROULOP
ROULOP_1:
RET
;-----------------------------------------------
delay1s:
mov a,@100
mov MOVETIME2,a
delay1s_3:
djz MOVETIME2
jmp delay1s_1
jmp delay1s_2
delay1s_1:
call delay10ms
jmp delay1s_3
delay1s_2:
ret
;------------------------------------------
delay10ms:
MOV A,@20
MOV MOVE_TIMETEMP,A
delay10ms_2:
MOV A,@100
MOV MOVE_TIME,A
delay10ms_1:
wdtc
djz MOVE_TIME
jmp delay10ms_1
djz MOVE_TIMETEMP
jmp delay10ms_2:
ret
;----------------------------------
writeto1415:
MOV A,@0X02
MOV MOVE_TIMETEMP,A
MOV A,@0X08
MOV MOVE_TIME,A
MOV A,i2cdata_low
MOV DATATEMP,A
W1415:
Bs Port5,CE
; call dly
; bc port5,ce
; call dly
; bs port5,ce
W1415_1:
wdtc
RRC DATATEMP
JBC STATUS,C
JMP W1415_2
BC Port5,DA ;0
JMP WR11415
W1415_2:
BS Port5,DA ;1
WR11415:
call dly
Bc Port5,CK
call dly
Bs Port5,CK
call dly
DJZ MOVE_TIME
JMP W1415_1
DJZ MOVE_TIMETEMP
JMP WR11415_1
JMP writeto1415END
WR11415_1:
MOV A,@0X08
MOV MOVE_TIME,A
MOV A,i2cdata_high
MOV DATATEMP,A
bs datatemp,3
bs datatemp,6
JMP W1415_1
writeto1415END:
bc port5,ce
call dly
bc port5,da
call dly
bc port5,ck
RET
;------------------
HEX_TO_BCD:
CLR BCDTEMP_HIGH
CLR BCDTEMP_LOW
mov a,I2CDATA_LOW
mov data,a
mov a,I2CDATA_HIGH
mov data1, a
mov a, @16
MOV MOVE_TIME, a
LOOP:
wdtc
BC STATUS,C
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -