在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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) > 設(shè)計(jì)應(yīng)用 > 簡易電子琴的設(shè)計(jì)

            簡易電子琴的設(shè)計(jì)

            作者: 時(shí)間:2012-07-05 來源:網(wǎng)絡(luò) 收藏
            本次設(shè)計(jì)中單片機(jī)晶振為12MHZ,那么定時(shí)器的計(jì)數(shù)周期為1MHZ,假如選擇工作方式1,那T值便為T= 216--5﹡105/相應(yīng)的頻率 ,那么根據(jù)不同的頻率計(jì)算出應(yīng)該賦給定時(shí)器的計(jì)數(shù)值,列出不同音符與單片機(jī)計(jì)數(shù)T0相關(guān)的計(jì)數(shù)值如下表所示:

            音符
            頻率(HZ)
            簡譜碼(T值)
            中 1 DO
            523
            64580
            中 2 RE
            587
            64684
            中 3 M
            659
            64777
            中 4 FA
            698
            64820
            中 5 SO
            784
            64898
            中 6 LA
            880
            64968
            中 7 SI
            988
            65030

            采用查表程序進(jìn)行查表時(shí),可以為這個(gè)音符建立一個(gè)表格,有助于單片機(jī)通過查表的方式來獲得相應(yīng)的數(shù)據(jù):
            TABLE DW 64580,64684,64777,64820,64898,64968,65030
            源程序:
            方案一:產(chǎn)生按鍵音符
            ORG 0000H
            LJMP MAIN
            ORG 000BH
            LJMP BREAK
            MAIN: MOV TMOD,#01H ;設(shè)置定時(shí)器0的工作方式
            SETB EA
            SETB ET0 ; 設(shè)置定時(shí)器0中斷
            SETB TR0 ; 啟動(dòng)定時(shí)器0
            WAIT1: LCALL KEY ; 調(diào)用KEY子程序,判斷有鍵按下否?第幾個(gè)鍵?
            CLR EA ;屏蔽中斷
            CJNE R3,#00H,WAIT1 ;如果R3=0,表示有鍵按下
            MOV A,22H ;將22H里存放的按鍵號(hào)送給A
            RL A ; 因?yàn)椴楸砝锒际亲?,所以得?查得數(shù)據(jù)
            MOV DPTR,#TABLE ;指向表頭
            MOVC A,@A+DPTR ; 查表
            MOV TH0,A ;將數(shù)據(jù)高位送TH0
            MOV 21H,A ; 將高位備份
            MOV A,22H ;將22H里存放的按鍵號(hào)送給A
            RL A ;因?yàn)椴楸砝锒际亲郑缘贸?查得數(shù)據(jù)
            INC A ;取低位數(shù)據(jù)
            MOVC A,@A+DPTR
            MOV TL0,A
            MOV 20H,A
            WAIT2: LCALL KEY
            SETB EA
            CJNE R3,#00H,WAIT1
            JMP WAIT2
            KEY: MOV R3,#00H ; KEY子程序,判斷有鍵按下否?第幾個(gè)鍵?
            MOV R1,#0FFH
            MOV R0,#00H
            MOV A,R1
            MOV P2,A
            MOV A,P2
            CLR C
            CPL C ;利用標(biāo)志位CY來判斷是哪個(gè)鍵按下
            MOV R2,#08H
            WAIT3: RLC A ;移位判斷
            JNC STORE
            INC R0
            DJNZ R2,WAIT3
            STORE: MOV 22H,R0 ; 將按鍵號(hào)存22H,R3=0有鍵按下
            MOV R3,#00H
            RET
            BREAK: PUSH ACC ; 中斷產(chǎn)生方波,從P1.0口輸出
            PUSH PSW
            MOV TL0,20H
            MOV TH0,21H
            CPL P1.0
            POP PSW
            POP ACC
            RETI
            TABLE: DW 65030,64968,64898,64820,64777,64684,64580 ; 7,6,5,4,3,2,1
            END
            方案二:產(chǎn)生按鍵音符
            ORG 0000H
            SJMP START
            ORG 000BH
            AJMP INT_0
            ORG 0030H
            START: MOV P1,#00H
            SETB EA
            SETB ET0 ;計(jì)數(shù)器0
            MOV TMOD,#02H
            MOV TH1,#09CH
            MOV TL1,#09CH ;定時(shí)器初植
            CLR TR0 ;定時(shí)器不允許
            SCAN: ;鍵盤掃描
            MOV A,P2 ;判斷鍵盤按下,跳到SCAN_1,若未按,繼續(xù)掃描
            CJNE A,#0FFH,SCAN_1
            NOP
            SJMP SCAN
            SCAN_1:ACALL DELAY ;是不是真的要按下?如果是,則跳轉(zhuǎn)SU_KEY查詢是哪個(gè)按下?
            MOV A,P2
            CJNE A,#0FFH,SU_KEY
            NOP
            SJMP SCAN
            SU_KEY:JNB P2.1,MU_1 ;判斷是哪個(gè)鍵按下?
            JNB P2.2,MU_2
            JNB P2.3,MU_3
            JNB P2.4,MU_4
            JNB P2.5,MU_5
            JNB P2.6,MU_6
            JNB P2.7,MU_7
            SJMP SCAN
            ;R1信號(hào)周期
            MU_1: MOV R1,#19 ;如果第一個(gè)按鍵按下,則R1=19,同時(shí)程序轉(zhuǎn)NEXT
            SJMP NEXT
            MU_2: MOV R1,#17
            SJMP NEXT
            MU_3: MOV R1,#15
            SJMP NEXT
            MU_4: MOV R1,#14
            SJMP NEXT
            MU_5: MOV R1,#13
            SJMP NEXT
            MU_6: MOV R1,#11
            SJMP NEXT
            MU_7: MOV R1,#10
            SJMP NEXT
            NEXT: MOV A,R1
            MOV R0,A
            SETB TR0 ;啟動(dòng)定時(shí)器0
            NEXT_1:MOV A,P2 ; 沒鍵按下繼續(xù)執(zhí)行,有鍵按下,返回讀引腳
            CJNE A,#0FFH,NEXT_1
            ACALL DELAY
            MOV A,P2 ;真的沒鍵按下?
            CJNE A,#0FFH,NEXT_1
            CLR TR0 ;不響
            AJMP SCAN ;掃描鍵盤去

            關(guān)鍵詞: 電子琴 AT89C51 LM324

            評(píng)論


            相關(guān)推薦

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

            關(guān)閉