程序插入开发板 开发板没声音 是我输出有问题嘛?是普中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();
}
}
|