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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7815|回復: 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丝袜在线播放 | 香蕉久久a毛片 | 国产美女福利在线观看 | 国产区在线视频 | 五月婷婷丁香 | 国产精品久久久久久久久久久久午夜片 | 中文字幕一区二区三区四区 | 亚洲91精品 | 中文字幕在线观看视频一区 | 成人三级视频 | 欧美天堂 | 天堂网avav| 国产超碰人人爽人人做人人爱 | 一区二区精品 | 性福视频在线观看 | 伊人久久精品一区二区三区 | 亚洲三区在线 | 黄色欧美在线 | 久久久久国产精品一区三寸 | 亚洲视频在线观看 | 国产亚洲精品精品国产亚洲综合 | 欧美www在线观看 | 国产精品久久久久久久久免费丝袜 | 超碰97人人人人人蜜桃 | 中文字幕亚洲一区二区三区 | 一级毛片免费视频 | 天堂网中文 | 国产成人叼嘿视频在线观看 | 国产欧美在线视频 | 在线国产精品一区 | 中文字幕国 | 91五月婷蜜桃综合 | 久久中文视频 | 女女百合av大片一区二区三区九县 | 国产精品视频一区二区三区 | 久久久久午夜 | 国产美女在线精品免费 | 中文字幕一区二区三区精彩视频 | 亚洲大片 |