永发信息网

单片机中蜂鸣器的问题,不明白程序中的频率常数和节拍常数怎么来的,求解答?

答案:2  悬赏:70  手机版
解决时间 2021-02-20 15:54

#include
#include
//本例采用89C52, 晶振为11.0592MHZ
//频率常数即音乐术语中的音调,而节拍常数即音乐术语中的多少拍; //所以拿出谱子, 试探编吧!
sbit Beep = P1^5 ;
unsigned char n=0; //n为节拍常数变量
unsigned char code music_tab[] ={
0x18, 0x30, 0x1C , 0x10, //格式为: 频率常数, 节拍常数, 频率常数, 节拍常数,
0x20, 0x40, 0x1C , 0x10,
0x18, 0x10, 0x20 , 0x10,
0x1C, 0x10, 0x18 , 0x40,
0x1C, 0x20, 0x20 , 0x20,
0x1C, 0x20, 0x18 , 0x20,
0x20, 0x80, 0xFF , 0x20,
};

void int0() interrupt 1 //采用中断0 控制节拍
{ TH0=0xd8;
TL0=0xef;
n--;
}

void delay (unsigned char m) //控制频率延时
{
unsigned i=3*m;
while(--i);
}

void delayms(unsigned char a) //豪秒延时子程序
{
while(--a); //采用while(--a) 不要采用while(a--); 各位可编译一下看看汇编结果就知道了!
}

void main()
{ unsigned char p,m; //m为频率常数变量
unsigned char i=0;
TMOD&=0x0f;
TMOD|=0x01;
TH0=0xd8;TL0=0xef;
IE=0x82;
play:
while(1)
{
a: p=music_tab[i];
if(p==0x00) { i=0, delayms(1000); goto play;} //如果碰到结束符,延时1秒,回到开始再来一遍
else if(p==0xff) { i=i+1;delayms(100),TR0=0; goto a;} //若碰到休止符,延时100ms,继续取下一音符
else {m=music_tab[i++], n=music_tab[i++];} //取频率常数 和 节拍常数
TR0=1; //开定时器1
while(n!=0) Beep=~Beep,delay(m); //等待节拍完成, 通过P1口输出音频(可多声道哦!)
TR0=0; //关定时器1
}
}
最佳答案

// 声音频率, 时长, 回响时长, 停顿时长,0xFFFF表示结束。 //


#define VOICE_WIDTH 50 //占空比




const unsigned int VOICE_TYPE_0[]= //power_on
{
253,450,0,550,
0xFFFF
};
全部回答
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
天龙八部 刷马为什么才给几百经验?
vivox9plus和oppor11plus哪个好,哪个的拍照效
纳雍县教育局句长是谁
《重读近代史》一书中有这样的叙述:“(缔造
四个立刻的句式应用了什么修辞手法
老公出轨和小三同居了还回头我该留他吗我该要
如何对付无赖父亲,谁能帮我啊!!!
富万家房产信息服务部地址有知道的么?有点事
可以的用英文怎么说
单选题如果一件商品先涨价20%,再降价20%,
衣时代网乐业店怎么去啊,有知道地址的么
我的手机最近上网很慢怎么回事
根据以下材料回答问题. 材料一: 近几年来国内
股指期货从2010年推出后
柴机油桶上写cf_4是夏季机油吗
推荐资讯
关于tamas wells.如果能有附图就更好了,介绍
三字经中,子不学,断机下来这个字念甚么?谁
计算机基础应用
光迁得宽带,光猫应该亮几个灯?pon亮灯,lan
(求)如何让某个软件在运行时隐藏右下角图标??
我家电视机不是3D的但上面有左右格式的3D电影
植物大战僵尸中怎么图鉴中少了一个
Photoshop 里图像大小有什么用?
中央处理单元是什么意思?谢谢了,大神帮忙啊
已知C2H5OH的燃烧热△H=-1366.8kJ/mol,在25
对不起,昨晚我不知道你打电话过来 翻译成英文
【朗润的意思】“朗润”一词是什么意思?七年
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?