//以下程序运行于STC12C**单片机
// BUZ为蜂鸣器输出I/O口定义名称
void Delay_1us(uint aa) //1T单片机/12MHz的n个us用于蜂鸣器
{
while (aa--)
{
_nop_()
_nop_()
}
}
/*----------------------------
响一声短音
----------------------------*/
void beep(void)
{
uint a//定义变量用于发声的长度设置
for(a=300a>0a--)//第一个声音的长度
{
BUZ = ~BUZ//产生音频
Delay_1us(100)//音调设置,延时调整赋值量可以调节音调
}
BUZ = 1//音乐结束后扬声器关闭
}
通过中断的方式,使用定时器0来提供1KHz的方波,蜂鸣器引脚定义为P1.0。代码如下:#include<reg51.h>#defineu8unsignedcharsbitBEEP=P1^0voidmain{EA=1//开总中断IT0=1//打开定时器0源中断允许开关TMOD=0x01//选择定时器0工作在方式0TR0=1//启动定时器0TH1=(65536-1000)/256//赋值,定时1msTL1=(65536-1000)%256while(1){}}voidTIM()interrupt1{TH1=(65536-1000)/256TL1=(65536-1000)%256BEEP=~BEEP//蜂鸣器引脚输出1KHz方波}#include<reg51.h>#define uchar unsigned char
sbit k1=P1^0
sbit k2=P1^1
sbit k3=P1^2
sbit k4=P1^3
sbit fmq=P1^7
uchar cnt,sec
vodi t0isr() interrupt 1
{
TH0=(65536-50000)/256
TL0=(65536-50000)%256
cnt++
if(cnt>=20)
{
cnt=0
sec--
if(sec==0)
{
TR0=0
fmq=1
}
}
}
main()
{
TMOD=0x01
TH0=(65536-50000)/256
TL0=(65536-50000)%256
ET0=1
EA=1
while(1)
{
if(k1==0)
{
sec=1
cnt=0
TR0=1
while(k1==0)
fmq=0
}
if(k2==0)
{
sec=2
cnt=0
TR0=1
while(k1==0)
fmq=0
}
if(k3==0)
{
sec=3
cnt=0
TR0=1
while(k3==0)
fmq=0
}
if(k4==0)
{
sec=4
cnt=0
TR0=1
while(k1==0)
fmq=0
}
}
}