找回密码
 立即注册

QQ登录

只需一步,快速开始

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

简易电子琴单片机源程序

[复制链接]
跳转到指定楼层
楼主
ID:160680 发表于 2017-4-13 17:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
电子琴按键音乐器:
电子按键音乐器c.rar (9.97 KB, 下载次数: 11)

  1. /*
  2. 跳线设置:默认跳线位
  3. 程序效果:用按键T0 S4 S5控制音符的输出
  4. */
  5. #include<reg52.h> //头文件
  6. #define uchar unsigned char //宏定义
  7. #define uint  unsigned int
  8. sbit fmq=P2^2; //定义蜂鸣器的引脚
  9. uchar code freq[36*2]={   //这些音乐频率我也不懂,关键是我不懂音律
  10. 0xA9,0xEF,//00220HZ ,1  //0   
  11. 0x93,0xF0,//00233HZ ,1#
  12. 0x73,0xF1,//00247HZ ,2
  13. 0x49,0xF2,//00262HZ ,2#
  14. 0x07,0xF3,//00277HZ ,3
  15. 0xC8,0xF3,//00294HZ ,4
  16. 0x73,0xF4,//00311HZ ,4#
  17. 0x1E,0xF5,//00330HZ ,5
  18. 0xB6,0xF5,//00349HZ ,5#
  19. 0x4C,0xF6,//00370HZ ,6
  20. 0xD7,0xF6,//00392HZ ,6#
  21. 0x5A,0xF7,//00415HZ ,7   
  22. 0xD8,0xF7,//00440HZ 1     //12
  23. 0x4D,0xF8,//00466HZ 1#    //13
  24. 0xBD,0xF8,//00494HZ 2     //14
  25. 0x24,0xF9,//00523HZ 2#    //15
  26. 0x87,0xF9,//00554HZ 3     //16
  27. 0xE4,0xF9,//00587HZ 4     //17
  28. 0x3D,0xFA,//00622HZ 4#    //18
  29. 0x90,0xFA,//00659HZ 5     //19
  30. 0xDE,0xFA,//00698HZ 5#    //20
  31. 0x29,0xFB,//00740HZ 6     //21
  32. 0x6F,0xFB,//00784HZ 6#    //22
  33. 0xB1,0xFB,//00831HZ 7     //23
  34. 0xEF,0xFB,//00880HZ `1
  35. 0x2A,0xFC,//00932HZ `1#
  36. 0x62,0xFC,//00988HZ `2
  37. 0x95,0xFC,//01046HZ `2#
  38. 0xC7,0xFC,//01109HZ `3
  39. 0xF6,0xFC,//01175HZ `4
  40. 0x22,0xFD,//01244HZ  `4#
  41. 0x4B,0xFD,//01318HZ `5
  42. 0x73,0xFD,//01397HZ `5#
  43. 0x98,0xFD,//01480HZ `6
  44. 0xBB,0xFD,//01568HZ `6#
  45. 0xDC,0xFD,//01661HZ `7    //35
  46. };
  47. uchar code jie[]={12,14,16,17,19,21,23,24}; //音符在频率表中的位置
  48. uchar th,tl; //分别装载T0值得高低位
  49. void main()
  50. {
  51.      uint i;  //延时变量
  52.      EA=1; //打开总中断
  53.      ET0=1; //打开定时器0
  54.      TR0=1; //启动定时器0
  55.      P3=0xf0;//判断按键是否按下的标志
  56.      while(1)
  57.      {
  58.           fmq=1;//关闭蜂鸣器
  59.           if((P3&0xf0)!=0xf0)//判断按键是否俺按下
  60.           {     //在这我并没有延时消抖,有经验的人 就知道,
  61.                if(P3==0x70)   //在要求严不格的情况下是可以不写消抖语句的
  62.                {
  63.                     tl=freq[jie[0]*2]; //装初值
  64.                     th=freq[jie[0]*2+1];
  65.                     TR0=1;    //启动定时器0
  66.                     for(i=1000;i>0;i--); //延时
  67.                }
  68.                if(P3==0xb0)
  69.                {
  70.                     tl=freq[jie[1]*2];
  71.                     th=freq[jie[1]*2+1];
  72.                     TR0=1;
  73.                     for(i=1000;i>0;i--);
  74.                }
  75.                if(P3==0xd0)
  76.                {
  77.                     tl=freq[jie[2]*2];
  78.                     th=freq[jie[2]*2+1];
  79.                     TR0=1;
  80.                     for(i=1000;i>0;i--);
  81.                }
  82.                if(P3==0xe0)
  83.                {
  84.                     tl=freq[jie[3]*2];
  85.                     th=freq[jie[3]*2+1];
  86.                     TR0=1;
  87.                     for(i=1000;i>0;i--);   
  88.                }  
  89.           }  
  90.           TR0=0;//关闭定时器0
  91.      }
  92. }
  93. void time0() interrupt 1   //用于产生唱歌的频率
  94. {
  95.      TH0=th;   //装初值

  96. …………限于本文篇幅 余下代码请从51黑下载附件…………

复制代码


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

使用道具 举报

无效楼层,该帖已经被删除
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

Powered by 单片机教程网

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