蜂鸣器播放DOREMI+普中51单片机+江科大自化协

发布时间:2024-08-08  

现象


在无源蜂鸣器上循环演奏低音“DO、RE、MI、FA、SO、LA、SI”这7个音调。


参考程序


1 主函数


#include

#include "delayms.h"

#include "timer0.h"


sbit Buzzer = P2^5;


//音调与频率对照表,低中高:1,1#,2,2#,3,4,4#,5,5#,6,6#,7

//unsigned int FreqTable[]={

//    63628,63731,63835,63928,64021,64103,64185,64260,64331,64400,64463,64528,

//    64580,64633,64684,64732,64777,64820,64860,64898,64934,64968,65000,65030,

//    65058,65085,65110,65134,65157,65178,65198,65217,65235,65252,65268,65283,

//};


//音调与频率对照表,低中高:1,2,3,4,5,6,7

unsigned int FreqTable[]={

    63628,63835,64021,64103,64260,64400,64528,

    64580,64684,64777,64820,64898,64968,65030,

    65058,65110,65157,65178,65217,65252,65283,

};


unsigned char FreqSelect;


void main()

{

    Timer0Init( );

    while(1)

    {

        if(FreqSelect>19)

            FreqSelect = 0;

        else

            FreqSelect++;

        delayms(500);

    }

}


//定时器中断函数

void timer0_routine() interrupt 1

{

    TL0 = FreqTable[FreqSelect]%256;

    TH0 = FreqTable[FreqSelect]/256;

    Buzzer = !Buzzer;

}


2 延时函数


#ifndef _delayms_h_

#define _delayms_h_


void delayms(unsigned int xms);


#endif


#include


void delayms(unsigned int xms)        //@11.0592MHz

{

    unsigned char i, j;

    while(xms--)

    {

        _nop_();

        i = 2;

        j = 199;

        do

        {

            while (--j);

        } while (--i);

    }

}


3 定时器函数


#ifndef _timer0_h_

#define _timer0_h_


void Timer0Init(void);


#endif


#include


/**

  * @brief  定时器0初始化,1毫秒@11.0592MHz

  * @param  无

  * @retval 无

  */

void Timer0Init(void)        //1毫秒@11.0592MHz

{

    TMOD &= 0xF0;        //设置定时器模式

    TMOD |= 0x01;        //设置定时器模式

    TL0 = 0x66;            //设置定时初始值

    TH0 = 0xFC;            //设置定时初始值

    TF0 = 0;                //清除TF0标志

    TR0 = 1;                //定时器0开始计时

    ET0 = 1;                //打开定时器0中断

    EA  = 1;            //打开总中断开关

    PT0 = 0;                //设置定时器0中断优先级

}


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>