📄 mp3_7210.lst
字号:
044C E021 LDI R18,1
044D 91000165 LDS R16,_lcd_bkg_color
044F DD53 RCALL _LCD_write
(0355) LCD_write(lcd_bkg_color,1);
0450 E021 LDI R18,1
0451 91000165 LDS R16,_lcd_bkg_color
0453 DD4F RCALL _LCD_write
(0356) LCD_write(lcd_bkg_color,1);
0454 E021 LDI R18,1
0455 91000165 LDS R16,_lcd_bkg_color
0457 DD4B RCALL _LCD_write
(0357) LCD_write(lcd_bkg_color,1);
0458 E021 LDI R18,1
0459 91000165 LDS R16,_lcd_bkg_color
045B DD47 RCALL _LCD_write
(0358) LCD_write(lcd_bkg_color,1);
045C E021 LDI R18,1
045D 91000165 LDS R16,_lcd_bkg_color
045F DD43 RCALL _LCD_write
(0359) LCD_write(lcd_bkg_color,1);
0460 E021 LDI R18,1
0461 91000165 LDS R16,_lcd_bkg_color
0463 DD3F RCALL _LCD_write
(0360) LCD_write(lcd_bkg_color,1);
0464 E021 LDI R18,1
0465 91000165 LDS R16,_lcd_bkg_color
0467 DD3B RCALL _LCD_write
(0361) LCD_write(lcd_bkg_color,1);
0468 E021 LDI R18,1
0469 91000165 LDS R16,_lcd_bkg_color
046B DD37 RCALL _LCD_write
(0362)
(0363) lcd_x=lcd_x+6; //自动换下一个位置
046C 91800163 LDS R24,_lcd_x
046E 5F8A SUBI R24,0xFA
046F 93800163 STS _lcd_x,R24
(0364) if (lcd_x>128)
0471 E880 LDI R24,0x80
0472 90200163 LDS R2,_lcd_x
0474 1582 CP R24,R2
0475 F440 BCC 0x047E
(0365) {
(0366) lcd_x=0;
0476 2422 CLR R2
0477 92200163 STS _lcd_x,R2
(0367) lcd_y=lcd_y+8;
0479 91800162 LDS R24,_lcd_y
047B 5F88 SUBI R24,0xF8
047C 93800162 STS _lcd_y,R24
(0368) }
(0369) if (lcd_y>128) lcd_y=0;
047E E880 LDI R24,0x80
047F 90200162 LDS R2,_lcd_y
0481 1582 CP R24,R2
0482 F418 BCC 0x0486
0483 2422 CLR R2
0484 92200162 STS _lcd_y,R2
(0370) set_lcd_cs; //disable lcd
0486 9AC3 SBI 0x18,3
(0371) }
0487 9623 ADIW R28,3
0488 940E05F5 CALL pop_gset2
048A 9508 RET
FILE: G:\mega8\atmega16\mp3_7210\main.c
(0001) #include <iom16v.h>
(0002) #define F_mmc_err 0
(0003) #define F_ 1
(0004)
(0005) #define led1_off (PORTA|=(1<<6))
(0006) #define led1_on (PORTA&=~(1<<6))
(0007) #define led2_off (PORTA|=(1<<5))
(0008) #define led2_on (PORTA&=~(1<<5))
(0009) #define set_lcd_cs (PORTB|=(1<<3))
(0010) #define clr_lcd_cs (PORTB&=~(1<<3))
(0011)
(0012) unsigned int prog_flag=0; //bit0=mmc_err
(0013)
(0014) const unsigned char Bmp002[]=
(0015) {
(0016) /*------------------------------------------------------------------------------
(0017) 源文件 / 文字 : windy 2004力作
(0018) 宽×高(像素): 84×16
(0019) 字模格式/大小 : 单色点阵液晶字模,纵向取模,字节倒序/168字节
(0020) 数据转换日期 : 2004-6-17 2:29:40
(0021) ------------------------------------------------------------------------------*/
(0022) 0x00,0x00,0x00,0xC0,0x00,0x00,0xC0,0x00,0x00,0xC0,0x00,0xC8,0x00,0xC0,0x80,0x40,
(0023) 0x40,0x80,0x00,0x80,0x40,0x40,0x40,0xF8,0x00,0xC0,0x00,0x00,0xC0,0x00,0x00,0x00,
(0024) 0x00,0x10,0x08,0x08,0x88,0x70,0x00,0xF0,0x08,0x08,0x08,0xF0,0x00,0xF0,0x08,0x08,
(0025) 0x08,0xF0,0x00,0x00,0xC0,0x30,0xF8,0x00,0x00,0x20,0x20,0x20,0x20,0xFC,0x20,0x20,
(0026) 0x20,0xF0,0x20,0x00,0x40,0x20,0xF0,0x4C,0x20,0x10,0xFC,0x90,0x90,0x90,0x10,0x00,
(0027) 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x0C,0x03,0x00,0x03,0x0C,0x03,0x00,0x0F,
(0028) 0x00,0x0F,0x00,0x00,0x00,0x0F,0x00,0x07,0x08,0x08,0x08,0x0F,0x20,0x23,0x1C,0x04,
(0029) 0x03,0x00,0x00,0x00,0x00,0x0C,0x0A,0x09,0x08,0x08,0x00,0x07,0x08,0x08,0x08,0x07,
(0030) 0x00,0x07,0x08,0x08,0x08,0x07,0x00,0x03,0x02,0x02,0x0F,0x02,0x10,0x10,0x08,0x04,
(0031) 0x03,0x00,0x10,0x10,0x10,0x0F,0x00,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x04,
(0032) 0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00
(0033) };
(0034)
(0035) /*unsigned char Bmp001[]=
(0036) {
(0037) /*------------------------------------------------------------------------------
(0038) 源文件 / 文字 : mp3播放器
(0039) 宽×高(像素): 84×13
(0040) 字模格式/大小 : 单色点阵液晶字模,纵向取模,字节倒序/168字节
(0041) 数据转换日期 : 2004-6-17 2:26:38
(0042) ------------------------------------------------------------------------------
(0043) 0x00,0x00,0x00,0xE0,0x20,0x20,0xC0,0x20,0x20,0xC0,0x00,0xE0,0x20,0x20,0x20,0xC0,
(0044) 0x00,0x08,0x04,0x44,0x44,0xB8,0x08,0x88,0xFE,0x88,0xD4,0xBC,0x94,0xFE,0xB2,0xDA,
(0045) 0x90,0x00,0x08,0xF8,0x2A,0x2C,0xE8,0x08,0x30,0xCE,0x08,0xF8,0x08,0x00,0x40,0x5E,
(0046) 0x52,0xD2,0x5E,0x60,0x5E,0x52,0xF2,0x5E,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
(0047) 0x00,0x00,0xFC,0x02,0x01,0x02,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
(0048) 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x1F,
(0049) 0x04,0x04,0x04,0x03,0x00,0x02,0x04,0x04,0x04,0x03,0x09,0x08,0x0F,0x00,0x0F,0x0A,
(0050) 0x0A,0x0F,0x0A,0x0F,0x00,0x00,0x0C,0x03,0x04,0x04,0x07,0x08,0x04,0x02,0x03,0x04,
(0051) 0x08,0x00,0x01,0x0F,0x09,0x09,0x0F,0x00,0x0F,0x09,0x09,0x0F,0x01,0x00,0x00,0x00,
(0052) 0x00,0x00,0x00,0x0F,0x01,0x0F,0x01,0x06,0x08,0x06,0x01,0x0F,0x01,0x0F,0x00,0x00,
(0053) 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
(0054) };
(0055)
(0056) unsigned char Bmp003[]=
(0057) {
(0058) /*------------------------------------------------------------------------------
(0059) 源文件 / 文字 : 来自剪贴板!www.smart-io.com
(0060) 宽×高(像素): 84×16
(0061) 字模格式/大小 : 单色点阵液晶字模,纵向取模,字节倒序/168字节
(0062) 数据转换日期 : 2004-6-17 2:37:01
(0063) ------------------------------------------------------------------------------
(0064) 0xE0,0x00,0x80,0x60,0x80,0x00,0xE0,0x00,0xE0,0x00,0x80,0x60,0x80,0x00,0xE0,0x00,
(0065) 0xE0,0x00,0x80,0x60,0x80,0x00,0xE0,0x00,0x00,0x00,0x40,0xA0,0x20,0x40,0x00,0xE0,
(0066) 0x20,0x20,0xC0,0x20,0x20,0xC0,0x00,0x00,0xA0,0xA0,0xA0,0xC0,0x00,0xE0,0x20,0x00,
(0067) 0xF8,0x20,0x00,0x80,0x80,0x00,0xE4,0x00,0xC0,0x20,0x20,0x20,0xC0,0x00,0x00,0x00,
(0068) 0xC0,0x20,0x20,0x20,0x40,0x00,0xC0,0x20,0x20,0x20,0xC0,0x00,0xE0,0x20,0x20,0xC0,
(0069) 0x20,0x20,0xC0,0x00,0x21,0x26,0x21,0x20,0x21,0x26,0x21,0x20,0x21,0x26,0x21,0x20,
(0070) 0x21,0x26,0x21,0x20,0x21,0x26,0x21,0x20,0x21,0x26,0x21,0x20,0x24,0x20,0x22,0x24,
(0071) 0x25,0x22,0x20,0x27,0x20,0x20,0x27,0x20,0x20,0x27,0x20,0x23,0x24,0x24,0x24,0x27,
(0072) 0x20,0x27,0x20,0x20,0x23,0x24,0x20,0x20,0x20,0x20,0x27,0x20,0x23,0x24,0x24,0x24,
(0073) 0x23,0x20,0x24,0x20,0x23,0x24,0x24,0x24,0x22,0x20,0x23,0x24,0x24,0x24,0x23,0x20,
(0074) 0x27,0x20,0x20,0x27,0x20,0x20,0x27,0x00
(0075) };*/
(0076)
(0077)
(0078) extern void port_init(void);
(0079) extern void MMC_reset(void);
(0080) extern void MMC_name(void);
(0081) extern unsigned char MMC_check(void);
(0082)
(0083) extern void SPI_masterinit(void);
(0084)
(0085) extern void lcd_init(void);
(0086) extern void lcd_clr(void);
(0087) extern void LCD_write(unsigned char data,unsigned char dc);
(0088) extern void delay_ms(unsigned int time);
(0089)
(0090)
(0091)
(0092) //extern unsigned char usb_read(void);
(0093)
(0094)
(0095)
(0096) /***********MAIN******************/
(0097) void main()
(0098) {
(0099) unsigned int F_mode;//工作模式
(0100) unsigned char count;
(0101) unsigned int lcd_add;
(0102)
(0103) delay_ms(100);
_main:
lcd_add --> Y+1
F_mode --> Y+1
count --> R20
048B E604 LDI R16,0x64
048C E010 LDI R17,0
048D 940E05E6 CALL _delay_ms
(0104) port_init();
048F 940E05B7 CALL _port_init
(0105) lcd_init();
0491 940E01EA CALL _lcd_init
(0106) lcd_clr();
0493 940E0292 CALL _lcd_clr
(0107) set_lcd_cs;
0495 9AC3 SBI 0x18,3
(0108) delay_ms(10000);
0496 E100 LDI R16,0x10
0497 E217 LDI R17,0x27
0498 940E05E6 CALL _delay_ms
(0109)
(0110) // SPI_masterinit();
(0111) led1_off;
049A 9ADE SBI 0x1B,6
(0112) led2_off;
049B 9ADD SBI 0x1B,5
(0113) delay_ms(10000);
049C E100 LDI R16,0x10
049D E217 LDI R17,0x27
049E 940E05E6 CALL _delay_ms
(0114)
(0115) // MMC_reset();
(0116)
(0117) // MMC_name();
(0118) // MMC_check();
(0119)
(0120)
(0121) for (;;)
(0122) {
(0123) for (count=0;count<36;count++)
04A0 2744 CLR R20
04A1 C009 RJMP 0x04AB
(0124) {
(0125) lcd_ascii_5_7(count);
04A2 2F04 MOV R16,R20
04A3 2711 CLR R17
04A4 940E03B4 CALL _lcd_ascii_5_7
(0126) delay_ms(1500);
04A6 ED0C LDI R16,0xDC
04A7 E015 LDI R17,5
04A8 940E05E6 CALL _delay_ms
04AA 9543 INC R20
04AB 3244 CPI R20,0x24
04AC F3A8 BCS 0x04A2
04AD CFF2 RJMP 0x04A0
04AE 9508 RET
FILE: G:\mega8\atmega16\mp3_7210\mmc.c
(0001) #include <iom16v.h>
(0002)
(0003) // MMC commands
(0004) #define MMC_GO_IDLE_STATE 0
(0005) #define MMC_SEND_OP_COND 1
(0006) #define MMC_SEND_CSD 9
(0007) #define MMC_SEND_CID 10
(0008) #define MMC_SEND_STATUS 13
(0009) #define MMC_SET_BLOCKLEN 16
(0010) #define MMC_READ_SINGLE_BLOCK 17
(0011) #define MMC_WRITE_BLOCK 24
(0012) #define MMC_PROGRAM_CSD 27
(0013) #define MMC_SET_WRITE_PROT 28
(0014) #define MMC_CLR_WRITE_PROT 29
(0015) #define MMC_SEND_WRITE_PROT 30
(0016) #define MMC_TAG_SECTOR_START 32
(0017) #define MMC_TAG_SECTOR_END 33
(0018) #define MMC_UNTAG_SECTOR 34
(0019) #define MMC_TAG_ERASE_GROUP_START 35
(0020) #define MMC_TAG_ERARE_GROUP_END 36
(0021) #define MMC_UNTAG_ERASE_GROUP 37
(0022) #define MMC_ERASE 38
(0023) #define MMC_CRC_ON_OFF 59
(0024)
(0025) #define R1_BUSY 128
(0026) #define R1_PARAMETER 64
(0027) #define R1_ADDRESS 32
(0028) #define R1_ERASE_SEQ 16
(0029) #define R1_COM_CRC 8
(0030) #define R1_ILLEGAL_COM 4
(0031) #define R1_ERASE_RESET 2
(0032) #define R1_IDLE_STATE 1
(0033)
(0034) #define led1_off (PORTA|=(1<<6))
(0035) #define led1_on (PORTA&=~(1<<6))
(0036) #define led2_off (PORTA|=(1<<5))
(0037) #define led2_on (PORTA&=~(1<<5))
(0038)
(0039) #define disable_mmc_cs (PORTB|=(1<<0))
(0040) #define enable_mmc_cs (PORTB&=~(1<<0))
(0041)
(0042)
(0043)
(0044) unsigned char ram_data[512];
(0045)
(0046)
(0047)
(0048) extern void LCD_write(unsigned char data,unsigned char dc);
(0049)
(0050) /***********SPI初始化******************/
(0051) void SPI_masterinit(void)
(0052) {
(0053) //不中断 允许 主模式 fck/4
(0054) SPCR=0b01010000; //SPIE SPE DORD MSTR CPOL CPHA SPR1 SPR0
_SPI_masterinit:
04AF E580 LDI R24,0x50
04B0 B98D OUT 0x0D,R24
(0055)
(0056) }
04B1 9508 RET
(0057)
(0058) /***********SPI读取/写入****基础SPI传送命令******/
(0059) unsigned char SPI_tx_rx(unsigned char spi_data);
(0060) unsigned char SPI_tx_rx(unsigned char spi_data)
(0061) {
(0062) SPDR=spi_data;
_SPI_tx_rx:
spi_data --> R16
04B2 B90F OUT 0x0F,R16
(0063) while (!(SPSR&0x80));
04B3 9B77 SBIS 0x0E,7
04B4 CFFE RJMP 0x04B3
(0064) return SPDR;
04B5 B10F IN R16,0x0F
04B6 9508 RET
_MMC_sendCmd:
temp --> R20
A7_0 --> Y+8
A15_8 --> Y+6
A23_16 --> Y+4
A31_24 --> R20
cmd --> R22
04B7 940E0615 CALL push_gset2
04B9 2F42 MOV R20,R18
04BA 2F60 MOV R22,R16
(0065) }
(0066) /***********MMC_sendCmd();*****基础传送命令*******/
(0067) unsigned char MMC_sendCmd(unsigned char cmd,unsigned char A31_24,unsigned char A23_16,unsigned char A15_8,unsigned char A7_0);
(0068) unsigned char MMC_sendCmd(unsigned char cmd,unsigned char A31_24,unsigned char A23_16,unsigned char A15_8,unsigned char A7_0)
(0069) {
(0070) signed char temp;
(0071) enable_mmc_cs;
04BB 98C0 CBI 0x18,0
(0072)
(0073) SPI_tx_rx(cmd|0x40); //cmd"01xxxxxx"
04BC 2F06 MOV R16,R22
04BD 6400 ORI R16,0x40
04BE DFF3 RCALL _SPI_tx_rx
(0074) SPI_tx_rx(A31_24);
04BF 2F04 MOV R16,R20
04C0 DFF1 RCALL _SPI_tx_rx
(0075) SPI_tx_rx(A23_16);
04C1 810C LDD R16,Y+4
04C2 DFEF RCALL _SPI_tx_rx
(0076) SPI_tx_rx(A15_8);
04C3 810E LDD R16,Y+6
04C4 DFED RCALL _SPI_tx_rx
(0077) SPI_tx_rx(A7_0);
04C5 8508 LDD R16,Y+8
04C6 DFEB RCALL _SPI_tx_rx
(0078) SPI_tx_rx(0x95); //crc for cmd0
04C7 E905 LDI R16,0x95
04C8 DFE9 RCALL _SPI_tx_rx
(0079)
(0080) SPI_tx_rx(0xff); //one empty cycle
04C9 EF0F LDI R16,0xFF
04CA DFE7 RCALL _SPI_tx_rx
(0081)
(0082) temp=SPI_tx_rx(0xff); //0=busy
04CB EF0F LDI R16,0xFF
04CC DFE5 RCALL _SPI_tx_rx
04CD 2F40 MOV R20,R16
(0083) //LCD_write(temp,1); //test point
(0084) if ((temp-0x80)>=0) //0b1xxxxxxx=err
04CE 2F84 MOV R24,R20
04CF 5880 SUBI R24,0x80
04D0 3080 CPI R24,0
04D1 F034 BLT 0x04D8
(0085) {
(0086) temp=0xff;
04D2 EF4F LDI R20,0xFF
(0087) while (SPI_tx_rx(0xff)==0);
04D3 EF0F LDI R16,0xFF
04D4 DFDD RCALL _SPI_tx_rx
04D5 2300 TST R16
04D6 F3E1 BEQ 0x04D3
(0088) // led1_on; //test point
(0089) }
04D7 C00E RJMP 0x04E6
(0090) else
(0091) if (cmd==MMC_SEND_STATUS) //如果是读状态命令
04D8 306D CPI R22,0xD
04D9 F441 BNE 0x04E2
(0092) {
(0093) temp=SPI_tx_rx(0xff); //read STATUS
04DA EF0F LDI R16,0xFF
04DB DFD6 RCALL _SPI_tx_rx
04DC 2F40 MOV R20,R16
(0094) while (SPI_tx_rx(0xff)==0);
04DD EF0F LDI R16,0xFF
04DE DFD3 RCALL _SPI_tx_rx
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -