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

標題: 電子琴設計代碼 [打印本頁]

作者: ycy456    時間: 2016-6-3 22:37
標題: 電子琴設計代碼
#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;
//--------------------------------------

                                        // 頻率-半周期數據表 高八位 本軟件共保存了四個八度的28個頻率數據
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
                                                             };         

                                        // 頻率-半周期數據表 低八位
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) //延時程序,控制發音的時間長度
{
        unsigned char t1;
        unsigned long t2;
        for(t1 = 0; t1 < t; t1++) //雙重循環, 共延時t個半拍
        for(t2 = 0; t2 < 3000; t2++); //延時期間, 可進入T0中斷去發音
        TR0 = 0; //關閉T0, 停止發音
}  
void delay1(unsigned int T) //延時程序,控制發音的時間長度
{
        while(T--);
}
                                                        //一個音符有三個數字。前為第幾個音、中為第幾個八度、后為時長(以半拍為單位)。
                                                        //6, 2, 3 分別代表:6, 中音, 3個半拍;
                                                        //5, 2, 1 分別代表:5, 中音, 1個半拍;
                                                        //3, 2, 2 分別代表:3, 中音, 2個半拍;
                                                        //5, 2, 2 分別代表:5, 中音, 2個半拍;
                                                        //1, 3, 2 分別代表:1, 高音, 2個半拍;
///////////////////////////////////世上只有媽媽好////////////////////////////////////////////
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
                                                        };
//////////////////////////////////時間煮雨///////////////////////////////////////////////////////////
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定時工作方式1
        ET0 = 1;                 //開T0中斷
        EA = 1;                 //開CPU中斷
        IT0=1;
        EX0=1;
        while(1)
        {       
                keyscan();
                dupu();
        }
}
       
void ex0_int() interrupt 0
{
        time=0;


}
       
void t0int() interrupt 1 //T0中斷程序,控制發音的音調
{
        TR0 = 0;             //先關閉T0
        if(timer0h ==0xcc&&timer0l==0xcc)
        speaker=1;
        else
        speaker = !speaker; //輸出方波, 發音
        TH0 = timer0h; //下次的中斷時間, 這個時間, 控制音調高低
        TL0 = timer0l;
        TR0 = 1; //啟動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是否確實按下
                        {
                                YG++;                     //如果是LED1亮
                                panduan();
                                while(!K0);                  //等待按鍵0彈起
                        }
                }
///////////////////////////////////////////////////////////////////////
                if((!K1)&&(YG<=4))                        //判斷按下的是否是按鍵0
                {
                        delay1(200);                      //消抖
                        if(!K1)                          //再次判斷按鍵0是否確實按下
                    {
                            j=1;
                                yingao();                  
                            while(!K1);                  //等待按鍵0彈起
                                TR0=0;
                    }
           }
/////////////////////////////////////////////////////////////////////
                if((!K2)&&(YG<=4))                           //判斷按下的是否是按鍵0
                {
                        delay1(200);                      //消抖
                        if(!K2)                          //再次判斷按鍵0是否確實按下
                    {
                            j=2;
                                yingao();                  
                            while(!K2);                  //等待按鍵0彈起
                                TR0=0;
                    }
           }
/////////////////////////////////////////////////////////

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

////////////////////////////////////////////////////////////
        if((!K5)&&(YG<=4))                          //判斷按下的是否是按鍵0
                {
                        delay1(200);                      //消抖
                        if(!K5)                          //再次判斷按鍵0是否確實按下
                    {
                            j=5;
                                yingao();                  
                            while(!K5);                  //等待按鍵0彈起
                                TR0=0;
                    }
           }
///////////////////////////////////////////////////////////
        if((!K6)&&(YG<=4))                          //判斷按下的是否是按鍵0
                {
                        delay1(200);                      //消抖
                        if(!K6)                          //再次判斷按鍵0是否確實按下
                    {
                            j=6;
                                yingao();                  
                            while(!K6);                  //等待按鍵0彈起
                                TR0=0;
                    }
           }
////////////////////////////////////////////////////////////////
        if((!K7)&&(YG<=4))                          //判斷按下的是否是按鍵0
                {
                        delay1(200);                      //消抖
                        if(!K7)                          //再次判斷按鍵0是否確實按下
                    {
                            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() //演奏一個音符
{
        TH0 = timer0h;                 //控制音調
        TL0 = timer0l;
        TR0 = 1;                         //啟動T0, 由T0輸出方波去發音
        delay(time);                 //控制時間長度
}



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個是音符, 第i+1個是第幾個八度
                                timer0h = Hmusic[k]; //從數據表中讀出頻率數值
                                timer0l = Lmusic[k]; //實際上, 是定時的時間長度
                                 //讀出時間長度數值
                                i=i+3;
                                song(); //發出一個音符
                                zanting();
                                liushui();
                           }
                }
               
}

void zanting()
{
                if(!K0)                          //判斷按下的是否是按鍵0
                {
                        delay1(200);                      //消抖
                        if(!K0)                          //再次判斷按鍵0是否確實按下
                        {
                                while(!K0);
                                while(1)
                                {
                                        if(!K0)                          //判斷按下的是否是按鍵0
                                        {
                                                delay1(200);                      //消抖
                                                if(!K0)                          //再次判斷按鍵0是否確實按下
                                                {
                                                        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];
                                }
}



作者: qzhyjd    時間: 2016-6-4 10:06
先頂一個
作者: 天上人間    時間: 2017-12-12 15:36
大神有proteus仿真電路圖嗎?
作者: pok    時間: 2019-12-4 18:14
能提供一下頭文件嗎?
作者: 愛自由O    時間: 2019-12-8 21:38
38行多了個字符2,需要刪除。




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 你懂的在线视频播放 | 久久久综合精品 | 日韩一区二区三区在线播放 | 亚洲一区视频在线 | 国产 欧美 日韩 一区 | 国产精品污www在线观看 | 午夜一区| 亚洲国产精久久久久久久 | 国产精品精品视频一区二区三区 | 狠狠草视频 | 免费99精品国产自在在线 | 国产高清精品网站 | 精品久久久久久久久久 | 亚洲精品久 | 久久这里有精品 | 国产成人精品在线播放 | 日韩不卡一区二区 | 色婷婷综合久久久中字幕精品久久 | 情侣黄网站免费看 | 国产精品久久网 | 国产电影精品久久 | 在线观看中文字幕视频 | 日日干日日操 | av在线免费观看网站 | 97偷拍视频| 欧美 日韩 国产 成人 在线 91 | 国内精品一区二区三区 | 美女视频网站久久 | 久久久噜噜噜久久中文字幕色伊伊 | 天天干天天爽 | 黄色av免费网站 | 伊人免费在线观看高清 | 亚洲精品一二区 | 91黄在线观看 | 日本视频免费 | 久久精品国产一区二区电影 | 精品免费视频 | 日韩欧美国产一区二区三区 | www.成人.com | 超碰日韩 | 久久在线 |