找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5685|回复: 0
打印 上一主题 下一主题
收起左侧

单片机控制蜂鸣器发出1~7音阶

[复制链接]
跳转到指定楼层
楼主
ID:662089 发表于 2020-8-2 20:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这是关于51单片机驱动蜂鸣器的一个很简单的代码。主要功能是依次输出 do re mi fa so la si,然后反复循环输出。

单片机源程序如下:
  1. #include<reg52.h>
  2. /*反复输出1~7七个音阶*/
  3. typedef unsigned int u16;
  4. typedef unsigned char u8;
  5. sbit beep=P1^5;
  6. sbit led=P2^0;
  7. /*C调音符对应的hz:1:523 1#:553 2:586 2#:621 3:658 4:697
  8.                    4#:739 5:783 5#:830 6:879 6#:931 7:987
  9.                                    根据T=1/f,单片机通过对beep的IO口反复跳转电平从而输出相应的频率
  10.                                    输出的每一个脉冲的高电平和低电平时间都为T的一半
  11. C调音符对应的小时间为:1:956;  2:853; 3:760; 4:717; 5:639; 6:569; 7:507;
  12.   关于节拍:设四分音符一拍等于400ms;则八分音符一拍等于200ms;十六分音符一拍等于100ms;                                            
  13. */

  14. int csign[]={956,853,760,717,639,569,507};
  15. int tho[]={0xfc,0xfc,0xfd,0xfd,0xfd,0xfd,0xfe};//高位定时器的值
  16. int tlo[]={0x44,0xab,0x08,0x33,0x81,0xc7,0x05};//低位定时器的值
  17. static u8 k=0;
  18. static int HT,LT;//高低位定时器的值
  19. void Time0_init()
  20. {
  21. TMOD|=0X01;
  22. TR0=1;
  23. TH0=HT;
  24. TL0=LT;
  25. ET0=1;
  26. EA=1;
  27. }
  28. void delay(u16 ms){u16 b;for(ms;ms>0;ms--)for(b=120;b>0;b--);}

  29. void main()
  30. {


  31. Time0_init();
  32. while(1)
  33. {
  34. HT=tho[k];
  35. LT=tlo[k];
  36. k++;
  37. if(k>6)k=0;
  38. delay(1000);TR0=0;
  39. delay(1000);TR0=1;
  40. }
  41. }

  42. void intf() interrupt 1
  43. {
  44. TH0=HT;
  45. TL0=LT;
  46. beep=~beep;
  47. }
复制代码

hex文件51hei提供下载:
蜂鸣器输出1~7音阶.rar (18.83 KB, 下载次数: 21)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表