标题: 蜂鸣器音乐源代码 [打印本页]

作者: psypj    时间: 2014-4-12 19:31
标题: 蜂鸣器音乐源代码
亲,这是用单片机控制的可发出几种音乐的源代码,好好使用。



单片机源码:
  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. }   } }

复制代码




蜂鸣器 音乐.zip

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

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


作者: 联天下    时间: 2014-4-17 18:21
看看怎样
作者: 墨竹雅客    时间: 2014-5-4 18:09
下来看看能不能用
作者: 18246288682    时间: 2014-5-9 18:33
感谢分享

作者: abczzy2012    时间: 2014-12-18 22:49
学习了。。。。。。
作者: 淘淘    时间: 2014-12-19 21:25
顶 ;;;;;;起
作者: 阿斯达    时间: 2014-12-28 21:03
让我看看如何
作者: 阿斯达    时间: 2014-12-28 21:03
期末考试怎么吧
作者: 于彼朝阳    时间: 2015-1-8 01:24
太赞了!!!
作者: 于彼朝阳    时间: 2015-1-8 01:24
要是有注释就看得懂了
作者: qs7415369    时间: 2015-2-3 19:13
看不懂

作者: wwxz20174    时间: 2015-2-8 22:25
感谢楼主分享。。。。
作者: 天涯咫尺    时间: 2015-4-29 23:55
不错哦,编程软件用起来很方便
作者: lz33260    时间: 2015-5-13 22:38
好东西~!!!!!正需要!
作者: liujifu    时间: 2015-5-25 17:27
下载了,看能不能用
作者: zhdh222    时间: 2015-5-25 18:00
谢谢楼主楼主很给力
作者: kaixinjiuhaoha    时间: 2015-5-25 22:15
好东西,我这有一个谱曲器,不知道要不要分享一下
作者: kaixinjiuhaoha    时间: 2015-5-25 22:15
谢谢楼主分享,以后我也分享一些资料给大家;
作者: LBG    时间: 2015-10-28 15:52
下载了,恩好啊 啊
作者: around    时间: 2015-12-26 02:07
谢谢楼主分享。课设正需要~
作者: zqlmissyww    时间: 2016-4-13 10:33
发帖子有金币,下载附件
作者: zqlmissyww    时间: 2016-4-13 10:34
没有金币怎么办
作者: Alease    时间: 2016-5-11 14:49
感谢分享,我试试先 哈哈 ,谢谢了  
作者: 薇子    时间: 2016-6-7 09:08
感谢楼主分享
作者: 腾飞的龙    时间: 2016-6-7 21:46
楼主你好:取音软件怎么用啊?谢谢指教!
作者: Racho_Z    时间: 2016-7-1 11:14
课设要用,拿来看看,谢谢楼主了
作者: wxs123    时间: 2016-7-1 16:51
谢楼主
作者: @小明    时间: 2016-10-18 19:27
声音有噪声怎么回事???

作者: dengrui521    时间: 2016-10-18 20:24
mark。谢谢分享
作者: dengrui521    时间: 2016-10-18 20:24
电路板就是最小系统加蜂鸣器吗?
作者: wzx8023zy    时间: 2016-10-19 11:23
谢谢楼主,刚好需要
作者: 涛涛UU    时间: 2016-11-14 19:58
硬件怎么联啊
作者: 涛涛UU    时间: 2016-11-16 20:37
下不了
作者: lckin    时间: 2016-12-4 22:15
谢谢分享
作者: 越快乐越堕落    时间: 2016-12-5 21:25
软件不错 正好需要
作者: yubieniba    时间: 2016-12-5 23:01
非常感谢分享,正是需要的时候
作者: faridzled    时间: 2016-12-10 11:22
thans for sharing
作者: 倦收天    时间: 2016-12-15 17:57
真是太棒了,非常好,不仅学会了这个东西,也见识了好的程序的注释及格式,感谢。
作者: GUOPK    时间: 2016-12-16 21:12
请问是有源的还是无源蜂鸣器???
作者: hao234h    时间: 2016-12-16 22:24
认真思考,你可以
作者: WM_MOVEAWAY    时间: 2017-2-22 12:44
非常感谢,好资料!!
作者: zjf2017    时间: 2017-3-27 16:12
非常棒
作者: chioro    时间: 2017-4-25 09:48
为什么要加前面两个的低音和高音啊
作者: UCAS    时间: 2017-6-30 00:21
世上只有妈妈好的数据表是怎么写的?根据简谱在每两个音之间就有多余的两项2,1或2,2或1,1之类的,两个音之间的两个数字代表了什么?
作者: admin    时间: 2017-6-30 00:31
GUOPK 发表于 2016-12-16 21:12
请问是有源的还是无源蜂鸣器???

都可以发声但是无源的蜂鸣器效果更逼真,本人亲测的。
作者: maoyou88619973    时间: 2017-12-25 21:18
什么情况?
作者: mingmingming    时间: 2017-12-29 12:55
厉害厉害,简单实用
作者: 逐梦之年    时间: 2017-12-30 00:30
感觉挺有用。。自己试试
作者: jeoissan    时间: 2017-12-30 10:45
很好,可以发声,就是那个数据表不知道怎么弄,楼主可以解释一下吗?
作者: mrhs2017    时间: 2017-12-30 13:45
很6  一再在做这种
作者: 勇士小子    时间: 2018-5-20 00:47
楼主讲讲数据表是怎么用的吧
作者: susuo    时间: 2018-6-4 20:16
真是太棒了,非常好,不仅学会了这个东西,也见识了好的程序的注释及格式,感谢
作者: 阿斯顿马丁    时间: 2018-8-2 17:46
赞一个
作者: 风158    时间: 2018-8-2 22:07
谢谢分享,下来玩玩
作者: duaidandan    时间: 2018-8-3 04:05
学习了
作者: boaimu    时间: 2019-3-23 09:53
非常好,
作者: ptlantu    时间: 2019-3-23 10:26
真是太棒了
作者: lll233    时间: 2019-5-14 10:40
号,是否好, 真是太棒了,非常好,不仅学会了这个东西,也见识了好的程序的注释及格式,感谢。
作者: 滚回去上学    时间: 2019-7-19 16:17
请问音长(发声的时间长度)是怎么看的?
作者: jackson_    时间: 2020-2-12 10:57
UCAS 发表于 2017-6-30 00:21
世上只有妈妈好的数据表是怎么写的?根据简谱在每两个音之间就有多余的两项2,1或2,2或1,1之类的,两个音 ...

第一个是音符 第二个是音高 第三个是拍子




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1