AVR笔记9:蜂鸣器产生音节节拍(GCC)
》》点此进入 http://bbs.armavr.com/ ARM-AVR嵌入式开发论坛
一、程序结构
下载 (7.07 KB)
2009-8-10 10:03
二、仿真效果
下载 (117.78 KB)
2009-8-10 10:03
三、程序源码
1、main.c
- /*******************************************************************************
- Platform : AVR mega16学习板(www.iccavr.com)
- Project : 实验九:蜂鸣器产生音节节拍
- Clock F : 3.6864MHz
- Software: WinAVR-20090313+Proteus7.4
- Author : 林夕依然
- Version : 08.12.07
- Updata : 09.02.26 模块化
- 09.05.03 增加proteus仿真模型,仿真通过。
- 09.07.22 WinAVR-20090313调试通过
- comments:
- 1、以学习板LED和蜂鸣器为硬件电路,实现蜂鸣器音节控制:7音节由低到高-LED流水-
- -7音节由高到低-LED流水
- 2、TC1的CTC工作模式下,频率发生器频率可变程序的编写
- 3、使用GCC自带延时函数
- *******************************************************************************/
- #include <avr/io.h>
- #include <util/delay.h>
- #include "buzzer.h"
-
- int main(void)
- {
- unsigned char i;
-
- DDRA = 0x00; /*方向输入*/
- PORTA = 0xFF; /*打开上拉*/
- DDRB = 0xFF; /*方向输出*/
- PORTB = 0xFF; /*高电平*/
- DDRC = 0x00;
- PORTC = 0xFF;
- DDRD = 0xFF;
- PORTD = 0xFF;
-
- while (1)
- {
- TCCR1A = 0x40;
- TCCR1B = 0x09; //比较匹配时OCA1电平取反,CTC模式,无预分频
-
- buzzer01(); //7种声音,由低到高
- for (i = 0; i < 8; i ++)
- {
- PORTB = ~(1 << i);
- _delay_ms(200);
- }
- PORTB=0XFF; //关闭所有LED
-
- buzzer02(); //7种声音,由高到低
- for (i = 0; i < 8; i ++)
- {
- PORTB = ~(1 << i);
- _delay_ms(200);
- }
- PORTB=0XFF; //关闭所有LED
-
- }
- }
2、buzzer.c
- #include <avr/io.h>
- #include <util/delay.h>
-
- //7种声音,由低到高
- void buzzer01(void)
- {
- for(OCR1A= 1000;OCR1A<1700;OCR1A+=100)
- {
- TCCR1A = 0x40;
- TCCR1B = 0x09;
- _delay_ms(200); //蜂鸣器鸣叫300mS钟,定时器一开始工作蜂鸣器即开始鸣叫
- TCCR1A = 0x00; //定时器停止工作,无频率产生,蜂鸣器停止鸣叫
- }
- }
-
- //7种声音,由高到低
- void buzzer02(void)
- {
- for(OCR1A= 1600;OCR1A>900;OCR1A-=100)
- {
- TCCR1A = 0x40;
- TCCR1B = 0x09;
- _delay_ms(200); //蜂鸣器鸣叫300mS钟,定时器一开始工作蜂鸣器即开始鸣叫
- TCCR1A = 0x00; //定时器停止工作,无频率产生,蜂鸣器停止鸣叫
- }
- }
3、buzzer.h
- void buzzer01(void);
- void buzzer02(void);
四、完整项目文件下载
http://bbs.armavr.com/thread-906-1-2.html
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。