📄 i993_lcd_avr168.asm
字号:
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 + -