⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 beep.c

📁 对单片机蜂鸣器进行操作
💻 C
字号:
#include <reg51.h>

typedef unsigned char BYTE;
typedef unsigned int WORD;
BYTE uptimeth0, uptimetl0, downtimeth0, downtimetl0;

bit flag,rest;
int times;
WORD code note[]={329,391,622,659,493,587,523,391,369,349,};
int code len[]={1000,750,250,1500,250,285,250,750,250,1500,};
beep(WORD frequency, float length)
{
	WORD init,downtime, uptime;
	flag=1;
	
	TMOD=1;
	times=(int)(((float)(frequency))*(length/1000.0));
	init=65536-11059200/12/frequency;
	downtime=0x0f;				//下降沿宽度调此参数,越大越宽
	uptime=init+downtime+35;
	downtime=65536-downtime;
	if(frequency==10000) 
	{
	rest=1;
	}
	else{rest=0;}
	uptimeth0=(BYTE)(uptime>>8);
	uptimetl0=(BYTE)(uptime&0x00FF);
	downtimeth0=(BYTE)(downtime>>8);
	downtimetl0=(BYTE)(downtime&0x00FF);
	TH0=uptimeth0;
	TL0=uptimetl0;
	ET0=1;
	EA=1;
	TR0=1;
	while(times);
	
}
void main(){
	
	int count;
	/*for(count=20;count<2000;count+=20)
	{
	
		beep(count,100);
	
	
	}*/
	/*for(count=0;count<sizeof(note)/sizeof(int);count++)
	{
	beep(note[count],len[count]);
	}  */
	//beep(20000,1000);
	beep(440,2000);
	beep(10000,2000);
	beep(440,2000);

	
	
		
	
		
	
	
	
	
	while(1);
	}

void timer0(void) interrupt 1 using 1
{
	flag=!flag;	        //flag=1,高电平;flag=0,低电平
	if(times==0) 
	{
		ET0=0;
		TR0=0;
		P1|=0x01;

		return;
	}
	if(!flag)
	{
		TH0=downtimeth0;
		TL0=downtimetl0;
		if(!rest)
		P1&=0xFE;
		times--;
	}
	else
	{
		
		TH0=uptimeth0;
		TL0=uptimetl0;
		P1|=0x01;
		
	}
}
	

	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -