C语言控制51单片机音乐报告,使用51单片机实现音乐播放的程序资料概述

利用单片机(或单板机)奏乐大概是无线电爱好者感兴趣的问题之一。本文从单片机的基本发间实验出发,谈谈音乐程序的设计原理,并给出具体实例,以供参考。下面提供2个列子,大家根据 需要自行选择

单片机最小系统,两位LED数码管由串口输出接两个164驱动,Lout,Rout为左右声道输出,

若用89C51则只可装下约14首歌曲,用89C52则可装下近40曲

8a3d78966135e6e2e9bafb41d7604eaa.png

源程序

; 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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值