功能齐全的单片机音乐程序.docx

上传人:b****8 文档编号:27805912 上传时间:2023-07-05 格式:DOCX 页数:37 大小:20.80KB
下载 相关 举报
功能齐全的单片机音乐程序.docx_第1页
第1页 / 共37页
功能齐全的单片机音乐程序.docx_第2页
第2页 / 共37页
功能齐全的单片机音乐程序.docx_第3页
第3页 / 共37页
功能齐全的单片机音乐程序.docx_第4页
第4页 / 共37页
功能齐全的单片机音乐程序.docx_第5页
第5页 / 共37页
点击查看更多>>
下载资源
资源描述

功能齐全的单片机音乐程序.docx

《功能齐全的单片机音乐程序.docx》由会员分享,可在线阅读,更多相关《功能齐全的单片机音乐程序.docx(37页珍藏版)》请在冰豆网上搜索。

功能齐全的单片机音乐程序.docx

功能齐全的单片机音乐程序

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

SET,ALT0,ALT1为三个按键,也可自己在开始的I/O定义改成你想用的I/O口;12M晶振

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

源程序

;ElectronicMusic

;Version4.50

;Copyright(c)XAJ2001

;============================

LOUTBITP1.0;左声道输出

ROUTBITP1.2;右声道输出

SETBITP3.3;SET按键

ALT0BITP3.6;ALT0按键

ALT1BITP3.7;ALT1按键

;REPNUMEQU09H重复段编号

STATUEQU0AH;状态寄存器

LDYDSREQU0BH;左低音度数

RDYDSREQU0CH;右低音度数

LDYAREQU0DH;左低音协助

RDYAREQU0EH;右低音协助

JPCLKEQU0FH;节拍时钟

GENCLKEQU10H;通用时钟

SNSDCLKEQU11H;搜、存显示时钟

GEN16T0EQU12H;通用16位时钟

GEN16T1EQU13H;

SETST0EQU14H;设置状态

SETST1EQU15H;定时时钟

DISNUM0EQU16H;显示数值

DISNUM1EQU17H;寄存器(2位)

CSNEQU18H;当前曲曲号

REP0LEQU19H;0号重复段地址

REP0HEQU1AH;

REP1LEQU1BH;1号重复段地址

REP1HEQU1CH;

REP2LEQU1DH;2号重复段地址

REP2HEQU1EH

REP3LEQU1FH;3号重复段地址

REP3HEQU23H;

COSPEEDNEQU24H;

SPENREQU25H;

LOCFBIT00H;左声道开关标志

ROCFBIT01H;右声道开关标志

SECHSTOFBIT02H;搜索、存储标志

NEXTSFBIT03H;下一曲标志

CSBESTOFBIT04H;当前曲锁存/释放

CUYFDBIT05H;当前音符显示

KSETFBIT06H;SET键按下标志

KALT0FBIT07H;ALT0键按下标志

KALT1FBIT08H;ALT1键按下标志

SPEEDFBIT09H;速度增/减标志

TONEFBIT0AH;音调增/减标志

YPBITBIT0BH;音频逻辑输出

KBDISFBIT0CH;键盘显示标志

REP0FBIT0DH;0号重复段控制

REP1FBIT0EH;1号重复段控制

REP2FBIT0FH;2号重复段控制

REP3FBIT10H;3号重复段控制

SBOTMEQU25H;堆栈区(栈底)

BUFF0EQU43H;锁存曲数

BUFFEQU44H;锁存曲缓冲区

;============================

;=========BEGIN==============

ORG0000H

LJMPMAIN

;---------T0INT--------------

ORG000BH

LJMPT0INT

;---------T1INT--------------

ORG001BH

LJMPT1INT

;1.音频发生器

;---------YPFSQ(01)----------

ORG0030H

T0INT:

MOVTL0,R4

MOVTH0,R5

PUSHPSW

PUSHACC

PUSH01H

JBLOCF,ROPER

MOVR1,#00H

MOVA,LDYAR

T0LLOP:

RRCA

MOVYPBIT,C

XCHA,R1

CJNEA,LDYDSR,T0LNEXT

MOVC,YPBIT

MOVLOUT,C

INCLDYAR

;INCP0

SJMPROPER

T0LNEXT:

XCHA,R1

INCR1

SJMPT0LLOP

ROPER:

JBROCF,T0RETI

MOVR1,#00H

MOVA,RDYAR

T0RLOP:

RRCA

MOVYPBIT,C

XCHA,R1

CJNEA,RDYDSR,T0RNEXT

MOVC,YPBIT

MOVROUT,C

INCRDYAR

;INCP2

SJMPT0RETI

T0RNEXT:

XCHA,R1

INCR1

SJMPT0RLOP

T0RETI:

POP01H

POPACC

POPPSW

RETI

;2.通用时钟

;---------CLOCK(02)----------

T1INT:

MOVTL1,#0F0H

MOVTH1,#0D8H

PUSHPSW

PUSHACC

INCJPCLK

INCGENCLK

INCSNSDCLK

MOVA,SNSDCLK

CJNEA,#0FFH,T1NEXT

CLRSECHSTOF

T1NEXT:

INCGEN16T0

MOVA,GEN16T0

CJNEA,#100,T1NEXT0

MOVGEN16T0,#00H

INCGEN16T1

T1NEXT0:

INCSETST0

MOVA,SETST0

CJNEA,#100,T1RETI

MOVSETST0,#00H

INCSETST1

MOVA,SETST1

CJNEA,#20,T1RETI

MOVSETST1,#00H

MOVSTATU,#00H

T1RETI:

POPACC

POPPSW

RETI

;3.显示子程序

;---------DISPLAY(03)--------

DISPLAY:

PUSHACC

PUSHDPL

PUSHDPH

MOVDPTR,#T_FIGCODE

MOVA,DISNUM0

MOVCA,@A+DPTR

MOVSBUF,A

JNBTI,$

CLRTI

MOVA,DISNUM1

MOVCA,@A+DPTR

MOVSBUF,A

JNBTI,$

CLRTI

POPDPH

POPDPL

POPACC

RET

T_FIGCODE:

DB088H,0EBH,04CH,049H

;0123

DB02BH,019H,018H,0CBH

;4567

DB008H,009H,00AH,038H

;89AB

DB09CH,068H,01CH,01EH

;CDEF

DB080H,0E3H,044H,041H

;0.1.2.3.

DB023H,011H,010H,0C3H

;4.5.6.7.

DB000H,001H,002H,030H

;8.9.A.B.

DB094H,060H,014H,016H

;C.D.E.F.

DB0FFH,02FH,098H,07FH

;熄灭#G-

DB07CH,078H,0BCH,00AH

;coLR

DB029H

;Y

;4.主程序MAIN

;---------MAIN(04)-----------

MAIN:

MOVR0,#01H

CLRA

CLRAM:

MOV@R0,A

INCR0

CJNER0,#80H,CLRAM

MOVR0,A

MOVSP,#SBOTM

MOV08H,#BUFF

;MOV09H,#BUFF

MOVSCON,#00H

MOVTMOD,#11H

MOVTL1,#0F0H

MOVTH1,#0D8H

SETBEA

SETBET0

SETBET1

SETBTR1

START:

MOVDPTR,#T_SONGS

RYF:

LCALLRYFSUP

MOVA,R7

JZSTART

CJNER7,#0FFH,SYF

JBCNEXTSF,NEXTSCL

MOVA,STATU

JNZGONSBQ

MOVA,BUFF0

JNZMPSQCL

LCALLPAQSCL

SJMPMQNFD

MPSQCL:

LCALLPSQSCL

MQNFD:

LCALLQNFDSUP

MOVPJRYF:

INCDPTR

INCDPTR

SJMPRYF

NEXTSCL:

LCALLCSBESTOJG

JBCSBESTOF,CALLPSCL

LCALLPAQSCL

SJMPMOVPJRYF

CALLPSCL:

LCALLPSQSCL

SJMPMOVPJRYF

GONSBQ:

LCALLCSDPTR

INCDPTR

INCDPTR

SJMPMOVPJRYF

SYF:

CJNER6,#0FFH,CALLPLAY

LCALLREPCLSUP

SJMPMOVPJRYF

CALLPLAY:

LCALLYFDSUP

LCALLPLAY

SJMPMOVPJRYF

;5.读音符子程序

;---------RYFSUP(05)--------

RYFSUP:

CLRA

MOVCA,@A+DPTR

MOVR6,A

MOVA,#01H

MOVCA,@A+DPTR

MOVR7,A

RET

;6.统唱曲首处理

;---------PAQSCL(06)--------

PAQSCL:

MOVCSN,R6

INCDPTR

INCDPTR

LCALLRYFSUP

MOV02H,R6

MOV03H,R7

RET

;7.存唱曲首处理

;---------PSQSCL(07)--------

PSQSCL:

PUSHPSW

SETBRS0

CLRRS1

PSQC7E:

CJNER0,#7EH,PSQNEXT

PSQNEXT:

JCPSQNEXT1

MOVR0,#BUFF

SJMPPSQC7E

PSQNEXT1:

MOVA,@R0

JNZPSQNEXT2

INCR0

INCR0

INCR0

SJMPPSQC7E

PSQNEXT2:

MOVCSN,@R0

INCR0

MOV02H,@R0

INCR0

MOV03H,@R0

INCR0

POPPSW

LCALLCSDPTR

INCDPTR

INCDPTR

RET

;8.曲号闪显子程序

;---------QNFDSUP(08)-------

QNFDSUP:

PUSHACC

MOVGEN16T0,#00H

MOVGEN16T1,#00H

QNGON:

LCALLCSNSDISN

LCALLDISPLAY

MOVGENCLK,#00H

QNWAIT:

MOVA,GENCLK

CJNEA,#35,QNWAIT

MOVDISNUM0,#20H

MOVDISNUM1,#20H

LCALLDISPLAY

MOVGENCLK,#00H

QNWAIT1:

MOVA,GENCLK

CJNEA,#15,QNWAIT1

MOVA,GEN16T1

CJNEA,#02,QNGON

POPACC

RET

;9.曲号送显示寄存器

;---------CSNSDISN(09)------

CSNSDISN:

MOVA,CSN

ANLA,#0FH

LCALLCSBESTOJG

JNBCSBESTOF,NADP

ADDA,#10H

NADP:

MOVDISNUM0,A

MOVA,CSN

SWAPA

ANLA,#0FH

MOVDISNUM1,A

RET

;10.当前曲是否被存储判断

;---------CSBESTOJG(10)-----

CSBESTOJG:

PUSHACC

PUSHPSW

MOVA,BUFF0

JZCLRCSTOF

MOVR0,#BUFF

CSBCMPCSN:

MOVA,@R0

CJNEA,CSN,CSBGSCAN

SETBCSBESTOF

SJMPCSBRET

CSBGSCAN:

INCR0

INCR0

INCR0

CJNER0,#7EH,CSBNEXT

CSBNEXT:

JCCSBCMPCSN

CLRCSTOF:

CLRCSBESTOF

MOVR0,#BUFF

CSBCMP0:

MOVA,@R0

JZCSBRET

INCR0

INCR0

INCR0

CJNER0,#7EH,CSBNEXT1

CSBNEXT1:

JCCSBCMP0

CSBRET:

POPPSW

POPACC

RET

;11.找当前曲首址

;---------CSDPTR(11)--------

CSDPTR:

MOVDPTR,#T_SONGS

CSDSCAN:

LCALLRYFSUP

CJNER7,#0FFH,CSDNEXT

MOVA,R6

CJNEA,CSN,CSDNEXT

SJMPCSDRET

CSDNEXT:

INCDPTR

INCDPTR

SJMPCSDSCAN

CSDRET:

RET

;12.重复段处理子程序

;---------REPCLSUP(12)------

REPCLSUP:

MOVA,R7

ANLA,#0FH

CJNEA,#02H,CMPA3

MOVA,R7

SWAPA

ANLA,#0FH

JNZH4CMP1

JNBREP0F,REPRET0

CLRREP0F

MOVDPL,REP0L

MOVDPH,REP0H

REPRET0:

RET

H4CMP1:

CJNEA,#01H,H4CMP2

JNBREP1F,REPRET

CLRREP1F

MOVDPL,REP1L

MOVDPH,REP1H

RET

H4CMP2:

CJNEA,#02H,H4CMP3

JNBREP2F,REPRET

CLRREP2F

MOVDPL,REP2L

MOVDPH,REP2H

RET

H4CMP3:

CJNEA,#03H,REPRET

JNBREP3F,REPRET

CLRREP3F

MOVDPL,REP3L

MOVDPH,REP3H

RET

CMPA3:

CJNEA,#03H,REPRET

MOVA,R7

SWAPA

ANLA,#0FH

JNZH4VS1

SETBREP0F

MOVREP0L,DPL

MOVREP0H,DPH

SJMPSREPHAD

H4VS1:

CJNEA,#01H,H4VS2

SETBREP1F

MOVREP1L,DPL

MOVREP1H,DPH

SJMPSREPHAD

H4VS2:

CJNEA,#02H,H4VS3

SETBREP2F

MOVREP2L,DPL

MOVREP2H,DPH

SJMPSREPHAD

H4VS3:

CJNEA,#03H,REPRET

SETBREP3F

MOVREP3L,DPL

MOVREP3H,DPH

SREPHAD:

MOV09H,A

LCALLCSDPTR

REPGON:

INCDPTR

INCDPTR

LCALLRYFSUP

CJNER6,#0FFH,REPGON

MOVA,R7

SWAPA

ANLA,#0FH

CJNEA,09H,REPGON

REPRET:

RET

;13.音符显示子程序

;---------YFDSUP(13)--------

YFDSUP:

MOVA,STATU

JNZYFDRET

JBSECHSTOF,YFDRET

JNBCUYFD,YFSLED

XZFCLD:

MOVDISNUM0,#20H

MOVDISNUM1,#20H

SJMPYFDSPLAY

YFSLED:

MOVA,R6

JZXZFCLD

ANLA,#0FH

PUSHDPL

PUSHDPH

MOVDPTR,#T_YFDCOD

MOVCA,@A+DPTR

MOVDISNUM0,A

POPDPH

POPDPL

MOVA,R6

SWAPA

ANLA,#0FH

MOVDISNUM1,A

YFDSPLAY:

LCALLDISPLAY

YFDRET:

RET

T_YFDCOD:

DB20H;--

DB01H;1

DB02H;2

DB03H;3

DB04H;4

DB05H;5

DB06H;6

DB07H;7

DB11H;#1

DB12H;#2

DB14H;#4

DB15H;#5

DB16H;#6

;14.唱音符子程序

;---------PLAY(14)----------

PLAY:

MOVA,R6

JZPCOSPECL

PUSHDPL

PUSHDPH

MOVDPTR,#T_SD

ANLA,#0FH

MOVCA,@A+DPTR

XCHA,R6

SWAPA

ANLA,#0FH

MOVB,#12

MULAB

ADDA,R6

ADDA,R2

RLA

MOVR6,A

MOVDPTR,#T_RAN

MOVCA,@A+DPTR

MOVTH0,A

MOVR5,A

MOVA,R6

INCA

MOVCA,@A+DPTR

MOVTL0,A

MOVR4,A

POPDPH

POPDPL

SETBTR0

PCOSPECL:

LCALLCOSPECL

PJPWAIT:

MOVJPCLK,#00H

PDELAY:

LCALLKCXCL

JBNEXTSF,PRET

MOVA,JPCLK

CJNEA,01H,PNEXT

PNEXT:

JCPDELAY

DJNZR7,PJPWAIT

PRET:

CLRTR0

RET

;---------TABSD-------------

T_SD:

DB01h;useless

DB01H

DB03H

DB05H

DB06H

DB08H

DB0AH

DB0CH

DB02H

DB04H

DB07H

DB09H

DB0bH

;---------TABRAN------------

T_RAN:

DW0F111H;useless

dw0f111h;area0

dw0f1e8h

dw0f2b2h

dw0f373h

dw0f426h

dw0f4eeh

dw0f571h

dw0f609h

dw0f699h

dw0f71fh

dw0f79fh

dw0f817h

dw0f889h;area1

dw0f8f4h

dw0f95ah

dw0f9b9h

dw0fa13h

dw0fa68h

dw0fab9h

dw0fb04h

dw0fb4ch

dw0fb90h

dw0fbcfh

dw0fc0ch

dw0fc45h;area2

dw0fc7ah

dw0fcadh

dw0fcdch

dw0fd0ah

dw0fd34h

dw0fd5ch

dw0fd82h

dw0fda6h

dw0fdc8h

dw0fde8h

dw0fe06h

dw0fe22h;area3

dw0fe3dh

dw0fe56h

dw0fe6eh

dw0fe85h

dw0fe9ah

dw0feaeh

dw0fec1h

dw0fed3h

dw0fee3h

dw0fef4h

dw0ff02h

dw0ff11h;area4

dw0ff1fh

dw0ff2bh

dw0ff37h

dw0ff42h

dw0ff4dh

dw0ff57h

dw0ff60h

dw0ff6ah

dw0ff72h

dw0ff7ah

dw0ff81h

dw0ff89h;5

;15.共速处理

;---------COSPECL(15)-------

COSPECL:

MOVR1,03H

MOVA,COSPEEDN

JZCOSPRET

PUSHCOSPEEDN

MOVA,R1

COSPEGON:

MOVB,#08H

MULAB

CLRC

SUBBA,R1

JNCCOSPNEXT

DECB

COSPNEXT:

MOVR6,#03H

DIV8:

CLRC

XCHA,B

RRCA

XCHA,B

RRCA

DJNZR6,DIV8

MOVR1,A

DJNZCOSPEEDN,COSPEGON

POPCOSPEEDN

MOVA,R1

JNZCOSPRET

MOVR1,#01H

COSPRET:

RET

;16.键盘查询处理

;---------KCXCL(16)---------

KCXCL:

LCALLKSET

LCALLKALT0

LCALLKALT1

JNBKSETF,KNEXT0

LCALLKSETCL

KSETSTC:

MOVSETST0,#00H

MOVSETST1,#00H

SETBKBDISF

SJMPKDIS

KNEXT0:

JNBKALT0F,KNEXT1

LCALLKALT0CL

SJMPKSETSTC

KNEXT1:

JNBKALT1F,KDIS

LCALLKALT1CL

SJMPKSETSTC

KDIS:

M

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 家庭教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1