<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 簡(jiǎn)易電子琴的設計

簡(jiǎn)易電子琴的設計

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

音符
頻率(HZ)
簡(jiǎn)譜碼(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è)表格,有助于單片機通過(guò)查表的方式來(lái)獲得相應的數據:
TABLE DW 64580,64684,64777,64820,64898,64968,65030
源程序:
方案一:產(chǎn)生按鍵音符
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP BREAK
MAIN: MOV TMOD,#01H ;設置定時(shí)器0的工作方式
SETB EA
SETB ET0 ; 設置定時(shí)器0中斷
SETB TR0 ; 啟動(dòng)定時(shí)器0
WAIT1: LCALL KEY ; 調用KEY子程序,判斷有鍵按下否?第幾個(gè)鍵?
CLR EA ;屏蔽中斷
CJNE R3,#00H,WAIT1 ;如果R3=0,表示有鍵按下
MOV A,22H ;將22H里存放的按鍵號送給A
RL A ; 因為查表里都是字,所以得乘2查得數據
MOV DPTR,#TABLE ;指向表頭
MOVC A,@A+DPTR ; 查表
MOV TH0,A ;將數據高位送TH0
MOV 21H,A ; 將高位備份
MOV A,22H ;將22H里存放的按鍵號送給A
RL A ;因為查表里都是字,所以得乘2查得數據
INC A ;取低位數據
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 ;利用標志位CY來(lái)判斷是哪個(gè)鍵按下
MOV R2,#08H
WAIT3: RLC A ;移位判斷
JNC STORE
INC R0
DJNZ R2,WAIT3
STORE: MOV 22H,R0 ; 將按鍵號存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 ;計數器0
MOV TMOD,#02H
MOV TH1,#09CH
MOV TL1,#09CH ;定時(shí)器初植
CLR TR0 ;定時(shí)器不允許
SCAN: ;鍵盤(pán)掃描
MOV A,P2 ;判斷鍵盤(pán)按下,跳到SCAN_1,若未按,繼續掃描
CJNE A,#0FFH,SCAN_1
NOP
SJMP SCAN
SCAN_1:ACALL DELAY ;是不是真的要按下?如果是,則跳轉SU_KEY查詢(xún)是哪個(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信號周期
MU_1: MOV R1,#19 ;如果第一個(gè)按鍵按下,則R1=19,同時(shí)程序轉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 ; 沒(méi)鍵按下繼續執行,有鍵按下,返回讀引腳
CJNE A,#0FFH,NEXT_1
ACALL DELAY
MOV A,P2 ;真的沒(méi)鍵按下?
CJNE A,#0FFH,NEXT_1
CLR TR0 ;不響
AJMP SCAN ;掃描鍵盤(pán)去

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

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>