在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 單片機設計的電子琴

            單片機設計的電子琴

            作者: 時間:2016-11-10 來源:網(wǎng)絡 收藏
            功能說明:

            電子琴小巧、聲音悅耳、便于攜帶、成本低、美觀大方,能演奏絕大部分音樂。本作品采用的16鍵設計方法,也可以擴展成21鍵的。另外還能在這個基礎上附加一些功能。

            本文引用地址:http://www.biyoush.com/article/201611/317331.htm

            1.由4×4組成的16個按鈕矩陣,設計成16個音。

            2.硬件原理圖:

            程序附錄:

            實物圖:

            原理圖:

            源代碼:

            ;************* 單片機--電子琴 *******************;
            ;*MCU: AT89C52 ;
            ;*MCU-crystal: 12M ;
            ;*Version: 01 ;
            ;*Last Updata: 2007-6-9 ;
            ;*Author: zhaojun ;
            ;*Description: ;
            ;P2口是電子琴按鍵輸入 ;
            ;P1.0為音頻輸出 ;
            ;***************WAVE-E6000/T*********************;
            ;******************************;
            ; 電子琴 ;
            ;******************************;
            ORG 0000H ;主程序起始地址
            JMP START ;跳至主程序
            ORG 000BH ;TIMER0中斷起始地址
            JMP TIM0 ;跳至TIMER0中斷起始地址
            START: MOV TMOD,#00000001B ;設TIMER0在MODE1
            MOV IE,#10000010B ;中斷使能
            SETB TR0 ;啟動TIMER0

            L1: CALL KEY ;調(diào)用KEY,判斷是否有鍵按下?
            CLR EA ;中斷屏蔽
            JB F0,L1 ;沒按則F0=1,有按則F0=0
            MOV A,22H ;有按則將取碼指針暫存地址載入A
            RL A ;乘2
            MOV DPTR,#TABLE ;
            MOVC A,@A+DPTR ;至TABLE取碼,取T的值
            MOV TH0,A ;取到的高位字節(jié)存入TH0
            MOV A,21H ;取到的高位字節(jié)存入(21H)
            MOV A,22H ;再載入取碼指針值
            RL A ;乘2
            INC A ;加1
            MOVC A,@A+DPTR ;至TABLE1取相對的低位字節(jié)計數(shù)值
            MOV TL0,A ;取到的低位字節(jié)存入TLO
            MOV 20H,A ;取到的低位字節(jié)存入(20H)
            L2: CALL KEY ;調(diào)用KEY判斷有按否?
            SETB EA ;中斷使能
            JB F0,L1 ;有按否?
            JMP L2 ;有則跳至L2

            KEY: SETB F0 ;設F0=1
            MOV R3,#0F7H ;掃描初值(P23=0)
            MOV R1,00H ;取碼指針初值
            L3: MOV A,R3 ;載入掃描指針
            MOV P2,A ;輸出至P2,開始掃描(P23~P20)一行為0
            MOV A,P2 ;讀入P2
            CLR C
            CPL C ;令C=1
            MOV R5,#04H ;檢測P27~P24
            L4: RLC A ;左移一位(P27~P24)
            JNC KEYIN ;檢測行C=0,表示被按
            INC R1 ;沒按則取碼值指針加1
            DJNZ R5,L4 ;4列檢測完畢了?
            MOV A,R3 ;載入掃描指針
            CLR C
            CPL C ;C=1
            RRC A ;掃描下一行,即下一行為0
            MOV R3,A ;存回R3掃描指針寄存器
            JC L3 ;C=0表示掃描完畢
            RET
            KEYIN: MOV 22H,R1 ;取碼指針存入22H地址
            CLR F0 ;令F0=0
            RET

            TIM0: PUSH ACC ;將A的值暫存于堆棧
            PUSH PSW ;將PSW的值暫存于堆棧
            MOV TL0,20H ;重設計數(shù)值
            MOV TH0,21H
            CPL P1.0 ;將P1.0位反相
            POP PSW ;至堆棧取回PSW的值
            POP ACC ;至堆棧取回A的值
            RETI ;返回主程序

            TABLE: DW 64021,64103,64260,64400
            DW 64524,64580,64684,64777
            DW 64820,64898,64968,65030
            DW 65058,65110,65157,65178
            END



            關鍵詞: 單片機電子

            評論


            技術專區(qū)

            關閉