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

📄 mp3.s

📁 mega128+VS1003做的mp3的程序 可以用WINAVR编译
💻 S
📖 第 1 页 / 共 3 页
字号:
	.module mp3.c
	.area text(rom, con, rel)
	.dbfile E:\software\MP3程序\Main\mp3.c
	.dbfunc e Init_system _Init_system fV
;           temp -> R20
	.even
_Init_system::
	xcall push_gset1
	sbiw R28,8
	.dbline -1
	.dbline 17
; #include <iom64v.h>
; #include <macros.h>
; #include <string.h>
; #include <stdio.h>
; #include "../Lcd/lcd.h"
; #include "../Keyboard/key.h"
; #include "../Ds1302/ds1302.h"
; 
; 
; #define  uchar unsigned char
; #define  uint  unsigned int
; 
; extern uchar keybuf;
; struct time_now timebuf;
; extern unsigned char const diskinfor[];
; void Init_system(void)
; {
	.dbline 20
;   uchar temp; 
;   //开启外部总线
;   MCUCR=0x80;
	ldi R24,128
	out 0x35,R24
	.dbline 21
;   XMCRA=0x00;
	clr R2
	sts 109,R2
	.dbline 23
;   //初始化部件
;   KEYBUF_NULL;     //键盘初值0 
	sts _keybuf,R2
	.dbline 23
	.dbline 24
;   Usart_init();    //串口初始化
	xcall _Usart_init
	.dbline 25
;   DelayIni();	   //延时初始化
	xcall _DelayIni
	.dbline 26
;   ds1302_init();   //时钟初始化
	xcall _ds1302_init
	.dbline 27
;   outpower_init(); //继电器输出初始化
	xcall _outpower_init
	.dbline 29
;  // Set_time();
;   mp3portIni();    //播放器初始化
	xcall _mp3portIni
	.dbline 31
;  // mp3SineTest();   //测试声音播放
;   mp3Reset();      //软件复位	 
	xcall _mp3Reset
	.dbline 32
;   lcd_init();      //LCD初始化
	xcall _lcd_init
	.dbline 33
;   show_clear();
	xcall _show_clear
	.dbline 34
;   show_init("init Vs1003...ok",0,0);
	clr R2
	clr R3
	std y+1,R3
	std y+0,R2
	clr R18
	clr R19
	ldi R16,<L2
	ldi R17,>L2
	xcall _show_init
	.dbline 35
;   delay_1s();
	xcall _delay_1s
	.dbline 36
;   key_init(); 	   //键盘初始化
	xcall _key_init
	.dbline 37
;   show_init("init Keyboard...ok",2,0);
	clr R2
	clr R3
	std y+1,R3
	std y+0,R2
	ldi R18,2
	ldi R19,0
	ldi R16,<L3
	ldi R17,>L3
	xcall _show_init
	.dbline 38
;   delay_1s();
	xcall _delay_1s
	.dbline 39
;   temp = Init_usb();
	xcall _Init_usb
	mov R20,R16
	.dbline 40
;   if(temp==1){	   //USB控制器初始化
	cpi R16,1
	brne L4
	.dbline 40
	.dbline 41
;   				   show_init("init Disk...ok",4,0);
	clr R2
	clr R3
	std y+1,R3
	std y+0,R2
	ldi R18,4
	ldi R19,0
	ldi R16,<L6
	ldi R17,>L6
	xcall _show_init
	.dbline 42
; 				   }
	xjmp L5
L4:
	.dbline 43
;     else {Print_str("Disk error\r\n");
	.dbline 43
	ldi R16,<L7
	ldi R17,>L7
	xcall _Print_str
	.dbline 44
; 		  show_lcd(0, 0, 192, 6, &diskinfor[0],0);
	clr R2
	clr R3
	std y+7,R3
	std y+6,R2
	ldi R24,<_diskinfor
	ldi R25,>_diskinfor
	std y+5,R25
	std y+4,R24
	ldi R24,6
	ldi R25,0
	std y+3,R25
	std y+2,R24
	ldi R24,192
	std y+1,R25
	std y+0,R24
	clr R18
	clr R19
	clr R16
	clr R17
	xcall _show_lcd
L8:
	.dbline 45
L9:
	.dbline 45
; 		  while(1);
	xjmp L8
X0:
	.dbline 46
; 	     }				   
L5:
	.dbline 47
;   delay_1s();
	xcall _delay_1s
	.dbline 48
;   test_file_system(); //检查磁盘工作目录
	xcall _test_file_system
	.dbline 49
;   show_init("Start system ...",6,0);
	clr R2
	clr R3
	std y+1,R3
	std y+0,R2
	ldi R18,6
	ldi R19,0
	ldi R16,<L11
	ldi R17,>L11
	xcall _show_init
	.dbline 50
;   delay_1s();
	xcall _delay_1s
	.dbline 51
;   delay_1s();
	xcall _delay_1s
	.dbline 52
;   show_clear();
	xcall _show_clear
	.dbline 53
;   show_welcom();   
	xcall _show_welcom
	.dbline 54
;   adjust_cheng(0);
	clr R16
	clr R17
	xcall _adjust_cheng
	.dbline -2
L1:
	adiw R28,8
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r temp 20 c
	.dbend
	.dbfunc e set_system_time _set_system_time fV
;           temp -> R22
;             ii -> R20
	.even
_set_system_time::
	xcall push_gset4
	.dbline -1
	.dbline 60
; }
; /*
; *设置时间
; */
; void set_system_time(void)
; {
	.dbline 63
;   uchar ii;
;   uchar temp;
;   ii = 0;  //最大是2
	clr R20
	xjmp L14
L13:
	.dbline 64
;   while(1){
	.dbline 65
;   		   show_set_tiem(ii);
	mov R16,R20
	clr R17
	xcall _show_set_tiem
	.dbline 66
; 		   KEYBUF_NULL;
	clr R2
	sts _keybuf,R2
	.dbline 66
L16:
	.dbline 67
L17:
	.dbline 67
; 		   while(keybuf == NULL);
	lds R2,_keybuf
	tst R2
	breq L16
	.dbline 69
; 		   
; 		   if(keybuf == K_UP){
	mov R24,R2
	cpi R24,3
	breq X5
	xjmp L19
X5:
	.dbline 69
	.dbline 70
	mov R12,R20
	clr R13
	tst R12
	brne X1
	tst R13
	breq L24
X1:
	movw R24,R12
	cpi R24,1
	ldi R30,0
	cpc R25,R30
	breq L32
	cpi R24,2
	ldi R30,0
	cpc R25,R30
	brne X6
	xjmp L40
X6:
	xjmp L21
X2:
	.dbline 70
; 		   			 		  switch(ii){
L24:
	.dbline 71
; 							    case 0:  temp = timebuf.hour;
	lds R22,_timebuf+2
	.dbline 72
; 								         temp >>= 4;
	mov R24,R22
	swap R24
	andi R24,#0x0F
	mov R22,R24
	.dbline 73
; 										 temp &= 0x0f;
	andi R22,15
	.dbline 74
; 										 temp *= 10;
	ldi R24,10
	mul R24,R22
	mov R22,R0
	.dbline 75
; 										 temp += (timebuf.hour&0x0f);
	lds R24,_timebuf+2
	andi R24,15
	add R22,R24
	.dbline 76
; 										 (++temp == 24) ? (temp = 0) : 0;
	mov R24,R22
	subi R24,255    ; addi 1
	mov R22,R24
	cpi R22,24
	brne L28
	clr R22
	xjmp L28
L28:
	.dbline 77
; 										 timebuf.hour = temp/10;
	ldi R17,10
	mov R16,R22
	xcall div8u
	sts _timebuf+2,R16
	.dbline 78
; 										 timebuf.hour <<= 4;
	mov R24,R16
	andi R24,#0x0F
	swap R24
	sts _timebuf+2,R24
	.dbline 79
; 										 timebuf.hour += temp%10;
	ldi R17,10
	mov R16,R22
	xcall mod8u
	lds R2,_timebuf+2
	add R2,R16
	sts _timebuf+2,R2
	.dbline 80
; 								         break;
	xjmp L22
L32:
	.dbline 81
; 							    case 1:  temp = timebuf.min;
	lds R22,_timebuf+1
	.dbline 82
; 								         temp >>= 4;
	mov R24,R22
	swap R24
	andi R24,#0x0F
	mov R22,R24
	.dbline 83
; 										 temp &= 0x0f;
	andi R22,15
	.dbline 84
; 										 temp *= 10;
	ldi R24,10
	mul R24,R22
	mov R22,R0
	.dbline 85
; 										 temp += (timebuf.min&0x0f);
	lds R24,_timebuf+1
	andi R24,15
	add R22,R24
	.dbline 86
; 										 (++temp == 60) ? (temp = 0) : 0;
	mov R24,R22
	subi R24,255    ; addi 1
	mov R22,R24
	cpi R22,60
	brne L36
	clr R22
	xjmp L36
L36:
	.dbline 87
; 										 timebuf.min = temp/10;
	ldi R17,10
	mov R16,R22
	xcall div8u
	sts _timebuf+1,R16
	.dbline 88
; 										 timebuf.min <<= 4;
	mov R24,R16
	andi R24,#0x0F
	swap R24
	sts _timebuf+1,R24
	.dbline 89
; 										 timebuf.min += temp%10;
	ldi R17,10
	mov R16,R22
	xcall mod8u
	lds R2,_timebuf+1
	add R2,R16
	sts _timebuf+1,R2
	.dbline 90
; 								         break;		
	xjmp L22
L40:
	.dbline 91
; 							    case 2:  temp = timebuf.sec;
	lds R22,_timebuf
	.dbline 92
; 								         temp >>= 4;
	mov R24,R22
	swap R24
	andi R24,#0x0F
	mov R22,R24
	.dbline 93
; 										 temp &= 0x0f;
	andi R22,15
	.dbline 94
; 										 temp *= 10;
	ldi R24,10
	mul R24,R22
	mov R22,R0
	.dbline 95
; 										 temp += (timebuf.sec&0x0f);
	lds R24,_timebuf
	andi R24,15
	add R22,R24
	.dbline 96
; 										 (++temp == 60) ? (temp = 0) : 0;
	mov R24,R22
	subi R24,255    ; addi 1
	mov R22,R24
	cpi R22,60
	brne L42
	clr R22
	xjmp L42
L42:
	.dbline 97
; 										 timebuf.sec = temp/10;
	ldi R17,10
	mov R16,R22
	xcall div8u
	sts _timebuf,R16
	.dbline 98
; 										 timebuf.sec <<= 4;
	mov R24,R16
	andi R24,#0x0F
	swap R24
	sts _timebuf,R24
	.dbline 99
; 										 timebuf.sec += temp%10;
	ldi R17,10
	mov R16,R22
	xcall mod8u
	lds R2,_timebuf
	add R2,R16
	sts _timebuf,R2
	.dbline 100
; 								         break;			 	 
L21:
L22:
	.dbline 102
; 							    }//switch
; 		                     }
L19:
	.dbline 103
; 		   if(keybuf == K_DOWN){
	lds R24,_keybuf
	cpi R24,1
	breq X7
	xjmp L43
X7:
	.dbline 103
	.dbline 104
	mov R10,R20
	clr R11
	tst R10
	brne X3
	tst R11
	breq L48
X3:
	movw R24,R10
	cpi R24,1
	ldi R30,0
	cpc R25,R30
	breq L56
	cpi R24,2
	ldi R30,0
	cpc R25,R30
	brne X8
	xjmp L64
X8:
	xjmp L45
X4:
	.dbline 104
; 		   			 		  switch(ii){
L48:
	.dbline 105
; 							    case 0:  temp = timebuf.hour;
	lds R22,_timebuf+2
	.dbline 106
; 								         temp >>= 4;
	mov R24,R22
	swap R24
	andi R24,#0x0F
	mov R22,R24
	.dbline 107
; 										 temp &= 0x0f;
	andi R22,15
	.dbline 108
; 										 temp *= 10;
	ldi R24,10
	mul R24,R22
	mov R22,R0
	.dbline 109
; 										 temp += (timebuf.hour&0x0f);
	lds R24,_timebuf+2
	andi R24,15
	add R22,R24
	.dbline 110
; 										 (--temp == 255) ? (temp = 23) : 0;
	mov R24,R22
	subi R24,1
	mov R22,R24
	cpi R22,255
	brne L52
	ldi R22,23
	xjmp L52
L52:
	.dbline 111
; 										 timebuf.hour = temp/10;
	ldi R17,10
	mov R16,R22
	xcall div8u
	sts _timebuf+2,R16
	.dbline 112
; 										 timebuf.hour <<= 4;
	mov R24,R16
	andi R24,#0x0F
	swap R24
	sts _timebuf+2,R24
	.dbline 113
; 										 timebuf.hour += temp%10;
	ldi R17,10
	mov R16,R22
	xcall mod8u
	lds R2,_timebuf+2
	add R2,R16
	sts _timebuf+2,R2
	.dbline 114
; 								         break;
	xjmp L46
L56:
	.dbline 115
; 							    case 1:  temp = timebuf.min;
	lds R22,_timebuf+1
	.dbline 116
; 								         temp >>= 4;
	mov R24,R22
	swap R24
	andi R24,#0x0F
	mov R22,R24
	.dbline 117
; 										 temp &= 0x0f;
	andi R22,15
	.dbline 118
; 										 temp *= 10;
	ldi R24,10
	mul R24,R22
	mov R22,R0
	.dbline 119
; 										 temp += (timebuf.min&0x0f);
	lds R24,_timebuf+1
	andi R24,15
	add R22,R24
	.dbline 120
; 										 (--temp == 255) ? (temp = 59) : 0;
	mov R24,R22
	subi R24,1
	mov R22,R24
	cpi R22,255
	brne L60
	ldi R22,59
	xjmp L60
L60:
	.dbline 121
; 										 timebuf.min = temp/10;
	ldi R17,10
	mov R16,R22
	xcall div8u
	sts _timebuf+1,R16
	.dbline 122
; 										 timebuf.min <<= 4;
	mov R24,R16
	andi R24,#0x0F
	swap R24
	sts _timebuf+1,R24
	.dbline 123
; 										 timebuf.min += temp%10;
	ldi R17,10
	mov R16,R22
	xcall mod8u
	lds R2,_timebuf+1
	add R2,R16
	sts _timebuf+1,R2
	.dbline 124
; 								         break;		
	xjmp L46
L64:
	.dbline 125
; 							    case 2:  temp = timebuf.sec;
	lds R22,_timebuf
	.dbline 126
; 								         temp >>= 4;
	mov R24,R22
	swap R24
	andi R24,#0x0F
	mov R22,R24
	.dbline 127
; 										 temp &= 0x0f;
	andi R22,15
	.dbline 128
; 										 temp *= 10;
	ldi R24,10
	mul R24,R22
	mov R22,R0
	.dbline 129
; 										 temp += (timebuf.sec&0x0f);
	lds R24,_timebuf
	andi R24,15
	add R22,R24
	.dbline 130
; 										 (--temp == 255) ? (temp = 59) : 0;
	mov R24,R22
	subi R24,1
	mov R22,R24
	cpi R22,255
	brne L66
	ldi R22,59
	xjmp L66
L66:
	.dbline 131
; 										 timebuf.sec = temp/10;
	ldi R17,10
	mov R16,R22
	xcall div8u
	sts _timebuf,R16
	.dbline 132
; 										 timebuf.sec <<= 4;
	mov R24,R16
	andi R24,#0x0F
	swap R24
	sts _timebuf,R24
	.dbline 133
; 										 timebuf.sec += temp%10;
	ldi R17,10
	mov R16,R22
	xcall mod8u
	lds R2,_timebuf
	add R2,R16
	sts _timebuf,R2
	.dbline 134
; 								         break;			 	 
L45:
L46:
	.dbline 136
; 							    }//switch
; 		                     }
L43:
	.dbline 137
;             if(keybuf == K_RIFT) (++ii == 3) ? (ii = 0) : 0;
	lds R24,_keybuf
	cpi R24,6
	brne L67
	.dbline 137
	mov R24,R20
	subi R24,255    ; addi 1
	mov R20,R24
	cpi R20,3
	brne L70
	clr R20
	xjmp L70
L70:
L67:
	.dbline 138
;             if(keybuf == K_LIFT) (--ii == 255) ? (ii = 2) : 0;									 							 
	lds R24,_keybuf
	cpi R24,2
	brne L71
	.dbline 138
	mov R24,R20
	subi R24,1
	mov R20,R24
	cpi R20,255
	brne L74
	ldi R20,2
	xjmp L74
L74:
L71:
	.dbline 139
; 			if(keybuf == K_ESC)  {Read_InfoDs1302buf();break;}
	lds R24,_keybuf
	cpi R24,5
	brne L75
	.dbline 139
	.dbline 139
	xcall _Read_InfoDs1302buf
	.dbline 139
	xjmp L15
L75:
	.dbline 140
; 			if(keybuf == K_ENTER) {Write_InfoDs1302buf();break;}
	lds R24,_keybuf
	cpi R24,4
	brne L77
	.dbline 140
	.dbline 140
	xcall _Write_InfoDs1302buf
	.dbline 140
	xjmp L15
L77:
	.dbline 141
L14:
	.dbline 64
	xjmp L13
L15:
	.dbline -2
L12:
	xcall pop_gset4
	.dbline 0 ; func end
	ret
	.dbsym r temp 22 c
	.dbsym r ii 20 c
	.dbend
	.dbfunc e set_system_date _set_system_date fV
;           temp -> R22
;             ii -> R20
	.even
_set_system_date::
	xcall push_gset4
	.dbline -1
	.dbline 147
;           }
; }
; /*
; *设置日期
; */
; void set_system_date(void)
; {
	.dbline 150
;   uchar ii;
;   uchar temp;
;   ii = 0;  //最大是2
	clr R20
	xjmp L81
L80:
	.dbline 151
;   while(1){
	.dbline 152
;   		   show_set_date(ii);
	mov R16,R20
	clr R17
	xcall _show_set_date
	.dbline 153
; 		   KEYBUF_NULL;
	clr R2
	sts _keybuf,R2
	.dbline 153
L83:
	.dbline 154
L84:
	.dbline 154
; 		   while(keybuf == NULL);
	lds R2,_keybuf
	tst R2
	breq L83
	.dbline 156
; 		   
; 		   if(keybuf == K_UP){
	mov R24,R2
	cpi R24,3
	breq X13
	xjmp L86
X13:
	.dbline 156
	.dbline 157
	mov R12,R20
	clr R13
	tst R12
	brne X9
	tst R13
	breq L91
X9:
	movw R24,R12
	cpi R24,1
	ldi R30,0
	cpc R25,R30
	breq L99
	cpi R24,2
	ldi R30,0
	cpc R25,R30
	brne X14
	xjmp L107
X14:
	xjmp L88
X10:
	.dbline 157
; 		   			 		  switch(ii){
L91:
	.dbline 158
; 							    case 0:  temp = timebuf.year;
	lds R22,_timebuf+6
	.dbline 159
; 								         temp >>= 4;
	mov R24,R22
	swap R24
	andi R24,#0x0F
	mov R22,R24
	.dbline 160
; 										 temp &= 0x0f;
	andi R22,15
	.dbline 161
; 										 temp *= 10;
	ldi R24,10
	mul R24,R22
	mov R22,R0
	.dbline 162
; 										 temp += (timebuf.year&0x0f);
	lds R24,_timebuf+6
	andi R24,15
	add R22,R24
	.dbline 163
; 										 (++temp == 100) ? (temp = 0) : 0;
	mov R24,R22
	subi R24,255    ; addi 1
	mov R22,R24
	cpi R22,100
	brne L95
	clr R22
	xjmp L95
L95:
	.dbline 164
; 										 timebuf.year = temp/10;
	ldi R17,10
	mov R16,R22
	xcall div8u
	sts _timebuf+6,R16
	.dbline 165
; 										 timebuf.year <<= 4;
	mov R24,R16
	andi R24,#0x0F
	swap R24
	sts _timebuf+6,R24
	.dbline 166
; 										 timebuf.year += temp%10;
	ldi R17,10
	mov R16,R22
	xcall mod8u
	lds R2,_timebuf+6
	add R2,R16
	sts _timebuf+6,R2
	.dbline 167
; 								         break;
	xjmp L89
L99:
	.dbline 168
; 							    case 1:  temp = timebuf.month;
	lds R22,_timebuf+4
	.dbline 169
; 								         temp >>= 4;
	mov R24,R22
	swap R24
	andi R24,#0x0F
	mov R22,R24
	.dbline 170
; 										 temp &= 0x0f;
	andi R22,15
	.dbline 171
; 										 temp *= 10;
	ldi R24,10
	mul R24,R22
	mov R22,R0
	.dbline 172
; 										 temp += (timebuf.month&0x0f);
	lds R24,_timebuf+4
	andi R24,15
	add R22,R24
	.dbline 173
; 										 (++temp == 13) ? (temp = 1) : 0;
	mov R24,R22
	subi R24,255    ; addi 1
	mov R22,R24
	cpi R22,13
	brne L103
	ldi R22,1
	xjmp L103

⌨️ 快捷键说明

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