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

/********************************************* 程序功能:MCU控制蜂鸣器演奏歌曲《祝你平安》 ---------------------------------------------- 拨码开关设置:将BUZZER位拨至ON,其余位拨至OFF 测试说明:聆听蜂鸣器“唱出”的乐曲 既然是演奏乐曲对于一个音符应该包括两个部分 一是声调 二是持续时间,在这个程序中声调是用简单的 延时-电平翻转来实现的,改变了延时的时间就改变了 声调,而时间是通过计数比较来实现的,当计数值相等时 就跳出循环演奏下一个音符。 *********************************************/ #include <msp430x14x.h> 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; } } } } }

转载于:https://www.cnblogs.com/emouse/archive/2010/07/22/2198220.html

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

  1. 数据结构学习笔记:利用栈实现进制转换

    数据结构学习笔记:利用栈实现进制转换 一.除基倒取余法示意图 二.编写十进制转换成二进制Python程序 1.源代码 2.运行结果 其实Python提供了一

  2. 数据结构学习笔记:利用Python列表实现栈结构

    数据结构学习笔记:利用Python列表实现栈结构 利用Python列表实现栈结构.有两种实现方式: 1.将列表的末尾(rear)作为栈顶(top) 2.将列表的前端(front)作为栈顶(top) 一 ...

  3. Python学习笔记:利用timeit计算函数调用耗时

    Python学习笔记:利用timeit计算函数调用耗时 一.timeit模块简介 Timer对象包含两个参数:第一个参数是你想要计时的Python语句,第二个参数运行一次来建立测试. 默认情况time ...

  4. Python学习笔记:利用控制器跳转不同页面

    Python学习笔记:利用控制器跳转不同页面 程序需要用到数据库student里的学生表t_student 1.创建python项目demo02 2.创建页面index.html 3.创建控制器con ...

  5. 鸿蒙开发板HI3861 利用蜂鸣器播放音乐 open Harmony1.0.0(附cmsis_os2.h源码)

    本文利用鸿蒙开发板HI3861在鸿蒙1.0.0源码下利用蜂鸣器播放音乐. pwm_buz.c #include <stdio.h> #include "ohos_init.h&q ...

  6. Polyworks脚本开发学习笔记(四)-利用FILE IMPORT进行数据导入及对齐

    Polyworks脚本开发学习笔记(四)-利用FILE IMPORT进行数据导入及对齐 导入参考及数据 FILE IMPORT_REFERENCE导入参考的CAD文件如igs格式 括号内参数分别为(导 ...

  7. arduino蜂鸣器音乐代码_STM32驱动蜂鸣器演奏音乐“你笑起来真好看”

    有源蜂鸣器与无源蜂鸣器的区别 这里的"源"不是指电源,而是指震荡源. 内部自带震荡源的为有源蜂鸣器,给电就能响,但是响的频率是固定的,即响的声音是固定的. 内部没有震荡源的为无源蜂 ...

  8. GEE学习笔记一 利用GEE获取Sentinel-2 1C与2A级影像

    GEE学习笔记一 利用GEE获取Sentinel-2 1C与2A级影像 博主最近在学习利用GEE获取Sentinel-2影像时,发现有两种不同的数据集,下面记录一下利用GEE获取两种数据集的方法. S ...

  9. python气象数据可视化学习笔记6——利用python地图库cnmaps绘制地图填色图并白化

    文章目录 1. 效果图 2. cnmaps简介及安装 2.1 写在前面 2.2 cnmaps简介和安装 3. 导入库 4. 定义绘图函数 4.1 使用get_adm_maps返回地图边界 4.2 ax ...

最新文章

  1. 河南城建学院linux期末试题,河南城建学院09-10(上)期末试题.ppt
  2. Java jdbctemplate赋值_Spring 之 Spring JdbcTemplate的使用
  3. 用Python绘制一套“会跳舞”的动态图形给你看看
  4. 7-2 数组元素循环右移问题 (40 分)
  5. C语言代码输出星期几,C语言程序设计: 输入年月日 然后输出是星期几
  6. 利用条件运算符的嵌套来完成此题:学习成绩 =90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。...
  7. ASP.NET MVC 后台中 设置 js提示
  8. CSS布局中应用BFC的例子
  9. [转载]windows 7 IIS 7.5 ASP.Net 文件上传大小限制
  10. 中国指数基金与ETF价格战简史(1)
  11. 现在很火爆的外卖返利小程序源码免费分享一套源码
  12. AB测试平台的工程实现
  13. 个人关于PAT的认识心得和体会
  14. openwrt软路由实现ipv6上网配置
  15. 信息论 | Shannon编码MATLAB实现
  16. 数据库每分钟运行监控SQL
  17. 陆奇:开源开发是更优越的开发方式
  18. 武金龙老师的教导(第9小组)
  19. 8种食品,塑身美体过程中的你不要空腹食用
  20. Lease房屋租赁系统02

热门文章

  1. 详细讲解SQL Server索引的性能问题
  2. python isinstance函数判断object的类型
  3. 我都惊了这么多年pytorch还可以这么用
  4. MySQL安装失败问题汇总
  5. Eclipse_Eclipse下配置Maven
  6. HDU 5836 Rubik's Cube BFS
  7. 【Python】Numpy扩充数组函数之repeat和tile用法
  8. 简单三步-实现dede站内搜索功能
  9. 从线上教育的如火如荼,反思传统培训行业的未来发展
  10. Power Shell03 在PowerShell 3.0重新启动计算机指令