历史上的今天
返回首页

历史上的今天

今天是:2024年10月17日(星期四)

正在发生

2019年10月17日 | MSP430学习笔记5-利用蜂鸣器演奏音乐

2019-10-17 来源:eefocus

这个小程序仍然是定时器的运用,比较简单,具体的地方都在注释中注明了,参考注释。

/********************************************* 

程序功能:MCU控制蜂鸣器演奏歌曲《祝你平安》 

---------------------------------------------- 

拨码开关设置:将BUZZER位拨至ON,其余位拨至OFF 

测试说明:聆听蜂鸣器“唱出”的乐曲 

 

既然是演奏乐曲对于一个音符应该包括两个部分 

一是声调 二是持续时间,在这个程序中声调是用简单的 

延时-电平翻转来实现的,改变了延时的时间就改变了 

声调,而时间是通过计数比较来实现的,当计数值相等时 

就跳出循环演奏下一个音符。 

*********************************************/  

#include    

  

typedef unsigned char uchar;  

  

#include  "music.h"  

  

#define   Buzzer        BIT7  

#define   Buzzer_Port   P6OUT  

#define   Buzzer_DIR    P6DIR  

  

uchar counter;  

void Play_Song(void);  

  

/***************主函数****************/  

void main(void)  

{  

    uchar i;  

      

    /*下面六行程序关闭所有的IO口*/  

    P1DIR = 0XFF;P1OUT = 0XFF;  

    P2DIR = 0XFF;P2OUT = 0XFF;  

    P3DIR = 0XFF;P3OUT = 0XFF;  

    P4DIR = 0XFF;P4OUT = 0XFF;  

    P5DIR = 0XFF;P5OUT = 0XFF;  

    P6DIR = 0XFF;P6OUT = 0XFF;  

    P6DIR |= BIT2;P6OUT |= BIT2;         //关闭电平转换  

       

    WDTCTL = WDTPW + WDTHOLD;                 //关闭看门狗  

    /*------选择系统主时钟为8MHz-------*/  

    BCSCTL1 &= ~XT2OFF;                       // 打开XT2高频晶体振荡器  

    do  

    {  

        IFG1 &= ~OFIFG;                       //清除晶振失败标志  

        for (i = 0xFF; i > 0; i--);           // 等待8MHz晶体起振  

    }  

    while ((IFG1 & OFIFG));                   // 晶振失效标志仍然存在?  

    BCSCTL2 |= SELM_2 + SELS;                 //主时钟和从时钟都选择高频晶振  

      

      

    //设置定时器A每10ms中断一次  

    CCTL0 = CCIE;  

    CCR0 = 10000;//改变这个值就改变了演奏的速度  

    TACTL |= TASSEL_2 + ID_3;   

    //设置控制蜂鸣器的IO方向为输出  

    Buzzer_DIR |= Buzzer;  

    //打开全局中断  

    _EINT();  

    //循环演奏歌曲  

    while(1)  

    {  

        Play_Song();  

    }  

}  

  

/******************************************* 

函数名称:TimerA_ISR 

功    能:定时器A的中断服务函数 

参    数:无 

返回值  :无 

********************************************/  

#pragma vector = TIMERA0_VECTOR  

__interrupt void TimerA_ISR(void)  

{  

    counter++;  

}  

/******************************************* 

函数名称:Delay_Nms 

功    能:延时N个ms的函数              ps:不知道这个地方怎么算出来的是延时毫秒 

参    数:n--延时长度 

返回值  :无 

********************************************/  

void Delay_Nms(uchar n)  

{  

    uchar i,j;  

      

    for( i = 0;i < n; i++ )  

    {  

        for( j = 0;j < 3;j++ )  

          _NOP();  

    }  

}  

/******************************************* 

函数名称:Play_Song 

功    能:播放《祝你平安》的乐曲 

参    数:无 

返回值  :无 

********************************************/  

void Play_Song(void)  

{  

    uchar Temp1,Temp2;  

    uchar addr = 0;  

      

    counter = 0; //中断计数器清0  

    while(1)  

    {  

        Temp1 = SONG[addr++];  

        if ( Temp1 == 0xFF )        //休止符  

        {  

            TACTL &=~MC_1;          //停止计数  

            Delay_Nms(100);  

        }  

        else if ( Temp1 == 0x00 )   //歌曲结束符  

        {  

            return;  

        }  

        else  

        {  

            Temp2 = SONG[addr++];  

            TACTL |=MC_1;           //开始计数  

            while(1)  

            {  

                Buzzer_Port ^= Buzzer;//电平取反  

                Delay_Nms(Temp1);//Temp1的值决定了延时的长短,也决定了声音的频率  

                if ( Temp2 == counter )//决定了音调持续的时间,计数时间到时就跳出循环演奏下一个。  

                {  

                    counter = 0;  

                    break;  

                }  

            }  

        }  

    }  

}  



推荐阅读

史海拾趣

Emerging Display Technolgies公司的发展小趣事

另一家新兴显示技术公司,专注于透明显示技术的研发。他们通过优化显示材料的透光性和显示效果,成功研发出了高透明度的显示屏。这种显示屏可以像玻璃一样透明,同时又能显示图像和文字。这一技术的创新,为商业广告、智能家居、公共交通等领域带来了全新的视觉体验。

长江连接器(CJT)公司的发展小趣事

长江连接器一直将研发实力和技术创新作为公司的核心竞争力。公司拥有一支高素质的研发团队,不断投入资源进行新技术和新产品的研发。通过引进先进的研发设备和技术手段,长江连接器成功研发出了一系列高品质、高性能的连接器产品,满足了市场的多样化需求。同时,公司还积极申请各类专利和知识产权,保护自己的技术成果。

艾为(AWINIC)公司的发展小趣事

艾为电子自成立以来,一直致力于技术研发和产品创新。公司研发团队不断攻克技术难题,推出了一系列具有竞争力的产品。其中,音频功放芯片作为公司的主打产品之一,凭借出色的性能和稳定的品质,赢得了市场的广泛认可。此外,艾为还在信号链、电源管理等领域取得了显著的技术突破,为公司的持续发展奠定了坚实的基础。

中微股份(Cmsemicon)公司的发展小趣事

作为一家以技术创新为核心竞争力的企业,中微股份(Cmsemicon)始终坚持以市场需求为导向,持续推动技术创新和产品升级。近年来,公司在刻蚀设备领域取得了一系列重要突破,包括成功研制出针对先进逻辑和存储器件制造中关键刻蚀工艺的高端产品等。这些技术成果不仅提升了公司的核心竞争力,也为行业的发展做出了积极贡献。

CYMBET公司的发展小趣事

CYMBET公司成立于2000年,专注于微电子系统固态储能解决方案的研发与生产。在早期,公司就凭借其创新技术——可充电固态电池芯片(EnerChip)在行业中崭露头角。这种电池芯片使用标准半导体集成电路工艺和独特的构造技术,提供了环保、生物相容的嵌入式电源功能。EnerChip的推出不仅打破了传统电池的局限,还为医疗、传感器、RFID、工业控制等领域带来了革命性的变化。

台湾富致(FUZETEC)公司的发展小趣事

Futaba Electric最初起源于收音机收讯真空管的制造,但在1970年,公司做出了重大的战略调整,决定结束真空管业务,专注于萤光表示管(VFD)的生产。这一决策标志着公司从传统电子元件向高级显示技术的转型。随着VFD技术的不断发展,Futaba凭借其在清晰度、视角和亮度方面的卓越表现,逐渐在全球VFD市场中占据领先地位,目前市场份额超过60%。这一转型不仅使Futaba成为VFD技术的领导者,还为其在汽车仪表盘和抬头显示器等领域的广泛应用奠定了基础。

问答坊 | AI 解惑

问一下

如果感应头不工作是什么原因啊,工作的发光二极管亮,但是感应头不工作。谁知道有那些原因啊 程序好使,只是从硬件上找。…

查看全部问答>

Linux2.6完全 移植教程,基于TQ2440开发板

开发板移植好教程,入门者的福音 还在为Linux移植入门而烦恼吗?还在为Linux驱动而头痛吗?还在为没有一本从入门到真正移植的好书苦闷吗? 现在您有一个好的选择,天嵌科技推出一部和开发板完美结合的教程:从下载源码到将内核移植适合于TQ2440开 ...…

查看全部问答>

51和fpga通信

那个知道51怎么和FPGA通信啊?高手指点下啊!!…

查看全部问答>

ce ActiveSync连接的问题

ActiveSync通过USB接口连接设备一直挺好的,可今天我拔usb线断开连接啊,机子死机了,重启过后就不行了,ce设备起来后无法自动连上,我只好手动运行repllop.exe进行连接,连上后,下载程序,运行很慢。我卸载重装都不行,换USB接口也不行,请问我改 ...…

查看全部问答>

at89c51芯片加上cd4511bcn做一个计数器出错,请教下挫在那里?

at89c51芯片的p0管脚作为2个四位bcd码的输出到cd4511bcn中去,然后通过cd4511bcn输出到2个8段显示器中,但是总是没有任何反应,请各位帮忙看看:以下是代码: -+         COUNT        EQU     ...…

查看全部问答>

wince下怎么显示图像阴影

填充圆内的颜色, wince里不能用CreateHatchBrush显示各种阴影,那有什么其他函数能显示呢? 画直线, wince里不能用CreatePen的另一种函数,那如果我想画各种线该怎么做呢?比如点线…

查看全部问答>

诺基亚卖了Qt,未来还会卖什么?

  已经决定和微软合作开发Windows Phone手机的诺基亚,就把原来收购的 Qt放到了角落。据国外媒体报道,诺基亚决定将QT商业授权和服务业务出售给一家芬兰Digia公司,Digia计划雇用19名的诺基亚原来QT 相关雇员。        ...…

查看全部问答>

请大哥看看我的这个问题

我的MCU与上位机通信,同时需要处理一些事务,但当处理某些事务时是不允许上位机通信中断的,这样上位机通信有些时候就不通,当比较严重的时候是无法接受的,这是不是就要用到多任务操作系统了,专门用一个任务来与上位机中断通信,另外的任务来处 ...…

查看全部问答>

开关电源讲议

开关电源讲议,对初学者很有帮助的! [ 本帖最后由 aishuang 于 2011-7-17 07:43 编辑 ]…

查看全部问答>