找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机电子琴代码 8个按键控制8个音符 实现简单音乐播放

[复制链接]
跳转到指定楼层
楼主
ID:166423 发表于 2017-2-24 15:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
8个按键控制8个音符  实现简单音乐播放
  1. #include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

  2. #define KeyPort P3
  3. /*------------------------------------------------
  4.                   全局变量
  5. ------------------------------------------------*/

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

  7. sbit SPK=P1^2;          //定义喇叭接口

  8. unsigned char code freq[][2]={
  9.   0xD8,0xF7,//00440HZ 1   
  10.   0xBD,0xF8,//00494HZ 2  
  11.   0x87,0xF9,//00554HZ 3  
  12.   0xE4,0xF9,//00587HZ 4   
  13.   0x90,0xFA,//00659HZ 5     
  14.   0x29,0xFB,//00740HZ 6     
  15.   0xB1,0xFB,//00831HZ 7      
  16.   0xEF,0xFB,//00880HZ `1
  17. };
  18. /*------------------------------------------------
  19.                   函数声明
  20. ------------------------------------------------*/
  21. void Init_Timer0(void);//定时器初始化
  22. /*------------------------------------------------
  23.                     主函数
  24. ------------------------------------------------*/
  25. void main (void)
  26. {
  27. unsigned char num;                  

  28. Init_Timer0();    //初始化定时器0,主要用于数码管动态扫描
  29. SPK=0;            //在未按键时,喇叭低电平,防止长期高电平损坏喇叭
  30. while (1)         //主循环
  31.   {
  32.    switch(KeyPort)
  33.                 {
  34.                  case 0xfe:num= 1;break;
  35.                  case 0xfd:num= 2;break;
  36.                  case 0xfb:num= 3;break;
  37.                  case 0xf7:num= 4;break;
  38.                  case 0xef:num= 5;break;
  39.                  case 0xdf:num= 6;break;
  40.                  case 0xbf:num= 7;break;
  41.                  case 0x7f:num= 8;break;
  42.                  default:num= 0;break;
  43.                 }

  44.         
  45.    if(num==0)
  46.       {
  47.        TR0=0;
  48.        SPK=0;   //在未按键时,喇叭低电平,防止长期高电平损坏喇叭
  49.            }
  50.    else
  51.       {
  52.             High=freq[num-1][1];
  53.                    Low =freq[num-1][0];
  54.                 TR0=1;
  55.           }
  56.   }
  57. }


  58. /*------------------------------------------------
  59.                     定时器初始化子程序
  60. ------------------------------------------------*/
  61. void Init_Timer0(void)
  62. {
  63. TMOD |= 0x01;          //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响                     
  64. EA=1;            //总中断打开
  65. ET0=1;           //定时器中断打开
  66. //TR0=1;           //定时器开关打开
  67. }
  68. /*------------------------------------------------
  69.                  定时器中断子程序
  70. ------------------------------------------------*/
  71. void Timer0_isr(void) interrupt 1
  72. {
  73. TH0=High;
  74. TL0=Low;

  75. SPK=!SPK;

  76. }
复制代码


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

使用道具 举报

沙发
ID:289506 发表于 2018-7-17 20:09 | 只看该作者
烧写程序后
蜂鸣器不响啊
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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