微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 单片机音乐程序

单片机音乐程序

时间:03-08 来源:互联网 点击:

利用单片机(或单板机)奏乐大概是无线电爱好者感兴趣的问题之一。本文从单片机的基本发间实验出发,谈谈音乐程序的设计原理,并给出具体实例,以供参考。下面提供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

STA

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top