找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 605|回复: 0
收起左侧

程序插入单片机开发板 没声音 是我输出有问题嘛?

[复制链接]
ID:939354 发表于 2021-6-17 15:09 | 显示全部楼层 |阅读模式
程序插入开发板 开发板没声音 是我输出有问题嘛?是普中51开发板

#include<REG52.H>
#define sound_amount 5
//位定义
sbit Beep =  P1^5 ;
sbit play_up=P1^3;
sbit play_down=P3^5;
sbit pause=P3^2;
sbit speaker=P1^0;
//全局变量
unsigned char timerOh,timer01,time;
unsigned char music_num ;
unsigned int num;
signed int fre;
bit play_enable;
//函数申明
void delay(unsigned char t);
void delayms (unsigned int t) ;
void music_play (void) ;

//《烟花易冷》
unsigned char code song1[]={
            5,2,1, 3,2,1, 2,2,2, 2,2,4, 3,2,1, 1,2,1, 2,2,1, 3,2,4,
         5,2,1, 3,2,1, 2,2,2, 2,2,2, 5,1,1, 3,2,1, 4,2,1, 3,2,4,
         3,2,1, 3,2,1, 7,2,1, 3,2,1, 2,2,2, 1,2,1, 7,2,1, 1,2,1,
         2,2,1, 3,2,1, 6,2,3, 6,1,1, 1,2,1, 3,2,1, 2,2,1, 6,1,1,
         1,2,1, 7,1,1, 5,1,1, 6,1,6, 5,2,1, 3,2,1, 2,2,2, 2,2,1,
         7,2,3, 3,2,1, 2,2,2, 1,2,1, 7,1,1, 1,2,1, 2,2,1, 3,2,1,
         6,2,3, 6,1,1, 1,2,1, 3,2,1, 2,2,1, 6,1,1, 1,2,1, 7,1,2,
         5,1,2, 6,1,6, 0,0,0 };
//《发如雪》
unsigned char code song2[]={
     5,2,2, 1,1,1, 3,2,2, 2,2,1, 3,2,1, 5,2,1, 6,2,1, 5,2,3, 1,2,1, 2,2,1,
         3,2,1, 6,2,1, 5,2,1, 3,2,1, 5,2,3, 5,2,1, 6,2,1, 1,3,2, 6,2,1, 5,2,1,
         3,2,1, 5,2,1, 3,2,2, 1,2,1, 2,2,1, 3,2,1, 1,2,1, 6,1,1, 3,2,1, 2,2,1,
         5,1,1, 2,2,1, 3,2,2, 2,2,1, 3,2,1, 5,2,1, 6,2,1, 5,2,3, 1,2,1, 2,2,1,
         5,2,1, 3,2,1, 5,2,1, 3,2,2, 1,2,1, 6,1,1, 3,2,1, 2,2,1, 1,2,1, 6,1,1,
         1,2,1, 2,2,1, 2,2,1, 1,2,4, 0,0,0 };
//《简单爱》
unsigned char code song3[]={
     5,1,1, 1,2,1, 2,2,1, 3,2,1, 2,2,1, 3,2,1, 4,2,1, 5,2,1, 5,2,1, 5,2,1,
         4,2,1, 3,2,1, 2,2,3, 5,1,1, 1,2,1, 2,2,1, 3,2,1, 4,2,1, 5,2,1, 5,2,1,
         5,2,1, 6,2,1, 5,2,2, 2,2,1, 3,2,1, 1,2,2, 1,2,1, 6,1,1, 2,2,1, 2,2,1,
         3,3,1, 3,2,1, 1,2,1, 5,2,1, 1,2,1, 5,2,1, 1,2,1, 7,1,1, 1,2,1, 1,2,1, 6,1,1,
         2,2,1, 2,2,1, 3,2,1, 3,2,1, 5,2,1, 5,2,1,
         4,2,1, 3,2,1, 2,2,3, 5,1,1, 1,2,1, 2,2,1, 3,2,1, 2,2,1, 3,2,1, 4,2,1,
         5,2,1, 5,2,1, 5,2,2, 2,2,1, 3,2,1, 1,2,2, 1,2,1, 6,1,1, 2,2,1, 2,2,1,
         3,2,1, 3,2,1, 1,2,2, 5,2,1, 1,2,1, 5,2,1, 5,2,1, 7,1,1, 1,2,1, 0,0,0 };
//频率-半周期数据表高八位共保存了四个八度的28个频率数据
unsigned char code FREQH[]={
     0xF2, 0xF3,0xF5, 0xF5,0xF6, 0xF7, 0xF8, //低音1234567
         0xF9, 0xF9,0xFA, 0xFA,0xFB, 0xFB, 0xFC, 0xFC, //中音1234567
         0xFC, 0xFD,0xFD, 0xFD,0xFD, 0xFE,  //高音234567
         0xFE, 0xFE,0xFE, 0xFE,0xFE, 0xFE, 0xFE, 0xFF};//超高音1234567
//频率-半周期数据表低八位
unsigned char code  FREQL[]={
     0x42, 0xC1,0x17, 0xB6, //低音1234567
         0x21, 0xE1,0x8C, 0xD8,0x68, 0xE9, 0x5B, 0x8F, //中音1234567
         0xEE, 0x44,0x6B, 0xB4,0xF4, 0x2D,  //高音234567
         0x47, 0x77,0xA2, 0xB6,0xDA, 0xFA, 0x16}; //超高音1234567



void main(void)
{
        TMOD=0x11;
        ET0 =1;
        EA=1;
        while(1)
        {
                music_play();
                if(!pause)
                {
                        if(!pause)
                        {
                                if(music_num==0)
                                {
                                        music_num=1;
                                        num=0;
                                        play_enable=1;
                                }
                                else
                                {
                                        play_enable=~play_enable;
                                        speaker=1;
                                }                                       
                                while(!pause)
                                {
                                        if(play_enable==0){}
                                }
                        }
                }
                if((!play_up)&&(music_num!=0))
                {
                                delayms(5);
                                if((!play_up)&&(music_num!=0))
                                {  speaker=1;
                                music_num-=1;
                                if(music_num<=0)
                                music_num=3;
                                num=0;
                                if(music_num==(sound_amount+1))
                                music_num=1;
                                delayms(500);
                                }
                }
                if((!play_down)&&(music_num!=0))
                {
                                delayms(5);
                                if((!play_down)&&(music_num!=0))
                                {  speaker=1;
                                music_num-=1;
                                num=0;
                                if(music_num==0)
                                music_num=sound_amount;
                                delayms(500);
                                }
                }        
        }
}

//延时函数(毫秒)
void delayms(unsigned int t)
{
        unsigned int i,j;
        for(i=0;i<t;i++)
        {
                for(j=0;j<123;j++);
        }
}


//延时函数
void delay(unsigned char t)
{
        unsigned char t1;
        unsigned char t2;
        for(t1=0;t1<t;t1++)
        {
                for(t2=0;t2<8000;t2++)
                {
                        ;
                }
        }
        TR0=0;
}

//定时器0中断函数
void timer0(void) interrupt 1
{
        speaker=!speaker;
        TH0= timerOh;
        TL0=timer01;
}


void song(void)
{
        TH0= timerOh;
        TR0=1;
        delay(time);
}



void music_play(void)
{
        if((music_num==1)&&(play_enable==1))
        {
                fre=song1[num]+7*song1[num+1]-1;
                 timerOh=FREQH[fre];
                timer01=FREQL[fre];
                time=song1[num+2];
                num+=3;
                if(fre<0)
                {
                        num=0;
                        music_num=2;
                }
                song();
        }
        if((music_num==2)&&(play_enable==1))
        {
                fre=song2[num]+7*song2[num+1]-1;
                 timerOh=FREQH[fre];
                num+=3;
                if(fre<0)
                {        
                        num=0;
                        music_num=3;
                }
                        song();
        }
        if((music_num==3)&&(play_enable==1))
        {
                fre=song3[num]+7*song3[num+1]-1;
                 timerOh=FREQH[fre];
                num+=3;
                if(fre<0)
                {
                        num=0;
                        music_num=3;
                }
                song();
        }
}



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表