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

📄 i993_lcd_avr168.asm

📁 IPOD 线控程序(将IPOD AND IPHONE 的歌曲信息读出来显示的LCD 屏幕上) 适应于 所有的 苹果 MP3 和手机的机型
💻 ASM
📖 第 1 页 / 共 5 页
字号:
	cbi	portc,scl	;clr	SCL		; drop clock
	dec	r17		;djnz	b, x42		; next bit
	brne	x42
        call	dly		;nop
	cbi	ddrc,sda	;setb	SDA		; release SDA for ACK
	call	dly		;nop			;
	sbi	portc,scl	;setb	SCL		; raise ACK clock
	call	dly		;nop			;
	cbi	portc,scl	;clr	SCL		; drop ACK clock
        call	dly		;nop
        sbi	ddrc,sda
        call	dly
	ret
;---------------------------------------------------------------------------------------
ACK:
	cbi	portc,sda	;clr	SDA		; ACK bit
        call	dly		;	nop
	sbi	portc,scl	;setb	SCL		; raise clock
	call	dly	;	nop			;
	cbi	portc,scl	;clr	SCL		; drop clock
        call	dly		;nop
	ret
;--------------------------------------------------------------
NAK:
	sbi	portc,sda	;setb	SDA		; NAK bit
	call	dly		;nop
	sbi	portc,scl	;setb	SCL		; raise clock
	call	dly		;nop			;	;
	cbi	portc,scl	;clr	SCL		; drop clock
        call	dly		;nop
	ret
;=============================================================
 ;(r0 r1 r2)*(r6 r7 r8)-->r3 r4 r5 r6 r7 r8
 ;r5,r6,r7,r8  	dividend 
;r11,r12,r13,r14,yushu  
;r18,r19,r20,r21 quotient
;r22,r23,r24,r25 divisor
; twPLL =(unsigned int)((float)((tdwPresetVCO -225)*4)/(float)REFERENCE_FREQ);
;======================================================
AssembleFrequencyWord:			;(frequency_hi frequency_lo)*100
	CLR	r0	
	CLR	r6
	CLR	r7
	lds	r1,frequency_hi
	lds	r2,frequency_lo
	ldi	r16,0x64
	mov	r8,r16	
	call	radio_chenfa		;乘以100 是把0.1 MHZ 转换成1KHZ
;-----------------------------------------((frequency_hi frequency_lo)*100)-225
	;clc
	ldi	r17,225
	sub	r8,r17
	ldi	r17,0
	sbc	r7,r17
	sbc	r6,r17
	;SBC	R5,R17	 ; qu diao
	
;-------------------------------------;(((frequency_hi frequency_lo)*100)+225)*4000
	clr	r0
	ldi	r16,0x0f
	mov	r1,r16
	ldi	r16,0xa0
	mov	r2,r16
	call	radio_chenfa
;-------------------------------------(((frequency_hi frequency_lo)*1000)+225)*4/REFERENCE_FREQ)
	ldi	r22,0
	ldi	r23,0
	ldi	r24,0x80
	ldi	r25,0
	call	radio_chu
;------------------------------(tdwPresetVCO+225)*4)/(float)REFERENCE_FREQ)
	sts	twpll_hi,r20
	sts	twpll_lo,r21
	ret
;=================================================求 frequency  
 ;(r0 r1 r2)*(r6 r7 r8)-->r3 r4 r5 r6 r7 r8
 ;   gdwSearchedVCO =(twPLL*REFERENCE_FREQ*0.25+225);
 ;in twpll_hi, twpll_lo,
 ;out frequency_hi frequency_lo
 
 ;REFERENCE_FREQ=32.768
disAssembleFrequencyWord:;--twPLL*REFERENCE_FREQ*0.25; (38.768*0.25*1000=8192)
	ldi	r16,0
	mov	r0,r16
	lds	r1,twpll_hi
	lds	r2,twpll_lo
	ldi	r16,0
	mov	r6,r16
	ldi	r16,0x20
	mov	r7,r16
	ldi	r16,0x00
	mov	r8,r16
	call	radio_chenfa
;-------------------------------------(twPLL*REFERENCE_FREQ*0.25)/1000

	ldi	r25,0xe8
	ldi	r24,0x03
	ldi	r23,0
	ldi	r22,0
	call	radio_chu
;------------------------------ (twPLL*REFERENCE_FREQ*0.25+225) 
	;clc
	ldi	r17,225
	add	r21,r17
	mov	r8,r21
	ldi	r17,0
	adc	r20,r17
	mov	r7,r20
	adc	r19,r17
	mov	r6,r19
	adc	r18,r17
	mov	r5,r18
;--------------------------------------(twPLL*REFERENCE_FREQ*0.25-225) /1000
	ldi	r22,0
	ldi	r23,0
	ldi	r24,0
	ldi	r25,100		;除以100 是把 频率 1K HZ转换 成 0.1MHZ
	call	radio_chu
	;lds	r16,quotient_1
	;sts	frequency_hi,r20
	;mov	r16,r21
	mov	r17,r14
	cpi	r17,0x3c
	brcs	disAssembleFrequencyWord_1
	inc	r21
	cpi	r21,0
	brne	disAssembleFrequencyWord_1
	inc	r20
disAssembleFrequencyWord_1:
	sts	frequency_lo,r21
	sts	frequency_hi,r20
	ret
	
;===================================:             
radio_chenfa:  
	LDI     R16,25     
        ClR     R3
        ClR     R4        ;积的高位字预清除
        clr	r5
        CLC                  ;第1次只右移,不相加
radio_chenfa_1: 
	BRCC    radio_chenfa_2         ;
        ADD     R5,R2      ;乘数右移移出位为1,将被乘数加入部分积
        ADC     R4,R1
        adc	r3,r0
radio_chenfa_2:  
	ror	r3
	ROR     R4
        ROR     R5
        ROR     R6
        ROR     R7         ;部分积连同乘数整体右移1位
        ror	r8
        DEC     R16
        BRNE    radio_chenfa_1        ;17次右移后结束 
        RET
        
;=====================================
radio_chu:                        		        
	ldi	r26,0x20 	;loop time                     	
	clr	r11
	clr	r12
	clr	r13
	clr	r14         	
radio_chu_1:                                   	
	Clc	                                
	rol	r8               
	rol	r7            
	rol	r6 
	rol	r5                                   
	rol	r14  
	rol	r13
	rol	r12
	rol	r11      
	rol	r21
	rol	r20
	rol	r19
	rol	r18           
	clc              
	             	
	mov	 r16,r14    		
	mov	r17,r25         		
	sbc	r16,r17                         
	mov	r1,r16 	
		                
	mov	r16, r13          	
	mov	r17,r24            	
	sbc	r16,r17                         
	 mov	r2,r16   
	  		        
	mov  r16 ,r12 	
	mov	r17,r23           	
	sbc	r16,r17                         
	mov	r3,r16   
	             		
	mov    r16,r11         	
        mov	r17,r22           	
        sbc	r16,r17                         
        mov	r4,r16  
                 		
        brcs  radio_chu_2                      	                                    
       inc	r21                
        mov	r14 ,r1; 建立余数          
       mov	r13 ,r2                  	
        mov	r12 ,r3                	
        mov	r11 ,r4                	
radio_chu_2:                                  	
	dec r26                      	
	 brne	radio_chu_1               	
	 ret  

;===============================================  display_ ipod info program
vol_mius:
	cbi	portd,lm48_updn
	rjmp	vol_add_mius
vol_add:
	sbi	portd,lm48_updn
vol_add_mius:
	 call	dly
	sbi	portd,lm48_clk
   	 call	dly
	cbi	portd,lm48_clk
	ret	
;*************************************************显示程序开始

;========================================收音机显示程序
disfrequency_search:
	set
	bld	r10,search_status
	jmp	disfrequency_m
disfrequency_save:
	set
	bld	r10,save_status
disfrequency_m:

disfrequency:
;====================================================显示音量

	call	dis_speak
	call	dis_vol		



	call	radio_hextobcd

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



	ldi		r16,4
	sts		page_register,r16
	ldi		r16,1
	sts		page_count,r16
	lds		r16,qs_register
	cPI		R16,0
	BRNE		disfrequency_lead
;===========================================dis_blank
	LDI		R16,6
	STS		OFFSET,R16
	LDI		R16,0
	STS		column_count,R16
	LDI		R16,10
	STS		BYTE_COUNT,R16	
	call		dis_RADIO_two_byte
	jmp		disfrequency_lead_1
	
;========================================================dis_m
disfrequency_lead:
	LDI		ZL,LOW(m_tab)
  	LDI		ZH,HIGH(m_tab)
  	LDI		R16,2
	STS		column_count,R16
	LDI		R16,4
	STS		BYTE_COUNT,R16	
	call		dis_radio_two_byte_icon
;========================================================dis_m_number
	LDI		R16,4
	STS		page_register,R16
	LDI		R16,1
	STS		page_count,R16
	LDS		R16,qs_register
	STS		OFFSET,R16
	LDI		R16,11
	STS		column_count,R16
	LDI		R16,3
	STS		BYTE_COUNT,R16
	call		dis_radio_two_byte
;========================================================		
		
disfrequency_lead_1:
	LDI		R16,3
	STS		page_register,R16
	LDI		R16,1
	STS		page_count,R16
	SBRC		R10,save_status
	jmp		disfrequency_lead_2
	SBRC		R10,search_status
	jmp		disfrequency_lead_3
	LDI		R16,6
	STS		OFFSET,R16
	LDI		R16,6
	STS		column_count,R16
	LDI		R16,6
	STS		BYTE_COUNT,R16	
	call		dis_radio_two_byte
	jmp		disfrequency_lead_4
disfrequency_lead_2:
	LDI		R16,7
	STS		OFFSET,R16
	LDI		R16,6
	STS		column_count,R16
	LDI		R16,4
	STS		BYTE_COUNT,R16	
	call		dis_radio_two_byte
	jmp		disfrequency_lead_4
disfrequency_lead_3:
	SBRS		R10,up_down_model
	jmp		disfrequency_lead_3_1
	LDI		R16,8
	jmp		disfrequency_lead_3_2
disfrequency_lead_3_1:
	LDI		R16,9
disfrequency_lead_3_2:	
	STS		OFFSET,R16
	LDI		R16,6
	STS		column_count,R16
	LDI		R16,5
	STS		BYTE_COUNT,R16	
	call		dis_radio_two_byte
disfrequency_lead_4:
;========================================

	LDI		R16,5
	STS		page_register,R16
	LDI		R16,4
	STS		page_count,R16

	
disfrequency_0:
	LDS		R16,bcddaTA1000		; qian wei
	cPI		R16,0
	BRNE	disfrequency_1
	LDI		R16,12
	jmp		disfrequency_2
disfrequency_1:
	LDI		R16,11
disfrequency_2:
	STS		OFFSET,R16	
	LDI		R16,26
	STS		column_count,R16
	LDI		R16,1
	STS		BYTE_COUNT,R16
	call		dis_radio_four_byte

;===============================================bai wei
	LDI		R16,5
	STS		page_register,R16
	LDI		R16,4
	STS		page_count,R16
	LDS		R16,bcddata100
	STS		OFFSET,R16	
	LDI		R16,31
	STS		column_count,R16
	LDI		R16,6
	STS		BYTE_COUNT,R16
	call		dis_radio_four_byte

;=================================================si wei
	LDI		R16,5
	STS		page_register,R16
	LDI		R16,4
	STS		page_count,R16
	LDS		R16,bcddata10
	STS		OFFSET,R16
	LDI		R16,45
	STS		column_count,R16
	LDI		R16,6
	STS		BYTE_COUNT,R16
	call		dis_radio_four_byte
;================================================== dot
	LDI		R16,5
	STS		page_register,R16
	LDI		R16,4
	STS		page_count,R16
	LDI		R16,10
	STS		OFFSET,R16
	LDI		R16,58
	STS		column_count,R16
	LDI		R16,1
	STS		BYTE_COUNT,R16
	call		dis_radio_four_byte	
;=================================================== ge wei
	LDI		R16,5
	STS		page_register,R16
	LDI		R16,4
	STS		page_count,R16
	LDS		R16,bcddata1
	STS		OFFSET,R16
	LDI		R16,62
	STS		column_count,R16
	LDI		R16,6
	STS		BYTE_COUNT,R16
	call		dis_radio_four_byte
;===============================================	
	call		dis_dianci_radio	
	
;====================================================display mhz
	LDI		R16,3
	STS		page_register,R16
	LDI		R16,2
	STS		page_count,R16
	LDI		R16,13
	STS		OFFSET,R16
	LDi		R16,75
	STS		column_count,R16
	LDI		R16,10
	STS		BYTE_COUNT,R16
	call		dis_radio_four_byte
	CLT
	BLD		R10,save_status
	BLD		R10,search_status
	ret
;==============================================
dis_dianci_radio:
	ldi		r16,79
	sts	column_count,r16
	call	lcd_first_weizi
	call	getpowerbatterystate
	call	readipod
	lds	r16,readipod_start+3
	cpi	r16,0x03
	brne	dis_dianci_radio
	lds	r16,readipod_start+4
	cpi	r16,0x1b
	brne	dis_dianci_radio
	lds	r16,readipod_start+6
	sts	dividend_0,r16
	ldi	r16,0
	sts	dividend_3,r16
	sts	dividend_2,r16
	sts	dividend_1,r16
	sts	divisor_3,r16
	sts	divisor_2,r16
	sts	divisor_1,r16
	ldi	r16,31
	sts	divisor_0,r16
	call	CHU40
	lds	r16,quotient_0
	sts	dianci_level,r16
	call	display_dianci_level
	ret

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

dis_radio_four_byte:
	ldi		zl,low(figure_tab)
	ldi		zh,high(figure_tab)	
	jmp		dis_radio_two_byte_0
dis_radio_two_byte:
	ldi		zl,low(mfont_tab)
	ldi		zh,high(mfont_tab)
dis_radio_two_byte_0:	
	clr		r13
	lds		r3,OFFSET
	CLC
  	ADD		ZL, R3			;r3=需要显示数字
	ADC		ZH, R13			;FIGURE2 ADRESS
  	CLC
  	ROL		ZL
  	ROL		ZH
  	LPM		R1, Z+
  	LPM		R0, Z+
  	MOV		ZL, R1
  	MOV		ZH, R0			;GET FONT ADRESS
dis_radio_two_byte_icon:
  	CLC
  	ROL		ZL
  	ROL		ZH
dis_radio_two_byte_icon_1:
  	lds		r16,page_register
	ori		r16,0x40
	call		SdCmd
	lds		r16,column_count
	ori		r16,0x80
	call		SdCmd
  	lds		r18,BYTE_COUNT
dis_radio_two_byte_1:
  	ORI		ZL,0B00000001
  	LPM		r16,z	
  	call		SdData
  	ANDI		ZL,0B11111110
  	LPM		r16,z
  	call		SdData
  	adiw		zl,2
  	dec		r18

  	brne		dis_radio_two_byte_1
  	lds		r16,page_register
  	dec		r16
  	sts		page_register,r16
  	lds		r16,page_count
  	dec		r16
  	cpi		r16,0
  	breq		dis_radio_two_byte_exit	
  	sts		page_count,r16
  	rjmp		dis_radio_two_byte_icon_1
dis_radio_two_byte_exit:
				
  	ret

;***********************************************************************
 
display_content_comom:
	clt
	bld	r11,4
	lds	r16,dis_leixing
	cpi	r16,0
	brne	display_content_comom_00	
;===================================
	lds	r16,info_count
	inc	r16
	sts	info_count,r16
	cpi	r16,1
	BREQ	display_content_comom_0_1
	CPI	R16,5
	BREQ	display_content_comom_000
;==================================================
	CALL	display_jidu
	RJMP	display_content_comom_exit
	
display_content_comom_000:	
	ldi	r16,0
	sts	info_count,r16
;*********************************************
display_content_comom_00:	
	lds	r16,dis_leixing
	inc	r16
	cpi	r16,4
	brne	display_content_comom_0
	ldi	r16,0
display_content_comom_0:
	sts	dis_leixing,r16
	cpi	r16,0
	brne	display_content_comom_1
display_content_comom_0_1:		;  XIANSHI B FANG XINXI
	call	display_playinfo
	rjmp	display_content_comom_exit
display_content_comom_1:
	cpi	r16,1
	brne	display_content_comom_2
	call	display_gequ_ming
	sbrc	r11,7
	rjmp	display_content_comom
	rjmp	display_content_comom_exit
display_content_comom_2:	
	cpi	r16,2
	brne	display_content_comom_3
	call	dis_artist_ming
	sbrc	r11,7
	rjmp	display_content_comom
	rjmp	display_content_comom_exit	
display_content_comom_3:
	call	dis_album_ming
	sbrc	r11,7
	rjmp	display_content_comom
display_content_comom_exit:
display_content_comom_exit_0:
	ret
;----------------------------------------------------
;==========================================显示第一行
dis_first_info:	
	call	dis_speak
	call	dis_vol		
	call	dis_repeat
	call	dis_shuffle
	call	dis_dianci

⌨️ 快捷键说明

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