📄 mp3.lst
字号:
(0436) buffer_l[83]=0x00;
(0437) }
(0438) else
(0439) {
(0440) buffer_h[83]=Hzk[i/12][j];
(0441) buffer_l[83]=Hzk[i/12][j+12];
(0442) }
(0443)
(0444) j++;
(0445)
(0446) if (j==12) j=0;
(0447)
(0448) for (n=0; n<83; n++)
(0449)
(0450) {
(0451)
(0452) buffer_h[n]=buffer_h[n+1];
(0453)
(0454) buffer_l[n]=buffer_l[n+1];
(0455)
(0456) }
(0457)
(0458) LCD_set_XY(0,0);
(0459)
(0460) for (n=0; n<83; n++)
(0461)
(0462) {
(0463)
(0464) LCD_write_byte(buffer_h[n],1);
(0465)
(0466) }
(0467)
(0468) LCD_set_XY(0,1);
(0469)
(0470) for (n=0; n<83; n++)
(0471)
(0472) {
(0473)
(0474) LCD_write_byte(buffer_l[n],1);
(0475)
(0476) }
(0477)
(0478) Delay_ms(250);
(0479)
(0480) }
(0481) }
(0482) */
(0483)
(0484) //=======================================================================
(0485) void JINGDU(void)
(0486) { uint8 i;
(0487) LCD_set_XY(0,4);
0AAE E024 LDI R18,4
0AAF 2700 CLR R16
0AB0 DF78 RCALL _LCD_set_XY
(0488) LCD_write_byte(0x7f,1);
0AB1 E021 LDI R18,1
0AB2 E70F LDI R16,0x7F
0AB3 DFCF RCALL _LCD_write_byte
(0489) i=82;
0AB4 E542 LDI R20,0x52
0AB5 C003 RJMP 0x0AB9
(0490) while(i--)
(0491) {
(0492) LCD_write_byte(0x41,1);
0AB6 E021 LDI R18,1
0AB7 E401 LDI R16,0x41
0AB8 DFCA RCALL _LCD_write_byte
0AB9 2E24 MOV R2,R20
0ABA 2433 CLR R3
0ABB 5041 SUBI R20,1
0ABC 2022 TST R2
0ABD F7C1 BNE 0x0AB6
(0493) }
(0494) LCD_write_byte(0x7f,1);
0ABE E021 LDI R18,1
0ABF E70F LDI R16,0x7F
0AC0 DFC2 RCALL _LCD_write_byte
0AC1 940E1CD0 CALL pop_gset1
0AC3 9508 RET
_GEPAI:
i --> R20
0AC4 940E1CCD CALL push_gset1
(0495) }
(0496)
(0497) //=======================================================================
(0498) void GEPAI(void)
(0499) {
(0500) uint8 i;
(0501) LCD_set_XY(6,2);
0AC6 E022 LDI R18,2
0AC7 E006 LDI R16,6
0AC8 DF60 RCALL _LCD_set_XY
(0502) for(i=0;i<72;i++)
0AC9 2744 CLR R20
0ACA C004 RJMP 0x0ACF
(0503) {
(0504) LCD_write_byte(0x00,1);
0ACB E021 LDI R18,1
0ACC 2700 CLR R16
0ACD DFB5 RCALL _LCD_write_byte
0ACE 9543 INC R20
0ACF 3448 CPI R20,0x48
0AD0 F3D0 BCS 0x0ACB
(0505) }
(0506) LCD_set_XY(6,3);
0AD1 E023 LDI R18,3
0AD2 E006 LDI R16,6
0AD3 DF55 RCALL _LCD_set_XY
(0507) for(i=0;i<72;i++)
0AD4 2744 CLR R20
0AD5 C004 RJMP 0x0ADA
(0508) {
(0509) LCD_write_byte(0x00,1);
0AD6 E021 LDI R18,1
0AD7 2700 CLR R16
0AD8 DFAA RCALL _LCD_write_byte
0AD9 9543 INC R20
0ADA 3448 CPI R20,0x48
0ADB F3D0 BCS 0x0AD6
0ADC 940E1CD0 CALL pop_gset1
0ADE 9508 RET
_Abtain_code:
code_buffer --> R12
number --> R10
0ADF 940E1CC7 CALL push_gset4
0AE1 0169 MOVW R12,R18
0AE2 2EA0 MOV R10,R16
0AE3 9724 SBIW R28,4
FILE: E:\MYWORK~1\开发设计\AVR-MP3\mp3开发板光盘\驱动程序\MP3BOA~1.8\chinese_code.c
(0001) //ICC-AVR application builder : 2005-11-12 17:11:59
(0002) // Target : M16
(0003) // Crystal: 8.0000Mhz
(0004) // copyright:鲁军波(endylu)
(0005) // www.shop34612283.taobao.com
(0006) // www.adembed.com
(0007) #include <iom16v.h>
(0008) #include <macros.h>
(0009) #include "main.h"
(0010)
(0011)
(0012) extern uint32 CHINALIB_point;
(0013) extern MP3_INFO mp3_info;
(0014)
(0015) //=======================================================================
(0016) void Abtain_code(uint8 number,uint8 *code_buffer)
(0017) {
(0018) SD_read_sector2(CHINALIB_point+((long)mp3_info.NAME[number]<<5),code_buffer,24);
0AE4 E188 LDI R24,0x18
0AE5 E090 LDI R25,0
0AE6 839B STD Y+3,R25
0AE7 838A STD Y+2,R24
0AE8 82D9 STD Y+1,R13
0AE9 82C8 STD Y+0,R12
0AEA E082 LDI R24,2
0AEB 9D8A MUL R24,R10
0AEC 01F0 MOVW R30,R0
0AED ED85 LDI R24,0xD5
0AEE E090 LDI R25,0
0AEF 0FE8 ADD R30,R24
0AF0 1FF9 ADC R31,R25
0AF1 8020 LDD R2,Z+0
0AF2 8031 LDD R3,Z+1
0AF3 2444 CLR R4
0AF4 2455 CLR R5
0AF5 E085 LDI R24,5
0AF6 E090 LDI R25,0
0AF7 938A ST R24,-Y
0AF8 0181 MOVW R16,R2
0AF9 0192 MOVW R18,R4
0AFA 940E1D3E CALL lsl32
0AFC 90400071 LDS R4,CHINALIB_point+2
0AFE 90500072 LDS R5,CHINALIB_point+3
0B00 9020006F LDS R2,CHINALIB_point
0B02 90300070 LDS R3,CHINALIB_point+1
0B04 0E20 ADD R2,R16
0B05 1E31 ADC R3,R17
0B06 1E42 ADC R4,R18
0B07 1E53 ADC R5,R19
0B08 0181 MOVW R16,R2
0B09 0192 MOVW R18,R4
0B0A 940E1567 CALL _SD_read_sector2
0B0C 9624 ADIW R28,4
0B0D 940E1CBF CALL pop_gset4
0B0F 9508 RET
_FATinit:
RootDirSectors --> R10
BPB_RootEntCnt --> R10
BPB_FATsz16 --> R12
BPB_NumFATs --> R14
BPB_BytePerSec --> Y+4
0B10 940E1CC5 CALL push_gset5
0B12 9726 SBIW R28,6
FILE: E:\MYWORK~1\开发设计\AVR-MP3\mp3开发板光盘\驱动程序\MP3BOA~1.8\FAT.c
(0001) //ICC-AVR application builder : 2005-11-12 17:11:59
(0002) // Target : M16
(0003) // Crystal: 8.0000Mhz
(0004) // copyright:鲁军波(endylu)
(0005) // www.shop34612283.taobao.com
(0006) // www.adembed.com
(0007) #include <iom16v.h>
(0008) #include <macros.h>
(0009) #include "main.h"
(0010)
(0011) uint32 CHINALIB_point=0;
(0012) uint32 UNICODE_point=0;
(0013)
(0014) extern MP3_INFO mp3_info;
(0015) extern FAT_INFO fat_info;
(0016)
(0017) extern uint8 buffer[512];
(0018) extern uint8 MP3_all_number;
(0019) extern uint8 name_number;
(0020)
(0021) //=======================================================================
(0022) uint8 FATinit(void)
(0023) {/*SD卡的变量*/
(0024)
(0025) uint16 BPB_BytePerSec; //每扇区的字节数 512
(0026)
(0027) uint8 BPB_NumFATs; //此卷中FAT表的份数;
(0028) uint16 BPB_RootEntCnt; //fat12/16根目录的目录项数;
(0029) uint16 BPB_FATsz16; //FAT12/FAT16一个FAT表占的扇区数(FAT32此项必须为0);
(0030)
(0031) uint16 RootDirSectors; //根目录所占的扇区数
(0032)
(0033) /*变量取值*/
(0034)
(0035) if(SD_read_sector2(0,&fat_info.Relative,1))
0B13 E081 LDI R24,1
0B14 E090 LDI R25,0
0B15 839B STD Y+3,R25
0B16 838A STD Y+2,R24
0B17 E08E LDI R24,0xE
0B18 E091 LDI R25,1
0B19 8399 STD Y+1,R25
0B1A 8388 STD Y+0,R24
0B1B E000 LDI R16,0
0B1C E010 LDI R17,0
0B1D E020 LDI R18,0
0B1E E030 LDI R19,0
0B1F 940E1567 CALL _SD_read_sector2
0B21 2300 TST R16
0B22 F011 BEQ 0x0B25
(0036) {
(0037) return 1;
0B23 E001 LDI R16,1
0B24 C0C6 RJMP 0x0BEB
(0038) }
(0039)
(0040) if(fat_info.Relative==0xEB) //判断有没有Relative Sectors
0B25 9180010E LDS R24,fat_info
0B27 3E8B CPI R24,0xEB
0B28 F421 BNE 0x0B2D
(0041) fat_info.Relative=0;
0B29 2422 CLR R2
0B2A 9220010E STS fat_info,R2
0B2C C00E RJMP 0x0B3B
(0042) else
(0043) SD_read_sector2(454,&fat_info.Relative,1); //取Relative Sectors
0B2D E081 LDI R24,1
0B2E E090 LDI R25,0
0B2F 839B STD Y+3,R25
0B30 838A STD Y+2,R24
0B31 E08E LDI R24,0xE
0B32 E091 LDI R25,1
0B33 8399 STD Y+1,R25
0B34 8388 STD Y+0,R24
0B35 EC06 LDI R16,0xC6
0B36 E011 LDI R17,1
0B37 E020 LDI R18,0
0B38 E030 LDI R19,0
0B39 940E1567 CALL _SD_read_sector2
(0044)
(0045) SD_read_sector2(((long)fat_info.Relative<<9)+11,buffer,13); //取值
0B3B E08D LDI R24,0xD
0B3C E090 LDI R25,0
0B3D 839B STD Y+3,R25
0B3E 838A STD Y+2,R24
0B3F E185 LDI R24,0x15
0B40 E091 LDI R25,1
0B41 8399 STD Y+1,R25
0B42 8388 STD Y+0,R24
0B43 E089 LDI R24,0x9
0B44 E090 LDI R25,0
0B45 9020010E LDS R2,fat_info
0B47 2433 CLR R3
0B48 2444 CLR R4
0B49 2455 CLR R5
0B4A 938A ST R24,-Y
0B4B 0181 MOVW R16,R2
0B4C 0192 MOVW R18,R4
0B4D 940E1D3E CALL lsl32
0B4F 0118 MOVW R2,R16
0B50 0129 MOVW R4,R18
0B51 E04B LDI R20,0xB
0B52 E050 LDI R21,0
0B53 E060 LDI R22,0
0B54 E070 LDI R23,0
0B55 0E24 ADD R2,R20
0B56 1E35 ADC R3,R21
0B57 1E46 ADC R4,R22
0B58 1E57 ADC R5,R23
0B59 0181 MOVW R16,R2
0B5A 0192 MOVW R18,R4
0B5B 940E1567 CALL _SD_read_sector2
(0046)
(0047)
(0048) BPB_BytePerSec=buffer[0]+((int)buffer[1]<<8);
0B5D 90200116 LDS R2,buffer+1
0B5F 2433 CLR R3
0B60 2C32 MOV R3,R2
0B61 2422 CLR R2
0B62 90400115 LDS R4,buffer
0B64 2455 CLR R5
0B65 0C42 ADD R4,R2
0B66 1C53 ADC R5,R3
0B67 825D STD Y+5,R5
0B68 824C STD Y+4,R4
(0049) fat_info.BPB_SecPerClus=buffer[2];
0B69 90200117 LDS R2,buffer+2
0B6B 9220010F STS fat_info+1,R2
(0050) fat_info.BPB_RsvdSecCnt=buffer[3];
0B6D 90200118 LDS R2,buffer+3
0B6F 92200110 STS fat_info+2,R2
(0051) BPB_NumFATs=buffer[5];
0B71 90E0011A LDS R14,0x11A
(0052)
(0053) BPB_RootEntCnt=buffer[6]+((int)buffer[7]<<8);
0B73 9020011C LDS R2,0x11C
0B75 2433 CLR R3
0B76 2C32 MOV R3,R2
0B77 2422 CLR R2
0B78 90A0011B LDS R10,0x11B
0B7A 24BB CLR R11
0B7B 0CA2 ADD R10,R2
0B7C 1CB3 ADC R11,R3
(0054) BPB_FATsz16=buffer[11]+((int)buffer[12]<<8);
0B7D 90200121 LDS R2,0x121
0B7F 2433 CLR R3
0B80 2C32 MOV R3,R2
0B81 2422 CLR R2
0B82 90C00120 LDS R12,0x120
0B84 24DD CLR R13
0B85 0CC2 ADD R12,R2
0B86 1CD3 ADC R13,R3
(0055)
(0056) /*计算根目录的首扇区号*/
(0057) fat_info.Firstgengmulu=fat_info.Relative+fat_info.BPB_RsvdSecCnt+BPB_FATsz16*BPB_NumFATs;
0B87 2D2E MOV R18,R14
0B88 2733 CLR R19
0B89 0186 MOVW R16,R12
0B8A 940E1C79 CALL empy16s
0B8C 90200110 LDS R2,fat_info+2
0B8E 2433 CLR R3
0B8F 9040010E LDS R4,fat_info
0B91 2455 CLR R5
0B92 0C42 ADD R4,R2
0B93 1C53 ADC R5,R3
0B94 0E40 ADD R4,R16
0B95 1E51 ADC R5,R17
0B96 92500112 STS 0x112,R5
0B98 92400111 STS fat_info+3,R4
(0058)
(0059) /*计算FAT16根目录所占的扇区数*/
(0060) RootDirSectors=(((long)BPB_RootEntCnt<<5)+(BPB_BytePerSec-1) )/BPB_BytePerSec;
0B9A E085 LDI R24,5
0B9B E090 LDI R25,0
0B9C 0115 MOVW R2,R10
0B9D 2444 CLR R4
0B9E 2455 CLR R5
0B9F 938A ST R24,-Y
0BA0 0181 MOVW R16,R2
0BA1 0192 MOVW R18,R4
0BA2 940E1D3E CALL lsl32
0BA4 0118 MOVW R2,R16
0BA5 0129 MOVW R4,R18
0BA6 818C LDD R24,Y+4
0BA7 819D LDD R25,Y+5
0BA8 9701 SBIW R24,1
0BA9 013C MOVW R6,R24
0BAA 2488 CLR R8
0BAB 2499 CLR R9
0BAC 0C26 ADD R2,R6
0BAD 1C37 ADC R3,R7
0BAE 1C48 ADC R4,R8
0BAF 1C59 ADC R5,R9
0BB0 806C LDD R6,Y+4
0BB1 807D LDD R7,Y+5
0BB2 2488 CLR R8
0BB3 2499 CLR R9
0BB4 929A ST R9,-Y
0BB5 928A ST R8,-Y
0BB6 927A ST R7,-Y
0BB7 926A ST R6,-Y
0BB8 0181 MOVW R16,R2
0BB9 0192 MOVW R18,R4
0BBA 940E1BF6 CALL div32s
0BBC 0158 MOVW R10,R16
(0061) /*计算簇2的首扇区*/
(0062) fat_info.FirstDateSecter=fat_info.Relative+fat_info.BPB_RsvdSecCnt+((long)BPB_FATsz16*BPB_NumFATs)+RootDirSectors;
0BBD 2C2E MOV R2,R14
0BBE 2433 CLR R3
0BBF 2444 CLR R4
0BC0 2455 CLR R5
0BC1 0136 MOVW R6,R12
0BC2 2488 CLR R8
0BC3 2499 CLR R9
0BC4 925A ST R5,-Y
0BC5 924A ST R4,-Y
0BC6 923A ST R3,-Y
0BC7 922A ST R2,-Y
0BC8 0183 MOVW R16,R6
0BC9 0194 MOVW R18,R8
0BCA 940E1C89 CALL empy32s
0BCC 90200110 LDS R2,fat_info+2
0BCE 2433 CLR R3
0BCF 9040010E LDS R4,fat_info
0BD1 2455 CLR R5
0BD2 0C42 ADD R4,R2
0BD3 1C53 ADC R5,R3
0BD4 0112 MOVW R2,R4
0BD5 2444 CLR R4
0BD6 FC37 SBRC R3,7
0BD7 9440 COM R4
0BD8 2455 CLR R5
0BD9 FC47 SBRC R4,7
0BDA 9450 COM R5
0BDB 0E20 ADD R2,R16
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -