❶ 单片机的输出声音频率为什么这么算
首先,0.7ms翻转P3.0一次,P3.0输出的波形由1变0或由0变1,而一个震荡周期包含一个高电平和一个低电平,因此你看到需要将0.7ms乘以2才是一个周期波形的时长,0.7ms*2=1.4ms
1.4ms换算成秒: 1.4ms/1000=0.0014s
0.0014s换算成频率: 1/0.0014s=714.2857Hz
❷ 单片机的输出声音频率是多少
扬声器或蜂鸣器是靠正、负电平驱动生成震荡,因此,正、负电平相同时长能生成最大声音
500Hz=500次震荡每秒,即震荡频率=1/500Hz=0.002秒=0.002s
如果我们需要生成500Hz的声音,应该让扬声器接收到这样的波形:0.001s的高电平和0.001s的低电平
因此我们设定定时器每0.001s中断一次,在中断时翻转P3.0的状态,得到的波形就是我们想要的波形啦。
❸ C51单片机中用P1.0输出1KHz和500Hz的音频信号驱动扬声器
开两个计时器,计时器0用作定时中断,计数器1用作普通计数器用,用计数器1产生两个不同的频率。
定时器0中断用以判别100ms和200ms的时间隙,由于定时器中断需要在两个中断间隔时间间跳变,帮需要加一个标志位FLAG,当FLAG=0时让定时器0延时100MS中断,当FLAG=1时定时器0延时200MS中断。
假设p1.1外接按钮,对输出1khz和500hz进行切换。
#include
sbit wave = p1^0;
sbit k = p1^1;
#define fosc 12000000ul //晶振频率,可以自行修改
#define fint 1000 //定时器中断频率
bit switchflag;
void delayms(unsigned int x)
{
unsigned char t;
while(x--)
for(t=0;t<120;t++);
}
void main()
{
tmod&=0xf0;
tmod|=0x01;
th0=(65536-fosc/fint/12)/256;
tl0=(65536-fosc/fint/12)%256;
ie|=0x82;
tr0=1;
while(1)
{
if(!k)
{
delayms(10);
if(!k)
switchflag=!switchflag;
}
}
}
void t0_int() interrupt 1
{
static bit i;
th0=(65536-fosc/fint/12)/256;
tl0=(65536-fosc/fint/12)%256;
i=!i;
if(switchflag) {wave=!wave;}
else {wave=(i)?!wave:wave;}
}
(3)单片机音频输出扩展阅读:
单片机也被称为单片微控器,属于一种集成式电路芯片。在单片机中主要包含CPU、只读存储器ROM和随机存储器RAM等,多样化数据采集与控制系统能够让单片机完成各项复杂的运算,无论是对运算符号进行控制,还是对系统下达运算指令都能通过单片机完成。
由此可见,单片机凭借着强大的数据处理技术和计算功能可以在智能电子设备中充分应用。简单地说,单片机就是一块芯片,这块芯片组成了一个系统,通过集成电路技术的应用,将数据运算与处理能力集成到芯片中,实现对数据的高速化处理。
❹ 怎样用stc89c52单片机控制蜂鸣器发出音乐的c语言程序
#include
#include
//本例采用89C52,晶振为11.0592MHZ
//关于如何编制音乐代码,其实十分简单,各位可以看以下代码.
//频率常数即音乐术语中的音调,而节拍常数即音乐术语中的多少拍;
//所以拿出谱子,试探编吧!
sbitBeep=P1^5;
unsignedcharn=0;//n为节拍常数变量
unsignedcharcodemusic_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,
0x30,0x1C,0x10,0x18,
0x20,0x15,0x20,0x1C,
0x20,0x20,0x20,0x26,
0x40,0x20,0x20,0x2B,
0x20,0x26,0x20,0x20,
0x20,0x30,0x80,0xFF,
0x20,0x20,0x1C,0x10,
0x18,0x10,0x20,0x20,
0x26,0x20,0x2B,0x20,
0x30,0x20,0x2B,0x40,
0x20,0x20,0x1C,0x10,
0x18,0x10,0x20,0x20,
0x26,0x20,0x2B,0x20,
0x30,0x20,0x2B,0x40,
0x20,0x30,0x1C,0x10,
0x18,0x20,0x15,0x20,
0x1C,0x20,0x20,0x20,
0x26,0x40,0x20,0x20,
0x2B,0x20,0x26,0x20,
0x20,0x20,0x30,0x80,
0x20,0x30,0x1C,0x10,
0x20,0x10,0x1C,0x10,
0x20,0x20,0x26,0x20,
0x2B,0x20,0x30,0x20,
0x2B,0x40,0x20,0x15,
0x1F,0x05,0x20,0x10,
0x1C,0x10,0x20,0x20,
0x26,0x20,0x2B,0x20,
0x30,0x20,0x2B,0x40,
0x20,0x30,0x1C,0x10,
0x18,0x20,0x15,0x20,
0x1C,0x20,0x20,0x20,
0x26,0x40,0x20,0x20,
0x2B,0x20,0x26,0x20,
0x20,0x20,0x30,0x30,
0x20,0x30,0x1C,0x10,
0x18,0x40,0x1C,0x20,
0x20,0x20,0x26,0x40,
0x13,0x60,0x18,0x20,
0x15,0x40,0x13,0x40,
0x18,0x80,0x00
};
voidint0()interrupt1//采用中断0控制节拍
{TH0=0xd8;
TL0=0xef;
n--;
}
voiddelay(unsignedcharm)//控制频率延时
{
unsignedi=3*m;
while(--i);
}
voiddelayms(unsignedchara)//豪秒延时子程序
{
while(--a);//采用while(--a)不要采用while(a--);各位可编译一下看看汇编结果就知道了!
}
voidmain()
{unsignedcharp,m;//m为频率常数变量
unsignedchari=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);gotoplay;}//如果碰到结束符,延时1秒,回到开始再来一遍
elseif(p==0xff){i=i+1;delayms(100),TR0=0;gotoa;}//若碰到休止符,延时100ms,继续取下一音符
else{m=music_tab[i++],n=music_tab[i++];}//取频率常数和节拍常数
TR0=1;//开定时器1
while(n!=0)Beep=~Beep,delay(m);//等待节拍完成,通过P1口输出音频(可多声道哦!)
TR0=0;//关定时器1
}
}
你参考这个吧
❺ 51单片机声音输出
看你要输出什么样的音频。
1、如果只是很简单的像某些有声贺卡那样的话,接一个无源喇叭,自己控制I/O输出一个方波,通过控制方波的频率来调节音调,然后将不同的频率组合起来,连续播放就是一首简单的歌曲。
2、如果要输出MP3,那就需要一块音频解码芯片,比如VS1003。单片机将存储在外部存储器里(比如U盘)的歌曲信息通过接口芯片传给音频解码芯片,解码之后就能输出歌曲了。
第二种情况相对比较复杂,涉及到如何高效读取存储的歌曲信息和高效传输这些信息。