历史上的今天
今天是:2025年01月25日(星期六)
2021年01月25日 | MSP430G2553单片机——利用蜂鸣器播放一首歌
2021-01-25 来源:eefocus
利用MSP430G2553单片机和无源蜂鸣器播放一首歌,下面给出两种方案。
方案一:
播放《两只老虎》
#include //音乐播放 // by wys void P_Onclick(int n,int j); //7个基本音的子函数 void jby_1(int s); void jby_2(int s); void jby_3(int s); void jby_4(int s); void jby_5(int s); void jby_6(int s); void jby_7(int s); void main(void) { WDTCTL = WDTPW + WDTHOLD; if(CALBC1_1MHZ==0xFF||CALDCO_1MHZ==0xFF) { while(1); } BCSCTL1=CALBC1_1MHZ; DCOCTL=CALDCO_1MHZ; //校准时钟频率1MHZ //按照《两只老虎》的简谱对7个基本音进行调用 jby_1(400); jby_2(400); jby_3(400); jby_1(400); _delay_cycles(3000); //每个完整的拍后接一个延时 jby_1(400); jby_2(400); jby_3(400); jby_1(400); _delay_cycles(3000); jby_3(400); jby_4(400); jby_5(800); _delay_cycles(3000); jby_3(400); jby_4(400); jby_5(800); _delay_cycles(3000); jby_5(200); jby_6(200); jby_5(200); jby_4(200); jby_3(400); jby_1(400); _delay_cycles(3000); jby_5(300); jby_6(100); jby_5(300); jby_4(100); jby_3(400); jby_1(400); _delay_cycles(3000); jby_2(400); jby_5(400); jby_1(800); _delay_cycles(3000); jby_2(400); jby_5(400); jby_1(800); } //输入每个音调的频率对应的n和持续时间j void P_Onclick(int n,int j) { P1DIR |= BIT6; ///延时每个音调的时长 for ( ;j>0;j--) { volatile unsigned int i; P1OUT ^= BIT6; i = n; do { i--; // 自减操作 _NOP(); // 空操作 }while (i != 0); // 标准的do……while语句,注意别漏掉了括号后面的分号 } } // do void jby_1(int s) { P_Onclick(95,s); } //re void jby_2(int s) { P_Onclick(85,s); } //mi void jby_3(int s) { P_Onclick(75,s); } //fa void jby_4(int s) { P_Onclick(71,s); } //sol void jby_5(int s) { P_Onclick(63,s); } //la void jby_6(int s) { P_Onclick(56,s); } //si void jby_7(int s) { P_Onclick(50,s); } 方案二: 循环播放7个基本音 ///by:wys #include "MSP430G2553.h" //------------在main函数前提前声明函数------------- void TA0_init(int n); //定时器A0的初始化函数 //定时器A1的初始化函数 void main(void) { WDTCTL = WDTPW + WDTHOLD; // 关狗 BCSCTL1 = CALBC1_1MHZ; //设置DCO频率为1MHz,将作为MCLK和SMCLK使用 DCOCTL = CALDCO_1MHZ; while(1){ TA0_init(950); __delay_cycles(1000000); TA0_init(850); __delay_cycles(1000000); TA0_init(750); __delay_cycles(1000000); TA0_init(710); __delay_cycles(1000000); TA0_init(630); __delay_cycles(1000000); TA0_init(560); __delay_cycles(1000000); TA0_init(500); __delay_cycles(1000000); } } //***************************************************************************************************** void TA0_init(int n) { P1DIR |= BIT2; //设置P1.2为音频输出 P1SEL |= BIT2; TA0CCR0 = n; //设置PWM周期 TA0CCTL1 = OUTMOD_7; //CCR1工作在resett模式 TA0CCR1 = n/2; //设置PWM占空比512/1024=0.5 TA0CTL = TASSEL_2 + MC_1; //Timer_ A的时钟源为SMCLK,工作模式为Up模式 } //*****************************************************************************************************
史海拾趣
|
二、汽车电器与电子设备课程设计题目由指导教师指定,设计内容为: 1、电子调压器的设计,参考《汽车电器与电子控制技术》教科书图1-42、1-45电路 三、课程设计内容要求 本课程设计要求同学首先根据课题查找有关资料,它包括各种汽车维修技术手册 ...… 查看全部问答> |
|
在s3c2410开发板上,测试SD卡写块操作,就是把内存缓冲区里的数据写到SD卡数据寄存器里,现在遇到一个问题,就是在写之前,有一个判断FIFO是否满的语句,如下所示,可是这一句怎么都执行不 ...… 查看全部问答> |
|
VC移植到EVC的通讯,connect过不去,不知为何,希望大家帮下新人 我在EVC下搭建客户端,现在在做TCP的通讯 本来觉得移植VC的就行,编译执行没有错误,但是模拟器会停止响应,跟踪调试也会卡在connect处 不知道为何 [code] SOCKADDR_IN Tsockaddr; T ...… 查看全部问答> |
|
试图使用DeviceIoControl向过滤驱动发送控制代码。 源代码如下: #define START_FILTER CTL_CODE(FILE_DEVICE_CD_ROM_FILE_SYSTEM,XD_CTL_CODE_READONLY,METHOD_BUFFERED,FILE_ANY_ACCESS) #define STOP_FILTER CTL_CODE(FILE_DEVICE_CD_ROM_FIL ...… 查看全部问答> |
|
各位大侠好,现在定制好了带ddraw的wince6.0中文模拟器了!可是创建的ddraw程序去无法运行!而该ddraw程序在板子上跑是正常的!由于板子现在要用。我这边无法测试!所以想到定制一个这样能够调试ddraw程序的模拟器! 现在问题:创建ddraw失败,不知 ...… 查看全部问答> |
|
编译生成的nboot.bin nboot.nb0 sboot.bin sboot.nb0文件怎么用。我知道一个是串口一个是网口下载的,但是我的开发环境需要用串口输出调试信息,用usb下载该怎么弄?也支持网口但是还没试过。 我的开发板上有一个vivi的bootloader跟上边的这两个有 ...… 查看全部问答> |




