打印

蜂鸣器不同频率的程序,大家帮我看一下,有没更好的写法

[复制链接]
1962|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhouwupingboy|  楼主 | 2011-1-27 15:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar tt0,tt1,num,aa;
sbit feng=P2^3;
uchar code table[]={0x01,0x02,0x03,
0x04,0x05,0x06,0x07,0x08,0x09,0x50};
void init()
{
TMOD=0x11;
TH1=(65535-50000)/256;
TL1=(65535-50000)%256;
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
EA=1;
ET0=1;
ET1=1;
TR0=1;
TR1=1;
}
void main()
{
init();
while(1)
{
   if(tt1>3)
    {
     tt1=0;
     for(num=0;num<8;num++)
       aa=table[num];
     if(num==8)  
     num=0;
    }
   else   
    {     
     if(tt0==aa)
      feng=0;
     if(tt0==2*aa)
      {
       tt0=0;
       feng=1;
      }
  }
}
}
void timer0() interrupt 1
{
TH0=(65535-5000)/256;
TL0=(65535-5000)%256;
tt0++;
}
void timer1() interrupt 3
{
TH1=(65535-50000)/256;
TL1=(65535-50000)%256;
tt1++;
}

相关帖子

沙发
zhouwupingboy|  楼主 | 2011-1-27 15:41 | 只看该作者
每隔300ms,蜂鸣器以不同的频响。
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar tt0,tt1,num,aa;
sbit feng=P2^3;
uchar code table[]={0x01,0x02,0x03,
0x04,0x05,0x06,0x07,0x08,0x09,0x50};
void init()                 //初始化函数
{
        TMOD=0x11;
        TH1=(65535-50000)/256;
        TL1=(65535-50000)%256;
        TH0=(65535-50000)/256;
        TL0=(65535-50000)%256;
        EA=1;
        ET0=1;
        ET1=1;
        TR0=1;
        TR1=1;
}
void main()
{
        init();
        while(1)
        {       
                        if(tt1>6)                     每隔300ms进入
                                {
                                        tt1=0;
                                        for(num=0;num<8;num++)
                                          aa=table[num];
                                        if(num==8)        
                                        num=0;
                                }
                        else                                       不同的频率
                                {                                       
                                        if(tt0==aa)
                                                feng=0;
                                        if(tt0==2*aa)
                                                {
                                                        tt0=0;
                                                        feng=1;
                                                }
                }       
        }
}
void timer0() interrupt 1      //定时器0
{
        TH0=(65535-5000)/256;
        TL0=(65535-5000)%256;
        tt0++;       
}
void timer1() interrupt 3     //定时器1
{
        TH1=(65535-50000)/256;
        TL1=(65535-50000)%256;
        tt1++;

}

使用特权

评论回复
板凳
zhouwupingboy|  楼主 | 2011-1-27 15:42 | 只看该作者
为了方便交流,注释了一下

使用特权

评论回复
地板
coody| | 2011-1-27 17:10 | 只看该作者
也可以用DDS的原理,但是要开比较快的定时中断,比如开个32768HZ的中断,则可以得到0~4KHZ的频率,1HZ步进

使用特权

评论回复
5
fasser| | 2011-1-27 21:51 | 只看该作者
是C程  我不是太懂  能标注是每步的注释吗  谢谢楼主

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

39

主题

160

帖子

0

粉丝