微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 我想问下单片机峰鸣器不够响c 语言程序怎么改频率?

我想问下单片机峰鸣器不够响c 语言程序怎么改频率?

时间:10-02 整理:3721RD 点击:
void T0_time() interrupt 1         //?¨ê±?÷?D??
{
         
         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无源蜂鸣器的驱动程序,只要有一个使能信号蜂鸣器就响一声“滴”。而且每次只占用几微秒,不影响主程序运行。有源蜂鸣器的频率是生产厂家固定的频率,不好改的。

受教了,我是刚开始学习单片机的菜鸟。以后希望多多帮助

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top