wwwxxx国产_337p日本欧洲亚洲大胆张筱雨_免费在线看成人av_日本黄色不卡视频_国产精品成熟老女人_99视频一区_亚洲精品97久久中文字幕_免费精品视频在线_亚洲色图欧美视频_欧美一区二三区

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

單片機音樂程序

作者:佚名   來源:本站原創   點擊數:  更新時間:2007年06月25日   【字體:

利用單片機(或單板機)奏樂大概是無線電愛好者感興趣的問題之一。本文從單片機的基本發間實驗出發,談談音樂程序的設計原理,并給出具體實例,以供參考。下面提供2個列子,大家根據 需要自行選擇

單片機最小系統,兩位LED數碼管由串口輸出接兩個164驅動,Lout,Rout為左右聲道輸出,
SET, ALT0, ALT1為三個按鍵,也可自己在開始的I/O定義改成你想用的I/O口;12M晶振
若用89C51則只可裝下約14首歌曲,用89C52則可裝下近40曲


源程序
; Electronic Music
; Version 4.50
; Copyright (c) XAJ 2001
;============================
LOUT BIT P1.0 ;左聲道輸出
ROUT BIT P1.2 ;右聲道輸出
SET BIT P3.3 ;SET按鍵
ALT0 BIT P3.6 ;ALT0按鍵
ALT1 BIT P3.7 ;ALT1按鍵

;REPNUM EQU 09H重復段編號
STATU EQU 0AH;狀態寄存器
LDYDSR EQU 0BH;左低音度數
RDYDSR EQU 0CH;右低音度數
LDYAR EQU 0DH;左低音協助
RDYAR EQU 0EH;右低音協助
JPCLK EQU 0FH;節拍時鐘
GENCLK EQU 10H;通用時鐘
SNSDCLK EQU 11H;搜、存顯示時鐘
GEN16T0 EQU 12H;通用16位時鐘
GEN16T1 EQU 13H;
SETST0 EQU 14H;設置狀態
SETST1 EQU 15H; 定時時鐘
DISNUM0 EQU 16H;顯示數值
DISNUM1 EQU 17H;寄存器(2位)
CSN EQU 18H;當前曲曲號
REP0L EQU 19H;0號重復段地址
REP0H EQU 1AH;
REP1L EQU 1BH;1號重復段地址
REP1H EQU 1CH;
REP2L EQU 1DH;2號重復段地址
REP2H EQU 1EH
REP3L EQU 1FH;3號重復段地址
REP3H EQU 23H;
COSPEEDN EQU 24H;
SPENR EQU 25H;

LOCF BIT 00H;左聲道開關標志
ROCF BIT 01H;右聲道開關標志
SECHSTOF BIT 02H;搜索、存儲標志
NEXTSF BIT 03H;下一曲標志
CSBESTOF BIT 04H;當前曲鎖存/釋放
CUYFD BIT 05H;當前音符顯示
KSETF BIT 06H;SET鍵按下標志
KALT0F BIT 07H;ALT0鍵按下標志
KALT1F BIT 08H;ALT1鍵按下標志
SPEEDF BIT 09H;速度增/減標志
TONEF BIT 0AH;音調增/減標志
YPBIT BIT 0BH;音頻邏輯輸出
KBDISF BIT 0CH;鍵盤顯示標志
REP0F BIT 0DH;0號重復段控制
REP1F BIT 0EH;1號重復段控制
REP2F BIT 0FH;2號重復段控制
REP3F BIT 10H;3號重復段控制

SBOTM EQU 25H;堆棧區(棧底)
BUFF0 EQU 43H;鎖存曲數
BUFF EQU 44H;鎖存曲緩沖區
;============================

;=========BEGIN==============
ORG 0000H
LJMP MAIN
;---------T0INT--------------
ORG 000BH
LJMP T0INT

;---------T1INT--------------
ORG 001BH
LJMP T1INT
;1.音頻發生器
;---------YPFSQ(01)----------
ORG 0030H
T0INT: MOV TL0,R4
MOV TH0,R5
PUSH PSW
PUSH ACC
PUSH 01H
JB LOCF,ROPER
MOV R1,#00H
MOV A,LDYAR
T0LLOP: RRC A
MOV YPBIT,C
XCH A,R1
CJNE A,LDYDSR,T0LNEXT
MOV C,YPBIT
MOV LOUT,C
INC LDYAR
; INC P0
SJMP ROPER
T0LNEXT: XCH A,R1
INC R1
SJMP T0LLOP
ROPER: JB ROCF,T0RETI
MOV R1,#00H
MOV A,RDYAR
T0RLOP: RRC A
MOV YPBIT,C
XCH A,R1
CJNE A,RDYDSR,T0RNEXT
MOV C,YPBIT
MOV ROUT,C
INC RDYAR
; INC P2
SJMP T0RETI
T0RNEXT: XCH A,R1
INC R1
SJMP T0RLOP
T0RETI: POP 01H
POP ACC
POP PSW
RETI
;2.通用時鐘
;---------CLOCK(02)----------
T1INT: MOV TL1,#0F0H
MOV TH1,#0D8H
PUSH PSW
PUSH ACC
INC JPCLK
INC GENCLK
INC SNSDCLK
MOV A,SNSDCLK
CJNE A,#0FFH,T1NEXT
CLR SECHSTOF
T1NEXT: INC GEN16T0
MOV A,GEN16T0
CJNE A,#100,T1NEXT0
MOV GEN16T0,#00H
INC GEN16T1
T1NEXT0: INC SETST0
MOV A,SETST0
CJNE A,#100,T1RETI
MOV SETST0,#00H
INC SETST1
MOV A,SETST1
CJNE A,#20,T1RETI
MOV SETST1,#00H
MOV STATU,#00H
T1RETI: POP ACC
POP PSW
RETI
;3.顯示子程序
;---------DISPLAY(03)--------
DISPLAY: PUSH ACC
PUSH DPL
PUSH DPH
MOV DPTR,#T_FIGCODE
MOV A,DISNUM0
MOVC A,@A DPTR
MOV SBUF,A
JNB TI,$
CLR TI
MOV A,DISNUM1
MOVC A,@A DPTR
MOV SBUF,A
JNB TI,$
CLR TI
POP DPH
POP DPL
POP ACC
RET
T_FIGCODE:
DB 088H,0EBH,04CH,049H
; 0 1 2 3
DB 02BH,019H,018H,0CBH
; 4 5 6 7
DB 008H,009H,00AH,038H
; 8 9 A B
DB 09CH,068H,01CH,01EH
; C D E F
DB 080H,0E3H,044H,041H
; 0. 1. 2. 3.
DB 023H,011H,010H,0C3H
; 4. 5. 6. 7.
DB 000H,001H,002H,030H
; 8. 9. A. B.
DB 094H,060H,014H,016H
; C. D. E. F.
DB 0FFH,02FH,098H,07FH
; 熄滅 # G -
DB 07CH,078H,0BCH,00AH
; c o L R
DB 029H
; Y
;4.主程序MAIN
;---------MAIN(04)-----------
MAIN: MOV R0,#01H
CLR A
CLRAM: MOV @R0,A
INC R0
CJNE R0,#80H,CLRAM
MOV R0,A
MOV SP,#SBOTM
MOV 08H,#BUFF
;MOV 09H,#BUFF
MOV SCON,#00H
MOV TMOD,#11H
MOV TL1,#0F0H
MOV TH1,#0D8H
SETB EA
SETB ET0
SETB ET1
SETB TR1

START: MOV DPTR,#T_SONGS
RYF: LCALL RYFSUP
MOV A,R7
JZ START
CJNE R7,#0FFH,SYF
JBC NEXTSF,NEXTSCL
MOV A,STATU
JNZ GONSBQ
MOV A,BUFF0
JNZ MPSQCL
LCALL PAQSCL
SJMP MQNFD
MPSQCL: LCALL PSQSCL
MQNFD: LCALL QNFDSUP
MOVPJRYF: INC DPTR
INC DPTR
SJMP RYF
NEXTSCL: LCALL CSBESTOJG
JB CSBESTOF,CALLPSCL
LCALL PAQSCL
SJMP MOVPJRYF
CALLPSCL: LCALL PSQSCL
SJMP MOVPJRYF
GONSBQ: LCALL CSDPTR
INC DPTR
INC DPTR
SJMP MOVPJRYF
SYF: CJNE R6,#0FFH,CALLPLAY
LCALL REPCLSUP
SJMP MOVPJRYF
CALLPLAY: LCALL YFDSUP
LCALL PLAY
SJMP MOVPJRYF
;5.讀音符子程序
;---------RYFSUP(05)--------
RYFSUP: CLR A
MOVC A,@A DPTR
MOV R6,A
MOV A,#01H
MOVC A,@A DPTR
MOV R7,A
RET
;6.統唱曲首處理
;---------PAQSCL(06)--------
PAQSCL: MOV CSN,R6
INC DPTR
INC DPTR
LCALL RYFSUP
MOV 02H,R6
MOV 03H,R7
RET
;7.存唱曲首處理
;---------PSQSCL(07)--------
PSQSCL: PUSH PSW
SETB RS0
CLR RS1
PSQC7E: CJNE R0,#7EH,PSQNEXT
PSQNEXT: JC PSQNEXT1
MOV R0,#BUFF
SJMP PSQC7E
PSQNEXT1: MOV A,@R0
JNZ PSQNEXT2
INC R0
INC R0
INC R0
SJMP PSQC7E
PSQNEXT2: MOV CSN,@R0
INC R0
MOV 02H,@R0
INC R0
MOV 03H,@R0
INC R0
POP PSW
LCALL CSDPTR
INC DPTR
INC DPTR
RET
;8.曲號閃顯子程序
;---------QNFDSUP(08)-------
QNFDSUP: PUSH ACC
MOV GEN16T0,#00H
MOV GEN16T1,#00H
QNGON: LCALL CSNSDISN
LCALL DISPLAY
MOV GENCLK,#00H
QNWAIT: MOV A,GENCLK
CJNE A,#35,QNWAIT
MOV DISNUM0,#20H
MOV DISNUM1,#20H
LCALL DISPLAY
MOV GENCLK,#00H
QNWAIT1: MOV A,GENCLK
CJNE A,#15,QNWAIT1
MOV A,GEN16T1
CJNE A,#02,QNGON
POP ACC
RET
;9.曲號送顯示寄存器
;---------CSNSDISN(09)------
CSNSDISN: MOV A,CSN
ANL A,#0FH
LCALL CSBESTOJG
JNB CSBESTOF,NADP
ADD A,#10H
NADP: MOV DISNUM0,A
MOV A,CSN
SWAP A
ANL A,#0FH
MOV DISNUM1,A
RET
;10.當前曲是否被存儲判斷
;---------CSBESTOJG(10)-----
CSBESTOJG:PUSH ACC
PUSH PSW
MOV A,BUFF0
JZ CLRCSTOF
MOV R0,#BUFF
CSBCMPCSN:MOV A,@R0
CJNE A,CSN,CSBGSCAN
SETB CSBESTOF
SJMP CSBRET
CSBGSCAN: INC R0
INC R0
INC R0
CJNE R0,#7EH,CSBNEXT
CSBNEXT: JC CSBCMPCSN
CLRCSTOF: CLR CSBESTOF
MOV R0,#BUFF
CSBCMP0: MOV A,@R0
JZ CSBRET
INC R0
INC R0
INC R0
CJNE R0,#7EH,CSBNEXT1
CSBNEXT1: JC CSBCMP0
CSBRET: POP PSW
POP ACC
RET
;11.找當前曲首址
;---------CSDPTR(11)--------
CSDPTR: MOV DPTR,#T_SONGS
CSDSCAN: LCALL RYFSUP
CJNE R7,#0FFH,CSDNEXT
MOV A,R6
CJNE A,CSN,CSDNEXT
SJMP CSDRET
CSDNEXT: INC DPTR
INC DPTR
SJMP CSDSCAN
CSDRET: RET
;12.重復段處理子程序
;---------REPCLSUP(12)------
REPCLSUP: MOV A,R7
ANL A,#0FH
CJNE A,#02H,CMPA3
MOV A,R7
SWAP A
ANL A,#0FH
JNZ H4CMP1
JNB REP0F,REPRET0
CLR REP0F
MOV DPL,REP0L
MOV DPH,REP0H
REPRET0: RET
H4CMP1: CJNE A,#01H,H4CMP2
JNB REP1F,REPRET
CLR REP1F
MOV DPL,REP1L
MOV DPH,REP1H
RET
H4CMP2: CJNE A,#02H,H4CMP3
JNB REP2F,REPRET
CLR REP2F
MOV DPL,REP2L
MOV DPH,REP2H
RET
H4CMP3: CJNE A,#03H,REPRET
JNB REP3F,REPRET
CLR REP3F
MOV DPL,REP3L
MOV DPH,REP3H
RET
CMPA3: CJNE A,#03H,REPRET
MOV A,R7
SWAP A
ANL A,#0FH
JNZ H4VS1
SETB REP0F
MOV REP0L,DPL
MOV REP0H,DPH
SJMP SREPHAD
H4VS1: CJNE A,#01H,H4VS2
SETB REP1F
MOV REP1L,DPL
MOV REP1H,DPH
SJMP SREPHAD
H4VS2: CJNE A,#02H,H4VS3
SETB REP2F
MOV REP2L,DPL
MOV REP2H,DPH
SJMP SREPHAD
H4VS3: CJNE A,#03H,REPRET
SETB REP3F
MOV REP3L,DPL
MOV REP3H,DPH
SREPHAD: MOV 09H,A
LCALL CSDPTR
REPGON: INC DPTR
INC DPTR
LCALL RYFSUP
CJNE R6,#0FFH,REPGON
MOV A,R7
SWAP A
ANL A,#0FH
CJNE A,09H,REPGON
REPRET: RET
;13.音符顯示子程序
;---------YFDSUP(13)--------
YFDSUP: MOV A,STATU
JNZ YFDRET
JB SECHSTOF,YFDRET
JNB CUYFD,YFSLED
XZFCLD: MOV DISNUM0,#20H
MOV DISNUM1,#20H
SJMP YFDSPLAY
YFSLED: MOV A,R6
JZ XZFCLD
ANL A,#0FH
PUSH DPL
PUSH DPH
MOV DPTR,#T_YFDCOD
MOVC A,@A DPTR
MOV DISNUM0,A
POP DPH
POP DPL
MOV A,R6
SWAP A
ANL A,#0FH
MOV DISNUM1,A
YFDSPLAY: LCALL DISPLAY
YFDRET: RET
T_YFDCOD: DB 20H ;--
DB 01H ; 1
DB 02H ; 2
DB 03H ; 3
DB 04H ; 4
DB 05H ; 5
DB 06H ; 6
DB 07H ; 7
DB 11H ;#1
DB 12H ;#2
DB 14H ;#4
DB 15H ;#5
DB 16H ;#6
;14.唱音符子程序
;---------PLAY(14)----------
PLAY: MOV A,R6
JZ PCOSPECL
PUSH DPL
PUSH DPH
MOV DPTR,#T_SD
ANL A,#0FH
MOVC A,@A DPTR
XCH A,R6
SWAP A
ANL A,#0FH
MOV B,#12
MUL AB
ADD A,R6
ADD A,R2
RL A
MOV R6,A
MOV DPTR,#T_RAN
MOVC A,@A DPTR
MOV TH0,A
MOV R5,A
MOV A,R6
INC A
MOVC A,@A DPTR
MOV TL0,A
MOV R4,A
POP DPH
POP DPL
SETB TR0
PCOSPECL: LCALL COSPECL
PJPWAIT: MOV JPCLK,#00H
PDELAY: LCALL KCXCL
JB NEXTSF,PRET
MOV A,JPCLK
CJNE A,01H,PNEXT
PNEXT: JC PDELAY
DJNZ R7,PJPWAIT
PRET: CLR TR0
RET
;---------TABSD-------------
T_SD: DB 01h ;useless
DB 01H
DB 03H
DB 05H
DB 06H
DB 08H
DB 0AH
DB 0CH
DB 02H
DB 04H
DB 07H
DB 09H
DB 0bH
;---------TABRAN------------
T_RAN: DW 0F111H ;useless
dw 0f111h ; area 0
dw 0f1e8h
dw 0f2b2h
dw 0f373h
dw 0f426h
dw 0f4eeh
dw 0f571h
dw 0f609h
dw 0f699h
dw 0f71fh
dw 0f79fh
dw 0f817h
dw 0f889h ; area 1
dw 0f8f4h
dw 0f95ah
dw 0f9b9h
dw 0fa13h
dw 0fa68h
dw 0fab9h
dw 0fb04h
dw 0fb4ch
dw 0fb90h
dw 0fbcfh
dw 0fc0ch
dw 0fc45h ;area 2
dw 0fc7ah
dw 0fcadh
dw 0fcdch
dw 0fd0ah
dw 0fd34h
dw 0fd5ch
dw 0fd82h
dw 0fda6h
dw 0fdc8h
dw 0fde8h
dw 0fe06h
dw 0fe22h ; area 3
dw 0fe3dh
dw 0fe56h
dw 0fe6eh
dw 0fe85h
dw 0fe9ah
dw 0feaeh
dw 0fec1h
dw 0fed3h
dw 0fee3h
dw 0fef4h
dw 0ff02h
dw 0ff11h ;area 4
dw 0ff1fh
dw 0ff2bh
dw 0ff37h
dw 0ff42h
dw 0ff4dh
dw 0ff57h
dw 0ff60h
dw 0ff6ah
dw 0ff72h
dw 0ff7ah
dw 0ff81h
dw 0ff89h ; 5
;15.共速處理
;---------COSPECL(15)-------
COSPECL: MOV R1,03H
MOV A,COSPEEDN
JZ COSPRET
PUSH COSPEEDN
MOV A,R1
COSPEGON: MOV B,#08H
MUL AB
CLR C
SUBB A,R1
JNC COSPNEXT
DEC B
COSPNEXT: MOV R6,#03H
DIV8: CLR C
XCH A,B
RRC A
XCH A,B
RRC A
DJNZ R6,DIV8
MOV R1,A
DJNZ COSPEEDN,COSPEGON
POP COSPEEDN
MOV A,R1
JNZ COSPRET
MOV R1,#01H
COSPRET: RET
;16.鍵盤查詢處理
;---------KCXCL(16)---------
KCXCL: LCALL KSET
LCALL KALT0
LCALL KALT1
JNB KSETF,KNEXT0
LCALL KSETCL
KSETSTC: MOV SETST0,#00H
MOV SETST1,#00H
SETB KBDISF
SJMP KDIS
KNEXT0: JNB KALT0F,KNEXT1
LCALL KALT0CL
SJMP KSETSTC
KNEXT1: JNB KALT1F,KDIS
LCALL KALT1CL
SJMP KSETSTC
KDIS: MOV A,STATU
JNZ KSSNSD
JNB SECHSTOF,KRET
KSSNSD: JNB KBDISF,KRET
CLR KBDISF
LCALL DISPLAY
KRET: RET
;17.KSET鍵是否按下查詢
;---------KSET(17)----------
KSET: SETB SET
JB SET,CSETRET
MOV GENCLK,#00H
SETLOP: MOV A,GENCLK
CJNE A,#02,SETLOP
SETB SET
JB SET,CSETRET
CLR TR0
SETWAIT: SETB SET
JNB SET,SETWAIT
MOV GENCLK,#00H
SETLOP1: MOV A,GENCLK
CJNE A,#02,SETLOP1
SETB TR0
SETB KSETF
RET
CSETRET: CLR KSETF
RET
;18.KALT0鍵是否按下查詢
;---------KALT0(18)---------
KALT0: SETB ALT0
JB ALT0,CALT0RET
MOV GENCLK,#00H
ALT0LOP: MOV A,GENCLK
CJNE A,#02,ALT0LOP
SETB ALT0
JB ALT0,CALT0RET
CLR TR0
ALT0WAIT: SETB ALT0
JNB ALT0,ALT0WAIT
MOV GENCLK,#00H
ALT0LOP1: MOV A,GENCLK
CJNE A,#02,ALT0LOP1
SETB TR0
SETB KALT0F
RET
CALT0RET: CLR KALT0F
RET
;19.KALT1鍵是否按下查詢
;---------KALT1(19)---------
KALT1: SETB ALT1
JB ALT1,CALT1RET
MOV GENCLK,#00H
ALT1LOP: MOV A,GENCLK
CJNE A,#02,ALT1LOP
SETB ALT1
JB ALT1,CALT1RET
CLR TR0
ALT1WAIT: SETB ALT1
JNB ALT1,ALT1WAIT
MOV GENCLK,#00H
ALT1LOP1: MOV A,GENCLK
CJNE A,#02,ALT1LOP1
SETB TR0
SETB KALT1F
RET
CALT1RET: CLR KALT1F
RET
;20.SET鍵處理
;---------KSETCL(20)--------
KSETCL: INC STATU
MOV A,STATU
CJNE A,#07H,STATUDIS
MOV STATU,#00H
STATUDIS: MOV DISNUM0,#23H
MOV DISNUM1,STATU
RET
;21.KALT0鍵處理
;---------KALT0CL(21)-------
KALT0CL: MOV A,STATU
JNZ CASEB1
KA0S0GO: INC DPTR
INC DPTR
LCALL RYFSUP
MOV A,R7
JNZ EQUFF
MOV DPTR,#T_SONGS
SJMP KA0NEXT
EQUFF: INC A
JNZ KA0S0GO
KA0NEXT: LCALL RYFSUP
MOV CSN,R6
LCALL CSNSDISN
MOV A,DPL
CLR C
SUBB A,#02H
JNC KA0NEXT1
DEC DPH
KA0NEXT1: MOV DPL,A
CLR REP0F
CLR REP1F
CLR REP2F
CLR REP3F
SETB NEXTSF
SETB SECHSTOF
RET
CASEB1: CJNE A,#01H,CASEB2
INC LDYDSR
MOV A,LDYDSR
CJNE A,#04H,LDYDSL4
MOV LDYDSR,#00H
LDYDSL4: MOV DISNUM0,LDYDSR
MOV DISNUM1,#26H
RET

HCOSPEEDN EQU 12H
CASEB2: CJNE A,#02H,CASEB3
MOV A,COSPEEDN
CJNE A,#HCOSPEEDN,KA0NEXT4
KA0NEXT4: JNC KA0NEXT5
INC COSPEEDN
KA0NEXT5: MOV SPENR,COSPEEDN
LCALL SPENSDISN
RET
CASEB3: CJNE A,#03H,CASEB4
CLR SPEEDF
LCALL SPEEDCL
RET
CASEB4: CJNE A,#04H,CASEB5
CLR TONEF
LCALL TONECL
RET
CASEB5: CJNE A,#05H,CASEB6
CPL LOCF
JNB LOCF,KA0NEXT2
MOV DISNUM0,#24H
SJMP KA0NEXT3
KA0NEXT2: MOV DISNUM0,#25H
KA0NEXT3: MOV DISNUM1,#26H
RET
CASEB6: CJNE A,#06H,KA0RET
CPL CUYFD
JNB CUYFD,KA0NEXT6
MOV DISNUM0,#24H
SJMP KA0NEXT7
KA0NEXT6: MOV DISNUM0,#25H
KA0NEXT7: MOV DISNUM1,#28H
KA0RET: RET
;22.速度數送顯示寄存器
;---------SPENSDISN(22)----
SPENSDISN:MOV A,SPENR
ANL A,#0FH
MOV DISNUM0,A
MOV A,SPENR
SWAP A
ANL A,#0FH
MOV DISNUM1,A
RET
;23.速度處理
;---------SPEEDCL(23)------
HSPEED EQU 02H;
LSPEED EQU 50H;
SPEEDCL: JB SPEEDF,DNSPEED
CJNE R3,#HSPEED,SCLNEXT
SCLNEXT: JC SCLNEXT1
DEC R3
SJMP SCLNEXT1
DNSPEED:
CJNE R3,#LSPEED,SCLNEXT2
SCLNEXT2: JNC SCLNEXT1
INC R3
SCLNEXT1: LCALL CSBESTOJG
JNB CSBESTOF,SCLNEXT3
INC R0
INC R0
MOV @R0,03H
SCLNEXT3: LCALL COSPECL
MOV SPENR,R1
LCALL SPENSDISN
RET
;24.音調處理
;---------TONECL(24)---------
;LTONE EQU 00 ;C
HTONE EQU 11 ;B
TONECL: JB TONEF,DNTONE
CJNE R2,#HTONE,TCLNEXT0
TCLNEXT0: JNC TCLNEXT
INC R2
SJMP TCLNEXT
DNTONE: MOV A,R2
JZ TCLNEXT
DEC R2
TCLNEXT: LCALL CSBESTOJG
JNB CSBESTOF,TCLNEXT1
INC R0
MOV @R0,02H
TCLNEXT1: PUSH DPL
PUSH DPH
MOV DPTR,#T_TONDISC
MOV A,R2
RL A
MOVC A,@A DPTR
MOV DISNUM1,A
MOV A,R2
RL A
INC A
MOVC A,@A DPTR
MOV DISNUM0,A
POP DPH
POP DPL
RET
T_TONDISC:DW 200CH ; C
DW 210CH ;#C
DW 200DH ; D
DW 210DH ;#D
DW 200EH ; E
DW 200FH ; F
DW 210FH ;#F
DW 2022H ; G
DW 2122H ;#G
DW 200AH ; A
DW 210AH ;#A
DW 200BH ; B
;25.KALT1鍵處理
;---------KALT1CL(25)--------
KALT1CL: MOV A,STATU
JNZ CASE1
LCALL CSBESTOJG
JNB CSBESTOF,KA1NEXT
MOV @R0,#00H
DEC BUFF0
SJMP KA1NEXT2
KA1NEXT: CJNE R0,#7EH,KA1NEXT1
KA1NEXT1: JNC KA1NEXT2
MOV @R0,CSN
INC R0
MOV @R0,02H
INC R0
MOV @R0,03H
INC BUFF0
KA1NEXT2: LCALL CSNSDISN
SETB SECHSTOF
RET
CASE1: CJNE A,#01H,CASE2
INC RDYDSR
MOV A,RDYDSR
CJNE A,#04H,RDYDSL4
MOV RDYDSR,#00H
RDYDSL4: MOV DISNUM0,RDYDSR
MOV DISNUM1,#27H
RET
CASE2: CJNE A,#02H,CASE3
MOV A,COSPEEDN
JZ KA1NEXT5
DEC COSPEEDN
KA1NEXT5: MOV SPENR,COSPEEDN
LCALL SPENSDISN
RET
CASE3: CJNE A,#03H,CASE4
SETB SPEEDF
LCALL SPEEDCL
RET
CASE4: CJNE A,#04H,CASE5
SETB TONEF
LCALL TONECL
RET
CASE5: CJNE A,#05H,CASE6
CPL ROCF
JNB ROCF,KA1NEXT3
MOV DISNUM0,#24H
SJMP KA1NEXT4
KA1NEXT3: MOV DISNUM0,#25H
KA1NEXT4: MOV DISNUM1,#27H
RET
CASE6: CJNE A,#06H,KA1RET
MOV DISNUM0,#23H
MOV DISNUM1,#06H
KA1RET: RET
;========= 樂曲表============
;---------SONGS--------------
T_SONGS: 樂曲表表首
dw 01ffh,;song1:xiao la ba...
dw 0b05h,
dw 2504h,
dw 2604h,
dw 2506h,
dw 0002h,
dw 2504h,
dw 2604h,
dw 2506h,
dw 0002h,
dw 2504h,
dw 2604h,
dw 2504h,
dw 2304h,
dw 2204h,
dw 2104h,
dw 2206h,

DW 16FFH;SONG16:Liang Zhi Lao Hu
DW 0715H
DW 0FF21H ;REP21
DW 0FF01H ;REP01
DW 2102H
DW 2202H
DW 2302H
DW 2102H
DW 0FF02H ;REP02
DW 0FF03H ;REP03
DW 2302H
DW 2402H
DW 2504H
DW 2302H
DW 2402H
DW 2504H
DW 0FF11H ;REP11
DW 2501H
DW 2601H
DW 2501H
DW 2401H
DW 2302H
DW 2102H
DW 0FF12H ;REP12
DW 0FF13H ;REP13
DW 2202H
DW 1502H
DW 2104H
DW 2202H
DW 1502H
DW 2104H
DW 0FF22H ;REP22
DW 0FF23H ;REP23

DW 0000H ;樂曲表表尾
END
;=========END================
注:設計者手頭有近40首曲子的音樂數據(花了大量時間對簡譜進行手工轉換!),而每塊
AT89C51的4KROM種除指令外剩下空間只可放14首左右。
這里給出第一曲和第16曲《兩只老虎》作一示例。

 

1.       單片機的基本發音實驗

我們知道,聲音的頻譜范圍約在幾十到幾千赫茲,若能利用程序來控制單處機某個口線的“高”電平或低電平,則在該口線上就能產生一定頻率的矩形波,接上喇叭就能發出一定頻率的聲音,若再利用延時程序控制“高”“低”電平的持續時間,就能改變輸出頻率,從而改變音調。

例如,要產生200HZ的音頻信號,按圖1接入喇叭(若屬臨時實驗,也可將喇叭直接接在P1口線上),實驗程序為:

       其中子程序DEL為延時子程序,當R3為1時,延時時間約為20us,R3中存放延時常數,對200HZ音頻,其周期為1/200秒,即5ms。這樣,當P1.4的高電平或低電平的持續時間為2.5ms,即R3的時間常數取2500/20=125(7DH)時,就能發出200HZ的音調。將上述程序鍵入學習機,并不斷修改R3的常數可以感到音調的變化。

       樂曲中,每一音符對應著確定的頻率,表1給出C調時各音符頻率及其相應的時間常數。

讀者可以根據表1所提供的常數,將其16進制代碼送入R3,反復練習體會。根據表1可以奏出音符。僅這還不夠,要準確奏出一首曲子,必須準確地控制樂曲節奏,即一音符的持續時間。

音符的節拍我們可以用定時器T0來控制,送入不同的初值,就可以產生不同的定時時間。便如某歌曲的節奏為每分鐘94拍,即一拍為0.64秒。其它節拍與時間的對應關系見表2。

但時,由于T0的最大定時時間只能為131毫秒,因此不可能直接用改變T0的時間初值來實現不同節拍。我們可以用T0來產生10毫秒的時間基準,然后設置一個中斷計數器,通過判別中斷計數器的值來控制節拍時間的長短。表2中也給出了各種節拍所對應的時間常數。例如對1/4拍音符,定時時間為0.16秒,相應的時間常數為16(即10H);對3拍音符,定時時間為1.92秒,相應時間長數為192(即C0H)。

我們將每一音符的時間常數和其相應的節拍常數作為一組,按順序將樂曲中的所有常數排列成一個表,然后由查表程序依次取出,產生音符并控制節奏,就可以實現演奏效果。

此外,結束符和體止符可以分別用代碼00H和FFH來表示,若查表結果為00H,則表示曲子終了;若查表結果為FFH,則產生相應的停頓效果。

為了產生手彈的節奏感,在某些音符(例如兩個相同音符)音插入一個時間單位的頻率略有不同的音符。

程序框圖如圖2所示。

下面給出程序序請單,可直接在TD-III型學習機上演奏,對其它不同型號的學習機,只需相應地改變一下地址即可。本程序演奏的是民歌“八月桂花遍地開”,C調,節奏為94拍/分。讀者也可以自行找出一首歌,按表1和表2給定的常數,將樂曲翻譯成碼表輸入機器,而程序不變。本實驗方法簡便,即使不懂音樂的人,將一首陌生的曲子翻譯成代碼也是易事,和著機器的演奏學唱一首歌曲,其趣味無窮。

程序清單(略,請參看源程序的說明)。

《無線電》1992年第3期。

下載兩個音樂文件的源代碼和HEX代碼

硬件連接說明:

隨便找一個仿真機或者什么單片機實驗板,只要能工作的就行,將程序輸入,運行,然后找個音箱(你計算機旁邊應當就有一對吧)撥出插頭,插頭的前端接在P1。0上,后面部分找根線接單片機的地,就應當有聲了,然后怎么改進硬件連接就是你的事了。。。。

關閉窗口
freesex欧美| 国产精品jvid在线观看| 黄www在线观看| 国产精品久久久久久久久久| 欧美人妖巨大在线| 国产欧美精品一区| 国产精品视频| 亚洲国产精品嫩草影院久久av| 波多野结衣精品| 亚洲国产一区视频| 国产亚洲一区字幕| 日本黄色的视频| 国产日韩精品在线| 色青青草原桃花久久综合| 欧美羞羞免费网站| 成人欧美一区二区三区小说| 精品一区二区日韩| 欧美日韩国产探花| 日韩精品免费一区二区夜夜嗨| 91老司机福利在线| 国产女人在线观看| 91精品国产高久久久久久五月天| 成人美女在线观看| 看电视剧不卡顿的网站| 岛国av在线一区| 久久综合狠狠综合久久综合88| 国产欧美精品一区二区色综合 | 日韩日本欧美亚洲| 欧美xxxx18国产| 8x拔播拔播x8国产精品| 国产精品av电影| 国产日韩在线免费| 好吊色欧美一区二区三区视频| 欧美激情论坛| av 日韩 人妻 黑人 综合 无码| 国产玉足脚交久久欧美| 少妇性l交大片| 国产一级二级视频| 99久久99久久精品国产| youjizz在线视频| 国产伦一区二区| 欧美一级久久久久久久久大| 欧美性猛交xx| 男男一级淫片免费播放| 天天色天天综合| 成人午夜精品视频| 秋霞视频一区二区| 青春草在线视频观看| 中文字幕毛片| 超碰在线观看免费| 亚洲伊人伊成久久人综合网| 国产成人精品999在线观看| 黄页网站一区| 不卡一区二区三区四区| 一片黄亚洲嫩模| 91精品国产黑色紧身裤美女| 中文字幕在线日韩| 国产精品一区二区三| 日韩欧美亚洲v片| 欧美牲交a欧美牲交| 日韩无码精品一区二区| 懂色av懂色av粉嫩av| 国产农村妇女毛片精品| 欧美性猛交ⅹxxx乱大交免费| 天天草夜夜操| 毛片在线看片| 老司机亚洲精品一区二区| 国产精品久久久久久久久久10秀| 免费在线播放第一区高清av| 91视频精品在这里| 欧美日韩亚洲激情| 国产一区二区久久精品| 国产精品高潮呻吟久久av无限 | 国产95在线|亚洲| 国产网站免费观看| mm视频在线视频| 少妇久久久久| 日本vs亚洲vs韩国一区三区二区| 久久亚洲精品小早川怜子| 在线视频一区二区三| 国产一区二区三区在线看| 国产精品网红福利| 精品国产一区二区三区在线| 丰满人妻一区二区三区免费视频棣| 欧美视频一区二区在线| 成人激情四射网| h视频免费在线| 黄色网页网址在线免费| 精品精品国产毛片在线看| 国产欧美91| 国产精品色婷婷| 亚洲激情自拍图| 成人精品在线视频| 国产九九九九九| 成人涩涩小片视频日本| 9.1人成人免费视频网站| 午夜影院免费| av在线国产精品| 爽好多水快深点欧美视频| 一区二区三区中文免费| 最近2019年日本中文免费字幕| 国产91亚洲精品一区二区三区| 992kp快乐看片永久免费网址| 免费网站看av| 91精品国产福利尤物| 在线āv视频| 国产一区网站| 国产精品sm| 国产精品久久久久久亚洲伦| 亚洲国产精品视频在线观看| 亚洲最大的网站| 欧美怡红院视频一区二区三区| 精品国产乱码久久久久久郑州公司 | 国产91免费观看| 小说区视频区图片区| a级大片在线观看| 免费观看黄色一级视频| 深夜福利免费在线观看| 国产丝袜一区| 丁香天五香天堂综合| 51精品久久久久久久蜜臀| 国产激情久久久久| 热久久精品免费视频| 伦av综合一区| 四虎av网址| 欧美一区=区三区| 热久久久久久久| 日韩欧美中文在线| 国产精品美女www| 亚洲中文字幕无码不卡电影| 日韩女同强女同hd| 天天操夜夜骑| 91成人福利| av动漫一区二区| 亚洲天堂免费观看| 亚洲一区尤物| 九九热精彩视频| 天堂在线亚洲| 国产调教精品| 中文字幕永久在线不卡| 久99九色视频在线观看| 日韩欧美国产免费| 91无套直看片红桃| 国产精品影院在线| 欧美视频亚洲视频| 欧美三级欧美成人高清www| 国产成人精品在线| 免费在线观看日韩av| 亚洲视频网站在线| av成人福利| 男女男精品视频网| 欧美mv日韩mv| 在线观看欧美激情| 久久国产视频播放| 在线午夜视频| 综合天堂久久久久久久| 五月激情综合色| 国产在线观看一区二区三区| 国产精品成人99一区无码| 伦理天堂电影| 日韩视频网站在线观看| 懂色av中文一区二区三区| 夜夜躁日日躁狠狠久久88av| 夜夜添无码一区二区三区| 中文字幕一区二区三区波野结| 一区二区三区区四区播放视频在线观看| 九九亚洲精品| 欧美日韩国产丝袜另类| 成人免费观看a| 精品无人区无码乱码毛片国产| 性猛交富婆╳xxx乱大交一| 麻豆久久一区| 中文字幕第一页久久| 国内伊人久久久久久网站视频| 高清在线观看免费| 亚洲av永久无码国产精品久久| 在线观看电影av| 国产精一区二区三区| 国产一级揄自揄精品视频| 凹凸国产熟女精品视频| 免费观看黄色av| 欧美xxxx做受欧美护士| 久久久一区二区三区捆绑**| 78m国产成人精品视频| 夜夜夜夜夜夜操| 国产女人av| 欧美sss在线视频| 国产精品嫩草影院在线看| 五月婷婷久久综合| 国产另类自拍| 日韩精品国产一区二区| 国产爆初菊在线观看免费视频网站| 午夜在线视频观看日韩17c| 亚洲国产精品99| 黄色一级免费大片| 国产极品美女到高潮| 国产三级精品三级在线观看国产| 亚洲成av人片在线| 久久99精品久久久久久水蜜桃| 毛片基地在线观看| 最新电影电视剧在线观看免费观看| 日韩av在线发布| 欧美理论片在线观看| www.美色吧.com| aaaaa级片| 欧美va天堂在线| 日韩精品久久久久| 一区二区在线播放视频| 在线免费黄网| 欧美美女视频| 精品久久久网站| 欧美精品无码一区二区三区| 国产麻豆一区二区三区精品| 国产成人影院| 欧美成人三级电影在线| 99色精品视频| 奇米影视888狠狠狠| 伊人成综合网| 亚洲国产欧美一区二区三区同亚洲 | 久久精品国产一区| 午夜视频在线观看国产| 美女视频免费观看网站在线 | 国产一区二区三区四区| 91激情五月电影| 日韩一区二区高清视频| 综合图区欧美| 欧美黄色录像| 欧美一级午夜免费电影| 日本爱爱免费视频| h免费在线观看| 亚洲欧美bt| 久久成年人免费电影| 人妻精品久久久久中文| 精品无吗乱吗av国产爱色| 成人一二三区视频| 国产在线一区二区三区| 波多野结衣视频免费观看| julia一区二区三区中文字幕| 岛国精品视频在线播放| 中文精品无码中文字幕无码专区| 精品网站www| 国产专区一区| 久久99精品国产99久久6尤物| 国产午夜手机精彩视频| av资源中文在线| 亚洲国产精品人人做人人爽| 视色,视色影院,视色影库,视色网| 欧美特级xxxxbbbb毛片| 亚洲美女视频| 色婷婷av一区二区三区久久| 日本美女bbw| 3d玉蒲团在线观看| 久久一级电影| 日韩免费看网站| 午夜激情视频网| 8×8x拔擦拔擦在线视频网站| 另类调教123区 | 香蕉视频官网在线观看日本一区二区| 亚洲欧美日韩国产中文| av小说在线观看| a中文在线播放| 国产精品传媒视频| 亚洲一区二区高清视频| 蜜桃视频一日韩欧美专区| 国产一区激情| 4444欧美成人kkkk| 在线中文字幕网站| 九九在线高清精品视频| 久久天天躁狠狠躁夜夜av| 免费视频一二三区| 玖玖精品一区| 亚洲欧美另类中文字幕| 青青青在线免费观看| 成人在线免费电影网站| 欧美一区二区免费| 国产男女猛烈无遮挡a片漫画 | www久久久久| 亚洲欧美日产图| 青青青视频在线| 国产综合色视频| 九九九九久久久久| 国产香蕉免费精品视频| 日韩高清中文字幕一区| 丁香婷婷久久久综合精品国产| 亚洲色图网友自拍| 中文久久精品| 99www免费人成精品| 欧美色xxx| 麻豆精品视频在线观看| 精品国产免费久久久久久尖叫| 国产精品自产拍在线观看2019| 日韩va欧美va亚洲va久久| 含羞草久久爱69一区| 国产极品美女到高潮| 国产精品 欧美精品| 一级做a爰片久久| 奇米四色7777| 国产偷国产偷精品高清尤物| 久久久无码中文字幕久...| 男人免费av| 国产精品福利一区| 激情六月丁香婷婷| 国产一区二区影视| 欧美日韩午夜剧场| 亚洲av成人片色在线观看高潮| 日本不卡一二三| 亚洲精品在线观| 精品少妇一二三区| 天堂资源在线亚洲| 热re91久久精品国99热蜜臀| 日韩在线观看视频一区二区三区| 亚洲免费一区二区| 日本精品视频一区| 免费h片在线观看| 亚洲国产精品人人做人人爽| 色悠悠在线视频| 成人做爰视频www| www亚洲一区| 男人天堂手机在线视频| 邻居大乳一区二区三区| 日本丶国产丶欧美色综合| 国产一二三四五区| 一区二区三区四区精品视频| 欧美激情图片区| 五月婷婷开心中文字幕| 国产一区二区三区免费在线观看| 乱子伦一区二区| 国产视频第一页在线观看| 欧美精品一卡两卡| 深夜福利影院在线观看| 久久99精品久久久久久园产越南| 国产精品久久9| 91九色网站| 国产精品女主播av| 香蕉久久久久久av成人| 日韩美女在线| 欧美激情区在线播放| 亚洲在线偷拍自拍| 不卡的av在线播放| 91制片厂毛片| 国精产品一区二区三区有限公司 | 久久精品视频2| 合欧美一区二区三区| 日本欧美色综合网站免费| 在线国产三级| 日韩午夜小视频| 亚洲天堂中文网| 麻豆高清免费国产一区| 欧美高清中文字幕| 性欧美1819sex性高清大胸| 亚洲无限av看| 人妻与黑人一区二区三区| 国产福利精品导航| 加勒比av中文字幕| 欧美日韩va| 欧美孕妇与黑人孕交| 五月天丁香在线| 亚洲福利国产精品| 久久久久久久久久久久久女过产乱| 精品中文字幕一区二区三区av| 51精品国产人成在线观看| 91国内精品在线视频| 欧美日韩一区精品| 99久久久久久久久| 美女视频免费一区| 99久久久无码国产精品6| 欧美黑人巨大xxxxx| 久久久久久久久久婷婷| av麻豆国产| 亚洲精品免费在线播放| 国产精品综合激情| 亚洲一区二区| 亚洲免费视频一区| 在线观看操人| 久久久久久久爱| 国内一卡2卡三卡四卡在线| 在线视频国内一区二区| 午夜精品久久久久久久蜜桃| 久久福利资源站| 欧美一级特黄aaa| 欧美激情网址| 日韩偷拍一区二区| 性欧美video高清bbw| 欧美高清无遮挡| 操女生的网站| 欧美丰满少妇xxxbbb| 国产肥老妇视频| 久久久久久久免费视频了| 91精品人妻一区二区三区| 欧美成人亚洲| 日韩在线综合网| 又长又粗又大又爽| 色哟哟精品一区| 国产精品毛片久久久久久久av| 成人午夜私人影院| 色欲狠狠躁天天躁无码中文字幕| 欧美日韩视频一区二区三区| 男人添女人下部高潮视频在观看| 亚洲欧洲日韩精品在线| 成人在线免费网站|