📄 beep.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 + -