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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 7662|回復(fù): 4
收起左側(cè)

【求助】51單片機(jī)電子琴,1-7按鍵播放音符,8按鍵自動(dòng)播放音樂

[復(fù)制鏈接]
ID:211761 發(fā)表于 2017-6-22 09:33 | 顯示全部樓層 |閱讀模式
20黑幣
學(xué)校實(shí)訓(xùn),要求51實(shí)現(xiàn)電子琴,要求如題。
數(shù)碼管為共陰數(shù)碼管,但多了595芯片
程序借鑒了一部分網(wǎng)上內(nèi)容,目前可以實(shí)現(xiàn)1-7的發(fā)音和數(shù)碼管顯示,但按8按鍵卻蜂鳴器長(zhǎng)鳴,不知道什么地方出錯(cuò)
希望各位大神幫忙看下

#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; //定時(shí)器預(yù)裝值的高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,
                                };

                          //世上只有媽媽好數(shù)據(jù)表
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;//去音符振蕩頻率所需數(shù)據(jù)
            High=FREQH[k];
            Low=FREQL[k];
            Time=MUSIC[i+2];          //節(jié)拍時(shí)長(zhǎng)
            i=i+3;
                    PlaySong();
                //        delayTips(Time); //延時(shí)所需要的節(jié)拍  
                 if(P0==0xef)
                 {
                   while(P0==0xef);
                   break;
                 }
            }
  // PlaySong();
      TR0=0;
}

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

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

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

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

/*
//void KeyProc(uchar dat);

void Song()
{
   uchar i;
   uchar k;
   i=0;  
       while(i<100)
            {         
            k=MUSIC[i]+7*MUSIC[i+1]-1;//去音符振蕩頻率所需數(shù)據(jù)
            High=FREQH[k];
            Low=FREQL[k];
            Time=MUSIC[i+2];          //節(jié)拍時(shí)長(zhǎng)
            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;
   }
}
//數(shù)據(jù)送入74HC595的并口輸出寄存器
void LEDRCK()
{
  RCK = 0;
  RCK = 1;
}
//延時(shí)50*T時(shí)間函數(shù)
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;
}





回復(fù)

使用道具 舉報(bào)

ID:211761 發(fā)表于 2017-6-22 13:43 | 顯示全部樓層
自己頂下
回復(fù)

使用道具 舉報(bào)

ID:261683 發(fā)表于 2017-12-17 21:53 | 顯示全部樓層
調(diào)試有錯(cuò)
回復(fù)

使用道具 舉報(bào)

ID:262881 發(fā)表于 2017-12-17 22:08 | 顯示全部樓層
你按鍵沒有消抖
回復(fù)

使用道具 舉報(bào)

ID:262912 發(fā)表于 2017-12-17 22:59 | 顯示全部樓層
消抖動(dòng)
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 成人在线亚洲 | 亚洲国产欧美在线 | 日韩精品一区二区三区免费观看 | 国产精品夜间视频香蕉 | 久久99视频免费观看 | 精品成人在线视频 | 成人久久久久 | 久久久精品视 | 国产成人黄色 | 一区精品国产欧美在线 | 日本精品视频 | 国产日韩久久 | 国产亚洲精品精品国产亚洲综合 | 综合视频在线 | 一起操网站 | 国产黄色精品 | 欧美日韩在线电影 | 久久久国产精品视频 | 中文字幕日韩欧美一区二区三区 | 91精品国产自产在线老师啪 | 国内精品久久久久久久 | 国产精品久久久久久福利一牛影视 | 亚州精品天堂中文字幕 | 精品国产欧美在线 | 欧美一区二区三区在线观看 | 国产xxxx搡xxxxx搡麻豆 | 精品少妇一区二区三区日产乱码 | 91久久伊人 | 国产一区 | 欧美三级在线 | 午夜精品影院 | 精品国产免费人成在线观看 | 91久久夜色精品国产网站 | 精品中文字幕一区 | 人人爱干 | 人成在线视频 | 久久免费电影 | 中文字幕乱码视频32 | 亚欧洲精品在线视频免费观看 | 成人免费影院 | 日本精品在线观看 |