找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机简易电子琴仿真+源程序+电路原理图

  [复制链接]
跳转到指定楼层
楼主


51单片机简易电子琴仿真电路原理图

下面是51单片机简易电子琴源程序:
  1. #include<AT89X52.h>

  2. #define KeyPort P1


  3. unsigned char High,Low; //定时器预装值的高8位和低8位

  4. sbit SPK=P3^7;          //定义蜂鸣器接口
  5. sbit playSongKey=P0^0;          //功能键

  6. sbit RS=P2^0;//液晶数据命令选择
  7. sbit RW=P2^1;//液晶读写选择
  8. sbit EN=P2^2;//液晶使能端

  9. unsigned char code freq[][2]={
  10.   0xD8,0xF7,//00440HZ 1   
  11.   0xBD,0xF8,//00494HZ 2  
  12.   0x87,0xF9,//00554HZ 3  
  13.   0xE4,0xF9,//00587HZ 4   
  14.   0x90,0xFA,//00659HZ 5     
  15.   0x29,0xFB,//00740HZ 6     
  16.   0xB1,0xFB,//00831HZ 7      
  17.   0xEF,0xFB,//00880HZ `1
  18. };

  19. unsigned char Time;
  20. unsigned char code YINFU[9][1]={{' '},{'1'},{'2'},{'3'},{'4'},{'5'},{'6'},{'7'},{'8'}};
  21.                           //世上只有妈妈好数据表
  22. unsigned char code MUSIC[]={ 6,2,3,      5,2,1,      3,2,2,    5,2,2,    1,3,2,    6,2,1,    5,2,1,
  23.                      6,2,4,      3,2,2,      5,2,1,    6,2,1,           5,2,2,         3,2,2,           1,2,1,
  24.                      6,1,1,      5,2,1,      3,2,1,         2,2,4,           2,2,3,         3,2,1,    5,2,2,
  25.                      5,2,1,      6,2,1,      3,2,2,         2,2,2,    1,2,4,         5,2,3,           3,2,1,
  26.                      2,2,1,      1,2,1,      6,1,1,         1,2,1,           5,1,6,         0,0,0
  27.                                       };
  28.                          // 音阶频率表 高八位
  29. unsigned char code FREQH[]={
  30.                          0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,
  31.                          0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC, //1,2,3,4,5,6,7,8,i
  32.                          0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,
  33.                          0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,
  34.                                } ;
  35.                          // 音阶频率表 低八位
  36. unsigned char code FREQL[]={
  37.                          0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,
  38.                          0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F, //1,2,3,4,5,6,7,8,i
  39.                          0xEE,0x44, 0x6B,0xB4,0xF4,0x2D,
  40.                          0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,
  41.                                 };

  42. void Init_Timer0(void);//定时器初始化

  43. //延时函数大约约2*z+5us
  44. void delay2xus(unsigned char z)
  45. {
  46.    while(z--);
  47. }
  48. // 延时函数大约约1ms
  49. void delayms(unsigned char x)
  50. {
  51.    while(x--)
  52.    {
  53.      delay2xus(245);
  54.      delay2xus(245);
  55.    }
  56. }


  57. /*------------------------------------------------
  58.                 节拍延时函数
  59. 各调1/4节拍时间:
  60. 调4/4  125ms
  61. 调2/4  250ms
  62. 调3/4  187ms
  63. ------------------------------------------------*/
  64. void delayTips(unsigned char t)
  65. {
  66.     unsigned char i;
  67.           for(i=0;i<t;i++)
  68.     {
  69.             delayms(250);
  70.     }
  71.     TR0=0;
  72. }
  73. //播放音乐的函数
  74. void PlaySong()
  75. {
  76.    TH0=High;//赋值定时器时间,决定频率
  77.    TL0=Low;
  78.    TR0=1;      //打开定时器
  79.    delayTips(Time); //延时所需要的节拍                     
  80. }

  81. //定时器T0初始化子程序
  82. void Init_Timer0(void)
  83. {
  84. TMOD |= 0x01;          //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响                     
  85. EA=1;            //总中断打开
  86. ET0=1;           //定时器中断打开
  87. }
  88. //定时器T0中断子程序
  89. void Timer0_isr(void) interrupt 1
  90. {
  91. TH0=High;
  92. TL0=Low;
  93. SPK=!SPK;
  94. }
  95. //主函数
  96. void main (void)
  97. {
  98.   unsigned char num,k,i;                 
  99.   Init_Timer0();    //初始化定时器0,主要用于数码管动态扫描
  100.   SPK=0;                        //在未按键时,喇叭低电平,防止长期高电平损坏喇叭         
  101.   while (1)
  102.   {
  103.    switch(KeyPort)          //对按键进行处理
  104.                 {
  105.                  case 0xfe:num= 1;break;
  106.                  case 0xfd:num= 2;break;
  107.                  case 0xfb:num= 3;break;
  108.                  case 0xf7:num= 4;break;
  109.                  case 0xef:num= 5;break;
  110.                  case 0xdf:num= 6;break;
  111.                  case 0xbf:num= 7;break;
  112.                  case 0x7f:num= 8;break;      //分别对应不用的音调
  113.                  default:num= 0;break;
  114.                 }
  115.     P2 = KeyPort;
  116.     if(num==0)
  117.     {
  118.        TR0=0;
  119.        SPK=0;   //在未按键时,喇叭低电平,防止长期高电平损坏喇叭
  120.           }
  121.     else
  122.     {
  123.             High=freq[num-1][1];
  124.                    Low =freq[num-1][0];
  125.                   TR0=1;
  126.           }
  127.    if(playSongKey==0)        //如果播放音乐按键被按下
  128.    {
  129.      delayms(10);
  130.      if(playSongKey==0)
  131.      {
  132.        i=0;  
  133.        while(i<100)
  134.             {         
  135.             k=MUSIC[i]+7*MUSIC[i+1]-1;//去音符振荡频率所需数据
  136.             High=FREQH[k];
  137.             Low=FREQL[k];
  138.             Time=MUSIC[i+2];          //节拍时长
  139.             i=i+3;
  140.                         if(P1!=0xff)//长按任意8音键退出播放
  141.                         {
  142.                delayms(10);
  143.                if(P1!=0xff)
  144.                                  i=101;
  145.                         }
  146.             PlaySong();  
  147.             }
  148.                    TR0=0;
  149.      }
  150.    }

  151.   }
  152. }
复制代码





51单片机简易电子琴所有资料下载:http://www.51hei.com/bbs/dpj-54940-1.html

评分

参与人数 7黑币 +24 收起 理由
lulululu + 1 很给力!
waitera + 2 赞一个!
a1321594070 + 5 很给力!
101.1 + 1 很给力!
单片机@ + 5 很给力!
朋友们晚上好 + 5 很给力!
LWJSSG + 5 赞一个!

查看全部评分

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

使用道具 举报

沙发
ID:89286 发表于 2017-7-4 07:02 | 只看该作者
thanks for sharing
回复

使用道具 举报

板凳
ID:262319 发表于 2017-12-16 20:18 | 只看该作者
我仿真的时候怎么没反应啊
回复

使用道具 举报

地板
ID:262319 发表于 2017-12-16 20:20 | 只看该作者
这是什么意思

回复

使用道具 举报

5#
ID:277447 发表于 2018-1-18 19:13 | 只看该作者
把程序导入仿真没反应,怎么办
回复

使用道具 举报

6#
ID:336941 发表于 2018-5-23 22:51 | 只看该作者
把程序导入51,但是没有反应是什么情况呢
回复

使用道具 举报

7#
ID:356714 发表于 2018-6-22 17:09 | 只看该作者
为什么我仿真时按键不起作用
回复

使用道具 举报

8#
ID:357821 发表于 2018-6-26 10:59 | 只看该作者
厉害了
回复

使用道具 举报

9#
ID:359038 发表于 2018-6-26 11:26 | 只看该作者
不错耶!
回复

使用道具 举报

10#
ID:362370 发表于 2018-6-30 17:51 | 只看该作者
还不错!
回复

使用道具 举报

11#
ID:372095 发表于 2018-7-15 19:28 | 只看该作者
老哥,程序运行之后按键没反应怎么回事???
回复

使用道具 举报

12#
ID:392265 发表于 2018-9-1 11:38 | 只看该作者
大神大神
回复

使用道具 举报

13#
ID:402000 发表于 2018-9-25 09:47 | 只看该作者
nice thank you
回复

使用道具 举报

14#
ID:416511 发表于 2018-10-27 23:24 | 只看该作者
你好,这里面的能满足以下的要求吗?
基于单片机的电子琴设计
基本要求:利用单片机AT89C51设计电子琴,用矩阵键盘代表键琴,至少能弹出8个音符。
创新:键按下时间长短表征节拍的长短;点阵实时动态显示音符的高低等。
任务区分:A——按照矩阵键盘上数字顺序音节逐渐升高。
回复

使用道具 举报

15#
ID:416511 发表于 2018-10-29 22:58 | 只看该作者
你好 下载之后不会文件损坏或者仿真运行不了这种情况吧
回复

使用道具 举报

16#
ID:417858 发表于 2018-10-30 12:22 | 只看该作者
新手学习下!
回复

使用道具 举报

17#
ID:425357 发表于 2018-11-13 11:14 | 只看该作者
感谢分享 支持
回复

使用道具 举报

18#
ID:453126 发表于 2018-12-29 10:33 | 只看该作者
急需一个电子琴程序><
回复

使用道具 举报

19#
ID:497927 发表于 2019-3-25 15:18 | 只看该作者
想问一下里面液晶的那一块定义有什么用
回复

使用道具 举报

20#
ID:501886 发表于 2019-4-1 20:55 | 只看该作者
雪中送炭
回复

使用道具 举报

21#
ID:560101 发表于 2019-6-11 16:44 | 只看该作者
做的可以继续加油
回复

使用道具 举报

22#
ID:744791 发表于 2020-5-6 16:41 | 只看该作者
很给力!
回复

使用道具 举报

23#
ID:752151 发表于 2020-5-14 22:16 | 只看该作者
请问如何来改变歌曲
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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