我这里有现成的程序,把分给我,留下信箱,我就给你发过去,呵呵。我利用软件定时和中断方式都有,可以演奏音乐,不过蜂鸣器演奏的实在够难听。
看来楼主对程序不感兴趣,我还是告诉你吧,你定时必须知道准确的定时时间,音乐中DO RE MI-----SI都是有一定的频率也就是Hz,都如下:
c1:262Hz--thtl=0xf8b3
d1:294Hz--0xf972
e1:330Hz--0xfa14
f1:349Hz--0xfa66
g1:392Hz--0xfb03
a1:440Hz--0xfb8f
b1:494Hz--0xfc0b
前面是HZ,后面是我用硬件定时得到的TH和TL的值。
比如你想发C1的音,先用软件定一个262*2Hz的延时反复调用,在一个周期内使buzzer响,再接着一个周期使buzzer不响,如此反复就得到了262Hz的声音,也就类似发出了C1的声音。
反正是够难听的。
用定时器来产生频率,如产生100Hz的声音。
思路:
100Hz即每秒变换200次,每次的时间就是1/200秒=0.005秒=5毫秒。
计算定时器的初值:TH0 = 0x0EE; TL0 = 0x00;
#include
sbit BEEP=P0^0;//蜂鸣器引脚
void main(void)
{
//初始化定时器(晶振:11.0592MHz,12T)
TMOD = 0x01;
TH0 = 0x0EE;//5毫秒中断一次
TL0 = 0x00;
EA = 1;//开总中断
ET0 = 1;;//开中断
TR0 = 1;//启动定时器
while(1);//死循环等蜂鸣器响。
}
void Timer0Interrupt(void) interrupt 1
{
TH0 = 0x0EE;
TL0 = 0x00;
BEEP=!BEEP;//变换一次蜂鸣器
}
搜一下:单片机电子琴,即可。