一、程序结构
二、仿真效果
三、程序源码
1、main.c- /*******************************************************************************
- Platform : AVR mega16学习板(www.iccavr.com)
- Project : 实验九:蜂鸣器产生音节节拍
- Clock F : 3.6864MHz
- Software: ICCAVR7.14C
- Author : 林夕依然
- Version : 08.12.07
- Updata : 09.02.26 模块化
- 09.05.03 增加proteus仿真模型,仿真通过。
- comments:
- 1、以学习板LED和蜂鸣器为硬件电路,实现蜂鸣器音节控制:7音节由低到高-LED流水-
- -7音节由高到低-LED流水
- 2、TC1的CTC工作模式下,频率发生器频率可变程序的编写
- *******************************************************************************/
- #include <iom16v.h>
- #include <macros.h>
- #define uint unsigned int
- void main(void)
- {
- unsigned char i,j;
- 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);
- DelayMs(100);
- }
- PORTB=0XFF; //关闭所有LED
- buzzer02(); //7种声音,由高到低
- for (i = 0; i < 8; i ++)
- {
- PORTB = ~(1 << i);
- DelayMs(200);
- }
- PORTB=0XFF; //关闭所有LED
- }
- }
复制代码 2、buzzer.c- #include <iom16v.h>
- #include <macros.h>
- //7种声音,由低到高
- void buzzer01()
- {
- for(OCR1A= 1000;OCR1A<1700;OCR1A+=100)
- {
- TCCR1A = 0x40;
- TCCR1B = 0x09;
- DelayMs(300); //蜂鸣器鸣叫300mS钟,定时器一开始工作蜂鸣器即开始鸣叫
- TCCR1A = 0x00; //定时器停止工作,无频率产生,蜂鸣器停止鸣叫
- }
- }
- //7种声音,由高到低
- void buzzer02()
- {
- for(OCR1A= 1600;OCR1A>900;OCR1A-=100)
- {
- TCCR1A = 0x40;
- TCCR1B = 0x09;
- DelayMs(300); //蜂鸣器鸣叫300mS钟,定时器一开始工作蜂鸣器即开始鸣叫
- TCCR1A = 0x00; //定时器停止工作,无频率产生,蜂鸣器停止鸣叫
- }
- }
复制代码 3、delay.c- /*******************************
- Platform : AVR mega16学习板(www.iccavr.com)
- function :延时函数
- Clock F : 3.6864M
- Software : ICCAVR7.14C
- Author : 林夕依然
- Version : 09.02.25
- comments :
- 1、两种方式实现延时
- ********************************/
- /*---------------------------------------------------------------------------------
- 延时程序计算方法
- 计数个数j = 延时时间/6*晶振频率 - 1
- ---------------------------------------------------------------------------------*/
- #define uchar unsigned char
- #define uint unsigned int
- //方式一:
- void Delay()
- {
- uchar a, b, c;
- for (a = 1; a; a++)
- for (b = 1; b; b++)
- for (c = 0; c<10; c++) //循环次数=255*255*10
- ;
- }
- //方式二:1ms延时,准确性较Delay();高
- void DelayMs(uint i)
- {
- while(i--)
- {
- uint j;
- for(j=1;j<=613;j++)
- ;
- }
- }
复制代码 四、完整项目文件下载
实验9:蜂鸣器产生音节节拍(ICC).rar (54.59 KB)
|