⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 i993_lcd_avr168.asm

📁 IPOD 线控程序(将IPOD AND IPHONE 的歌曲信息读出来显示的LCD 屏幕上) 适应于 所有的 苹果 MP3 和手机的机型
💻 ASM
📖 第 1 页 / 共 5 页
字号:
	
	call	playcurrentselection
	call	delay1s
	call	clrarscrren
	call	dis_first_info
	call	display_content_comom
	cbi	portb,led
	call	dis_logo	
	call	delay_500ms
	ret
;--------------------------------------
into_mp3_model:
;	sbi	portd,4
	sbi		portd,mute
	clr	r10
	cbi	portb,led
	call	out_exmodel
	ldi	r16,0
	sts	model_status,r16
;===========================================
into_radio_model:
	ldi	r16,16		; read qs+register
	sts	eepromaddr_hi,r16
	call	EEPROM_read
	lds	r16,eepromdata_hi
	sts	qs_register,r16
	ldi	r17,2
	mul	r16,r17
	sts	eepromaddr_hi,r0	
	call	EEPROM_read
	lds	r16,eepromdata_hi
	lds	r17,eepromdata_lo
	subi	r17,0x6b
	sbci	r16,0x03
	brcc	into_radio_model_1
	ldi	r16,0x03
	sts	frequency_hi,r16
	ldi	r16,0x6b
	sts	frequency_lo,r16
	rjmp	into_radio_model_3		
into_radio_model_1:
	lds	r16,eepromdata_hi
	lds	r17,eepromdata_lo
	subi	r17,0x39
	sbci	r16,0x04
	brcs	into_radio_model_2
	ldi	r16,0x03
	sts	frequency_hi,r16
	ldi	r16,0x6b
	sts	frequency_lo,r16
	rjmp	into_radio_model_3	
into_radio_model_2:
	lds	r16,eepromdata_hi
	sts	frequency_hi,r16
	lds	r16,eepromdata_lo
	sts	frequency_lo,r16
into_radio_model_3:
	lds	r16,qs_register
	cpi	r16,0
	brne	into_radio_model_setr10
	clt	
	bld	r10,1
	rjmp	into_radio_model_setr10_1
into_radio_model_setr10:
	set
	bld	r10,1
into_radio_model_setr10_1:
;---------------------------------------------
	call	delay_20ms
datato1415_2:
	call	clrarscrren
	call	radio_hextobcd
	call	delay_100ms
	sbrc	r10,1
	rjmp	readeepromexit_1
	call	disfrequency
	rjmp	readeepromexit_2
readeepromexit_1:
	call	disfrequency_m
readeepromexit_2:
	call	ini_radio_data
	ldi		r16,0x11	; 开 收音机
	sts		senddata+3,r16	;swp2=0,  standby=0, us/europe, xt=32.768 smute=0,hcc=0,snc=0 si=0 soft read search end	
	call	dis_logo	
	call	delay_500ms
	call	send5767
	ret
;===========================================================
exit_radio_model:
	ldi		r16,0
	sts		model_status,r16		
	sts		eepromdata_hi,r16
	ldi		r16,14
	sts		eepromaddr_hi,r16
	call		EEPROM_write	; ; 记录 模式
	call		ini_radio_data
	ldi		r16,0x51		; 关 收音机
	sts		senddata+3,r16	;swp2=0,  standby=0, us/europe, xt=32.768 smute=0,hcc=0,snc=0 si=0 soft read search end
;	call		write_5767
	call		send5767
	ret	
;==================================================
ini_radio_data:	
	call	AssembleFrequencyWord
	lds	r16,twpll_hi	;set pll high
	sts	senddata,r16
	lds	r16,twpll_lo	;set pll low
	sts	senddata+1,r16	
	ldi	r16,0x40
	sts	senddata+2,r16	;search=0 ssl1 ssl0 ,injecton=0 ,stereo, mr,ml off ,swp1=0
	ldi	r16,0x00
	sts	senddata+4,r16
	ret	
;======================================================
reset_program:
	ldi	r16,1
	sts	model_status,r16
	call	register_clear
	call	dis_first_info
	call	resetdbselection
	call	readipod
	ret
	
vol_save:
	lds		r16,volregister
	sts		eepromdata_hi,r16
	sts		eepromdata_lo,r16
	ldi		r16,18
	sts		eepromaddr_hi,r16
	rcall		eeprom_write
	ret

;======================================================搜台
search_add:
	lds	r16,senddata+2
	ori	r16,0x80
	rjmp	search_updon
	
search_mius:
	
	lds	r16,senddata+2
	andi	r16,0x7f
search_updon:
	ldi	r18,7
	lds	r17,volregister
	sub	r17,r18
	brcs	search_updon_01
	mov	r18,r17
search_updon_00:
	cpi	r18,0
	breq	search_updon_01
	call	vol_mius
	call	delay_20ms
	dec	r18
	rjmp	search_updon_00
search_updon_01:
	sts	senddata+2,r16
	call	disfrequency_search
	
search:
;-----------------------------------------
searchtai_1:
	sbis	pinb,play_key
	rjmp	readloop_2
searchtai_contine:
	sbrc	r10,5
	rjmp	searchtai_contine_1
	call	frequency_add
	rjmp	searchtai_contine_2
searchtai_contine_1:
	call	frequency_mius
searchtai_contine_2:
	call	AssembleFrequencyWord
	lds	r16,twpll_hi
	ori	r16,0xc0
	sts	senddata,r16
	lds	r16,twpll_lo
	sts	senddata+1,r16
;	call	write_5767	;发搜索指令
	call	searsend5767
	ldi	r16,10
	sts	readtime,r16
readloop:
	call		delay_5ms
;	call		read_5767
	call		read5767
	lds		r16,readdata
	sbrc		r16,7
	rjmp		readloop_1
	lds		r16,readtime
	dec		r16
	sts		readtime,r16
	brne		readloop
	rjmp		searchtai_1
readloop_1:
	sbrc		r16,6
	rjmp		searchtai_1
;---------------------------------------------------没有到极限,显示当前搜索到的频率
readloop_2:
	lds	r16,readdata
	andi	r16,0x3f
	lds	r17,readdata+1
	subi	r17,0x9d
	sbci	r16,0x29
	brcs	readloop_2_error
	lds	r16,readdata
	andi	r16,0x3f
	lds	r17,readdata+1
	subi	r17,0x64
	sbci	r16,0x33
	brcc	readloop_2_error
	lds	r16,readdata
	andi	r16,0x3f
	sts	senddata,r16
	sts	twpll_hi,r16
	lds	r16,readdata+1
	sts	senddata+1,r16
	sts	twpll_lo,r16
readloop_2_0:
;	call	write_5767
	call	send5767
	call	disAssembleFrequencyWord
	call	radio_hextobcd		
	sbrc	r10,1
	rjmp	readloop_3
	call	disfrequency
	rjmp	readloop_4
readloop_3:
	call	disfrequency_m
readloop_4:
	call	dly
	sbis	pinb,play_key
	rjmp	readloop_4
	call	dly
	sbis	pinb,pre_track_key
	rjmp	readloop_4
	call	dly
	sbis	pinb,next_track_key
	rjmp	readloop_4
	rjmp	exit_search

	
readloop_2_error:
	call	AssembleFrequencyWord
	rjmp	readloop_2_0
	
exit_search:
	ldi	r18,7
	lds	r17,volregister
	sub	r17,r18
	brcs	exit_search_1
	mov	r18,r17
exit_search_0:
	cpi	r18,0
	breq	exit_search_1
	call	vol_add
	call	delay_20ms
	dec	r18
	rjmp	exit_search_0
exit_search_1:
	rjmp	updown_exit
;***********************************************time program	
;****************************************************radio remote program
remotefrequencyup:
	clt
	bld	r10,5
	rjmp	remoteupdown						
remotefrequencydown:
	set
	bld	r10,5
remoteupdown:	
	sbrc	r10,5
	rjmp	remoteupdown_2
	call	frequency_add
	rjmp	remoteupdown_3
remoteupdown_2:
	call	frequency_mius
remoteupdown_3:
	call	radio_hextobcd
	sbrc	r10,1
	rjmp	remoteupdown_4
	call	disfrequency
	rjmp	remoteupdown_5
remoteupdown_4:
	call	disfrequency_m
remoteupdown_5:
	call	AssembleFrequencyWord
	lds	r16,twpll_hi
	sts	senddata,r16
	lds	r16,twpll_lo
	sts	senddata+1,r16
;	call	write_5767
	call	send5767
bddownlose:
	sbrc		r10,5
	rjmp		bddownlose_1
	ldi		r16,50
	sts		key_time,r16
bddownlose_0:
	call		delay_20ms
	sbic		pinb,next_track_key
	rjmp		updown_exit	
	lds		r16,key_time
	dec		r16
	sts		key_time,r16
	cpi		r16,0
	brne		bddownlose_0
	rjmp		search_add
bddownlose_1:
	ldi		r16,50
	sts		key_time,r16
bddownlose_1_0:
	call		delay_20ms
	sbic		pinb,pre_track_key
	rjmp		updown_exit	
	lds		r16,key_time
	dec		r16
	sts		key_time,r16
	cpi		r16,0
	brne		bddownlose_1_0
	rjmp		search_mius
;-------------------------------------------------------- -保存最后频率
updown_exit:
	sbrc	r10,1
	rjmp	updown_exit_1
	lds		r16,frequency_lo
	sts		eepromdata_lo,r16
	lds		r16,frequency_hi
	sts		eepromdata_hi,r16
	ldi		r16,0
	sts		eepromaddr_hi,r16
	call		EEPROM_WRITE
updown_exit_1:
	rjmp		main	
;=========================================================	
qs_tai:
	ldi	r16,100
qs_tai_0:	
	call	Delay_20ms
	sbic	pinb,play_key
	rjmp	qs_tai_1
	dec	r16
	brne	qs_tai_0
;=====================================save tai
	lds	r16,qs_register
	ldi	r17,2
	mul	r16,r17
	sts	eepromaddr_hi,r0
	lds	r16,frequency_hi
	sts	eepromdata_hi,r16
	lds	r16,frequency_lo
	sts	eepromdata_lo,r16
	call	EEPROM_write
	call	disfrequency_save
qs_tai_0_1:
	sbis	pinb,play_key
	rjmp	qs_tai_0_1
	rjmp	main
		
;=============================================qs tai
qs_tai_1:
	set
	lds	r16,qs_register
	inc	r16
	cpi	r16,6
	brne	qs_tai_2
	ldi	r16,0
	clt
qs_tai_2:
	bld	r10,1
	sts	qs_register,r16
	ldi	r17,2
	mul	r16,r17
	sts	eepromaddr_hi,r0
	call	EEPROM_read
;=========================================
	lds	r16,eepromdata_hi
	lds	r17,eepromdata_lo
	subi	r17,0x6b
	sbci	r16,0x03
	brcc	qs_tai_2_0
	ldi	r16,0x03
	sts	frequency_hi,r16
	ldi	r16,0x6b
	sts	frequency_lo,r16
	rjmp	qs_tai_2_exit		
qs_tai_2_0:
	lds	r16,eepromdata_hi
	lds	r17,eepromdata_lo
	subi	r17,0x39
	sbci	r16,0x04
	brcs	qs_tai_2_1
	ldi	r16,0x03
	sts	frequency_hi,r16
	ldi	r16,0x6b
	sts	frequency_lo,r16
	rjmp	qs_tai_2_exit	
qs_tai_2_1:
;========================================
	lds	r16,eepromdata_hi
	sts	frequency_hi,r16
	lds	r16,eepromdata_lo
	sts	frequency_lo,r16
qs_tai_2_exit:
	call	radio_hextobcd
	sbrs	r10,1
	rjmp	qs_tai_3
	call	disfrequency_m

	rjmp	qs_tai_4
qs_tai_3:
	call	disfrequency
qs_tai_4:
	call	AssembleFrequencyWord
	lds	r16,twpll_hi
	sts	senddata,r16
	lds	r16,twpll_lo
	sts	senddata+1,r16
;	call	write_5767
	call	send5767
	ldi	r16,16
	sts	eepromaddr_hi,r16
	lds	r16,qs_register
	sts	eepromdata_hi,r16
	call	EEPROM_write	; save qs
	rjmp	main	
;===========================================================  zhong jian jian
center_key_program:
	lds	r16,main_level
	cpi	r16,0
	brne	center_key_program_1
	rjmp	first_center_program
center_key_program_1:
	rjmp	second_center_program
;==============================================
left_key_program:
	lds	r16,main_level
	cpi	r16,0
	brne	left_key_program_1
	rjmp	first_left_program
left_key_program_1:
	rjmp	second_left_program
;==============================================
down_key_progrm:
	lds	r16,main_level
	cpi	r16,0
	brne	down_key_program_1
	rjmp	first_down_program
down_key_program_1:
	rjmp	second_down_program
;=============================================

up_key_program:
	lds	r16,main_level
	cpi	r16,0
	brne	up_key_program_1
	rjmp	first_up_program
up_key_program_1:
	rjmp	second_up_program
;=======================================

right_key_program:
	lds	r16,main_level
	cpi	r16,0
	brne	right_key_program_1
	rjmp	first_right_program
right_key_program_1:
	rjmp	second_right_program
		
;********************************************************************

;================================================ 功能程序 开始
;****************************************** 中键
first_center_program:
;====================================================play=0 play =1 pause =2 FF =3 REW =4 stop
	ldi	r16,30
first_center_program_0:     
	sbic	pinb,play_key  
	rjmp	exPLAYPAUSE	
	call	delay_20ms 
	dec	r16
	brne	first_center_program_0
;-------------------------------------
first_center_program_1:			; wait lose key
;****************************************************** into set model
	set
	bld	r11,2
	ldi	r16,1
	sts	main_level,r16
	call	dis_set_model			; dis set repeat shuffle
first_center_program_2:
	sbis	pinb,play_key 
	rjmp	first_center_program_2
	rjmp	main


;===================================================================

second_center_program:	
	lds	r16,first_status	; 光标在哪个位置	
	cpi	r16,1
	brne	second_center_program_1
	call	setrepeat
	rjmp	second_center_program_2
;------------------------------------------------
second_center_program_1:
	call	setshuffle
second_center_program_2:
	clt
	bld	r11,2
	ldi	r16,0
	sts	main_level,r16
	call	clrarscrren
	call	dis_first_info
	call	display_content_comom	
second_center_program_3:
	sbis	pinb,play_key
	rjmp	second_center_program_3	;wait lose key
	rjmp	main
	
;=========================================================
exPLAYPAUSE:
	ldi	r16,1
	sts	playcontrol_status,r16
	call	play_control
;	call	play_pause
	call	readipod_no_save
	lds	r16,play_status
	cpi	r16,0x0				;55 play status aa pause status
	brne	exPLAYPAUSE_1
	ldi	r16,0x01
	sts	play_status,r16
;=====================================


	sbi	portd,mute

;========================================
  	rjmp	exPLAYPAUSE_2
exPLAYPAUSE_1:
	ldi	r16,0x0
	sts	play_status,r16	
	cbi	portd,mute
;--------------------------------------------------display playpause
exPLAYPAUSE_2:
	call	display_playinfo
	ldi	r16,0
	sts	dis_leixing,R16
	rjmp	main
;========================================中央键结束

;************************************************ 上键

;======================================第一级
first_up_program:
upkeyprogram:
	lds	r16,volregister
	cpi	r16,16
	breq	upkeyprogram_2
	cpi	r16,0
	breq	upkeyprogram_1
	inc	r16
	sts	volregister,r16
	call	vol_add
	rjmp	upkeyprogram_2
upkeyprogram_1:
	inc	r16
	sts	volregister,r16
	lds	r16,model_status
	cpi	r16,0
	brne	upkeyprogram_1_0
	rcall	send5767
	rjmp	upkeyprogram_2
upkeyprogram_1_0:
	cbi	portd,mute

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -