当前位置:首页 > 单片机 > 单片机
[导读] 这个小程序仍然是定时器的运用,比较简单,具体的地方都在注释中注明了,参考注释。/*********************************************程序功能: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. }



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

电磁式蜂鸣器是蜂鸣器的一种,区别于压电式蜂鸣器,电磁式蜂鸣器是利用电磁线圈对蜂鸣片的作用来发声的电子响讯器,用来给电子产品作发声器件。

关键字: 电磁 蜂鸣器 响讯器

蜂鸣器是一种发声设备,可以将音频信号转换为声音信号。通常由直流电压供电。它广泛用作警报器,计算机,打印机和其他电子产品中的声音设备。

关键字: 蜂鸣器 计算机 打印机

大家要了解有源和无源这里的“源”不是指电源,而是指震荡源。也就是说,有源蜂鸣器内部带震荡源,所以只要一通电就会叫。而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。

关键字: 有源 无源 蜂鸣器 震荡源

蜂鸣器也叫压电陶瓷蜂鸣片,是压电陶瓷中应用最广的产品之一。

关键字: 蜂鸣器 极性 压电陶瓷蜂鸣片

蜂鸣器的作用 蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。

关键字: 蜂鸣器 复印机 报警器

每当看到电影里美女DJ打碟时的迷人模样,小编也在想象如果自己在打碟台上是否也能散发出这般魅力?其实,音乐就像一种语言,每个人都有自己的理解,但却很少有人能够流利地表达出这种语言。不过,此次介绍到的ROLI BLOCKS,...

关键字: 音乐 电影 电子

摘要:GSM模块是指具有短信发送、语音通话以及数据传输等基本通信功能的功能模块,目前广泛应用于电力、建筑、水务等领域。现设计了一款基于51单片机和GSM模块的防火防盗报警装置,该装置主要由51单片机、人体检测模块、烟雾检...

关键字: GSM模块 51单片机 蜂鸣器

蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。

关键字: 蜂鸣器 电磁线圈

蜂鸣器是设计电子产品时比较常用的发声元器件,根据工作原理的不同,可以分为电磁式蜂鸣器和压电式蜂鸣器。在开发板、实验板上常用的蜂鸣器为电磁式蜂鸣器。这两者最大的区别在于工作原理。下面详细介绍其工作原理。

关键字: 蜂鸣器 电磁线圈

蜂鸣器从结构上分为压电式和电磁式两种。压电式蜂鸣器是由陶瓷材料制成的。电磁式蜂鸣器是由电磁线圈构成的。从工作原理上说,蜂鸣器可以分为无源蜂鸣器和有源蜂鸣器。无源蜂鸣器内部无振荡源,必须有驱动信号才能发声。有源蜂鸣器内部有...

关键字: 蜂鸣器 电磁线圈
关闭
关闭