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

📄 yinyue.c

📁 51单片机开发与应用技术详解(珍藏版)PPT及源码
💻 C
字号:
#include <reg51.h>

sbit Y=P1^3;			//播放按键

sbit Speaker=P3^7;	   //扬声器
static unsigned char bdata StateREG;
sbit m=StateREG^0;
unsigned char code * data Mymusic;
unsigned char data l;

void delay(void);	  //延时函数声明

unsigned char code music[30]=
{0xFF,0xFF,0xFB,0x90,0xFC,0x0C,0xFC,0x44,0xFC,0xAC,0xFD,0x09,0xFD,0x34,0xFD,0x82,0xFD,0xC8,0xFE,0x06,0xFE,0x22,0xFA,0X15,0XFB,0x04,0xFA,0x67,0xFE,0x85};

unsigned char code Mmusic[]=
{
0x35,0x31,0x34,0x34,0x24,0x35,0x32,0x32,0x24,0x38,
0x44,0x58,0x48,0x34,0x31,0x34,0x34,0x24,0x38,0x34,
0x7F,0x32,0x34,0x32,0x34,0x24,0x38,0x34,0x24,0x38,
0x43,0x58,0x48,0x34,0x32,0x34,0x38,0x24,0x38,0x34,
0x7F,0x16,0x4C,0x74,0x78,0x64,0x54,0x48,0x54,0x64,
0x58,0x44,0x34,0x24,0x38,0x24,0x14,0x12,0x21,0x14,
0x78,0x68,0x3F,0x4C,0x74,0x78,0x64,0x52,0x42,0x48,
0x53,0x64,0x58,0x44,0x34,0x24,0x38,0x24,0x24,0x38,
0x44,0x58,0x48,0x3C,0xFF
};


//主程序
void main()
{
	unsigned int data j;
	unsigned char data i;
	unsigned char data k;
	unsigned char data p11;
	unsigned char data p33;
    TMOD=0x01;							//初始化
    IE=0x82;
	while(1)
	{
	j=0;
	m=0;
	while(Y==1)
	{
	for(i=0;i<5;i++)
	{
	  delay(); 								//延时
	}
    p11=P1;
	p33=P3;
    while(*(Mmusic+j)!=0xFF)
    { 
	   k=*(Mmusic+j)&0x0F;
	   l=*(Mmusic+j)>>4;
       if((p11!=P1)||((p33&0x0f)!=(P3&0x0f)))
	      {
		    goto Next;
          }
 	   TH0=music[2*l];
       TL0=music[2*l+1];
	   TR0=1;
	   if ((music[2*l]==0xff)&&(music[2*l+1]==0xff)) 
           {
		       TR0=0;
			}
       for(i=k;i>0;--i)
	       {
		       delay();
	       } 
	   TR0=0;
       j++;
    }
Next: ;
	}
	}
}

/*单个音符的发声*/
void timer0() interrupt 1 using 1 
{ 
     TH0=music[2*l];
     TL0=music[2*l+1];
     Speaker = !Speaker; 
}

/*汇编语句进行精确延时,延时1/4拍时间即187ms*/
void delay(void)
{
    #pragma ASM
	        MOV R3,#02H
	    D1: MOV R2,#7DH
		D2: MOV R1,#0F8H
		    DJNZ R1,$
			DJNZ R2,D2
			DJNZ R3,D1
    #pragma ENDASM
}
			

⌨️ 快捷键说明

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