返回列表 回复 发帖 点我体验网上斗地主的乐趣

[林夕依然] 实验9:蜂鸣器产生音节节拍(ICC)

相关搜索: 例程
一、程序结构
程序结构ICC.jpg
2009-8-10 09:56


二、仿真效果
仿真效果ICC.jpg
2009-8-31 16:07


三、程序源码
1、main.c
  1. /*******************************************************************************
  2. Platform : AVR mega16学习板(www.iccavr.com)
  3. Project : 实验九:蜂鸣器产生音节节拍
  4. Clock F : 3.6864MHz
  5. Software: ICCAVR7.14C
  6. Author : 林夕依然
  7. Version : 08.12.07
  8. Updata : 09.02.26 模块化
  9. 09.05.03 增加proteus仿真模型,仿真通过。
  10. comments:
  11. 1、以学习板LED和蜂鸣器为硬件电路,实现蜂鸣器音节控制:7音节由低到高-LED流水-
  12. -7音节由高到低-LED流水
  13. 2、TC1的CTC工作模式下,频率发生器频率可变程序的编写
  14. *******************************************************************************/

  15. #include <iom16v.h>
  16. #include <macros.h>
  17. #define uint unsigned int

  18. void main(void)
  19. {
  20. unsigned char i,j;

  21. DDRA = 0x00; /*方向输入*/
  22. PORTA = 0xFF; /*打开上拉*/
  23. DDRB = 0xFF; /*方向输出*/
  24. PORTB = 0xFF; /*高电平*/
  25. DDRC = 0x00;
  26. PORTC = 0xFF;
  27. DDRD = 0xFF;
  28. PORTD = 0xFF;

  29. while (1)
  30. {
  31. TCCR1A = 0x40;
  32. TCCR1B = 0x09; //比较匹配时OCA1电平取反,CTC模式,无预分频

  33. buzzer01(); //7种声音,由低到高
  34. for (i = 0; i < 8; i ++)
  35. {
  36. PORTB = ~(1 << i);
  37. DelayMs(100);
  38. }
  39. PORTB=0XFF; //关闭所有LED

  40. buzzer02(); //7种声音,由高到低
  41. for (i = 0; i < 8; i ++)
  42. {
  43. PORTB = ~(1 << i);
  44. DelayMs(200);
  45. }
  46. PORTB=0XFF; //关闭所有LED

  47. }
  48. }
复制代码
2、buzzer.c
  1. #include <iom16v.h>
  2. #include <macros.h>

  3. //7种声音,由低到高
  4. void buzzer01()
  5. {
  6. for(OCR1A= 1000;OCR1A<1700;OCR1A+=100)
  7. {
  8. TCCR1A = 0x40;
  9. TCCR1B = 0x09;
  10. DelayMs(300); //蜂鸣器鸣叫300mS钟,定时器一开始工作蜂鸣器即开始鸣叫
  11. TCCR1A = 0x00; //定时器停止工作,无频率产生,蜂鸣器停止鸣叫
  12. }
  13. }

  14. //7种声音,由高到低
  15. void buzzer02()
  16. {
  17. for(OCR1A= 1600;OCR1A>900;OCR1A-=100)
  18. {
  19. TCCR1A = 0x40;
  20. TCCR1B = 0x09;
  21. DelayMs(300); //蜂鸣器鸣叫300mS钟,定时器一开始工作蜂鸣器即开始鸣叫
  22. TCCR1A = 0x00; //定时器停止工作,无频率产生,蜂鸣器停止鸣叫
  23. }
  24. }
复制代码
3、delay.c
  1. /*******************************
  2. Platform : AVR mega16学习板(www.iccavr.com)
  3. function :延时函数
  4. Clock F : 3.6864M
  5. Software : ICCAVR7.14C
  6. Author : 林夕依然
  7. Version : 09.02.25
  8. comments :
  9. 1、两种方式实现延时
  10. ********************************/
  11. /*---------------------------------------------------------------------------------
  12. 延时程序计算方法
  13. 计数个数j = 延时时间/6*晶振频率 - 1
  14. ---------------------------------------------------------------------------------*/

  15. #define uchar unsigned char
  16. #define uint unsigned int

  17. //方式一:
  18. void Delay()
  19. {
  20. uchar a, b, c;
  21. for (a = 1; a; a++)
  22. for (b = 1; b; b++)
  23. for (c = 0; c<10; c++) //循环次数=255*255*10
  24. ;
  25. }

  26. //方式二:1ms延时,准确性较Delay();高
  27. void DelayMs(uint i)
  28. {
  29. while(i--)
  30. {
  31. uint j;
  32. for(j=1;j<=613;j++)
  33. ;
  34. }
  35. }
复制代码
四、完整项目文件下载
实验9:蜂鸣器产生音节节拍(ICC).rar (54.59 KB)
面对人生,既要有当机立断的决心,更要有永不后悔的气魄!
****************************************************************
期待你和论坛一起成长、进步!
2# wb5846410
附件是我改到力天电子mega16学习板的程序,注意要PD5外接无源蜂鸣器电路。
感觉音乐不怎么好听哈

music.zip (1.14 KB)

看看 正在学这个呢 哈哈
谢谢楼主!
     下载前回帖!
哪位有详细介绍音乐波形方面的知识的相关资料?
谢谢了~~~~~~~~
实验9:蜂鸣器产生音节节拍
提示: 作者被禁止或删除 内容自动屏蔽
谢谢楼主!!!
,延时计算方法中为什么要除以6?
很好,支持!顶起来
好资料,谢谢楼主分享
Forge ahead! Never retreat!
正在到处找现成的例子呢!谢啦!
无源的蜂鸣器效果好一点儿哈!
我知道时空中有许多生命,不是飞是飘是一片飘零的枯竹叶。
好资料,谢谢楼主分享
正在学习这方面的知识啊,自来哦很及时
正是我想要的
正在学习avr呢
谢谢楼主!
回帖是一种美德!
返回列表
Datasheet