單片機(jī)音樂程序
利用單片機(jī)(或單板機(jī))奏樂大概是無線電愛好者感興趣的問題之一。本文從單片機(jī)的基本發(fā)間實驗出發(fā),談?wù)?a class="contentlabel" href="http://cafeforensic.com/news/listbylabel/label/音樂程序">音樂程序的設(shè)計原理,并給出具體實例,以供參考。下面提供2個列子,大家根據(jù) 需要自行選擇
單片機(jī)最小系統(tǒng),兩位LED數(shù)碼管由串口輸出接兩個164驅(qū)動,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重復(fù)段編號
STATU EQU 0AH;狀態(tài)寄存器
LDYDSR EQU 0BH;左低音度數(shù)
RDYDSR EQU 0CH;右低音度數(shù)
LDYAR EQU 0DH;左低音協(xié)助
RDYAR EQU 0EH;右低音協(xié)助
JPCLK EQU 0FH;節(jié)拍時鐘
GENCLK EQU 10H;通用時鐘
SNSDCLK EQU 11H;搜、存顯示時鐘
GEN16T0 EQU 12H;通用16位時鐘
GEN16T1 EQU 13H;
SETST0 EQU 14H;設(shè)置狀態(tài)
SETST1 EQU 15H; 定時時鐘
DISNUM0 EQU 16H;顯示數(shù)值
DISNUM1 EQU 17H;寄存器(2位)
CSN EQU 18H;當(dāng)前曲曲號
REP0L EQU 19H;0號重復(fù)段地址
REP0H EQU 1AH;
REP1L EQU 1BH;1號重復(fù)段地址
REP1H EQU 1CH;
REP2L EQU 1DH;2號重復(fù)段地址
REP2H EQU 1EH
REP3L EQU 1FH;3號重復(fù)段地址
REP3H EQU 23H;
COSPEEDN EQU 24H;
SPENR EQU 25H;
LOCF BIT 00H;左聲道開關(guān)標(biāo)志
ROCF BIT 01H;右聲道開關(guān)標(biāo)志
SECHSTOF BIT 02H;搜索、存儲標(biāo)志
NEXTSF BIT 03H;下一曲標(biāo)志
CSBESTOF BIT 04H;當(dāng)前曲鎖存/釋放
CUYFD BIT 05H;當(dāng)前音符顯示
KSETF BIT 06H;SET鍵按下標(biāo)志
KALT0F BIT 07H;ALT0鍵按下標(biāo)志
KALT1F BIT 08H;ALT1鍵按下標(biāo)志
SPEEDF BIT 09H;速度增/減標(biāo)志
TONEF BIT 0AH;音調(diào)增/減標(biāo)志
YPBIT BIT 0BH;音頻邏輯輸出
KBDISF BIT 0CH;鍵盤顯示標(biāo)志
REP0F BIT 0DH;0號重復(fù)段控制
REP1F BIT 0EH;1號重復(fù)段控制
REP2F BIT 0FH;2號重復(fù)段控制
REP3F BIT 10H;3號重復(fù)段控制
SBOTM EQU 25H;堆棧區(qū)(棧底)
BUFF0 EQU 43H;鎖存曲數(shù)
BUFF EQU 44H;鎖存曲緩沖區(qū)
;============================
;=========BEGIN==============
ORG 0000H
LJMP MAIN
;---------T0INT--------------
ORG 000BH
LJMP T0INT
;---------T1INT--------------
ORG 001BH
LJMP T1INT
;1.音頻發(fā)生器
;---------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.通用時鐘
評論