在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            22. 電子琴

            作者: 時(shí)間:2016-11-18 來源:網(wǎng)絡(luò) 收藏
            1.實(shí)驗(yàn)任務(wù)
            (1.由4X4組成16個按鈕矩陣,設(shè)計(jì)成16個音。
            (2.可隨意彈奏想要表達(dá)的音樂。
            2.電路原理

            圖4.22.1
            3.系統(tǒng)板硬件連線
            (1.把“單片機(jī)系統(tǒng)”區(qū)域中的P1.0端口用導(dǎo)線連接到“音頻放大模塊”區(qū)域中的SPKIN端口上;
            (2.把“單片機(jī)系統(tǒng)“區(qū)域中的P3.0-P3.7端口用8芯排線連接到“4X4行列式鍵盤”區(qū)域中的C1-C4R1-R4端口上;
            4.相關(guān)程序內(nèi)容
            (1.4X4行列式鍵盤識別;
            (2.音樂產(chǎn)生的方法;
            一首音樂是許多不同的音階組成的,而每個音階對應(yīng)著不同的頻率,這樣我們就可以利用不同的頻率的組合,即可構(gòu)成我們所想要的音樂了,當(dāng)然對于單片機(jī)來產(chǎn)生不同的頻率非常方便,我們可以利用單片機(jī)的定時(shí)/計(jì)數(shù)器T0來產(chǎn)生這樣方波頻率信號,因此,我們只要把一首歌曲的音階對應(yīng)頻率關(guān)系弄正確即可?,F(xiàn)在以單片機(jī)12MHZ晶振為例,例出高中低音符與單片機(jī)計(jì)數(shù)T0相關(guān)的計(jì)數(shù)值如下表所示
            音符
            頻率(HZ)
            簡譜碼(T值)

            音符
            頻率(HZ)
            簡譜碼(T值)
            低1DO
            262
            63628
            #4FA#
            740
            64860
            #1DO#
            277
            63731
            中5SO
            784
            64898
            低2RE
            294
            63835
            #5SO#
            831
            64934
            #2RE#
            311
            63928
            中6LA
            880
            64968
            低3M
            330
            64021
            #6
            932
            64994
            低4FA
            349
            64103
            中7SI
            988
            65030
            #4FA#
            370
            64185
            高1DO
            1046
            65058
            低5SO
            392
            64260
            #1DO#
            1109
            65085
            #5SO#
            415
            64331
            高2RE
            1175
            65110
            低6LA
            440
            64400

            #2RE#
            1245
            65134
            #6
            466
            64463
            高3M
            1318
            65157
            低7SI
            494
            64524
            高4FA
            1397
            65178
            中1DO
            523
            64580
            #4FA#
            1480
            65198
            #1DO#
            554
            64633
            高5SO
            1568
            65217
            中2RE
            587
            64684
            #5SO#
            1661
            65235
            #2RE#
            622
            64732
            高6LA
            1760
            65252
            中3M
            659
            64777
            #6
            1865
            65268
            中4FA
            698
            64820
            高7SI
            1967
            65283
            下面我們要為這個音符建立一個表格,有助于單片機(jī)通過查表的方式來獲得相應(yīng)的數(shù)據(jù)
            低音0-19之間,中音在20-39之間,高音在40-59之間
            TABLE:DW0,63628,63835,64021,64103,64260,64400,64524,0,0
            DW0,63731,63928,0,64185,64331,64463,0,0,0
            DW0,64580,64684,64777,64820,64898,64968,65030,0,0
            DW0,64633,64732,0,64860,64934,64994,0,0,0
            DW0,65058,65110,65157,65178,65217,65252,65283,0,0
            DW0,65085,65134,0,65198,65235,65268,0,0,0
            DW0
            2、音樂的音拍,一個節(jié)拍為單位(C調(diào))
            曲調(diào)值
            DELAY

            曲調(diào)值
            DELAY
            調(diào)4/4
            125ms

            調(diào)4/4
            62ms
            調(diào)3/4
            187ms

            調(diào)3/4
            94ms
            調(diào)2/4
            250ms

            調(diào)2/4
            125ms
            對于不同的曲調(diào)我們也可以用單片機(jī)的另外一個定時(shí)/計(jì)數(shù)器來完成。
            下面就用AT89S51單片機(jī)產(chǎn)生一首“生日快樂”歌曲來說明單片機(jī)如何產(chǎn)生的。
            在這個程序中用到了兩個定時(shí)/計(jì)數(shù)器來完成的。其中T0用來產(chǎn)生音符頻率,T1用來產(chǎn)生音拍。
            5.程序框圖
            開始

            行列式鍵盤按鍵按下成功否?

            識別按鍵功能

            根據(jù)按鍵功能,裝入音符T值到T0中

            啟動T0工作

            行列式鍵盤按鍵釋放成功否?

            停止T0工作

            T0初始化并開中斷允放T0中斷


            T0中斷入口

            重裝TH0,TL0初值

            P1.0取反

            中斷返回

            圖4.22.2
            6.匯編源程序
            KEYBUFEQU30H
            STH0EQU31H
            STL0EQU32H
            TEMPEQU33H
            ORG00H
            LJMPSTART
            ORG0BH
            LJMPINT_T0
            START:MOVTMOD,#01H
            SETBET0
            SETBEA
            WAIT:
            MOVP3,#0FFH
            CLRP3.4
            MOVA,P3
            ANLA,#0FH
            XRLA,#0FH
            JZNOKEY1
            LCALLDELY10MS
            MOVA,P3
            ANLA,#0FH
            XRLA,#0FH
            JZNOKEY1
            MOVA,P3
            ANLA,#0FH
            CJNEA,#0EH,NK1
            MOVKEYBUF,#0
            LJMPDK1
            NK1:CJNEA,#0DH,NK2
            MOVKEYBUF,#1
            LJMPDK1
            NK2:CJNEA,#0BH,NK3
            MOVKEYBUF,#2
            LJMPDK1
            NK3:CJNEA,#07H,NK4
            MOVKEYBUF,#3
            LJMPDK1
            NK4:NOP
            DK1:
            MOVA,KEYBUF
            MOVDPTR,#TABLE
            MOVCA,@A+DPTR
            MOVP0,A
            MOVA,KEYBUF
            MOVB,#2
            MULAB
            MOVTEMP,A
            MOVDPTR,#TABLE1
            MOVCA,@A+DPTR
            MOVSTH0,A
            MOVTH0,A
            INCTEMP
            MOVA,TEMP
            MOVCA,@A+DPTR
            MOVSTL0,A
            MOVTL0,A
            SETBTR0

            DK1A:MOVA,P3
            ANLA,#0FH
            XRLA,#0FH
            JNZDK1A
            CLRTR0
            NOKEY1:
            MOVP3,#0FFH
            CLRP3.5
            MOVA,P3
            ANLA,#0FH
            XRLA,#0FH
            JZNOKEY2
            LCALLDELY10MS
            MOVA,P3
            ANLA,#0FH
            XRLA,#0FH
            JZNOKEY2
            MOVA,P3
            ANLA,#0FH
            CJNEA,#0EH,NK5
            MOVKEYBUF,#4
            LJMPDK2
            NK5:CJNEA,#0DH,NK6
            MOVKEYBUF,#5
            LJMPDK2
            NK6:CJNEA,#0BH,NK7
            MOVKEYBUF,#6
            LJMPDK2
            NK7:CJNEA,#07H,NK8
            MOVKEYBUF,#7
            LJMPDK2
            NK8:NOP
            DK2:
            MOVA,KEYBUF
            MOVDPTR,#TABLE
            MOVCA,@A+DPTR
            MOVP0,A
            MOVA,KEYBUF
            MOVB,#2
            MULAB
            MOVTEMP,A
            MOVDPTR,#TABLE1
            MOVCA,@A+DPTR
            MOVSTH0,A
            MOVTH0,A
            INCTEMP
            MOVA,TEMP
            MOVCA,@A+DPTR
            MOVSTL0,A
            MOVTL0,A
            SETBTR0
            DK2A:MOVA,P3
            ANLA,#0FH
            XRLA,#0FH
            JNZDK2A
            CLRTR0
            NOKEY2:
            MOVP3,#0FFH
            CLRP3.6
            MOVA,P3
            ANLA,#0FH
            XRLA,#0FH
            JZNOKEY3
            LCALLDELY10MS
            MOVA,P3
            ANLA,#0FH
            XRLA,#0FH
            JZNOKEY3
            MOVA,P3
            ANLA,#0FH
            CJNEA,#0EH,NK9
            MOVKEYBUF,#8
            LJMPDK3
            NK9:CJNEA,#0DH,NK10
            MOVKEYBUF,#9
            LJMPDK3
            NK10:CJNEA,#0BH,NK11
            MOVKEYBUF,#10
            LJMPDK3
            NK11:CJNEA,#07H,NK12
            MOVKEYBUF,#11
            LJMPDK3
            NK12:NOP
            DK3:
            MOVA,KEYBUF
            MOVDPTR,#TABLE
            MOVCA,@A+DPTR
            MOVP0,A
            MOVA,KEYBUF
            MOVB,#2
            MULAB
            MOVTEMP,A
            MOVDPTR,#TABLE1
            MOVCA,@A+DPTR
            MOVSTH0,A
            MOVTH0,A
            INCTEMP
            MOVA,TEMP
            MOVCA,@A+DPTR
            MOVSTL0,A
            MOVTL0,A
            SETBTR0

            DK3A:MOVA,P3
            ANLA,#0FH
            XRLA,#0FH
            JNZDK3A
            CLRTR0
            NOKEY3:
            MOVP3,#0FFH
            CLRP3.7
            MOVA,P3
            ANLA,#0FH
            XRLA,#0FH
            JZNOKEY4
            LCALLDELY10MS
            MOVA,P3
            ANLA,#0FH
            XRLA,#0FH
            JZNOKEY4
            MOVA,P3
            ANLA,#0FH
            CJNEA,#0EH,NK13
            MOVKEYBUF,#12
            LJMPDK4
            NK13:CJNEA,#0DH,NK14
            MOVKEYBUF,#13
            LJMPDK4
            NK14:CJNEA,#0BH,NK15
            MOVKEYBUF,#14
            LJMPDK4
            NK15:CJNEA,#07H,NK16
            MOVKEYBUF,#15
            LJMPDK4
            NK16:NOP
            DK4:
            MOVA,KEYBUF
            MOVDPTR,#TABLE
            MOVCA,@A+DPTR
            MOVP0,A
            MOVA,KEYBUF
            MOVB,#2
            MULAB
            MOVTEMP,A
            MOVDPTR,#TABLE1
            MOVCA,@A+DPTR
            MOVSTH0,A
            MOVTH0,A
            INCTEMP
            MOVA,TEMP
            MOVCA,@A+DPTR
            MOVSTL0,A
            MOVTL0,A
            SETBTR0
            DK4A:MOVA,P3
            ANLA,#0FH
            XRLA,#0FH
            JNZDK4A
            CLRTR0
            NOKEY4:
            LJMPWAIT
            DELY10MS:
            MOVR6,#10
            D1:MOVR7,#248
            DJNZR7,$
            DJNZR6,D1
            RET
            INT_T0:
            MOVTH0,STH0
            MOVTL0,STL0
            CPLP1.0
            RETI
            TABLE:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H
            DB7FH,6FH,77H,7CH,39H,5EH,79H,71H

            TABLE1:DW64021,64103,64260,64400
            DW64524,64580,64684,64777
            DW64820,64898,64968,65030
            DW65058,65110,65157,65178
            END
            7.C語言源程序
            #include
            unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,
            0x66,0x6d,0x7d,0x07,
            0x7f,0x6f,0x77,0x7c,
            0x39,0x5e,0x79,0x71};
            unsignedchartemp;
            unsignedcharkey;
            unsignedchari,j;
            unsignedcharSTH0;
            unsignedcharSTL0;
            unsignedintcodetab[]={64021,64103,64260,64400,
            64524,64580,64684,64777,
            64820,64898,64968,65030,
            65058,65110,65157,65178};
            voidmain(void)
            {
            TMOD=0x01;
            ET0=1;
            EA=1;
            while(1)
            {
            P3=0xff;
            P3_4=0;
            temp=P3;
            temp=temp&0x0f;
            if(temp!=0x0f)
            {
            for(i=50;i>0;i--)
            for(j=200;j>0;j--);
            temp=P3;
            temp=temp&0x0f;
            if(temp!=0x0f)
            {
            temp=P3;
            temp=temp&0x0f;
            switch(temp)
            {
            case0x0e:
            key=0;
            break;
            case0x0d:
            key=1;
            break;
            case0x0b:
            key=2;
            break;
            case0x07:
            key=3;
            break;
            }
            temp=P3;
            P1_0=~P1_0;
            P0=table[key];
            STH0=tab[key]/256;
            STL0=tab[key]%256;
            TR0=1;
            temp=temp&0x0f;
            while(temp!=0x0f)
            {
            temp=P3;
            temp=temp&0x0f;
            }
            TR0=0;
            }
            }

            P3=0xff;
            P3_5=0;
            temp=P3;
            temp=temp&0x0f;
            if(temp!=0x0f)
            {
            for(i=50;i>0;i--)
            for(j=200;j>0;j--);
            temp=P3;
            temp=temp&0x0f;
            if(temp!=0x0f)
            {
            temp=P3;
            temp=temp&0x0f;
            switch(temp)
            {
            case0x0e:
            key=4;
            break;
            case0x0d:
            key=5;
            break;
            case0x0b:
            key=6;
            break;
            case0x07:
            key=7;
            break;
            }
            temp=P3;
            P1_0=~P1_0;
            P0=table[key];
            STH0=tab[key]/256;
            STL0=tab[key]%256;
            TR0=1;
            temp=temp&0x0f;
            while(temp!=0x0f)
            {
            temp=P3;
            temp=temp&0x0f;
            }
            TR0=0;
            }
            }

            P3=0xff;
            P3_6=0;
            temp=P3;
            temp=temp&0x0f;
            if(temp!=0x0f)
            {
            for(i=50;i>0;i--)
            for(j=200;j>0;j--);
            temp=P3;
            temp=temp&0x0f;
            if(temp!=0x0f)
            {
            temp=P3;
            temp=temp&0x0f;
            switch(temp)
            {
            case0x0e:
            key=8;
            break;
            case0x0d:
            key=9;
            break;
            case0x0b:
            key=10;
            break;
            case0x07:
            key=11;
            break;
            }
            temp=P3;
            P1_0=~P1_0;
            P0=table[key];
            STH0=tab[key]/256;
            STL0=tab[key]%256;
            TR0=1;
            temp=temp&0x0f;
            while(temp!=0x0f)
            {
            temp=P3;
            temp=temp&0x0f;
            }
            TR0=0;
            }
            }
            P3=0xff;
            P3_7=0;
            temp=P3;
            temp=temp&0x0f;
            if(temp!=0x0f)
            {
            for(i=50;i>0;i--)
            for(j=200;j>0;j--);
            temp=P3;
            temp=temp&0x0f;
            if(temp!=0x0f)
            {
            temp=P3;
            temp=temp&0x0f;
            switch(temp)
            {
            case0x0e:
            key=12;
            break;
            case0x0d:
            key=13;
            break;
            case0x0b:
            key=14;
            break;
            case0x07:
            key=15;
            break;
            }
            temp=P3;
            P1_0=~P1_0;
            P0=table[key];
            STH0=tab[key]/256;
            STL0=tab[key]%256;
            TR0=1;
            temp=temp&0x0f;
            while(temp!=0x0f)
            {
            temp=P3;
            temp=temp&0x0f;
            }
            TR0=0;
            }
            }
            }
            }

            voidt0(void)interrupt1using0
            {
            TH0=STH0;
            TL0=STL0;
            P1_0=~P1_0;
            }


            關(guān)鍵詞: 電子琴單片

            評論


            技術(shù)專區(qū)

            關(guān)閉