MSP430学习笔记5-利用蜂鸣器演奏音乐

发布者:Enchanted2021最新更新时间:2019-10-17 来源: eefocus关键字:MSP430  蜂鸣器  演奏音乐 手机看文章 扫描二维码
随时随地手机看文章

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

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

程序功能: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;  

                }  

            }  

        }  

    }  

}  



关键字:MSP430  蜂鸣器  演奏音乐 引用地址:MSP430学习笔记5-利用蜂鸣器演奏音乐

上一篇:MSP430学习笔记-定时器A
下一篇:MSP430F5529 生成PWM波 with CCS

推荐阅读最新更新时间:2024-11-03 23:27

MSP430单片机中的WDT研究
软件的可靠性一直是一个关键问题。任何使用软件的人都可能会经历计算机死机或程序跑飞的问题,这种情况在嵌入式系统中也同样存在。由于单片机的抗干扰能力有限,在工业现场的仪器仪表中,常会由于电压不稳、电弧干扰等造成死机。在水表、电表等无人看守的情况下,也会因系统遭受干扰而无法重启。为了保证系统在干扰后能自动恢复正常,看门狗定时器(Watchdog Timer)的利用是很有价值的。 1 看门狗的作用 看门狗定时器是一个计数器,基本功能是在发生软件问题和程序跑飞后使系统重新启动。看门狗计数器正常工作时自动计数,程序流程定期将其复位清零,如果系统在某处卡死或跑飞,该定时器将溢出,并将进入中断。在定时器中断中执行一些复位操作,使系统恢复正常的
[单片机]
<font color='red'>MSP430</font>单片机中的WDT研究
MSP430单片机的复位
MSP430的复位信号有2种:上电复位信号(POR)、上电清除信号(PUC)。还有能够触发POR和PUC的信号:5种来在看门狗,1种来自复位管脚,1种来自写FLASH键值出现错误所产生的信号。 POR信号只在2种情况下发生:(1)微处理上电;(2)RST/NMI管脚上产生低电平时系统复位。 PUC信号产生的条件:(1)POR信号产生;(2)看门狗有效时,看门狗定时器溢出;(3)写看门狗定时器安全键值出现错误;(4)写FLASH存储器安全键值出现错误。 POR和PUC两者的关系:POR信号的产生会导致系统复位并产生PUC信号。而PUC信号不会引起POR信号的产生。 无论是POR信号还是PUC信号触发的复位,都会使MSP430
[单片机]
MSP430开发环境MSPGCC + Codeblocks
我比较喜欢简单小巧的东西,所以官方的CCS不太适合我,IAR又要破解,所以选择这个平台作为MSP430的开发环境。 codeblocks本身就集成MSPGCC编译器的模板,但是新版的MSPGCC比起旧版的似乎有点不一样,所以需要做一些配置的工作。 理论上,搭建方法也适用于linux系统,我个人还没在linux下搭建。 相比Eclipse,codeblocks显得很小巧(不想要MinGW的话也不到30M),无需JAVA环境,运行速度也很快,支持搭建多种开发环境,是我摆弄东西的首选平台。至于它的其它优点,自行google吧。 我的mspgcc是放在D:mspgcc目录下,TI官方的烧录软件我放在 D:mspgccflash_fet
[单片机]
<font color='red'>MSP430</font>开发环境MSPGCC + Codeblocks
基于MSP430FW427的无磁水表设计方案精编
1 MSP430FW42x单片机介绍 MSP430FW42x系列单片机是TI公司针对电子式流量与旋转运动检测最新开发的专用MCU芯片,它将超低功耗MCU、旋转扫描接口(SCAN IF)和液晶显示LCD驱动模块完美地结合在一起。该器件的超低功耗结构和流量检测模块不仅延长了电池的寿命,同时还提高了仪表的精度与性能。MSP430FW42x的典型应用包括热量仪表、热水和冷水仪表、气体仪表和工业流量计、风力计以及其他旋转检测应用。 2 流量测量的原理 2.1 基本原理 一个由叶轮或螺旋齿轮构成的机械装置把流体流动转换为转动,这种转换能够实现对流体流量的测量。 把一个谐振回路中的电感置于叶轮的上方可以检测到叶轮的转动,叶轮
[单片机]
基于<font color='red'>MSP430</font>FW427的无磁水表设计方案精编
MSP430学习笔记11-八路ADC采集诺基亚5110液晶显示
本程序采用的是八路ADC单次采集的模式,根据配置,在单次的模式下转换完成后ADC12SC会自动复位,因此需要在循环中进行ADC12CTL0 |= ADC12SC;操作,而如果配置成连续采集的模式,只需要在程序开始将ADC12SC置位一次就可以,但是就需要注意当进入中断后如果不手动禁止中断会一直停留在循环中,因此在采集到需要的数据后需要将ADC关闭或者中断使能禁止才能重新回到主函数,这一点需要注意。 八路单次采集的程序如下: /*************************************** 八路AD多路单次采集基亚5110液晶显示 采集模式:多路单次 **************************
[单片机]
2.0 MSP430的IO配置
MSP430单片机一般有多组IO口,P1、P2、P3、P4、P5和P6等。在单片机所有的端口都有控制输入输出方向和进行输入、输出的能力。其中P1、P2组端口具有中断寄存器,能够响应外部中断,大部分端口拥有第二功能。每一个端口都有PxDIR(信号方向)、PxIN(输入)、PxOUT(输出)和PxSEL(功能选择)4个寄存器。P1、P2 可以配置为输入信号上升沿或者下降沿触发中断,但固定的电平不会引起中断,中断所使用的寄存器为:PxIE(中断使能)、PxIES(中断触发沿)、PxIFG(中断标志)。还有一个寄存器PxREN,这个寄存器主要是配置单片机内部的上下拉电阻,注意,早期的单片机并没有内部上下拉电阻。 PxDIR:信号方向控制
[单片机]
2.0 <font color='red'>MSP430</font>的IO配置
基于MSP430系列超低功耗单片机的多参数环境监测仪
本文以智能建筑为应用背景,介绍一种通用性很强的便携式多参数环境监测仪。它以MSP430F437超低功耗单片机为核心,配置新式的微型低功耗传感器,实现了建筑物内温度、湿度、光照度、有害气体浓度等参数的采集处理、存储、通信等功能。文中详细阐明了传感器的选取、硬件结构、软件流程等相关技术,并指出该仪器的特点和优势。 1 传感器的选取 传感器是决定监测仪精度的关键元件。传感器的选择主要依据工作环境、测量精度、线性度、互换性、灵敏度、响应速度、稳定性、功耗、体积大小以及易于与MCU接口等。本监测仪选用的各类传感器分别为:集成温度传感器T MP3 5、集成湿度传感器HM1500、热线型半导体气敏传感器MR511以及集成光照度传
[单片机]
基于<font color='red'>MSP430</font>系列超低功耗单片机的多参数环境监测仪
基于MSP430的无线传感器网络温度节点设计
   O 引言   无线传感器网络由于蕴藏着巨大的科学意义和使用价值,己受到越来越多学术部门、军事部门和工业部门的青睐。随着社会经济的发展,在很多情况下需要对环境的温湿度进行检测,并加以控制,特别是对污染严重、自然条件恶劣、人员难以到达的地方。本文利用温湿度传感器DSl8820使用较为简单,测量精度较高等优点,同时结合MSP430F2013的强大功能以及低功耗的特点,设计一种基于温度无线传感器网络监控系统中的节点,用来对环境的温度进行监控。    1 无线传感器网络结构   无线传感器网络是由部署在监测区域内大量的廉价小型或微型无线传感器网络节点组成,通过无线通信方式形成一个多跳的自组织智能网络系统。其应用前景非常广阔,现正
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved