📄 i993_lcd_avr168.asm
字号:
upkeyprogram_2:
; lds r16,model_status
; cpi r16,0
; breq upkeyprogram_3
call dis_vol
upkeyprogram_3:
call delay_300ms
sbis pinb,vol_add_key
rjmp upkeyprogram
call vol_save
; rcall send5767 ; 调试程序
rjmp main
;=======================================================第二级
second_up_program:
sbis pinb,vol_add_key
rjmp second_up_program
lds r16,first_status
cpi r16,0
brne second_up_program_1
ldi r16,1
rjmp second_up_program_2
second_up_program_1:
ldi r16,0
second_up_program_2:
sts first_status,r16
call dis_set_model ; dis set repeat shuffle
rjmp main
;===================================================上键结束
;==============================================下键开始
;=======================================================第一级
first_down_program:
downkeyprogram:
lds r16,volregister
cpi r16,0
breq downkeyprogram_2
cpi r16,1
breq downkeyprogram_1
dec r16
sts volregister,r16
call vol_mius
rjmp downkeyprogram_2
downkeyprogram_1:
dec r16
sts volregister,r16
lds r16,model_status
cpi r16,0
brne downkeyprogram_1_0
call radio_mute
rjmp downkeyprogram_2
downkeyprogram_1_0:
sbi portd,mute
downkeyprogram_2:
; lds r16,model_status
; cpi r16,0
; breq downkeyprogram_3
call dis_vol
; call radio_mute ; tiaoshi chengxcu
downkeyprogram_3:
call delay_300ms
sbis pinb,vol_mius_key
rjmp downkeyprogram
rcall vol_save
rjmp main
;==================================================第二级
second_down_program:
sbis pinb,vol_mius_key
rjmp second_down_program
lds r16,first_status
cpi r16,0
brne second_down_program_1
ldi r16,1
rjmp second_down_program_2
second_down_program_1:
ldi r16,0
second_down_program_2:
sts first_status,r16
call dis_set_model ; dis set repeat shuffle
rjmp main
;===========================================上下 键子程序
;****************************************** 左键
first_left_program:
;===========================pretrack =0 play =1 pause =2 FF =3 REW =4 stop
exPRETRACK:
ldi r16,100
exPRETRACK_0:
call delay_20ms
sbic pinb,pre_track_key
rjmp exPRETRACK_1
dec r16
brne exPRETRACK_0
ldi r16,6
sts playcontrol_status,r16
call play_control
call readipod_no_save
lds r16,play_status
sts play_status_temp,r16 ; save play_status
ldi r16,3
sts play_status,r16
call display_playinfo ;显示 快进
exPRETRACK_0_1:
;------------------------------------------------判断是不是下一首
call getcurrentplaytrackindex
call readipod
lds r16,readipod_start+8
lds r17,dissendipodcount_hi
cp r16,r17
brne exPRETRACK_0_2
lds r16,readipod_start+9
lds r17,dissendipodcount_lo
cp r16,r17
brne exPRETRACK_0_2
;----------------------------------------------------------读进度
call delay_100ms
call getplaystatus
call readipod
lds r16,readipod_start+14
cpi r16,0
brne exPRETRACK_0_1_1
;-------------------------------------------------------- STOP 到第一级
call reset_program
;---------------------------------------------------------等松键
exPRETRACK_0_1_0:
sbis pinb,pre_track_key
rjmp exPRETRACK_0_1_0
rjmp main
exPRETRACK_0_1_1:
;------------------------------------------------------------显示进度
call display_jidu_key ;显示 快进
sbis pinb,pre_track_key
rjmp exPRETRACK_0_1
;-----------------------------------------------------------
exPRETRACK_0_2:
ldi r16,0x07
sts playcontrol_status,r16
call play_control ; 停止后退
call readipod_no_save
lds r16,play_status_temp
sts play_status,r16
call pofang_zhuangtai ;显示 播放图标
rjmp exPRETRACK_exit
;===============================================================上一首
exPRETRACK_1:
;ldi r16,0
;sts play_status,r16
call pofang_zhuangtai ;显示 播放图标
;------------------------------------
call getnumplayingtrack
call readipod
lds r16,playnumber_start+2
sts playnumber_high,r16
lds r16,playnumber_start+3
sts playnumber_low,r16
call getcurrentplaytrackindex
call readipod
lds r16,playindex_start+2
sts playindex_high,r16
lds r16,playindex_start+3
sts playindex_low,r16
lds r16,playindex_high
cpi r16,0
brne exPRETRACK_2
lds r16,playindex_low
cpi r16,0
breq exPRETRACK_exit
exPRETRACK_2:
ldi r16,4 ; 上一首
sts playcontrol_status,r16
call play_control
call readipod_no_save
call display_playinfo
LDI R16,0
STS dis_leixing,R16
exPRETRACK_exit :
rjmp main
;=======================================================
;===============================================
second_left_program:
sbis pinb,pre_track_key
rjmp second_left_program
lds r16,first_status
cpi r16,1
brne second_left_program_1
lds r16,repeat_status
rjmp second_left_program_2
second_left_program_1:
lds r16,shuffle_status
second_left_program_2:
cpi r16,0
brne second_left_program_3
ldi r16,2
rjmp second_left_program_4
second_left_program_3:
dec r16
second_left_program_4:
lds r17,first_status
cpi r17,1
brne second_left_program_5
STS repeat_status,r16
rjmp second_left_program_6
second_left_program_5:
sts shuffle_status,r16
second_left_program_6:
call dis_set_model
rjmp main
;
;*************************************************右键开始
;=============================================================第二级
first_right_program: ;next track =0 play =1 pause =2 FF =3 REW =4 stop
exnextTRACK:
ldi r16,100
exnextTRACK_0:
call delay_20ms
sbic pinb,next_track_key
rjmp exnextTRACK_1
dec r16
brne exnextTRACK_0
ldi r16,5
sts playcontrol_status,r16
call play_control
call readipod_no_save
lds r16,play_status
sts play_status_temp,r16 ; save play_status
ldi r16,2
sts play_status,r16
exnextTRACK_0_0:
call display_playinfo ;显示 快进
exnextTRACK_0_1:
;------------------------------------------------判断是不是下一首
call getcurrentplaytrackindex
call readipod
lds r16,readipod_start+8
lds r17,dissendipodcount_hi
cp r16,r17
brne exnextTRACK_0_2
lds r16,readipod_start+9
lds r17,dissendipodcount_lo
cp r16,r17
brne exnextTRACK_0_2
;--------------------------------------------------------读进度
call delay_100ms
call getplaystatus
call readipod
lds r16,readipod_start+14
cpi r16,0
brne exnextTRACK_0_1_1
;----------------------------------------------------------- STOP 到第一级
call reset_program
;---------------------------------------------------------等松键
exnextTRACK_0_1_0:
sbis pinb,next_track_key
rjmp exnextTRACK_0_1_0
rjmp main
exnextTRACK_0_1_1:
;------------------------------------------------------------显示进度
call display_jidu_key ;显示 快进
sbis pinb,next_track_key
rjmp exnextTRACK_0_1
exnextTRACK_0_2:
ldi r16,0x07
sts playcontrol_status,r16
call play_control
call readipod_no_save
lds r16,play_status_temp
sts play_status,r16
call pofang_zhuangtai ; 显示播放图标
rjmp exnextTRACK_exit
;---------------------------------------;停止 快进
call getplaystatus
call readipod
lds r16,stop_start
cpi r16,0
brne exnextTRACK_1
ldi r16,1
; sts main_status,r16
ldi r16,4 ; 错误
sts play_status,r16
call pofang_zhuangtai ; 关了 播放图标
rjmp exnextTRACK_exit
exnextTRACK_1:
;ldi r16,0
;sts play_status,r16
call pofang_zhuangtai ; 显示播放图标
;----------------------------------------
call getnumplayingtrack
call readipod
lds r16,playnumber_start+2
sts playnumber_high,r16
lds r16,playnumber_start+3
sts playnumber_low,r16
call getcurrentplaytrackindex
call readipod
lds r16,playindex_start+2
sts playindex_high,r16
lds r16,playindex_start+3
sts playindex_low,r16
lds r16,playindex_high
lds r17,playnumber_high
cp r16,r17
brne exnextTRACK_2
lds r16,playindex_low
inc r16
lds r17,playnumber_low
cp r16,r17
breq exnextTRACK_exit
exnextTRACK_2:
ldi r16,3
sts playcontrol_status,r16
call play_control
call readipod_no_save
call display_playinfo
ldi r16,0
sts dis_leixing,r16
exnextTRACK_exit:
rjmp main
;===================================================右键第一级
second_right_program:
sbis pinb,next_track_key
rjmp second_right_program
;-----------------------------------------------
lds r16,first_status
cpi r16,1
brne second_right_program_1
lds r16,repeat_status
rjmp second_right_program_2
second_right_program_1:
lds r16,shuffle_status
second_right_program_2:
cpi r16,2
brne second_right_program_3
ldi r16,0
rjmp second_right_program_4
second_right_program_3:
inc r16
second_right_program_4:
lds r17,first_status
cpi r17,1
brne second_right_program_5
STS repeat_status,r16
rjmp second_right_program_6
second_right_program_5:
sts shuffle_status,r16
second_right_program_6:
call dis_set_model
rjmp main
;;******************************************************main program end
;******************************************************sub program start 代写
;=============================================
frequency_mius:
;clc
lds r16,frequency_lo
subi r16,1
sts frequency_lo,r16
lds r16,frequency_hi
ldi r17,0
sbc r16,r17
sts frequency_hi,r16
lds r17,frequency_lo
subi r17,0x6b
sbci r16,0x03
brcc frequency_mius_1
ldi r16,0x04
sts frequency_hi,r16
ldi r16,0x38
sts frequency_lo,r16
frequency_mius_1:
ret
;------------------------------------------
frequency_add:
; clc
lds r16,frequency_lo
ldi r17,1
add r16,r17
sts frequency_lo,r16
lds r16,frequency_hi
ldi r17,0
adc r16,r17
sts frequency_hi,r16
lds r17,frequency_lo
subi r17,0x39
sbci r16,0x04
brcs frequency_add_1
ldi r16,0x03
sts frequency_hi,r16
ldi r16,0x6b
sts frequency_lo,r16
frequency_add_1:
ret
;===================================================
EEPROM_WRITE:
sbic eecr,eewe
rjmp EEPROM_WRITE
ldi r16,0
out eearh,r16
lds r16,eepromaddr_hi
out eearl,r16
lds r16,eepromdata_hi
out eedr,r16
sbi eecr,eemwe
sbi eecr,eewe
EEPROM_WRITE_1:
sbic eecr,eewe
rjmp EEPROM_WRITE_1
ldi r16,0
out eearh,r16
lds r16, eepromaddr_hi
inc r16
out eearl,r16
lds r16,eepromdata_lo
out eedr,r16
sbi eecr,eemwe
sbi eecr,eewe
ret
;---------------------------------------------------
EEPROM_read:
sbic eecr,eewe
rjmp EEPROM_read
ldi r16,0
out eearh,r16
lds r16,eepromaddr_hi
out eearl,r16
sbi eecr,eere
in r16,eedr
sts eepromdata_hi,r16
EEPROM_read_1:
sbic eecr,eewe
rjmp EEPROM_read_1
ldi r16,0
out eearh,r16
lds r16,eepromaddr_hi
inc r16
out eearl,r16
sbi eecr,eere
in r16,eedr
sts eepromdata_lo,r16
ret
;;;-----------------------------------------send data to 5767
radio_mute:
call dly
call start
ldi r16,0x0c0
call shout
lds r16, senddata
ori r16,0x80
call shout
lds r16,senddata+1
call shout
lds r16,senddata+2
call shout
lds r16,senddata+3
call shout
lds r16,senddata+4
call shout
call stop
ret
;----------------------------------------------
send5767:
lds r16, senddata
andi r16,0x3f
sts senddata,r16
searsend5767:
call dly
call start
ldi r16,0x0c0
call shout
lds r16, senddata
;andi r16,0x3f
call shout
lds r16,senddata+1
call shout
lds r16,senddata+2
call shout
lds r16,senddata+3
call shout
lds r16,senddata+4
call shout
call stop
ret
;----------------------------------------------
read5767:
call dly
call start
ldi r16,0x0c1
call shout
call I2CReceiveByte
call ack
sts readdata,r16
call I2CReceiveByte
call ack
sts readdata+1,r16
call I2CReceiveByte
call ack
sts readdata+2,r16
call I2CReceiveByte
call ack
sts readdata+3,r16
call I2CReceiveByte
call ack
sts readdata+4,r16
call stop
ret
;========================================
I2CReceiveByte:
cbi ddrc,sda
call dly
ldi r17,8
sbi portc,sda ;SDA=1;
ldi r16,0
I2CReceiveByte_0:
cbi portc,scl;SCL=0;
call dly ;I2CWait();
sbi portc,scl; SCL=1;
call dly ; I2CWait(); //从高位开始 ddata|=SDA;ddata<<=1
sbic pinc,sda; if(SDA)
rjmp I2CReceiveByte_1
clc
rjmp I2CReceiveByte_2
I2CReceiveByte_1:
sec
I2CReceiveByte_2:
rol r16
dec r17
brne I2CReceiveByte_0
cbi portc,scl
sbi ddrc,sda
ret
;==========================================================================
start:
sbi portc,SDA
sbi portc,SCL
call dly ;nop ; enforce setup delay and cycle delay
cbi portc,SDA ;clr sda
call dly ; nop ; enforce hold delay
cbi portc,scl ;clr SCL
ret
;---------------------------------------------------------
stop:
cbi portc,sda ;clr SDA
call dly ; nop
sbi portc,scl ;setb SCL
call dly ; nop ; enforce setup delay
sbi portc,sda ;setb SDA
ret
;--------------------------------------------------------
shout:
ldi r17,8
x42:
rol r16 ;rlc a ; move bit into CY
brcs x42_0
cbi portc,sda
rjmp x42_1
x42_0:
sbi portc,sda
x42_1:
call dly
sbi portc,scl ;setb SCL ; raise clock
call dly
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -