speak.c

来自「运行于51单片机的音乐彩灯源代码」· C语言 代码 · 共 220 行

C
220
字号
#include "..\h\config.h"


char const aMusic1[]={
 0x18, 0x30, 0x1C, 0x10,
 0x20, 0x40, 0x1C, 0x10,
 0x18, 0x10, 0x20, 0x10,
 0x0C, 0x10, 0x18, 0x40,
 0x1C, 0x20, 0x20, 0x20,
 0x1C, 0x20, 0x18, 0x20,
 0x20, 0x80, 0x0F, 0x20,
 0x30, 0x1C, 0x10, 0x18,
 0x20, 0x15, 0x20, 0x1C,
 0x20, 0x20, 0x20, 0x26,
 0x40, 0x20, 0x20, 0x2B,
 0x20, 0x26, 0x20, 0x20,
 0x20, 0x30, //0xFF, 0xFF,
 0x20, 0x20, 0x1C, 0x10,
 0x18, 0x10, 0x20, 0x20,
 0x26, 0x20, 0x2B, 0x20,
 0x30, 0x20, 0x2B, 0x40,
 0x20, 0x20, 0x1C, 0x10,
 0x18, 0x10, 0x20, 0x20,
 0x26, 0x20, 0x2B, 0x20,
 0x30, 0x20, 0x2B, 0x40,
 0x20, 0x30, 0x1C, 0x10,
 0x18, 0x20, 0x15, 0x20,
 0x1C, 0x20, 0x20, 0x20,
 0x26, 0x40, 0x20, 0x20,
 0x2B, 0x20, 0x26, 0x20,
 0x20, 0x20, 0x30, 0x80,
 0x20, 0x30, 0x1C, 0x10,
 0x20, 0x10, 0x1C, 0x10,
 0x20, 0x20, 0x26, 0x20,
 0x2B, 0x20, 0x30, 0x20,
 0x2B, 0x40, 0x20, 0x15,
 0x1F, 0x05, 0x20, 0x10,
 0x1C, 0x10, 0x20, 0x20,
 0x26, 0x20, 0x2B, 0x20,
 0x30, 0x20, 0x2B, 0x40,
 0x20, 0x30, 0x1C, 0x10,
 0x18, 0x20, 0x15, 0x20,
 0x1C, 0x20, 0x20, 0x20,
 0x26, 0x40, 0x20, 0x20,
 0x2B, 0x20, 0x26, 0x20,
 0x20, 0x20, 0x30, 0x30,
 0x20, 0x30, 0x1C, 0x10,
 0x18, 0x40, 0x1C, 0x20,
 0x20, 0x20, 0x26, 0x40,
 0x13, 0x60, 0x18, 0x20,
 0x15, 0x40, 0x13, 0x40,
 0x18, 0x80, 0x00, 0x00,

 };
const char aMusic2[]={
  0x26,0x20,0x20,0x20,0x20,0x20,0x26,0x10,0x20,0x10,0x20,0x80,0x26,0x20,0x30,0x20,
  0x30,0x20,0x39,0x10,0x30,0x10,0x30,0x80,0x26,0x20,0x20,0x20,0x20,0x20,0x1c,0x20,
  0x20,0x80,0x2b,0x20,0x26,0x20,0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x80,0x26,0x20,
  0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x60,0x40,0x10,0x39,0x10,0x26,0x20,
  0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x80,0x26,0x20,0x2b,0x10,0x2b,0x10,
  0x2b,0x20,0x30,0x10,0x39,0x10,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x20,
  0x20,0x10,0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x18,0x20,0x18,0x20,0x26,0x20,
  0x20,0x20,0x20,0x40,0x26,0x20,0x2b,0x20,0x30,0x20,0x30,0x20,0x1c,0x20,0x20,0x20,
  0x20,0x80,0x1c,0x20,0x1c,0x20,0x1c,0x20,0x30,0x20,0x30,0x60,0x39,0x10,0x30,0x10,
  0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x10,0x26,0x10,0x26,0x10,0x2b,0x10,0x2b,0x80,
  0x18,0x20,0x18,0x20,0x26,0x20,0x20,0x20,0x20,0x60,0x26,0x10,0x2b,0x20,0x30,0x20,
  0x30,0x20,0x1c,0x20,0x20,0x20,0x20,0x80,0x26,0x20,0x30,0x10,0x30,0x10,0x30,0x20,
  0x39,0x20,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x10,0x40,0x10,0x20,0x10,
  0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x00};
char const *aMusic[MUSIC_MAX];
//////////////////////////////////////////////////////////////////////////////////////////////
//** 函数名称 :
//** 函数功能 :
//** 入口参数 :             
//** 出口参数 :
//   使用方法 :
//   注意事项 :
//////////////////////////////////////////////////////////////////////////////////////////////
char MUsic_reg=0;
void  delay(char timer)
{
  while(timer--)
  {
   _nop_(); 
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();   
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();   
   _nop_();
   _nop_();
   _nop_();
   _nop_();   
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();   
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();   
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();   
   _nop_();
   _nop_();
   _nop_();
  }

}
//////////////////////////////////////////////////////////////////////////////////////////////
//** 函数名称 :
//** 函数功能 :
//** 入口参数 :             
//** 出口参数 :
//   使用方法 :
//   注意事项 :
//////////////////////////////////////////////////////////////////////////////////////////////
void  timer1init(void)
{
  TMOD|=0x10;
  IE|=0x88;
  TH1=0x0Dc;
  TL1=0x00;
}
void  time1start(void)
{
  TR1=1;
}
void  time1stop(void)
{
  TR1=0;
}
//////////////////////////////////////////////////////////////////////////////////////////////
//** 函数名称 :
//** 函数功能 :
//** 入口参数 :             
//** 出口参数 :
//   使用方法 :
//   注意事项 :
//////////////////////////////////////////////////////////////////////////////////////////////
void  timer1exp(void) interrupt 3
{
 MUsic_reg++; 
  TH1=0x0Dc;
  TL1=0x00; 
}
//////////////////////////////////////////////////////////////////////////////////////////////
//** 函数名称 :
//** 函数功能 :
//** 入口参数 :             
//** 出口参数 :
//   使用方法 :
//   注意事项 :
//////////////////////////////////////////////////////////////////////////////////////////////

char ID_speak=0;
 bit MUSIC_OK=1;//为1时,不允许播放音乐

void   Speak(void)
{
 int h_speak=0;
 char i=0,x=0;
 while(((i=aMusic[ID_speak][h_speak++])!=0)&&(MUSIC_OK==0)) //是停止符
 {
     x=aMusic[ID_speak][h_speak++];
      if(i==0xff)  //是停顿符
      {
 	   time1stop();
	   SPEAK=1;
	   delay(i); 
      }
	  
      else {
        
		time1start();
        while(x!=MUsic_reg)
		{
		 delay(i);
		 SPEAK=~SPEAK;
		}
		MUsic_reg=0;
        }
		SPEAK=1;
 }
 SPEAK=1;
 time1stop();
}




		main()
{ aMusic[0]=aMusic1;
MUSIC_OK=0;
 timer1init();
 ID_speak=0;
  while(1)
  {
   Speak();
  
  }

}

⌨️ 快捷键说明

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