找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 20206|回复: 56
收起左侧

基于51单片机的简易电子琴_[brightbell]

  [复制链接]
ID:101749 发表于 2016-1-4 13:45 | 显示全部楼层 |阅读模式
      学习51单片机不久后,自己设计制作了这个简易电子琴,这是我单片机DIY的第一个作品,从构思设计-购买元件-布局焊接-程序编写,系统地体验了整个开发流程,也是一边学一边做,还好有网络。      在2015年3月底焊接的,那段时间也参考网上的程序写了个程序,实现的功能跟现在这个是一样的,只不过程序结构不好,还有延时有点问题,所以在2016年1月1日重写了一下,功能不变,没加没减。
      没什么技术含量,但是是我的第一个DIY成品,很有纪念价值啊,现在分享一下。
     有演示视频,有图片,有程序,不过没有元件清单,没有电路图,也没有必要吧,大家看看就都明白。 基于51单片机的简易电子琴 (1).jpg 基于51单片机的简易电子琴 (2).jpg 基于51单片机的简易电子琴 (3).jpg 基于51单片机的简易电子琴 (4).jpg 基于51单片机的简易电子琴 (5).jpg 基于51单片机的简易电子琴 (6).jpg

视频:


源代码:
  1. #include <reg52.h>
  2. sbit BUZZ=P1^6;//蜂鸣器连续的IO口
  3. unsigned char T1TH=0,T1TL=0;
  4. unsigned char code song1[]={                  //两只老虎
  5.     0x14,0x14,0x24,0x34,0x14,0x14,0x24,0x34,0x14,
  6.         0x34,0x44,0x58,0x34,0x44,0x58,
  7.         0x53,0x61,0x53,0x41,0x34,0x14,
  8.         0x53,0x61,0x53,0x41,0x34,0x14,
  9.         0x14,0x54,0x18,
  10.         0x14,0x54,0x18,
  11.         0xFF          //歌曲结束标志
  12. };
  13. unsigned char code song2[]={                  //送别
  14.     0x54,0x54,0x32,0x52,0x88,0x64,0x84,0x58,
  15.         0x54,0x12,0x22,0x34,0x22,0x12,0x28,0x04,0x04,
  16.         0x54,0x32,0x52,0x86,0x72,0x64,0x84,0x58,
  17.         0x54,0x22,0x32,0x46,0xB2,0x18,0x04,0x04,
  18.         0x64,0x84,0x88,0x74,0x62,0x72,0x88,
  19.         0x62,0x72,0x82,0x62,0x62,0x52,0x32,0x12,0x28,0x04,0x04,
  20.         0x54,0x32,0x52,0x86,0x72,0x64,0x84,0x58,
  21.         0x54,0x22,0x32,0x46,0xB2,0x18,0x04,0x04,
  22.         0xFF
  23. };
  24. unsigned char code cuzhi[]={
  25.     0xFF,0xFF,                //                          low                mid             high
  26.         0xFC,0x44,                //1      ##  5 6 7  1 2 3 4 5 6 7  1 2 3
  27.         0xFC,0xAC,                //2                 ##         D C B  1 2 3 4 5 6 7  8 9 A
  28.         0xFD,0x09,                //3
  29.         0xFD,0x34,                //4
  30.         0xFD,0x82,                //5
  31.         0xFD,0xC8,                //6
  32.         0xFE,0x06,                //7
  33.         0xFE,0x2A,                //8 --high 1         N = 470;
  34.         0xFE,0x48,                //9 --hign 2         N = 440;
  35.         0xFE,0x66,      //A --hign 3         N = 410;
  36.         0xFC,0x0C                //B---low  7         N = 1012
  37. };       
  38. void delay1ms(unsigned char z);        //延时1MS
  39. void delay125ms(unsigned char z);        //延时165MS,即十六分音符
  40. void sing();
  41. main()
  42. {
  43.         EA=1;//开总中断
  44.     TMOD=0x10;//定时器1工作在方式1
  45.         TH1=0;
  46.         TL1=0;
  47.         ET1=1;
  48.         while(1)
  49.         {
  50.                 sing();
  51.             delay1ms(1000);
  52.         }
  53. }

  54. void sing()
  55. {
  56.     unsigned char temp;
  57.         unsigned char jianpu;   
  58.         unsigned int i = 0;
  59.         static unsigned char thesong = 0;
  60.         while(1)
  61.         {       
  62.                 switch(thesong)
  63.                 {
  64.                    case 0:temp = song1[i];break;
  65.                    case 1:temp = song2[i];break;
  66.                    default:break;
  67.                 }
  68.                 if(temp == 0xFF)
  69.                   break;
  70.                 jianpu = (temp>>4); //取数的高4位
  71.                 if(jianpu != 0)                //不是休止符
  72.                 {
  73.                   T1TH = cuzhi[jianpu*2];
  74.                   T1TL = cuzhi[jianpu*2+1];
  75.                 }               //查表找初值
  76.                 else                        //jp = 0,休止符
  77.                   { TR1 = 0;BUZZ = 1; }        //关蜂鸣器
  78.                 delay125ms( temp & 0x0F ); //取数的低4位
  79.                 TR1 = 0;         //唱完一个音停10MS
  80.                 BUZZ = 1;
  81.                 delay1ms(10);
  82.                 TR1 = 1;
  83.                 i++;
  84.         }
  85.         TR1 = 0;
  86.         BUZZ = 1;
  87.         thesong++;
  88.         if(thesong >=2)
  89.            thesong = 0;
  90. }
  91. void delay125ms(unsigned char z)        //延时165MS,即十六分音符
  92. {       
  93.     unsigned int x,y;
  94.         for(x=z;x>0;x--)
  95.                  for(y=15000;y>0;y--);
  96. }

  97. void delay1ms(unsigned char z)        //延时1MS
  98. {       
  99.     unsigned int x,y;
  100.         for(x=z;x>0;x--)
  101.                  for(y=112;y>0;y--);
  102. }
  103. void timer1() interrupt 3         //用于产生各种音调
  104. {
  105.         TH1=T1TH;
  106.         TL1=T1TL;
  107.     BUZZ = ~BUZZ;
  108. }
复制代码

制作资料下载:
【BrightBell】基于51单片机的简易电子琴.rar (9.67 MB, 下载次数: 330)

评分

参与人数 9黑币 +98 收起 理由
chtom + 5 赞一个!
wy1326682790 + 1 很给力!
点点天地心 + 5 很给力!
t1769024410 + 5 赞一个!
2429958788 + 5 很给力!
tieq1952 + 10 很给力!
姬宫涅 + 5 很给力!
持勤补拙 + 12 很给力!
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:120004 发表于 2016-5-14 17:26 | 显示全部楼层
谢谢大哥!!
回复

使用道具 举报

ID:99130 发表于 2016-6-7 16:40 | 显示全部楼层
楼主,你这里贴的程序和资料包里的不一样,哪个是你现在视频里用的?
回复

使用道具 举报

ID:99130 发表于 2016-6-7 17:10 | 显示全部楼层
假设定义左边第一个音的按键为K1,然后以此类推,K1是接的单片机的1脚???然后以此类推?
回复

使用道具 举报

ID:101749 发表于 2016-6-8 07:54 | 显示全部楼层
越快乐越堕落 发表于 2016-6-7 16:40
楼主,你这里贴的程序和资料包里的不一样,哪个是你现在视频里用的?

一样的哦,资料包里的是全部的,贴出来的只是其中一小部分
回复

使用道具 举报

ID:101749 发表于 2016-6-8 08:03 | 显示全部楼层
越快乐越堕落 发表于 2016-6-7 17:10
假设定义左边第一个音的按键为K1,然后以此类推,K1是接的单片机的1脚???然后以此类推?

是的,那时候是这样定义的:
/********************************************
                 定义各口
*********************************************/
sbit BUZZ = P2^0;      //蜂鸣器连续的IO口
sbit led0 = P0^0;                   //各LED小灯
sbit led1 = P0^1;
sbit led2 = P0^2;
sbit led3 = P0^3;
sbit led4 = P0^4;
sbit led5 = P0^5;
sbit led6 = P0^6;
sbit led7 = P0^7;
sbit ledF = P3^7;     //功能指示灯(处于演奏状态时亮
sbit key0 = P1^0;                        //各按键
sbit key1 = P1^1;
sbit key2 = P1^2;
sbit key3 = P1^3;
sbit key4 = P1^4;
sbit key5 = P1^5;
sbit key6 = P1^6;
sbit key7 = P1^7;
sbit keyF = P3^2;                        //功能切换键——外中断0端口
回复

使用道具 举报

ID:125848 发表于 2016-6-8 17:20 | 显示全部楼层
电阻都是多大的,求解
回复

使用道具 举报

ID:101749 发表于 2016-6-8 19:27 | 显示全部楼层
陌文 发表于 2016-6-8 17:20
电阻都是多大的,求解

都是常规的,,,,,,不好细说,找个最小系统类比一下就成
回复

使用道具 举报

ID:99130 发表于 2016-6-8 21:46 | 显示全部楼层
陌文 发表于 2016-6-8 17:20
电阻都是多大的,求解

10K 1K 4K7 10K排阻
回复

使用道具 举报

ID:125848 发表于 2016-7-25 13:03 | 显示全部楼层

好的,谢谢了
回复

使用道具 举报

ID:142220 发表于 2016-10-10 17:56 | 显示全部楼层
就是可以问一下,为什么制作资料上面的程序和您上面的不太对应吧?可以告知一下吗??
回复

使用道具 举报

ID:89286 发表于 2017-1-13 22:42 | 显示全部楼层
thanks. i like it
回复

使用道具 举报

ID:256850 发表于 2017-12-3 17:10 | 显示全部楼层
最近也做了一个   不知道那边出问题了  先看看  无奈  其次谢谢
回复

使用道具 举报

ID:259956 发表于 2017-12-10 23:33 | 显示全部楼层
大佬能私发你一下吗?我邮箱859197408@qq.com
回复

使用道具 举报

ID:255823 发表于 2017-12-12 13:10 | 显示全部楼层
谢谢主楼分享
回复

使用道具 举报

ID:256174 发表于 2017-12-12 15:14 | 显示全部楼层
楼主那个蜂鸣器用的是有源的还是无源的?
回复

使用道具 举报

ID:227688 发表于 2017-12-22 15:52 | 显示全部楼层
老哥   你是用的什么谱曲软件?     我用名为乐谱编辑这个软件编出来的音乐代码放在你就一通乱响。。。
回复

使用道具 举报

ID:227688 发表于 2017-12-22 15:54 | 显示全部楼层
老哥  你是用的什么谱曲软件?   我用名为乐谱编辑的软件编出来的音乐代码放在你这程序行不通,就一通乱响。。。
回复

使用道具 举报

ID:252405 发表于 2017-12-25 17:42 | 显示全部楼层
资料上的程序也不全吧?、

回复

使用道具 举报

ID:266206 发表于 2017-12-25 20:35 | 显示全部楼层
感谢,撸主很棒
回复

使用道具 举报

ID:253767 发表于 2017-12-26 14:55 | 显示全部楼层
这是真正的学习成果。支持。
回复

使用道具 举报

ID:264401 发表于 2017-12-26 16:29 | 显示全部楼层
楼主好人啊
回复

使用道具 举报

ID:227688 发表于 2017-12-27 11:11 | 显示全部楼层
214shiyanshi 发表于 2017-12-25 17:42
资料上的程序也不全吧?、

全啊    不过要自己发现如何去编写音乐代码    我已经发现了   哈哈    现在编了一首超级玛丽的背景音乐   超动感
回复

使用道具 举报

ID:267347 发表于 2017-12-28 12:29 | 显示全部楼层
可以!很给力!!
回复

使用道具 举报

ID:333298 发表于 2018-5-18 21:46 | 显示全部楼层
大佬,百度云没了馁,资料可以私发我邮箱一下吗?935662325@qq.com   非常感谢哒
回复

使用道具 举报

ID:339722 发表于 2018-5-28 14:23 | 显示全部楼层

能私发一下吗?我邮箱2388549835@qq.com
回复

使用道具 举报

ID:339722 发表于 2018-5-28 14:24 | 显示全部楼层

大佬,百度云没了馁,资料可以私发我邮箱一下吗?2399549835@qq.com   非常感谢哒
回复

使用道具 举报

ID:340296 发表于 2018-5-29 08:47 | 显示全部楼层
大佬百度链接过期了
回复

使用道具 举报

ID:340296 发表于 2018-5-29 08:53 | 显示全部楼层
大佬能发我一下吗?2429958788@qq.com

评分

参与人数 1黑币 +5 收起 理由
小屁孩1 + 5 很给力!

查看全部评分

回复

使用道具 举报

ID:340296 发表于 2018-5-29 08:59 | 显示全部楼层
大佬,6666666

评分

参与人数 1黑币 +5 收起 理由
小屁孩1 + 5 赞一个!

查看全部评分

回复

使用道具 举报

ID:341470 发表于 2018-5-30 16:50 | 显示全部楼层
大佬,百度云链接过期了,能否发给我一下,1769024410@qq.com
回复

使用道具 举报

ID:341470 发表于 2018-5-30 16:52 | 显示全部楼层
大佬,百度云失效了,资料可以私发我邮箱一下吗?1769024410@qq.com   非常感谢哒
回复

使用道具 举报

ID:343095 发表于 2018-6-1 20:55 来自手机 | 显示全部楼层
谢谢楼主
回复

使用道具 举报

ID:345016 发表于 2018-6-4 21:56 | 显示全部楼层
大佬,能不能私发一下,1972411722@qq.com  ,谢谢楼主!
回复

使用道具 举报

ID:345345 发表于 2018-6-5 13:06 | 显示全部楼层
用了几个中断呀
回复

使用道具 举报

ID:276930 发表于 2018-6-7 13:01 | 显示全部楼层
厉害了,围观一下
回复

使用道具 举报

ID:347534 发表于 2018-6-8 13:26 | 显示全部楼层
作者还有链接分享吗,我急需呀
回复

使用道具 举报

ID:347534 发表于 2018-6-8 15:36 | 显示全部楼层

大佬,能不能私发一下,1142844609@foxmail.com  ,谢谢楼主!
回复

使用道具 举报

ID:348432 发表于 2018-6-10 08:22 | 显示全部楼层
大佬还有链接吗??,,511889585@qq.com  谢谢!
回复

使用道具 举报

ID:354153 发表于 2018-6-19 12:31 | 显示全部楼层
百度云已经失效  能不能发到我邮箱楼主:2388799017@qq.com
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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