专栏中心

EEPW首页 > 专栏 > AVR笔记9:蜂鸣器产生音节节拍(GCC)

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

发布人:mayer 时间:2009-09-01 来源:工程师 发布文章
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

专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们

关键词:

相关推荐

C编译器软件安装演示视频

视频 2012-07-04

使用瞬时频率表示 PM 和 FM 信号

AI算力新材料,「磷化铟」市场崛起

智能计算 2025-06-04

SH7764车载导航系统解決方案

视频 2012-07-03

单片机驱动标准PC机键盘的C51程序

TDK推出适用于汽车应用的高电压、大电容3端子滤波器

元件/连接器 2025-06-04

摩尔斯微电子携手Gateworks,利用Wi-Fi HaLow革新工业连接

理解射频系统中的互调失真和三阶截点

单片机名词解释

嵌入式通信稳如老狗?试试这个环形FIFO缓冲区设计!

单片机扩展I2C总线的编程方法

单片机控制的视频音频切换器

通过可回收、可修复的电路板解决电子垃圾问题

EDA/PCB 2025-06-04

汇编器与PM+软件安装演示

视频 2012-07-04

OpenGMSL™联盟宣告成立,推动未来车载连接技术变革

Applilet软件安装演示视频

视频 2012-07-04

单片机来电显示器的设计与实现

自供电人工突触模拟人类色觉

适用于电动汽车高压连接器的Ultramid Advanced N系列材料新品问世

SM+软件安装演示视频

视频 2012-07-04
更多 培训课堂
更多 焦点
更多 视频

技术专区