新闻  |   论坛  |   博客  |   在线研讨会
AVR笔记9:蜂鸣器产生音节节拍(GCC)
mayer | 2009-09-01 19:35:46    阅读:2261   发布文章

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

 

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

一、程序结构
程序结构GCC

下载 (7.07 KB)
2009-8-10 10:03



二、仿真效果
点击看大图

下载 (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.  
  21. int main(void)
  22. {
  23. unsigned char i;
  24.  
  25. DDRA = 0x00; /*方向输入*/
  26. PORTA = 0xFF; /*打开上拉*/
  27. DDRB = 0xFF; /*方向输出*/
  28. PORTB = 0xFF; /*高电平*/
  29. DDRC = 0x00;
  30. PORTC = 0xFF;
  31. DDRD = 0xFF;
  32. PORTD = 0xFF;
  33.  
  34. while (1)
  35. {
  36. TCCR1A = 0x40;
  37. TCCR1B = 0x09; //比较匹配时OCA1电平取反,CTC模式,无预分频
  38.  
  39. buzzer01(); //7种声音,由低到高
  40. for (i = 0; i < 8; i ++)
  41. {
  42. PORTB = ~(1 << i);
  43. _delay_ms(200);
  44. }
  45. PORTB=0XFF; //关闭所有LED
  46.  
  47. buzzer02(); //7种声音,由高到低
  48. for (i = 0; i < 8; i ++)
  49. {
  50. PORTB = ~(1 << i);
  51. _delay_ms(200);
  52. }
  53. PORTB=0XFF; //关闭所有LED
  54.  
  55. }
  56. }

2、buzzer.c

  1. #include <avr/io.h>
  2. #include <util/delay.h>
  3.  
  4. //7种声音,由低到高
  5. void buzzer01(void)
  6. {
  7. for(OCR1A= 1000;OCR1A<1700;OCR1A+=100)
  8. {
  9. TCCR1A = 0x40;
  10. TCCR1B = 0x09;
  11. _delay_ms(200); //蜂鸣器鸣叫300mS钟,定时器一开始工作蜂鸣器即开始鸣叫
  12. TCCR1A = 0x00; //定时器停止工作,无频率产生,蜂鸣器停止鸣叫
  13. }
  14. }
  15.  
  16. //7种声音,由高到低
  17. void buzzer02(void)
  18. {
  19. for(OCR1A= 1600;OCR1A>900;OCR1A-=100)
  20. {
  21. TCCR1A = 0x40;
  22. TCCR1B = 0x09;
  23. _delay_ms(200); //蜂鸣器鸣叫300mS钟,定时器一开始工作蜂鸣器即开始鸣叫
  24. TCCR1A = 0x00; //定时器停止工作,无频率产生,蜂鸣器停止鸣叫
  25. }
  26. }

3、buzzer.h

  1. void buzzer01(void);
  2. void buzzer02(void);

四、完整项目文件下载

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

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客