原创 AVR笔记9:蜂鸣器产生音节节拍(GCC)

2009-8-31 15:25 2945 6 6 分类: MCU/ 嵌入式

》》点此进入    http://bbs.armavr.com/   ARM-AVR嵌入式开发论坛


一、程序结构
attachimg.gif 程序结构GCC


下载 (7.07 KB)

2009-8-10 10:03



二、仿真效果
attachimg.gif 点击看大图


下载 (117.78 KB)

2009-8-10 10:03



三、程序源码
1、main.c





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

  2. Platform : AVR mega16学习板(www.iccavr.com)

  3. Project : 实验九:蜂鸣器产生音节节拍

  4. Clock F : 3.6864MHz

  5. Software: WinAVR-20090313+Proteus7.4

  6. Author : 林夕依然

  7. Version : 08.12.07

  8. Updata : 09.02.26 模块化

  9. 09.05.03 增加proteus仿真模型,仿真通过。

  10. 09.07.22 WinAVR-20090313调试通过

  11. comments:

  12. 1、以学习板LED和蜂鸣器为硬件电路,实现蜂鸣器音节控制:7音节由低到高-LED流水-

  13. -7音节由高到低-LED流水

  14. 2、TC1的CTC工作模式下,频率发生器频率可变程序的编写

  15. 3、使用GCC自带延时函数

  16. *******************************************************************************/

  17. #include <avr/io.h>

  18. #include <util/delay.h>

  19. #include "buzzer.h"



  20. int main(void)

  21. {

  22. unsigned char i;



  23. DDRA = 0x00; /*方向输入*/

  24. PORTA = 0xFF; /*打开上拉*/

  25. DDRB = 0xFF; /*方向输出*/

  26. PORTB = 0xFF; /*高电平*/

  27. DDRC = 0x00;

  28. PORTC = 0xFF;

  29. DDRD = 0xFF;

  30. PORTD = 0xFF;



  31. while (1)

  32. {

  33. TCCR1A = 0x40;

  34. TCCR1B = 0x09; //比较匹配时OCA1电平取反,CTC模式,无预分频



  35. buzzer01(); //7种声音,由低到高

  36. for (i = 0; i < 8; i ++)

  37. {

  38. PORTB = ~(1 << i);

  39. _delay_ms(200);

  40. }

  41. PORTB=0XFF; //关闭所有LED



  42. buzzer02(); //7种声音,由高到低

  43. for (i = 0; i < 8; i ++)

  44. {

  45. PORTB = ~(1 << i);

  46. _delay_ms(200);

  47. }

  48. PORTB=0XFF; //关闭所有LED



  49. }

  50. }

2、buzzer.c





  1. #include <avr/io.h>

  2. #include <util/delay.h>



  3. //7种声音,由低到高

  4. void buzzer01(void)

  5. {

  6. for(OCR1A= 1000;OCR1A<1700;OCR1A+=100)

  7. {

  8. TCCR1A = 0x40;

  9. TCCR1B = 0x09;

  10. _delay_ms(200); //蜂鸣器鸣叫300mS钟,定时器一开始工作蜂鸣器即开始鸣叫

  11. TCCR1A = 0x00; //定时器停止工作,无频率产生,蜂鸣器停止鸣叫

  12. }

  13. }



  14. //7种声音,由高到低

  15. void buzzer02(void)

  16. {

  17. for(OCR1A= 1600;OCR1A>900;OCR1A-=100)

  18. {

  19. TCCR1A = 0x40;

  20. TCCR1B = 0x09;

  21. _delay_ms(200); //蜂鸣器鸣叫300mS钟,定时器一开始工作蜂鸣器即开始鸣叫

  22. TCCR1A = 0x00; //定时器停止工作,无频率产生,蜂鸣器停止鸣叫

  23. }

  24. }

3、buzzer.h





  1. void buzzer01(void);

  2. void buzzer02(void);

四、完整项目文件下载


http://bbs.armavr.com/thread-906-1-2.html

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
6
关闭 站长推荐上一条 /3 下一条