直接上代码!
#include<reg51.h>
sbit LS1=P3^7; //该蜂鸣器为无源蜂鸣器;这是当以它的接口
sbit K0=P1^0;
int code L[]={0,226,229,232,233,236,238,240,241,242,244,245,246,247,248}; //音阶
int code S[]={0,4,13,10,20,3,8,6,2,23,5,26,1,4,3};
int i=0;
void DelayMs(int x) //延时
{
int i;
while(x--) for(i=0;i<120;i++);
}
void init() //初始化
{
// TMOD=0x00; //T0方式0定时 默认情况下就为0x00
IE=0x82;
LS1=0;
}
void T0_time0() interrupt 1 //T0中断函数,在定时器溢出进入中断,即TF0或TF1必须为1时蔡进入中断函数,进入之后硬件可软件可清零,硬件也可清零
{
TH0=L[i];
TL0=S[i];
LS1=!LS1;
}
void main()
{
init();
while(1)
{
while(K0); //开关未按时等待
while(!K0); //开关按下等待松开
for(i=0;i<15;i++) TR0=1,DelayMs(500),TR0=0,DelayMs(50);
/*让播放器开500ms(在没进入之前,是在main函数中的500ms中;换句话说:在这500ms内定时器中断函数进行了(500ms/定时器初值)次),当然忽略中断函数执行语句的时间,然后再让蜂鸣器关50ms*/
}
}
版权声明:本文为weixin_44763594原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。