protues仿真音乐播放器问题

2019-03-24 17:09发布

各位大神,我想请教一下关于protues制作音乐播放器的问题,就是我按照程序生成.hex文件后,载入到单片机中,发现我摁下开关音乐不播放,我不知道是什么原因,恳请各位大神指教一下,万分感谢!我的源程序和原理图如下
#include<reg51.h>  
sbit sound=P3^7;  //将sound位定义为P3.7
unsigned int C;    //储存定时器的定时常数
//C调低音的音频宏定义
#define L1  262  //将"L1"宏定义为低音"1"的频率262Hz  时间是1/262=3826/2 us 取半周期
/*******************************************     
函数功能:1个延时单位,延时200ms
******************************************/
void delay()               
{
unsigned char i,j;
for(i=0;i<100;i++)
for(j=0;j<250;j++)         }
/*******************************************                 
主函数
******************************************/  
void main(void)
{
unsigned char i,j;            
//以下是《天空之城》简谱//每行对应一小节音符
unsigned  int code f[]={ 880,987,/
**/1046,987,1046,1318,
/**/987,659,659,  
/**/880,784,880,1046,
/**/784,659,659,  
/**/698,659,698,1046,
/**/659,1046,1046,1046,
/**/987,698,698,987,
/**/987,880,987,   
/**/1046,987,1046,1318,
/**/987,659,659,
/**/880,784,880,1046,784,659,
/**/698,1046,987,1046,
/**/1174,1174,1174,1046,
/**/1046,880,987,784,
/**/880,1046,1174,  
/**/1318,1174,1318,1567,
/**/1046,987,1046,1318,
/**/1318, 1174,784,784,         
/**/880,1046,987,1174,
/**/1046,784,784,  
/**/1396,1318,1174,         
/**/659,1318, 1046,1318,
/**/1760,1567,1567,  
/**/1318,1174,1046,1046,
/**/1174,1046,1174,1567,
/**/1318,1318,1760,1567,  
/**/1318,1174,1046,1046,
/**/1174,1046,1174,987,
/**/880,880,987,
/**/880, 0xff};        //以0xff作为音符的结束标志              
unsigned char code JP[ ]={            
4,4, /**/12,4,8,8, /**/20,4,4, /**/12,4,8,8,   
/**/20,4,4, /**/12,4,4,12,20,4,4,4, /**/12,4,8,8,   
/**/20,4,4, /**/12,4,8,8, /**/20,4,4, /**/12,4,8,8,
32, 4, /**/8,4,6,8, /**/4,4,4,16, /**/8,4,6,8,   
/**/24,4,4, /**/12,4,8,8,24,4,4, /**/4,4,8,8,   
/**/32, /**/4,8,8,6, /**/12,4,16, /**/8,8,8,8,30,         
/**/20,8, /**/16,8,8, /**/4,4,16,8, /**/8,4,4,8,     
/**/20,8,16,16, /**/4,20,8, /**/8,4,4,8,/**/20,4,4,
/**/32,
};
EA=1;                //开总中断
ET0=1;               //定时器T0中断允许
TMOD=0x00;           // 使用定时器T0的模式1(13位计数器)
while(1)      
{
i=0;                 //从第1个音符f[0]开始播放
while(f[i]!=0xff)           
{
C=460830/f[i];     
TH0=(8192-C)/32;     //可证明这是13位计数器TH0高8位的赋初值方法     
TL0=(8192-C)%32;     //可证明这是13位计数器TL0低5位的赋初值方法
TR0=1;               //启动定时器T0
or(j=0;j<JP[i];j++)  //控制节拍数
delay();             //延时1个节拍单位
TR0=0;               //关闭定时器T0
i++;                 //播放下一个音符
}   
sound=0;         
}   
}   
/***********************************************************
函数功能:定时器T0的中断服务子程序,使P3.7引脚输出音频的方波  
************************************************************/  
void Time0(void ) interrupt 1 using 1   
{
Sound=!sound;       //将P3.7引脚输出电平取反,形成方波   
TH0=(8192-C)/32;    //可证明这是13位计数器TH0高8位的赋初值方法  
TL0=(8192-C)%32;   //可证明这是13位计数器TL0低5位的赋初值方法   
}        



此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
qwqwqw2088
1楼-- · 2019-03-24 23:57
喇叭用speaker模型
电子工程名字
2楼-- · 2019-03-25 04:14
 精彩回答 2  元偷偷看……
电子工程名字
3楼-- · 2019-03-25 08:29
qwqwqw2088 发表于 2017-11-27 20:25
喇叭用speaker模型

试了  还是不行
yang_alex
4楼-- · 2019-03-25 12:08
你系统的时钟对不对?或说你的外部晶体和原设计中是否一样?
电子工程名字
5楼-- · 2019-03-25 14:27
 精彩回答 2  元偷偷看……
viphotman
6楼-- · 2019-03-25 16:17
想问下  C=460830/f[i];  里460830 与数组f[] JP[] 里的值怎么算出来的?

一周热门 更多>