重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
#include stdio.h
创新互联是一家集网站建设,莱西企业网站建设,莱西品牌网站建设,网站定制,莱西网站建设报价,网络营销,网络优化,莱西网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
#includewindows.h // 包含windows头文件
int main()
{
int n;
int b=20;
for(n=0;n21;n++)
{
printf("\a");
printf("%d\n", b - n);
Sleep(500); // 延迟 500 毫秒
}
getchar();
return 0;
}
你是想声音和数字都慢慢的出来吗?你的程序太短小,在一瞬间就执行完了,其实声音可能响了20下,但是是在一瞬间同时发出来的,你分辨不出来而已。可以包含windows头文件,调用sleep函数延迟发声和打印,就可以出现有节奏的效果。一次发声只需要打印一个'\a'就可以了。
value初始值为0, 当=2时报警。
所以 是当((rate = rate_l) || (rate = rate_h) 也就是rate超出合法范围后计数两次后开始报警
之后没发现一次取反,所以应该会是周期性质的蜂鸣-暂停-蜂鸣-暂停 效果。
个人觉得,在beep=1时应该同时赋值为value=0
不然下次第一次发生超出范围就会报警。
void clock_h_l()
{
static uchar value;
if(rate != 0)
{
if((rate = rate_l) || (rate = rate_h))
{
value ++; //消除实际距离在设定距离左右变化时的干扰
if(value = 2)
{
beep = ~beep; //蜂鸣器报警
}
}
else
{
beep = 1; //取消报警
value=0;// 恢复计数
}
}else
{
beep = 1; //取消报警
value=0;// 恢复计数
}
}
K1你就作一个电源开关吧
#includereg52.h
sbit beep=P1^0; // 定义蜂鸣器
long int code table[]= // 定义发出不同频率的各个时间长度table表,因为定义
//晶振为12MHZ,所以一个周期也正好为1US。
{
2000,4000
};
long int num1,num2;
char num;
void main()
{
TMOD=0x11; //定义定时器0,1工作方式1
EA=1;ET0=1;ET1=1;
TH0=(65535-50000)/256; //装载定时器0初值,50ms为一次中断
TL0=(65535-50000)%256;
TH1=(65535-1)/256; //装载定时器1初值,1us为一次中断
TL1=(65535-1)%256;
TR0=1; //打开定时器0
while(1)
{
if(num1==2) //判断定时器0中断了2次,也就是100ms
{
TR0=0; //关闭定时器0
TR1=1; //打开定时器1
beep=0; //蜂鸣器报警
num1=0; //让num1清零,以备再次计数
}
if(num2==table[num]) //判断当时间达到第num个秒数
{
TR1=0; //关闭定时器1
TR0=1; //打开定时器0
num2=0; //让num2清零,以备再次计数
beep=1; //关闭蜂鸣器
num++; //让num循环计数
}
if(num==2)
{
num=0;
}
}
}
void T0_time()interrupt 1
{
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
num1++;
}
void T1_time()interrupt 3
{
TH1=(65535-1000)/256;
TL1=(65535-1000)%256;
num2++;
}
#include windows.h //使用windowsAPI函数Beep();
/*
BOOL Beep(
DWORD dwFreq, // sound frequency, in hertz
DWORD dwDuration // sound duration, in milliseconds
);
*/
Beep(5500,150);