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

📄 ir_yinyue.src

📁 红外遥控音乐的播放
💻 SRC
📖 第 1 页 / 共 2 页
字号:
;     unsigned char i,j,k;
;     EA=0;                        //暂时关闭CPU的所有中断请求
			; SOURCE LINE # 132
	CLR  	EA
; 
;     for(k=0;k<10;k++)            //重复10次,目的是检测在9毫秒内如果出现高电平就退出解码程序
			; SOURCE LINE # 134
;---- Variable 'k?554' assigned to Register 'R3' ----
	CLR  	A
	MOV  	R3,A
?C0042:
;   {                              //aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
			; SOURCE LINE # 135
;     
;     delay0_9ms();               //延时0.9毫秒
			; SOURCE LINE # 137
	LCALL	delay0_9ms
;     if (IR==1) {k=10;break;}    //延时0.9毫秒后判断P3.2脚是否出现高电平如果有就退出解码程序
			; SOURCE LINE # 138
	JNB  	IR,?C0045
	MOV  	R3,#0AH
	LJMP 	?C0043
?C0045:
;     else if(k==9)                //重复10次?
			; SOURCE LINE # 139
	MOV  	A,R3
	XRL  	A,#09H
	JZ   	$ + 5H
	LJMP 	?C0044
;            {                     //bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
			; SOURCE LINE # 140
?C0048:
;             while(IR==0);       //等待高电平避开9毫秒低电平引导脉冲
			; SOURCE LINE # 141
	JNB  	IR,?C0048
?C0049:
;             delay4_5ms();           //延时4.5毫秒避开4.5毫秒的结果码
			; SOURCE LINE # 142
	LCALL	delay4_5ms
; 
; 			
; /********************************************
; //26位的用户码,前13位数据码,后13位数据反码
; *********************************************/
;               for(j=1;j<=26;j++)//每组数据为26位
			; SOURCE LINE # 148
;---- Variable 'j?553' assigned to Register 'R2' ----
	MOV  	R2,#01H
?C0050:
;                 {                 
			; SOURCE LINE # 149
?C0053:
;                  while(IR==0);  //
			; SOURCE LINE # 150
	JNB  	IR,?C0053
?C0054:
;                  delay0_9ms();
			; SOURCE LINE # 151
	LCALL	delay0_9ms
;                   if(IR==1)
			; SOURCE LINE # 152
	JNB  	IR,?C0055
;                    {
			; SOURCE LINE # 153
; 					   delay1ms();
			; SOURCE LINE # 154
	LCALL	delay1ms
; 	                   dm=dm|0x2000000;              //因为是26位,一个"1",后面25个"0",转化二进制即为"1000000"    
			; SOURCE LINE # 155
	MOV  	dm,dm
; 	                   if(j<26) dm=dm>>1;            //数据"1",右移一个"1",一共25次
			; SOURCE LINE # 156
	MOV  	A,R2
	CLR  	C
	SUBB 	A,#01AH
	JNC  	?C0052
;                    }                
			; SOURCE LINE # 157
	SJMP 	?C0110
?C0055:
;                  else  if(j<26) dm=dm>>1;            //数据"0",一共25次
			; SOURCE LINE # 158
	MOV  	A,R2
	CLR  	C
	SUBB 	A,#01AH
	JNC  	?C0052
?C0110:
	MOV  	A,dm
	CLR  	C
	RRC  	A
	MOV  	dm,A
;                 }                    
			; SOURCE LINE # 159
?C0052:
	INC  	R2
	CJNE 	R2,#01BH,?C0050
?C0051:
;              bb=dm;
			; SOURCE LINE # 160
	CLR  	A
	MOV  	bb+03H,dm
	MOV  	bb+02H,A
	MOV  	bb+01H,A
	MOV  	bb,A
;              dm=0;
			; SOURCE LINE # 161
	MOV  	dm,A
; 
; 
; 
; /***************************************************
; //16位的用户码,前8位数据码,后8位数据反码
; ****************************************************/
; 
; 			  for(i=0;i<2;i++)     
			; SOURCE LINE # 169
;---- Variable 'i?552' assigned to Register 'R5' ----
	MOV  	R5,A
?C0059:
;                {                
			; SOURCE LINE # 170
;                  for(j=1;j<=8;j++)//每组数据为26位
			; SOURCE LINE # 171
	MOV  	R2,#01H
?C0062:
;                 {                
			; SOURCE LINE # 172
?C0065:
;                  while(IR==0);  //
			; SOURCE LINE # 173
	JNB  	IR,?C0065
?C0066:
;                  delay0_9ms();
			; SOURCE LINE # 174
	LCALL	delay0_9ms
;                   if(IR==1)
			; SOURCE LINE # 175
	JNB  	IR,?C0067
;                    {
			; SOURCE LINE # 176
; 				     delay1ms();
			; SOURCE LINE # 177
	LCALL	delay1ms
;                      dm=dm|0x80;
			; SOURCE LINE # 178
	ORL  	dm,#080H
;                      if(j<8) dm=dm>>1;           //数据"1",右移一个"1",一共7次
			; SOURCE LINE # 179
	MOV  	A,R2
	CLR  	C
	SUBB 	A,#08H
	JNC  	?C0064
;                    }                
			; SOURCE LINE # 180
	SJMP 	?C0111
?C0067:
;                   else  if(j<8) dm=dm>>1;          //数据"0",一共7次
			; SOURCE LINE # 181
	MOV  	A,R2
	CLR  	C
	SUBB 	A,#08H
	JNC  	?C0064
?C0111:
	MOV  	A,dm
	CLR  	C
	RRC  	A
	MOV  	dm,A
;                 }                    
			; SOURCE LINE # 182
?C0064:
	INC  	R2
	CJNE 	R2,#09H,?C0062
?C0063:
;              aa[i]=dm;
			; SOURCE LINE # 183
	MOV  	A,#LOW (aa)
	ADD  	A,R5
	MOV  	R0,A
	MOV  	@R0,dm
;              dm=0;
			; SOURCE LINE # 184
	MOV  	dm,#00H
;                }              
			; SOURCE LINE # 185
	INC  	R5
	CJNE 	R5,#02H,?C0059
?C0060:
; 
; /***************************************************
; //显示部分
; ****************************************************/	           
;                if(aa[0]==~aa[1])         //验证成功
			; SOURCE LINE # 190
	MOV  	A,aa+01H
	CPL  	A
	CJNE 	A,aa,?C0044
;         	   {
			; SOURCE LINE # 191
; 	               IR_OK=1;
			; SOURCE LINE # 192
	SETB 	IR_OK
; 			       sound=0;
			; SOURCE LINE # 193
	CLR  	sound
;              	   delay100ms();
			; SOURCE LINE # 194
	LCALL	delay100ms
; //				   P1=0x00;
; //                   P2=aa[0];
; 	               sound=1;
			; SOURCE LINE # 197
	SETB 	sound
;         	   }
			; SOURCE LINE # 198
; 
;           }                     //bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
			; SOURCE LINE # 200
;   }                             //aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
			; SOURCE LINE # 201
?C0044:
	INC  	R3
	MOV  	A,R3
	CLR  	C
	SUBB 	A,#0AH
	JNC  	$ + 5H
	LJMP 	?C0042
?C0043:
; EA=1;
			; SOURCE LINE # 202
	SETB 	EA
; }
			; SOURCE LINE # 203
	POP  	PSW
	POP  	ACC
	RETI 	
; END OF t0

CSEG	AT	0000BH
	LJMP	timer0

; 
; 
; /*每个音符的发声*/
; void timer0() interrupt 1 using 1  //定时器T0

	RSEG  ?PR?timer0?IR_YINYUE
	USING	1
timer0:
	PUSH 	ACC
	PUSH 	DPH
	PUSH 	DPL
	PUSH 	PSW
			; SOURCE LINE # 207
; { 
;      TH0=yin[2*l];
			; SOURCE LINE # 209
	MOV  	A,l
	ADD  	A,ACC
	ADD  	A,#LOW (yin)
	MOV  	DPL,A
	CLR  	A
	ADDC 	A,#HIGH (yin)
	MOV  	DPH,A
	CLR  	A
	MOVC 	A,@A+DPTR
	MOV  	TH0,A
;      TL0=yin[2*l+1];
			; SOURCE LINE # 210
	MOV  	A,l
	ADD  	A,ACC
	ADD  	A,#LOW (yin+01H)
	MOV  	DPL,A
	CLR  	A
	ADDC 	A,#HIGH (yin+01H)
	MOV  	DPH,A
	CLR  	A
	MOVC 	A,@A+DPTR
	MOV  	TL0,A
;      SPK = !SPK; 
			; SOURCE LINE # 211
	CPL  	SPK
;      
; }
			; SOURCE LINE # 213
	POP  	PSW
	POP  	DPL
	POP  	DPH
	POP  	ACC
	RETI 	
; END OF timer0

; 
; 
; 
; 
; void sing_song()

	RSEG  ?PR?sing_song?IR_YINYUE
sing_song:
	USING	0
			; SOURCE LINE # 218
;  {  
			; SOURCE LINE # 219
;    
;    unsigned int data j;    //取码指针
;    unsigned char data i;   //用于循环
;    unsigned char data k;   //几个1/4拍
;    IR_OK=0;                //不能少掉!!!!
			; SOURCE LINE # 224
	CLR  	IR_OK
;    song=songs[song_number];
			; SOURCE LINE # 225
	MOV  	A,song_number
	ADD  	A,ACC
	ADD  	A,#LOW (songs)
	MOV  	DPL,A
	CLR  	A
	ADDC 	A,#HIGH (songs)
	MOV  	DPH,A
	CLR  	A
	MOVC 	A,@A+DPTR
	MOV  	R6,A
	MOV  	A,#01H
	MOVC 	A,@A+DPTR
	MOV  	R2,AR6
	MOV  	song,#0FFH
	MOV  	song+01H,R2
	MOV  	song+02H,A
;    j=0;
			; SOURCE LINE # 226
	CLR  	A
	MOV  	j?755,A
	MOV  	j?755+01H,A
?C0074:
;     while(*(song+j)!=0xFF)                     //是否取到结束码
			; SOURCE LINE # 227
	MOV  	R3,song
	MOV  	R2,song+01H
	MOV  	R1,song+02H
	MOV  	DPL,j?755+01H
	MOV  	DPH,j?755
	LCALL	?C?CLDOPTR
	MOV  	R7,A
	CPL  	A
	JZ   	?C0081
;     {  
			; SOURCE LINE # 228
; 	   if(IR_OK==1){break;}                     //这一句很重要的!!!!!
			; SOURCE LINE # 229
	JB   	IR_OK,?C0081
?C0076:
;        k=*(song+j)&0x0F;                       //后4位为多少个1/4拍
			; SOURCE LINE # 230
	MOV  	A,R7
	ANL  	A,#0FH
	MOV  	R6,A
;---- Variable 'k?757' assigned to Register 'R6' ----
;        l=*(song+j)>>4;                         //song(song+j)[]中所放的每个字节
			; SOURCE LINE # 231
	MOV  	A,R7
	SWAP 	A
	ANL  	A,#0FH
	MOV  	l,A
;                                                //前4位乘2表示为音符频率在数组yin[]中的位置
;       
;        TH0=yin[2*l];                           //置初值
			; SOURCE LINE # 234
	ADD  	A,ACC
	ADD  	A,#LOW (yin)
	MOV  	DPL,A
	CLR  	A
	ADDC 	A,#HIGH (yin)
	MOV  	DPH,A
	CLR  	A
	MOVC 	A,@A+DPTR
	MOV  	R7,A
	MOV  	TH0,A
;        TL0=yin[2*l+1];
			; SOURCE LINE # 235
	MOV  	A,l
	ADD  	A,ACC
	ADD  	A,#LOW (yin+01H)
	MOV  	DPL,A
	CLR  	A
	ADDC 	A,#HIGH (yin+01H)
	MOV  	DPH,A
	CLR  	A
	MOVC 	A,@A+DPTR
	MOV  	R5,A
	MOV  	TL0,A
;        TR0=1;                                  //起动定时器0
			; SOURCE LINE # 236
	SETB 	TR0
;        if ((yin[2*l]==0xff)&&(yin[2*l+1]==0xff)) //如果取到的都是休止符,则不输出音频
			; SOURCE LINE # 237
	MOV  	A,R7
	CJNE 	A,#0FFH,?C0077
	MOV  	A,R5
	CJNE 	A,#0FFH,?C0077
;            {
			; SOURCE LINE # 238
;                TR0=0;SPK=1;
			; SOURCE LINE # 239
	CLR  	TR0
	SETB 	SPK
;     		}
			; SOURCE LINE # 240
?C0077:
;        for(i=k;i>0;--i)     //节拍K为多少就执行多少个1/4拍
			; SOURCE LINE # 241
;---- Variable 'i?756' assigned to Register 'R4' ----
	MOV  	R4,AR6
?C0078:
	MOV  	A,R4
	SETB 	C
	SUBB 	A,#00H
	JC   	?C0079
;            {  delay187ms();  } 
			; SOURCE LINE # 242
	LCALL	delay187ms
	DEC  	R4
	SJMP 	?C0078
?C0079:
;        TR0=0;
			; SOURCE LINE # 243
	CLR  	TR0
;        j++;
			; SOURCE LINE # 244
	INC  	j?755+01H
	MOV  	A,j?755+01H
	JNZ  	?C0074
	INC  	j?755
?C0109:
;     }                                            //回22222
			; SOURCE LINE # 245
	SJMP 	?C0074
;  }                                               //回xxxxxx
			; SOURCE LINE # 246
?C0081:
	RET  	
; END OF sing_song

;                                           
; 
; 
;  void main()

	RSEG  ?PR?main?IR_YINYUE
main:
	USING	0
			; SOURCE LINE # 250
; {
			; SOURCE LINE # 251
;     IT0=1;           //设中断0为边沿触发方式 
			; SOURCE LINE # 252
	SETB 	IT0
;     TMOD=0x11;       //timer0,timer1工作在方式1
			; SOURCE LINE # 253
	MOV  	TMOD,#011H
;     IE=0x83;         //EA=1;ETO=1;EX0=1;
			; SOURCE LINE # 254
	MOV  	IE,#083H
; 	IP=0x01;
			; SOURCE LINE # 255
	MOV  	IP,#01H
; /*   TMOD=0x01;       //timer0工作在方式1
;     IE=0x82;         //EA=1;ETO=1;
; 	 IT0=1;           //外部中断0触发方式控制位,下降沿触发
; 	 EX0=1;           //外部中断0(INT0)中断允许位
; 	 EA=1;            //总中断
; */
; 	 dm=0;
			; SOURCE LINE # 262
	CLR  	A
	MOV  	dm,A
; 	 P2=0xc0;
			; SOURCE LINE # 263
	MOV  	P2,#0C0H
; 	 P1=0x00;
			; SOURCE LINE # 264
	MOV  	P1,A
?C0082:
; 
;     while(1)
			; SOURCE LINE # 266
; {
			; SOURCE LINE # 267
;     if(IR_OK==1)
			; SOURCE LINE # 268
	JNB  	IR_OK,?C0082
;       { if(aa[0]==0x11)
			; SOURCE LINE # 269
	MOV  	A,aa
	CJNE 	A,#011H,?C0085
;          {song_number=0;sing_song();}
			; SOURCE LINE # 270
	CLR  	A
	MOV  	song_number,A
	SJMP 	?C0121
?C0085:
;          else if(aa[0]==0x12)
			; SOURCE LINE # 271
	MOV  	A,aa
	CJNE 	A,#012H,?C0087
;          {song_number=1;sing_song();}
			; SOURCE LINE # 272
	MOV  	song_number,#01H
?C0112:
	SJMP 	?C0121
?C0087:
;          else if(aa[0]==0x13)
			; SOURCE LINE # 273
	MOV  	A,aa
	CJNE 	A,#013H,?C0089
;          {song_number=2;sing_song();}
			; SOURCE LINE # 274
	MOV  	song_number,#02H
?C0113:
	SJMP 	?C0121
?C0089:
;          else if(aa[0]==0x14)
			; SOURCE LINE # 275
	MOV  	A,aa
	CJNE 	A,#014H,?C0091
;          {song_number=3;sing_song();}
			; SOURCE LINE # 276
	MOV  	song_number,#03H
?C0114:
	SJMP 	?C0121
?C0091:
;          else if(aa[0]==0x15)
			; SOURCE LINE # 277
	MOV  	A,aa
	CJNE 	A,#015H,?C0093
;          {song_number=4;sing_song();}
			; SOURCE LINE # 278
	MOV  	song_number,#04H
?C0115:
	SJMP 	?C0121
?C0093:
;          else if(aa[0]==0x16)
			; SOURCE LINE # 279
	MOV  	A,aa
	CJNE 	A,#016H,?C0095
;          {song_number=5;sing_song();}
			; SOURCE LINE # 280
	MOV  	song_number,#05H
?C0116:
	SJMP 	?C0121
?C0095:
;          else if(aa[0]==0x17)
			; SOURCE LINE # 281
	MOV  	A,aa
	CJNE 	A,#017H,?C0097
;          {song_number=6;sing_song();}
			; SOURCE LINE # 282
	MOV  	song_number,#06H
?C0117:
	SJMP 	?C0121
?C0097:
;          else if(aa[0]==0x18)
			; SOURCE LINE # 283
	MOV  	A,aa
	CJNE 	A,#018H,?C0099
;          {song_number=7;sing_song();}
			; SOURCE LINE # 284
	MOV  	song_number,#07H
?C0118:
	SJMP 	?C0121
?C0099:
;          else if(aa[0]==0x19)
			; SOURCE LINE # 285
	MOV  	A,aa
	CJNE 	A,#019H,?C0101
;          {song_number=8;sing_song();}
			; SOURCE LINE # 286
	MOV  	song_number,#08H
?C0119:
	SJMP 	?C0121
?C0101:
;          else if(aa[0]==0x10)
			; SOURCE LINE # 287
	MOV  	A,aa
	CJNE 	A,#010H,?C0103
;          {song_number=9;sing_song();}
			; SOURCE LINE # 288
	MOV  	song_number,#09H
?C0120:
	SJMP 	?C0121
?C0103:
;          else if(aa[0]==0x1a)
			; SOURCE LINE # 289
	MOV  	A,aa
	CJNE 	A,#01AH,?C0105
;          {song_number=10;sing_song();}
			; SOURCE LINE # 290
	MOV  	song_number,#0AH
?C0121:
	LCALL	sing_song
	SJMP 	?C0082
?C0105:
;          else if(aa[0]==0x1b)
			; SOURCE LINE # 291
	MOV  	A,aa
	XRL  	A,#01BH
	JNZ  	?C0082
;          {song_number=11;sing_song();}
			; SOURCE LINE # 292
	MOV  	song_number,#0BH
	LCALL	sing_song
;   
;       }
			; SOURCE LINE # 294
; 	  }
			; SOURCE LINE # 295
	LJMP 	?C0082
; END OF main

	END

⌨️ 快捷键说明

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