基于AT89C51单片机的音乐喷泉控制系统设计(5)

2019-04-21 13:23

青岛理工大学毕业设计(论文)

不同频率的方法产生不同音阶,例如,频率为523Hz,其周期T=1/523=1912μs,因此只要令计数器计时956μs/1μs=956,每计数956次时将I/O反相,就可得到中音DO(523Hz)。

表3.1 C调各音符频率与计数值T的对照表

音符 低1DO #DO# 低2RE #2RE# 低3M 低4FA #4FA# 低5SO #5SO# 低6LA #6 低7SI 中1DO #1DO# 中2RE #2RE# 中3M 中4FA 频率Hz 262 277 294 311 330 349 370 392 415 440 466 494 523 554 587 622 659 698 简谱码(T值) 63628 63731 63835 63928 64021 64103 64185 64260 64331 64400 64463 64524 64580 64633 64684 64732 64777 64820 音符 #4FA# 中5SO #5SO# 中6LA #6 中7SI 高1DO #1DO# 高2RE #2RE# 高3M 高4FA #4FA# 高5SO #5SO# 高6LA #6 高7SI 频率Hz 740 784 831 880 932 988 1046 1109 1175 1245 1318 1397 1480 1568 1661 1760 1865 1967 简谱码(T值) 64860 64898 64934 64968 64994 65030 65058 65085 65110 65134 65157 65178 65198 65217 65235 65252 65268 65283 每个音符使用一个字节,字节的高4位代表音符的高低,低4位代表音符的节拍,表3.2节拍与节拍码的对照。如果1拍为0.4秒,1/4拍是0.1秒,只要设定延迟时间就可求得节拍的时间。假设1/4拍的节拍时间为DELAY,则1拍应为4DELAY,以此类推。所以只要求得1/4拍的DELAY时间,其余的节拍就是它的倍数,如表3.3为1/4和1/8节拍的时间设定。

表3.2 节拍与节拍码的对照

节拍码 1 2 3 4

节拍数 1/4拍 2/4拍 3/4拍 1拍 节拍码 1 2 3 4 21

节拍数 1/8拍 1/4拍 3/8拍 1/2拍 青岛理工大学毕业设计(论文)

5 6 8 A C F 1又1/4拍 1又1/2拍 2拍 2又1/2拍 3拍 3又3/4拍 5 6 8 A C 5/8拍 3/4拍 1拍 1又1/4拍 1又1/2拍

表3.3 各调1/4节拍的时间设定

曲调值 调4/4 调3/4 调2/4 DELAY 125毫秒 187毫秒 250毫秒 曲调值 调4/4 调3/4 调2/4

DELAY 62毫秒 94毫秒 125毫秒 表3.4简谱对应的简谱码、T值

简谱 5 6 7 1 2 3 4 5 发音 低音 低音 低音 中音 中音 中音 中音 中音 T值 64260 64400 64524 64580 64684 64777 64820 64898 简谱码 1 2 3 4 5 6 7 8 简谱 6 7 1 2 3 4 5 发音 中音 中音 高音 高音 高音 高音 高音 高音 简谱码 9 A B C D E F 0 T值 64968 65030 65058 65110 65157 65178 65217 3.5.2音乐程序

先根据乐谱的音符按表3.1建立T值表的顺序,把T值表建立在TABLE1,构成发音符的计数值放在TABLE中;简谱码(音符,参照表3.4)为高4位,节拍(节拍数,参照表3.2)为低4位,音符节拍码放在程序的“TABLE”处。

音乐程序模块

START-MU:

ORG 00H ; 主程序起始地址 JMP START; 跳至主程序

ORG 0BH ; TIMER0中断起始地址 JMP TIM0; 跳至TIMER0中断子程

START: MOV TMOD,#01H ; 设TIMER0在MODE1

22

青岛理工大学毕业设计(论文)

MOV IE, #82H; 中断使能

MOV A, 30H ; 简谱码指针载入A MOV

DPTR,#TABLE; 至TABLE取简谱码

START0: MOV 30H, #00H; 取简谱码指针 NEXT: MOVC A, @A+DPTR

MOV R2, A; 取到的简谱码暂存于R2 JZ END0; 是否取到00(结束码)? ANL MOV

MOV R5 MOV A SWAP ANL JNZ CLR JMP SING:

MOV RL MOV 值

MOVC MOV MOV MOV RL INC MOVC MOV MOV

SETB D1: 子程序

A, #0FH; 90H, A; , A; , R2; A; A, #0FH; MOV 90H, A; SING; TR0; D1; DEC A; 22H, A ; A; DPTR, #TABLE1;A, @A+DPRT

TH0, A; 21H, A; A, 22H ; A; A; A, @A+DPRT;TL0, A; 20H, A; TB0; CHULIKOU; 23

不是,则取低4位(节拍码)为调速保存数据

将节拍码存入R5 将取到的简谱码再载入A 高低4位交换 取低4位(音符码) 保存音符码,为调速做准备

取到的音符码是否为0? 是,则不发音

跳至D1 取到的音符码减1(不含0)存入(22H) 乘2

至TABLE1取相对的高位字节计数取到的高位字节存入TH0 取到的高位字节存入(21H) 再载入取到的音符码 乘2

加1

至TABLE1取相对的低位字节计数值

取到的低位字节存入TL0 取到的低位字节存入(20H)

启动TIMER0

调用以1/4拍为基本单位时间的调速

CALL 青岛理工大学毕业设计(论文)

INC 30H; 取简谱码指针加1 JMP END0: TIM0: JMP

NEXT; 取下一个码 START0; 重复循环

CLR TR0; 停止TIMER0 PUSH ACC; 将A的值暂存于堆栈

TL0, 20H; 重设计数值 PUSH PSW; 将PSW的值暂存于堆栈 MOV MOV CPL POP POP

RETITABLE1: DW DW DW DW TABLE:

DB DB DB DB DB DB DB DB DB

DB DB DB

DB 82H,01H,81H,0F4H,0D4H

TH0, 21H

P1.0; 将P1.0位反相 PSW; 至堆栈取回PSW的值 ACC; 至堆栈取回A的值

; 返回主程序 64260, 64400, 65524, 64580 64684, 64777, 64820, 64898 64968, 65030, 65058, 65110 65157, 65178, 65217 ;1

82H,01H,81H,94H,84H 0B4H,0A4H,04H 82H,01H,81H,94H,84H 0C4H,0B4H,04H;2 82H,01H,81H,0F4H,0D4H 0B4H,0A4H,94H

0E2H,01H,0E1H,0D4H,0B4H 0C4H,0B4H,04H ;3 82H,01H,81H,94H,84H

0B4H,0A4H,04H 82H,01H,81H,94H,84H 0C4H,0B4H,04H ;4

24

青岛理工大学毕业设计(论文)

DB 0B4H,0A4H,94H

DB 0E2H,01H,0E1H,0D4H,0B4H DB C4H,0B4H,04H

DB 00

TABLE2: DB 04H,05H,06H

DB 09H,0AH,0BH,0CH,0DH,0EH

DB 11H,12H,13H,14H,15H, 16H END

3.6灯光控制模块

LC182是音频调制彩灯控制专用芯片,其内部分配器频率的高低受音频信号大小的调制,特别适用于声光音响控制场合,可直接驱动驱动众多发光二极管闪光,也可驱动交流彩色电灯作循环闪光。LC182为四路驱动输出。他们的内部均有信号整流电路。压控振荡器,脉冲分配器。在本系统中,单片机便开启LC182时,LC182四路输出依次变为高电平,其循环频率约为0.5~1HZ,一有音乐信号的输入,彩灯的循环频率随音频信号的大小而变化,其最高循环频率为15HZ。

灯光控制子程序

LUMP:

MOV DPTR, #0EF00H ; 初始化2#8155,PA口为基本输出口 MOV A, #1H MOVX @DPTR, A

INC DPTR; 指向2#8155PC口 MOV A, #01H MOVX @DPTR, A RET

PB口为基本输出口,PC口输入口

INC DPTR

3.7看门狗子程序

软件看门狗由“喂狗”子程序和(看门狗定时器)TO溢出子程序组成。“喂狗”子程序如下:

DOG:

MOV TH0,#OH;模式1定时器,在6MHZ晶振时,定时约130MS

25


基于AT89C51单片机的音乐喷泉控制系统设计(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:道路清扫保洁管理方案及应急方案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: