我想问下单片机峰鸣器不够响c 语言程序怎么改频率?
{
TH0=(65535-50000)/256; //??×°3??μ
TL0=(65535-50000)%256;
flag++;
if(flag == 20)
{
if(reduce_flag == FALSE)
{
num ++;
if(num == 9)
reduce_flag = TRUE;
}
else
{
num --;
if(num == 0)
reduce_flag = FALSE;
}
flag = 0;
}
}
void FM()
{
if(num==9)
{
spea=0;
delayms(1);
spea=1;
delayms(1);
}
}
你中断后面的语句是干嘛的呢?感觉你写复杂了。
void T0_time() interrupt 1 //?¨ê±?÷?D??
{
TH0=(65535-50000)/256; //??×°3??μ
TL0=(65535-50000)%256;
flag++;
}
void FM()
{
if(flag>=temp)
{
flag=0;
spea=!spea;
}
}
改temp的值就可以改变频率
2.5KHz无源蜂鸣器驱动程序,改变定时器重载值就改变频率。void Timer0Init() //200微秒@11.0592MHz
{
TMOD = 0x02; //设置定时器8位自动重载模式
TL0 = 0x48; //设置定时初值
TH0 = 0x48; //设置定时重载值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
EA=1; //开总中断
ET0=1; //开定时器0中断
}
void timer0() interrupt 1 //中断服务程序
{
static uint count; //中断计数变量
if(Buzzer_sign==1) //如果蜂鸣器使能标志1
{
count++; //定时器中断变量自+1
Buzzer=~Buzzer; //蜂鸣器端口取反
if(count>=1000) //持续鸣叫0.2秒
{
count=0; //计数清0
Buzzer_sign=0; //蜂鸣器使能标志清0
Buzzer=1; //蜂鸣器端口清0
}
}
}
谢了。大神 看到你回复了很多帖。活雷锋
谢了。大神 看到你回复了很多帖。活雷锋
没有啦,一起学习。
中断里就是频率2.5KHz无源蜂鸣器的驱动程序,只要有一个使能信号蜂鸣器就响一声“滴”。而且每次只占用几微秒,不影响主程序运行。有源蜂鸣器的频率是生产厂家固定的频率,不好改的。
受教了,我是刚开始学习单片机的菜鸟。以后希望多多帮助