51单片机的蜂鸣器写歌的音阶

  • Post author:
  • Post category:其他


直接上代码!

#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 版权协议,转载请附上原文出处链接和本声明。