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

📄 testsound.c

📁 这是一个让单片机发出音乐的程序
💻 C
字号:
#include <Mega16.h>                /*预处理命令 */
#include <Delay.h>
#include <USART.h>
#include "Music.h"
#include "Music_data.h"
#define uchar unsigned char
#define uint unsigned int
#define SND_TNE PORTD^=0x80

unsigned char delay_inc=0x0C;
unsigned char time_inc=0x01;

struct MUSICDAT
{
  char name;
  char time;
} ;


void delay(word t)
{
 uint i;
// uchar j;
 for (i=0;i<t;i++) i+=delay_inc;
//   for(j=1;j<8;j++);
}

void sound_pc0(uchar t)
{
 uint i;
 for (i=0;i<350-t*t;i++)            /*改变发音快慢*/
    {
     SND_TNE;
     delay(t);
    }
}

void TestSnd1()
{
 uchar c;

    for (c=0x00;c<0xff;c++)    
      {
       SND_TNE;                 
       delay(c);
      } 
    for (c=0xff;c>0x00;c--)    
     {
      SND_TNE;                 
      delay(c);
      }

}

void TestSnd2()
{
 uchar dt;
     for(dt=1;dt<14;dt++)               /*改变发音数量 */
         sound_pc0(dt);
 }

void TestSnd3(void)               
{
 uchar c;
    for (c=0x00;c<0xff;c++)  
        {
        SND_TNE;
        delay(c);
        SND_TNE;
        delay(c);
        }
     
    for (c=0;c<255;c++);              
     
    for (c=0xff;c>0x00;c--)  
      {
        SND_TNE;
        delay(c);
        SND_TNE;
        delay(c);
      }
    for (c=0;c<255;c++) ;              
                      
}

void TestSnd4(void)
{
  //struct MUSICDAT * music_dat;
  //unsigned char c;
  unsigned int i,j,k;  
  unsigned char name;
  unsigned int time;
  i=0;
  while (i<sizeof(music_dt0))
  {
    name=music_dt0[i];
    time=music_dt0[i+1];
    for (k=0;k<time;k++)
    for (j=0;j<187-time_inc;j++)
      {
      SND_TNE;
      delay(tone_frq[name]);
      SND_TNE;
      delay(tone_frq[name]);
      }
   delay_ms(20); 
   i+=2;
  }
  //while ((name==0)&&(time==0));
}

void TestSnd5(void)
{
  unsigned int j;
  //for (i=0;i<100;i++)
    for (j=0;j<10;j++)
      {
      SND_TNE;
      delay(tone_frq[M1]);
      SND_TNE;
      delay(tone_frq[M1]);
      }
}


void main (void)                    /*主函数 */
{
 unsigned char Cmd;
 DDRC=0xff;
 DDRA=0x00;
 DDRD=0xff;
 PORTC=~time_inc;
 
 USART_Init(47);  //3.6864M=23,   7.3728M=47
 
 while (1)
 {
  Cmd=0;
    if (UCSRA&(1<<RXC)) //串口有信息吗?
   {
     Cmd=UDR;    //如果有,接收一个字节
   }

 if ((!PINA.0)||(Cmd=='1')) TestSnd1();
 if ((!PINA.1)||(Cmd=='2')) TestSnd2();
 if ((!PINA.2)||(Cmd=='3')) TestSnd3();
 if ((!PINA.3)||(Cmd=='4')) TestSnd4();
 if ((!PINA.4)||(Cmd=='5')) TestSnd5();
 
 if ((!PINA.6)||(Cmd=='7'))
  {
    while (!PINA.6);
    time_inc++;
    if (time_inc>186) time_inc=186;
    PORTC=~time_inc;
  }
 if ((!PINA.7)||(Cmd=='8'))
   {
    while (!PINA.7);
    time_inc--;
    if (time_inc<0) time_inc=0;
    PORTC=~time_inc;
   }
 if (Cmd=='9')
   {
     Cmd=ReceiveByte();
     time_inc=Cmd;
    if (time_inc>186) time_inc=186;
    PORTC=~time_inc;
   }
 }
}   




⌨️ 快捷键说明

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