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

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

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2991|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

電子琴設(shè)計(jì)代碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:124982 發(fā)表于 2016-6-3 22:37 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
#include <reg51.h>
sbit speaker = P0^0;

sbit K0=P2^0;
sbit K1=P2^1;
sbit K2=P2^2;
sbit K3=P2^3;
sbit K4=P2^4;
sbit K5=P2^5;
sbit K6=P2^6;
sbit K7=P2^7;


sbit green=P0^2;
sbit yello=P0^3;
sbit red=P0^4;
unsigned char timer0h, timer0l, time,YG=0,j,k,l=-1;
unsigned long i;
//--------------------------------------

                                        // 頻率-半周期數(shù)據(jù)表 高八位 本軟件共保存了四個(gè)八度的28個(gè)頻率數(shù)據(jù)
unsigned  char code Hmusic[32] = {
                                                                0xCC,0xF2, 0xF3, 0xF5, 0xF5, 0xF6, 0xF7, 0xF8,          //低音1234567
                                                                0xCC,0xF9, 0xF9, 0xFA, 0xFA, 0xFB, 0xFB, 0xFC,          //1,2,3,4,5,6,7,i
                                                                0xCC,0xFC, 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFE,          //高音 234567
                                                                0xCC,0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF           //超高音 1234567
                                                             };         

                                        // 頻率-半周期數(shù)據(jù)表 低八位
unsigned  char code Lmusic[32] = {
                                                                0xCC,0x42, 0xC1, 0x17, 0xB6, 0xD0, 0xD1, 0xB6,          //低音1234567
                                                                0xCC,0x21, 0xE1, 0x8C, 0xD8, 0x68, 0xE9, 0x5B,          //1,2,3,4,5,6,7,i
                                                                0xCC,0x8F, 0xEE, 0x44, 0x6B, 0xB4, 0xF4, 0x2D,          //高音 234567
                                                                0xCC,0x47, 0x77, 0xA2, 0xB6, 0xDA, 0xFA, 0x16           //超高音 1234567
                                                                };

unsigned  char code deng[13]={2
                                                        0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD
                                                          };
                                                                                                                               
void delay(unsigned char t) //延時(shí)程序,控制發(fā)音的時(shí)間長(zhǎng)度
{
        unsigned char t1;
        unsigned long t2;
        for(t1 = 0; t1 < t; t1++) //雙重循環(huán), 共延時(shí)t個(gè)半拍
        for(t2 = 0; t2 < 3000; t2++); //延時(shí)期間, 可進(jìn)入T0中斷去發(fā)音
        TR0 = 0; //關(guān)閉T0, 停止發(fā)音
}  
void delay1(unsigned int T) //延時(shí)程序,控制發(fā)音的時(shí)間長(zhǎng)度
{
        while(T--);
}
                                                        //一個(gè)音符有三個(gè)數(shù)字。前為第幾個(gè)音、中為第幾個(gè)八度、后為時(shí)長(zhǎng)(以半拍為單位)。
                                                        //6, 2, 3 分別代表:6, 中音, 3個(gè)半拍;
                                                        //5, 2, 1 分別代表:5, 中音, 1個(gè)半拍;
                                                        //3, 2, 2 分別代表:3, 中音, 2個(gè)半拍;
                                                        //5, 2, 2 分別代表:5, 中音, 2個(gè)半拍;
                                                        //1, 3, 2 分別代表:1, 高音, 2個(gè)半拍;
///////////////////////////////////世上只有媽媽好////////////////////////////////////////////
unsigned char code sszymmh[] ={
                                                                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,6,3,2,2,2,2,2,
                                                                1,2,2,6,1,2,1,2,2,5,1,8,0,0,0
                                                                };
///////////////////////////////////////////新年好/////////////////////////////////////////////////////////
unsigned char code xnh[] ={
                                                   1,2,1,1,2,1,1,2,2,5,1,2,3,2,1,3,2,1,3,2,2,1,2,2,1,2,1,3,2,1,5,2,2,
                                                   5,2,2,4,2,1,3,2,1,2,2,4,2,2,1,3,2,1,4,2,2,4,2,2,3,2,1,2,2,1,3,2,2,
                                                   1,2,2,1,2,1,3,2,1,2,2,2,5,1,2,7,1,1,2,2,1,1,2,4,0,0,0
                                                   };
//////////////////////////////////////外婆的澎湖灣//////////////////////////////////////////////////////
unsigned char code wpdphw[]={
                                                         3,1,2,5,1,2,5,1,2,5,1,2,6,1,1,1,2,3,6,1,2,5,1,2,1,2,2,1,2,2,6,1,2,
                                                         6,1,2,5,1,8,3,2,2,3,2,2,3,2,2,3,2,2,4,2,2,3,2,2,2,2,1,1,2,3,2,2,1,
                                                         2,2,1,2,2,1,2,2,1,2,2,2,3,2,2,2,2,8,3,2,2,3,2,2,3,2,2,3,2,1,3,2,1,
                                                         4,2,2,3,2,2,2,2,1,1,2,3,6,1,2,1,2,2,1,2,2,6,1,2,5,1,8,3,2,2,3,2,2,
                                                         3,2,2,3,2,1,3,2,1,4,2,2,3,2,2,2,2,1,1,2,3,5,1,1,5,1,1,5,1,1,5,1,1,
                                                 2,2,1,1,2,1,7,1,2,1,2,8,3,1,2,5,1,2,5,1,2,5,1,2,6,1,1,1,2,3,6,1,2,
                                                         5,1,2,1,2,2,1,2,1,1,2,1,6,1,2,6,1,2,5,1,8,3,2,2,3,2,2,3,2,2,3,2,2,
                                                         4,2,2,3,2,2,2,2,2,1,2,2,2,2,1,2,2,2,2,2,1,2,2,2,3,2,2,2,2,8,3,2,2,
                                                         3,2,2,3,2,2,3,2,1,3,2,1,4,2,2,3,2,2,2,2,2,1,2,2,6,1,2,1,2,1,1,2,1,
                                                         6,1,2,6,1,2,5,1,8,3,2,2,3,2,2,3,2,2,3,2,2,4,2,2,3,2,2,2,2,2,1,2,2,
                                                         5,1,2,5,1,2,2,2,1,1,2,1,7,1,2,1,2,8,7,1,4,7,1,2,1,2,2,2,2,4,5,1,4,
                                                         1,2,2,5,1,2,1,2,2,2,2,2,3,2,4,1,2,4,4,2,2,4,2,4,3,2,2,2,2,2,1,2,2,
                                                         7,1,2,1,2,2,2,2,6,3,2,2,2,2,8,3,2,6,3,2,2,4,2,4,4,2,3,4,2,1,3,2,3,
                                                         2,2,1,1,2,2,7,1,2,6,2,8,5,1,2,5,1,2,0,1,2,1,2,2,1,2,2,0,1,2,2,2,4,
                                                         1,2,4,2,2,4,1,2,2,2,2,2,3,2,8,5,2,4,4,2,4,3,2,6,1,2,2,7,1,4,1,2,2,
                                                         2,2,2,0,0,0
                                                        };
//////////////////////////////////時(shí)間煮雨///////////////////////////////////////////////////////////
unsigned  char code sjzy[]={
                                                        0,1,4,3,2,2,3,2,2,2,2,6,7,1,2,7,1,2,1,2,2,1,2,4,0,1,1,0,1,1,0,1,1,
                                                        3,2,2,3,2,2,2,2,2,1,2,2,2,2,2,5,2,2,5,2,2,3,2,2,3,2,8,0,1,1,0,1,1,
                                                        6,2,2,6,2,2,5,2,4,3,2,2,2,2,2,3,2,4,2,2,4,1,2,8,3,2,4,2,2,2,1,2,2,
                                                        2,2,6,7,1,2,7,1,2,6,1,2,6,1,8,0,1,1,0,1,1,3,2,2,3,2,2,2,2,6,7,1,2,
                                                        7,1,2,1,2,2,1,2,8,0,1,1,0,1,1,3,2,2,3,2,2,2,2,2,1,2,2,2,2,2,5,2,2,
                                                        5,2,2,3,2,2,3,2,8,0,1,2,0,1,1,6,2,2,6,2,2,5,2,4,3,2,2,2,2,2,3,2,4,
                                                        2,2,4,1,2,8,3,2,4,2,2,2,1,2,2,2,2,6,1,2,2,1,2,8,0,1,1,0,1,1,3,2,2,
                                                        5,2,2,6,2,4,1,3,4,7,2,6,5,2,2,3,2,4,0,1,1,1,2,2,1,2,6,6,2,2,6,2,2,
                                                        5,2,2,3,2,2,2,2,2,3,2,8,0,1,1,0,1,1,0,1,1,3,2,2,5,2,2,6,2,4,1,3,4,
                                                        7,2,6,3,2,2,1,3,4,0,1,1,3,2,2,2,2,6,6,2,2,6,2,2,5,2,2,3,2,2,2,2,2,
                                                        1,2,2,1,2,2,1,2,8,0,1,1,1,2,6,6,2,2,6,2,2,5,2,2,3,2,2,2,2,2,2,2,2,
                                                        3,2,2,0,1,2,3,2,2,5,2,2,6,2,6,1,3,2,7,2,4,3,2,4,1,3,4,0,1,1,3,2,2,
                                                        2,2,6,6,2,2,6,2,2,5,2,2,3,2,2,2,2,2,1,2,2,1,2,2,1,2,8,0,1,1,0,1,4,
                                                        3,2,2,5,2,2,6,2,4,1,3,4,7,2,6,3,2,2,2,3,2,1,3,2,0,1,1,3,2,2,2,2,6,
                                                        6,2,2,6,2,2,5,2,2,3,2,4,2,2,1,1,2,1,1,2,2,1,2,8,0,2,2,0,0,0
                                                        };
//////////////////////////////豬八戒背媳婦/////////////////////////////////
unsigned char code zbjbxf[]={
                                                                6,2,4,3,3,3,5,3,1,3,3,2,6,2,2,1,3,4,6,2,1,1,3,1,6,2,1,1,3,1,
                                                                3,3,4,3,3,1,2,3,1,3,3,1,1,3,1,6,2,4,3,3,3,5,3,1,6,3,2,6,3,2,
                                                             6,3,2,3,3,2,5,3,4,3,3,1,5,3,1,3,3,1,5,3,1,6,3,2,6,3,2,6,3,2,
                                                                3,3,2,5,3,4,5,3,2,6,2,2,5,3,2,6,2,2,3,3,1,2,3,1,3,3,1,1,3,4,
                                                                2,3,4,2,3,4,2,3,2,1,3,1,2,3,1,3,3,2,5,3,2,6,3,4,3,4,4,3,3,4,
                                                                3,4,4,3,3,2,3,4,2,3,3,2,3,4,2,3,3,1,2,3,1,3,3,1,1,3,4,2,3,4,
                                                                2,3,4,2,3,2,1,3,1,2,3,1,3,3,2,5,3,2,6,3,8,0,0,0
                                                        };
////////////////////////////////賓克斯的酒///////////////////////////////
unsigned char code bksdj[]={
                                                                3,2,4,5,2,2,5,2,2,5,2,8,6,2,2,5,2,2,3,2,4,5,2,8,3,2,4,5,2,2,
                                                                5,2,2,5,2,8,6,2,2,5,2,2,3,2,4,1,2,8,3,2,4,5,2,2,5,2,2,5,2,8,
                                                                6,2,2,5,2,2,3,2,4,5,2,8,3,2,4,5,2,2,5,2,2,5,2,8,6,2,2,5,2,2,
                                                                3,2,4,1,2,8,5,2,3,3,2,1,2,2,2,1,2,2,6,1,3,7,1,1,1,2,4,5,2,3,
                                                                3,2,1,2,2,2,1,2,2,6,1,3,1,2,1,5,1,4,6,1,3,1,2,1,5,1,4,6,1,3,
                                                                7,1,1,1,2,4,3,2,4,3,2,3,3,2,1,2,2,4,1,2,3,2,2,1,5,2,3,3,2,1,
                                                                2,2,2,1,2,2,6,1,3,7,1,1,1,2,4,5,2,3,3,2,1,2,2,2,1,2,2,6,1,3,
                                                                1,2,1,5,1,4,6,1,3,1,2,1,5,1,4,6,1,3,7,1,1,1,2,4,3,2,4,3,2,3,
                                                                1,2,1,2,2,4,1,2,12,0,0,0
                                                        };

                                                       

void yingao();
void keyscan();
void dupu();  
void song();
void panduan();
void zanting();
void liushui();
void xuange();
void main()
{
        TMOD = 1;                 //置T0定時(shí)工作方式1
        ET0 = 1;                 //開(kāi)T0中斷
        EA = 1;                 //開(kāi)CPU中斷
        IT0=1;
        EX0=1;
        while(1)
        {       
                keyscan();
                dupu();
        }
}
       
void ex0_int() interrupt 0
{
        time=0;


}
       
void t0int() interrupt 1 //T0中斷程序,控制發(fā)音的音調(diào)
{
        TR0 = 0;             //先關(guān)閉T0
        if(timer0h ==0xcc&&timer0l==0xcc)
        speaker=1;
        else
        speaker = !speaker; //輸出方波, 發(fā)音
        TH0 = timer0h; //下次的中斷時(shí)間, 這個(gè)時(shí)間, 控制音調(diào)高低
        TL0 = timer0l;
        TR0 = 1; //啟動(dòng)T0
}

void panduan()
{
        if(YG==1)
        {
                green=0;
                yello=1;
                red=1;
        }
       

        if(YG==2)
        {
                green=1;
                yello=0;
                red=1;
        }

        if(YG==3)
        {
                green=1;
                yello=1;
                red=0;
        }

        if(YG==4)
        {
        red=0;
        green=1;
        yello=0;
        }

       
}

       


void keyscan()
{
                if(!K0)                          //判斷按下的是否是按鍵0
                {
                        delay1(200);                      //消抖
                        if(!K0)                          //再次判斷按鍵0是否確實(shí)按下
                        {
                                YG++;                     //如果是LED1亮
                                panduan();
                                while(!K0);                  //等待按鍵0彈起
                        }
                }
///////////////////////////////////////////////////////////////////////
                if((!K1)&&(YG<=4))                        //判斷按下的是否是按鍵0
                {
                        delay1(200);                      //消抖
                        if(!K1)                          //再次判斷按鍵0是否確實(shí)按下
                    {
                            j=1;
                                yingao();                  
                            while(!K1);                  //等待按鍵0彈起
                                TR0=0;
                    }
           }
/////////////////////////////////////////////////////////////////////
                if((!K2)&&(YG<=4))                           //判斷按下的是否是按鍵0
                {
                        delay1(200);                      //消抖
                        if(!K2)                          //再次判斷按鍵0是否確實(shí)按下
                    {
                            j=2;
                                yingao();                  
                            while(!K2);                  //等待按鍵0彈起
                                TR0=0;
                    }
           }
/////////////////////////////////////////////////////////

                if((!K3)&&(YG<=4))                          //判斷按下的是否是按鍵0
                {
                        delay1(200);                      //消抖
                        if(!K3)                          //再次判斷按鍵0是否確實(shí)按下
                    {
                            j=3;
                                yingao();                  
                            while(!K3);                  //等待按鍵0彈起
                                TR0=0;
                    }
           }
//////////////////////////////////////////////////////////////       
        if((!K4)&&(YG<=4))                          //判斷按下的是否是按鍵0
                {
                        delay1(200);                      //消抖
                        if(!K4)                          //再次判斷按鍵0是否確實(shí)按下
                    {
                            j=4;
                                yingao();                  
                            while(!K4);                  //等待按鍵0彈起
                                TR0=0;
                    }
           }

////////////////////////////////////////////////////////////
        if((!K5)&&(YG<=4))                          //判斷按下的是否是按鍵0
                {
                        delay1(200);                      //消抖
                        if(!K5)                          //再次判斷按鍵0是否確實(shí)按下
                    {
                            j=5;
                                yingao();                  
                            while(!K5);                  //等待按鍵0彈起
                                TR0=0;
                    }
           }
///////////////////////////////////////////////////////////
        if((!K6)&&(YG<=4))                          //判斷按下的是否是按鍵0
                {
                        delay1(200);                      //消抖
                        if(!K6)                          //再次判斷按鍵0是否確實(shí)按下
                    {
                            j=6;
                                yingao();                  
                            while(!K6);                  //等待按鍵0彈起
                                TR0=0;
                    }
           }
////////////////////////////////////////////////////////////////
        if((!K7)&&(YG<=4))                          //判斷按下的是否是按鍵0
                {
                        delay1(200);                      //消抖
                        if(!K7)                          //再次判斷按鍵0是否確實(shí)按下
                    {
                            j=7;
                                yingao();                  
                            while(!K7);                  //等待按鍵0彈起
                                TR0=0;
                    }
           }               
}




void yingao()
{
       
        timer0l=Lmusic[j+8*(YG-1)];
        timer0h=Hmusic[j+8*(YG-1)];
       
        TH0=timer0h;
        TL0=timer0l;
        TR0=1;
       
}

void song() //演奏一個(gè)音符
{
        TH0 = timer0h;                 //控制音調(diào)
        TL0 = timer0l;
        TR0 = 1;                         //啟動(dòng)T0, 由T0輸出方波去發(fā)音
        delay(time);                 //控制時(shí)間長(zhǎng)度
}



void dupu()
{

               
               

                while(YG>4)
                {       
                        green=0;
                        yello=0;
                        red=0;       
                        YG++;
                        if(YG==12)
                        {
                        YG=0;
                        time=0;
                        P0=0X1D;
                        P2=0XFF;
                        }
                        else
                        time=1;
                        delay1(40000);
                        i = 0;
               
                        while(time)
                        {
                                 xuange();
                         
                                //第i個(gè)是音符, 第i+1個(gè)是第幾個(gè)八度
                                timer0h = Hmusic[k]; //從數(shù)據(jù)表中讀出頻率數(shù)值
                                timer0l = Lmusic[k]; //實(shí)際上, 是定時(shí)的時(shí)間長(zhǎng)度
                                 //讀出時(shí)間長(zhǎng)度數(shù)值
                                i=i+3;
                                song(); //發(fā)出一個(gè)音符
                                zanting();
                                liushui();
                           }
                }
               
}

void zanting()
{
                if(!K0)                          //判斷按下的是否是按鍵0
                {
                        delay1(200);                      //消抖
                        if(!K0)                          //再次判斷按鍵0是否確實(shí)按下
                        {
                                while(!K0);
                                while(1)
                                {
                                        if(!K0)                          //判斷按下的是否是按鍵0
                                        {
                                                delay1(200);                      //消抖
                                                if(!K0)                          //再次判斷按鍵0是否確實(shí)按下
                                                {
                                                        while(!K0);
                                                        break;      
                                                }
                                        }

                                }
                        }
                }
}

void liushui()
{
       
        l++;
        if(l==13)
        l=0;
        P2=deng[l];
       

}

void xuange()
{
                if(YG==6)
                                {
                                        k = sszymmh[i] + 8 * (sszymmh[i+1] - 1);
                                        time = sszymmh[i + 2];
                                }
                                if(YG==7)
                                {
                                        k = xnh[i] + 8 * (xnh[i+1] - 1);
                                        time = xnh[i + 2];
                                }
                                        if(YG==8)
                                {
                                        k = zbjbxf[i] + 8 * (zbjbxf[i+1] - 1);
                                        time = zbjbxf[i + 2];
                                }
                                                if(YG==9)
                                {
                                        k =bksdj[i] + 8 * (bksdj[i+1] - 1);
                                        time = bksdj[i + 2];
                                }
                                if(YG==10)
                                {
                                        k = wpdphw[i] + 8 * (wpdphw[i+1] - 1);
                                        time = wpdphw[i + 2];
                                }
                                if(YG==11)
                                {
                                        k = sjzy[i] + 8 * (sjzy[i+1] - 1);
                                        time = sjzy[i + 2];
                                }
}


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:124921 發(fā)表于 2016-6-4 10:06 | 只看該作者
先頂一個(gè)
回復(fù)

使用道具 舉報(bào)

板凳
ID:260573 發(fā)表于 2017-12-12 15:36 | 只看該作者
大神有proteus仿真電路圖嗎?
回復(fù)

使用道具 舉報(bào)

地板
ID:656121 發(fā)表于 2019-12-4 18:14 來(lái)自觸屏版 | 只看該作者
能提供一下頭文件嗎?
回復(fù)

使用道具 舉報(bào)

5#
ID:658466 發(fā)表于 2019-12-8 21:38 | 只看該作者
38行多了個(gè)字符2,需要?jiǎng)h除。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 午夜婷婷激情 | 蜜桃一区二区三区 | 自拍偷拍第一页 | 亚洲 欧美 日韩 精品 | 秋霞国产 | 亚洲午夜av久久乱码 | 成人av一区 | 久久久久久精 | 中文字幕一区二区三区四区五区 | 在线精品一区二区 | 成人性视频免费网站 | av国产精品 | 中文字幕国产一区 | 成人做爰999| 久久精品电影 | 国产亚洲一区二区在线观看 | 日本精品视频一区二区 | 黄色免费三级 | 午夜欧美一区二区三区在线播放 | 亚洲精品成人av | 欧美日本久久 | pacopacomama在线| 久久亚洲国产 | 久久亚洲免费 | 中文字幕日韩欧美 | 国产精品视频导航 | 黄网免费看 | av在线一区二区三区 | 欧美aa在线| 国产精品美女久久久久aⅴ国产馆 | 日韩成人免费视频 | 国产高清在线 | 欧美中文字幕在线观看 | 色婷婷精品国产一区二区三区 | 搞黄网站在线观看 | 北条麻妃99精品青青久久 | 电影在线 | 国产福利视频 | 久久99蜜桃综合影院免费观看 | 国产精品99久久久久久久vr | 99视频在线看 |