找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 30432|回复: 60
收起左侧

蜂鸣器音乐源代码

  [复制链接]
ID:60612 发表于 2014-4-12 19:31 | 显示全部楼层 |阅读模式
亲,这是用单片机控制的可发出几种音乐的源代码,好好使用。

0.png

单片机源码:
  1. #include <reg52.h>
  2. sbit   speaker = P1^7;
  3. unsigned char timer0h, timer0l, time;
  4. //--------------------------------------
  5. //单片机晶振采用11.0592MHz
  6. // 频率-半周期数据表高八位     本软件共保存了四个八度的28个频率数据
  7. code unsigned char FREQH[] = {
  8.     0xF2, 0xF3, 0xF5, 0xF5, 0xF6, 0xF7, 0xF8,    //低音1234567
  9.     0xF9, 0xF9, 0xFA, 0xFA, 0xFB, 0xFB, 0xFC, 0xFC,//1,2,3,4,5,6,7,i
  10.     0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFE,            //高音 234567
  11.     0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF};   //超高音 1234567

  12. // 频率-半周期数据表 低八位
  13. code unsigned char FREQL[] = {
  14.     0x42, 0xC1, 0x17, 0xB6, 0xD0, 0xD1, 0xB6,    //低音1234567
  15.     0x21, 0xE1, 0x8C, 0xD8, 0x68, 0xE9, 0x5B, 0x8F, //1,2,3,4,5,6,7,i
  16.     0xEE, 0x44, 0x6B, 0xB4, 0xF4, 0x2D,             //高音 234567
  17.     0x47, 0x77, 0xA2, 0xB6, 0xDA, 0xFA, 0x16};   //超高音 1234567
  18. //--------------------------------------
  19. //世上只有妈妈好数据表           要想演奏不同的乐曲, 只需要修改这个数据表
  20. code unsigned char sszymmh[] = {
  21. 6, 2, 3,  5, 2, 1,  3, 2, 2,  5, 2, 2,  1, 3, 2,  6, 2, 1,  5, 2, 1,
  22. 6, 2, 4, 3, 2, 2, 5, 2, 1, 6, 2, 1, 5, 2, 2, 3, 2, 2, 1, 2, 1,
  23. 6, 1, 1, 5, 2, 1, 3, 2, 1, 2, 2, 4, 2, 2, 3, 3, 2, 1, 5, 2, 2,
  24. 5, 2, 1, 6, 2, 1, 3, 2, 2, 2, 2, 2, 1, 2, 4, 5, 2, 3, 3, 2, 1,
  25. 2, 2, 1, 1, 2, 1, 6, 1, 1, 1, 2, 1, 5, 1, 6, 0, 0, 0};
  26. //--------------------------------------

  27. void t0int() interrupt 1         //T0中断程序,控制发音的音调
  28. {
  29.     TR0 = 0;                     //先关闭T0
  30.     speaker = !speaker;          //输出方波, 发音
  31.     TH0 = timer0h;               //下次的中断时间, 这个时间, 控制音调高低
  32.     TL0 = timer0l;
  33.     TR0 = 1;                     //启动T0
  34. }
  35. //--------------------------------------
  36. void delay(unsigned char t)     //延时程序,控制发音的时间长度
  37. {
  38.     unsigned char t1;
  39.     unsigned long t2;
  40.     for(t1 = 0; t1 < t; t1++)    //双重循环, 共延时t个半拍
  41.       for(t2 = 0; t2 < 8000; t2++); //延时期间, 可进入T0中断去发音
  42.     TR0 = 0;                        //关闭T0, 停止发音
  43. }
  44. //--------------------------------------
  45. void song()                      //演奏一个音符
  46. {
  47.     TH0 = timer0h;               //控制音调
  48.     TL0 = timer0l;
  49.     TR0 = 1;                     //启动T0, 由T0输出方波去发音
  50.     delay(time);                 //控制时间长度
  51. }
  52. //--------------------------------------
  53. void main(void)
  54. {
  55.     unsigned char k, i;
  56.     TMOD = 1;                    //置T0定时工作方式1
  57.     ET0 = 1;                     //开T0中断
  58.     EA = 1;                      //开CPU中断
  59.     while(1) {
  60.       i = 0;
  61.       time = 1;
  62.       while(time) {
  63.         k = sszymmh[i] + 7 * sszymmh[i + 1] - 1;
  64.                       //第i个是音符, 第i+1个是第几个八度
  65.         timer0h = FREQH[k];      //从数据表中读出频率数值
  66.         timer0l = FREQL[k];      //实际上, 是定时的时间长度
  67.         time = sszymmh[i + 2];   //读出时间长度数值
  68.         i += 3;
  69.         song();                  //发出一个音符
  70. }   } }

复制代码



1.png

蜂鸣器 音乐.zip

845.89 KB, 下载次数: 657, 下载积分: 黑币 -5

这是我整理的用单片机控制的可发出几种声音的源代码

回复

使用道具 举报

ID:155070 发表于 2016-12-15 17:57 | 显示全部楼层
真是太棒了,非常好,不仅学会了这个东西,也见识了好的程序的注释及格式,感谢。
回复

使用道具 举报

ID:215978 发表于 2017-6-30 00:21 | 显示全部楼层
世上只有妈妈好的数据表是怎么写的?根据简谱在每两个音之间就有多余的两项2,1或2,2或1,1之类的,两个音之间的两个数字代表了什么?
回复

使用道具 举报

ID:60630 发表于 2014-4-17 18:21 | 显示全部楼层
看看怎样
回复

使用道具 举报

ID:60616 发表于 2014-5-4 18:09 | 显示全部楼层
下来看看能不能用
回复

使用道具 举报

ID:61484 发表于 2014-5-9 18:33 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:70708 发表于 2014-12-18 22:49 | 显示全部楼层
学习了。。。。。。
回复

使用道具 举报

ID:69912 发表于 2014-12-19 21:25 | 显示全部楼层
顶 ;;;;;;起
回复

使用道具 举报

ID:71279 发表于 2014-12-28 21:03 | 显示全部楼层
让我看看如何
回复

使用道具 举报

ID:71279 发表于 2014-12-28 21:03 | 显示全部楼层
期末考试怎么吧
回复

使用道具 举报

ID:71828 发表于 2015-1-8 01:24 | 显示全部楼层
太赞了!!!
回复

使用道具 举报

ID:71828 发表于 2015-1-8 01:24 | 显示全部楼层
要是有注释就看得懂了
回复

使用道具 举报

ID:73218 发表于 2015-2-3 19:13 | 显示全部楼层
看不懂
回复

使用道具 举报

ID:62316 发表于 2015-2-8 22:25 | 显示全部楼层
感谢楼主分享。。。。
回复

使用道具 举报

ID:77398 发表于 2015-4-29 23:55 | 显示全部楼层
不错哦,编程软件用起来很方便
回复

使用道具 举报

ID:79910 发表于 2015-5-13 22:38 | 显示全部楼层
好东西~!!!!!正需要!
回复

使用道具 举报

ID:81077 发表于 2015-5-25 17:27 | 显示全部楼层
下载了,看能不能用
回复

使用道具 举报

ID:76927 发表于 2015-5-25 18:00 | 显示全部楼层
谢谢楼主楼主很给力
回复

使用道具 举报

ID:75172 发表于 2015-5-25 22:15 | 显示全部楼层
好东西,我这有一个谱曲器,不知道要不要分享一下
回复

使用道具 举报

ID:75172 发表于 2015-5-25 22:15 | 显示全部楼层
谢谢楼主分享,以后我也分享一些资料给大家;
回复

使用道具 举报

ID:93449 发表于 2015-10-28 15:52 | 显示全部楼层
下载了,恩好啊 啊
回复

使用道具 举报

ID:80035 发表于 2015-12-26 02:07 | 显示全部楼层
谢谢楼主分享。课设正需要~
回复

使用道具 举报

ID:113905 发表于 2016-4-13 10:33 | 显示全部楼层
发帖子有金币,下载附件
回复

使用道具 举报

ID:113905 发表于 2016-4-13 10:34 | 显示全部楼层
没有金币怎么办
回复

使用道具 举报

ID:120040 发表于 2016-5-11 14:49 | 显示全部楼层
感谢分享,我试试先 哈哈 ,谢谢了  
回复

使用道具 举报

ID:125427 发表于 2016-6-7 09:08 | 显示全部楼层
感谢楼主分享
回复

使用道具 举报

ID:79544 发表于 2016-6-7 21:46 | 显示全部楼层
楼主你好:取音软件怎么用啊?谢谢指教!
回复

使用道具 举报

ID:128797 发表于 2016-7-1 11:14 | 显示全部楼层
课设要用,拿来看看,谢谢楼主了
回复

使用道具 举报

ID:128831 发表于 2016-7-1 16:51 | 显示全部楼层
谢楼主
回复

使用道具 举报

ID:140769 发表于 2016-10-18 19:27 | 显示全部楼层
声音有噪声怎么回事???
回复

使用道具 举报

ID:143297 发表于 2016-10-18 20:24 | 显示全部楼层
mark。谢谢分享
回复

使用道具 举报

ID:143297 发表于 2016-10-18 20:24 | 显示全部楼层
电路板就是最小系统加蜂鸣器吗?
回复

使用道具 举报

ID:143374 发表于 2016-10-19 11:23 来自手机 | 显示全部楼层
谢谢楼主,刚好需要
回复

使用道具 举报

ID:147796 发表于 2016-11-14 19:58 | 显示全部楼层
硬件怎么联啊
回复

使用道具 举报

ID:147796 发表于 2016-11-16 20:37 | 显示全部楼层
下不了
回复

使用道具 举报

ID:152133 发表于 2016-12-4 22:15 | 显示全部楼层
谢谢分享
回复

使用道具 举报

ID:99130 发表于 2016-12-5 21:25 | 显示全部楼层
软件不错 正好需要
回复

使用道具 举报

ID:152442 发表于 2016-12-5 23:01 | 显示全部楼层
非常感谢分享,正是需要的时候
回复

使用道具 举报

ID:89286 发表于 2016-12-10 11:22 | 显示全部楼层
thans for sharing
回复

使用道具 举报

ID:60515 发表于 2016-12-16 21:12 来自手机 | 显示全部楼层
请问是有源的还是无源蜂鸣器???
回复

使用道具 举报

ID:155348 发表于 2016-12-16 22:24 | 显示全部楼层
认真思考,你可以
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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