当前位置:首页 > 单片机 > 单片机
[导读] 这个小程序仍然是定时器的运用,比较简单,具体的地方都在注释中注明了,参考注释。/*********************************************程序功能:MCU控制蜂鸣器演奏歌曲《祝你平安》--------------------

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


  1. /*********************************************

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

  3. ----------------------------------------------

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

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

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

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

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

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

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

  11. *********************************************/

  12. #include

  13. typedefunsignedcharuchar;

  14. #include"music.h"

  15. #defineBuzzerBIT7

  16. #defineBuzzer_PortP6OUT

  17. #defineBuzzer_DIRP6DIR

  18. ucharcounter;

  19. voidPlay_Song(void);

  20. /***************主函数****************/

  21. voidmain(void)

  22. {

  23. uchari;

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

  25. P1DIR=0XFF;P1OUT=0XFF;

  26. P2DIR=0XFF;P2OUT=0XFF;

  27. P3DIR=0XFF;P3OUT=0XFF;

  28. P4DIR=0XFF;P4OUT=0XFF;

  29. P5DIR=0XFF;P5OUT=0XFF;

  30. P6DIR=0XFF;P6OUT=0XFF;

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

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

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

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

  35. do

  36. {

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

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

  39. }

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

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

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

  43. CCTL0=CCIE;

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

  45. TACTL|=TASSEL_2+ID_3;

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

  47. Buzzer_DIR|=Buzzer;

  48. //打开全局中断

  49. _EINT();

  50. //循环演奏歌曲

  51. while(1)

  52. {

  53. Play_Song();

  54. }

  55. }

  56. /*******************************************

  57. 函数名称:TimerA_ISR

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

  59. 参数:无

  60. 返回值:无

  61. ********************************************/

  62. #pragmavector=TIMERA0_VECTOR

  63. __interruptvoidTimerA_ISR(void)

  64. {

  65. counter++;

  66. }

  67. /*******************************************

  68. 函数名称:Delay_Nms

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

  70. 参数:n--延时长度

  71. 返回值:无

  72. ********************************************/

  73. voidDelay_Nms(ucharn)

  74. {

  75. uchari,j;

  76. for(i=0;i

  77. {

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

  79. _NOP();

  80. }

  81. }

  82. /*******************************************

  83. 函数名称:Play_Song

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

  85. 参数:无

  86. 返回值:无

  87. ********************************************/

  88. voidPlay_Song(void)

  89. {

  90. ucharTemp1,Temp2;

  91. ucharaddr=0;

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

  93. while(1)

  94. {

  95. Temp1=SONG[addr++];

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

  97. {

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

  99. Delay_Nms(100);

  100. }

  101. elseif(Temp1==0x00)//歌曲结束符

  102. {

  103. return;

  104. }

  105. else

  106. {

  107. Temp2=SONG[addr++];

  108. TACTL|=MC_1;//开始计数

  109. while(1)

  110. {

  111. Buzzer_Port^=Buzzer;//电平取反

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

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

  114. {

  115. counter=0;

  116. break;

  117. }

  118. }

  119. }

  120. }

  121. }



本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

这是一个很好的时钟,有很大的片段,你可以设置每个片段的颜色和强度。有三个按钮,蜂鸣器,光传感器和RTC与备用电池。时钟通过USB C供电,具有当前时间,计时器和秒表等功能。请随意添加您自己的功能!

关键字: 蜂鸣器 光传感器 RTC

Holtek新推出专为感烟报警器应用设计的Flash MCU - BA45F25752/BA45F25762,整合双通道感烟侦测AFE、红外/蓝光LED驱动、万年历与蜂鸣器驱动等功能。相较于先前的BA45F5750/BA...

关键字: 感烟报警器 MCU 蜂鸣器

HT16K24操作电压为2.4V~5.5V,内建I²C通信接口,提供三种LCD显示与按键模式:24SEG × 4COM + 24 KEY;22SEG × 6COM + 22 KEY;20SEG × 8COM + 20 K...

关键字: LCD MCU 蜂鸣器

Holtek新推出集成感烟探测AFE、双通道LED驱动及9 V蜂鸣器驱动的32-bit Arm® Cortex®-M0+ MCU HT32L62141,采用超低功耗ULP (Ultra-Low Power) 设计,并提供...

关键字: MCU 烟探测器 蜂鸣器

这个项目是农业自动化的一个有趣的旋转:一个机器人松露嗅探器,可以自主导航一个空间,识别代表松露热点的AprilTags,并收集“松露”(用彩色球模拟)。灵感来源于现实生活中用猪和狗来定位地下的松露。

关键字: 机器人 蜂鸣器 计算机视觉

本项目将向您介绍来自Elecrow的新型1.28英寸圆形显示器,该显示器集成了ESP32C3芯片等!该项目将演示将设备固件更新到MicroPython并显示自定义消息的步骤。

关键字: 显示器 ESP32C3 蜂鸣器

把“G”分开是对吉尼斯啤酒饮用技巧的真正考验——准确地喝一口,液体的水平面要正好落在吉尼斯标志上“G”的中间。作为一个不喝酒的人,我想看看我是否能设计出一条通往成功的道路。所以,我做了一个设备,使用非接触式液体传感器和蜂...

关键字: 传感器 Arduino 蜂鸣器

在现代电子设备中,蜂鸣器作为一种能够发出声音信号的器件,被广泛应用于各种领域,如电子玩具、报警器、电子设备的提示音等。其中,有源压电式蜂鸣器以其只需接上额定直流电压即可发声的特点,受到了工程师们的青睐。那么,有源压电式蜂...

关键字: 蜂鸣器 器件 直流电压

我有很多魔方。有些很大;有些很小;有些花费了一大笔钱。两年前,我的弟弟把我的一个立方体扔在地上,毁了它,从那以后,我花了90美元升级了安全设备,以防止这种情况再次发生。但即使他没有破坏我的立方体,他也会在我展示的时候破坏...

关键字: Arduino Uno LCD 闪光灯 蜂鸣器

蜂鸣器是一种非常常用的电子元器件,广泛用于各种电子设备中的声音输出。而三极管则是一种半导体器件,具有放大和开关等功能。通过三极管的开关状态,可以驱动蜂鸣器产生声音。

关键字: 蜂鸣器 三极管
关闭