久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7673|回復: 4
打印 上一主題 下一主題
收起左側

【求助】51單片機電子琴,1-7按鍵播放音符,8按鍵自動播放音樂

[復制鏈接]
跳轉到指定樓層
樓主
ID:211761 發表于 2017-6-22 09:33 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
20黑幣
學校實訓,要求51實現電子琴,要求如題。
數碼管為共陰數碼管,但多了595芯片
程序借鑒了一部分網上內容,目前可以實現1-7的發音和數碼管顯示,但按8按鍵卻蜂鳴器長鳴,不知道什么地方出錯
希望各位大神幫忙看下

#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int


sbit BeepIO =P1^7;
sbit DI1 =P1^0;
sbit DI2 =P1^1;
sbit DI3 =P1^2;
sbit DI4 =P1^3;
sbit DIO =P1^4;
sbit RCK =P1^5;
sbit SCLK =P1^6;

uint tune[]={0xfc44,0xfcac,0xfd09,0xfd34,0xfd82,0xfdc8,0xfe07};
uchar code num[]={
                   0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                   0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,
                                   0x00,0xff
                                  };
//void KeyProc(uchar dat);

uchar SoundTH;
uchar SoundTL;
unsigned char Time;
unsigned char High,Low; //定時器預裝值的高8位和低8位



                         // 音階頻率表 高八位
unsigned char code FREQH[]={
                         0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,
                         0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC, //1,2,3,4,5,6,7,8,i
                         0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,
                         0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,
                               } ;
                         // 音階頻率表 低八位
unsigned char code FREQL[]={
                         0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,
                         0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F, //1,2,3,4,5,6,7,8,i
                         0xEE,0x44, 0x6B,0xB4,0xF4,0x2D,
                         0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,
                                };

                          //世上只有媽媽好數據表
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,
                     6,2,4,      3,2,2,      5,2,1,    6,2,1,           5,2,2,         3,2,2,           1,2,1,
                     6,1,1,      5,2,1,      3,2,1,         2,2,4,           2,2,3,         3,2,1,    5,2,2,
                     5,2,1,      6,2,1,      3,2,2,         2,2,2,    1,2,4,         5,2,3,           3,2,1,
                     2,2,1,      1,2,1,      6,1,1,         1,2,1,           5,1,6,         0,0,0
                                      };
void KeyProc(uchar dat);
void delayTips(unsigned char t);
void PlaySong();

void Song()
{
   uchar i;
   uchar k;
   i=0;  
        while(i<100)
            {         
            k=MUSIC[i]+7*MUSIC[i+1]-1;//去音符振蕩頻率所需數據
            High=FREQH[k];
            Low=FREQL[k];
            Time=MUSIC[i+2];          //節拍時長
            i=i+3;
                    PlaySong();
                //        delayTips(Time); //延時所需要的節拍  
                 if(P0==0xef)
                 {
                   while(P0==0xef);
                   break;
                 }
            }
  // PlaySong();
      TR0=0;
}

//延時函數大約約2*z+5us
void delay2xus(unsigned char z)
{
   while(z--);
}

// 延時函數大約約1ms
void delayms(unsigned char x)
{
   while(x--)
   {
     delay2xus(245);
     delay2xus(245);
   }
}

//節拍延時函數
void delayTips(unsigned char t)
{
    unsigned char i;
          for(i=0;i<t;i++)
    {
            delayms(250);
    }
    TR0=0;
}

//播放音樂的函數
void PlaySong()
{
   TH0=High;//賦值定時器時間,決定頻率
   TL0=Low;
   TR0=1;      //打開定時器
   delayTips(Time); //延時所需要的節拍                     
}

/*
//void KeyProc(uchar dat);

void Song()
{
   uchar i;
   uchar k;
   i=0;  
       while(i<100)
            {         
            k=MUSIC[i]+7*MUSIC[i+1]-1;//去音符振蕩頻率所需數據
            High=FREQH[k];
            Low=FREQL[k];
            Time=MUSIC[i+2];          //節拍時長
            i=i+3;
            }
   PlaySong();
}
*/



void LEDIO(uchar x)   
{
   uchar i;
   for(i=0;i<8;i++)
   {
     if(x&0x80)
           DIO = 1;
         else
           DIO = 0;

     SCLK = 0;
         SCLK = 1;
         x <<= 1;
   }
}
//數據送入74HC595的并口輸出寄存器
void LEDRCK()
{
  RCK = 0;
  RCK = 1;
}
//延時50*T時間函數
void delay_50ms(uint t)
{
   uint j;
   for(;t>0;t--)
   for(j=6254;j>0;j--)
           ;
}
/*void LEDdisplay()
{
  uchar i;
  for(i=0;i<18;)
  {
    LEDIO(num[i]);
        LEDRCK();
        delay_50ms(20);
        i++;
        if(i==18)
        i=0;
  }
}
*/
void main()
{  
   uchar dat;
   TMOD = 0X01;
   ET0 = 1;
   TR0 = 0;
   EA = 1;

   DI1 =1;
   DI2 =1;
   DI3 =1;
   DI4 =1;

   while(1)
   { dat=~P0;
     KeyProc(dat);
   }
}



void KeyProc(uchar dat)
{
    uchar i;
    if(dat==0x00)
        {
           TR0=0;BeepIO=1;
           return;
        }
    switch(dat)
    {
          case 0x01: i=0;
                     break;
          case 0x02: i=1;
                     break;
          case 0x04: i=2;
                     break;
          case 0x08: i=3;
                     break;
          case 0x10: i=4;
                     break;
          case 0x20: i=5;  
                                    break;
          case 0x40: i=6;
                     break;
          case 0x80: i=7;
                 break;
          default:break;
         }
     if(i<7)
         {
         LEDIO(num[i+1]);
         LEDRCK();

         SoundTH =tune[i]/256;
         SoundTL =tune[i]%256;
         TR0=1;}
         else
         {Song();
       
         }
}





void BeepTimer()interrupt 1
{
  BeepIO=!BeepIO;
  TH0= SoundTH;
  TL0= SoundTL;
}





分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:211761 發表于 2017-6-22 13:43 | 只看該作者
自己頂下
回復

使用道具 舉報

板凳
ID:261683 發表于 2017-12-17 21:53 | 只看該作者
調試有錯
回復

使用道具 舉報

地板
ID:262881 發表于 2017-12-17 22:08 | 只看該作者
你按鍵沒有消抖
回復

使用道具 舉報

5#
ID:262912 發表于 2017-12-17 22:59 | 只看該作者
消抖動
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 在线看片网站 | 91在线网| 精品少妇一区二区三区日产乱码 | 国产这里只有精品 | 欧美三级电影在线播放 | 男女爱爱网站 | 日韩一二三| 日韩欧美在线观看视频网站 | 黄视频在线网站 | 夜夜骚视频 | 欧美一区二区久久 | 欧美日韩一区二区视频在线观看 | 国产传媒在线观看 | 久久久精品一区二区三区四季av | 国产精品www| 欧美中文字幕在线观看 | 色一情一乱一伦一区二区三区 | 国产高清一区二区 | 91久久| 欧美精品乱码久久久久久按摩 | 国产成人综合在线 | 国产成人av一区二区三区 | 91视频免费黄 | 精品毛片在线观看 | 国产激情小视频 | av色站| 精品国产欧美在线 | 免费a级毛片在线播放 | 国产一级免费视频 | 毛片综合| 国产欧美视频一区 | 美女在线观看国产 | 国产精品久久久久久久久免费丝袜 | av在线天堂网 | 欧美一级欧美一级在线播放 | 亚洲视频区| 亚洲精品美女在线观看 | 久久精品一区二区 | 999久久久| 亚洲精品久| 在线观看成人免费视频 |