基于单片机的音乐喷泉系统设计
作者:互联网
注意:本设计为Marconi工作室版权所有,各大平台搜索Marconi工作室,可联系我们!!!!
备注:如需帮助可加 QQ:2276212993 微信:marconi_e
控制系统硬件总体设计方案
该音乐喷泉控制系统的总体结构如图2.1所示,由音乐输入系统、数模转换系统、单片机控制系统和输出控制系统等组成。
图2.1 系统总体结构框图
音乐程序
先根据乐谱的音符按表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
MOV IE, #82H; 中断使能
START0: MOV 30H, #00H; 取简谱码指针
NEXT: MOV A, 30H ; 简谱码指针载入A
MOV DPTR,#TABLE; 至TABLE取简谱码
MOVC A, @A+DPTR
MOV R2, A; 取到的简谱码暂存于R2
JZ END0; 是否取到00(结束码)?
ANL A, #0FH; 不是,则取低4位(节拍码)
MOV 90H, A; 为调速保存数据
MOV R5, A; 将节拍码存入R5
MOV A, R2; 将取到的简谱码再载入A
SWAP A; 高低4位交换
ANL A, #0FH; 取低4位(音符码)
MOV 90H, A; 保存音符码,为调速做准备
JNZ SING; 取到的音符码是否为0?
CLR TR0; 是,则不发音
JMP D1; 跳至D1
SING: DEC A; 取到的音符码减1(不含0)
MOV 22H, A ; 存入(22H)
RL A; 乘2
MOV DPTR, #TABLE1; 至TABLE1取相对的高位字节计数值
MOVC A, @A+DPRT
MOV TH0, A; 取到的高位字节存入TH0
MOV 21H, A; 取到的高位字节存入(21H)
MOV A, 22H ; 再载入取到的音符码
RL A; 乘2
INC A; 加1
MOVC A, @A+DPRT; 至TABLE1取相对的低位字节计数值
MOV TL0, A; 取到的低位字节存入TL0
MOV 20H, A; 取到的低位字节存入(20H)
SETB TB0; 启动TIMER0
D1: CALL CHULIKOU; 调用以1/4拍为基本单位时间的调速子程序
INC 30H; 取简谱码指针加1
JMP NEXT; 取下一个码
END0: CLR TR0; 停止TIMER0
JMP START0; 重复循环
TIM0: PUSH ACC; 将A的值暂存于堆栈
PUSH PSW; 将PSW的值暂存于堆栈
MOV TL0, 20H; 重设计数值
MOV TH0, 21H
CPL P1.0; 将P1.0位反相
POP PSW; 至堆栈取回PSW的值
POP ACC; 至堆栈取回A的值
RETI; 返回主程序
TABLE1:
DW 64260, 64400, 65524, 64580
DW 64684, 64777, 64820, 64898
DW 64968, 65030, 65058, 65110
DW 65157, 65178, 65217
TABLE:
DB 82H,01H,81H,94H,84H ;1
DB 0B4H,0A4H,04H
DB 82H,01H,81H,94H,84H
DB 0C4H,0B4H,04H;2
DB 82H,01H,81H,0F4H,0D4H
DB 0B4H,0A4H,94H
DB 0E2H,01H,0E1H,0D4H,0B4H
DB 0C4H,0B4H,04H;3
DB 82H,01H,81H,94H,84H
DB 0B4H,0A4H,04H
DB 82H,01H,81H,94H,84H
DB 0C4H,0B4H,04H;4
DB 82H,01H,81H,0F4H,0D4H
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
灯光控制模块
LC182是音频调制彩灯控制专用芯片,其内部分配器频率的高低受音频信号大小的调制,特别适用于声光音响控制场合,可直接驱动驱动众多发光二极管闪光,也可驱动交流彩色电灯作循环闪光。LC182为四路驱动输出。他们的内部均有信号整流电路。压控振荡器,脉冲分配器。在本系统中,单片机便开启LC182时,LC182四路输出依次变为高电平,其循环频率约为0.5~1HZ,一有音乐信号的输入,彩灯的循环频率随音频信号的大小而变化,其最高循环频率为15HZ。
灯光控制子程序
LUMP:
MOV DPTR, #0EF00H ; 初始化2#8155,PA口为基本输出口
PB口为基本输出口,PC口输入口
MOV A, #1H
MOVX @DPTR, A
INC DPTR
INC DPTR; 指向2#8155PC口
MOV A, #01H
MOVX @DPTR, A
RET
看门狗子程序
软件看门狗由“喂狗”子程序和(看门狗定时器)TO溢出子程序组成。“喂狗”子程序如下:
DOG:
MOV TH0,#02H;模式1定时器,在6MHZ晶振时,定时约130ms
MOV TL0, #18H
RET
此子程序应在系统程序的若干处调用,保证在程序正常执行时TO总不溢出。当受到某种干扰程序跑飞时,“喂狗”子程序得不到执行,经130ms后TO溢出中断,就会执行如下的(看门狗定时器)To溢出子程序:
TOINT:
POP YR1 ;舍去无用栈顶内容
POP YR1 ;YRD和 YR1是两个RAM单元名
MOV YR0,#49H ;0049H是本程序设定起始喷池花样序号指令的存放地址
MOV YR1.#O
PUSH YR0 ;使栈顶内容为0049H
PUSH YR1
RETI ;执行RETI时PC值=0049H,即从0号喷池花样开始演出
当执行从中断返回指令RETI时,栈顶内容0049H就会弹出至程序计数器PC,从而重新设定起始喷池花样序号后,再进行乐曲控制初始化,喷池继续正常动作。
实验仿真
仿真是利用计算机对实际额屋里模型或数学模型进行试验(虚拟仪器的虚拟实验),通过这样的模型试验来随一个实际系统的性能和工作状态进行分析和研究。
近年来计算机仿真技术取得了快速的发展,同时推动了单片机仿真技术的进步。目前,用于单片机仿真的工具很多,有些主要用于软件仿真,侧重于算法的验证;有些用于硬件仿真的工具对CPU的仿真能力有限,至于对CPU外围的硬件仿真更是无能为力。Proteus在单片机CPU和外围器件方面表现出卓越的仿真能力使其成为目前最好的仿真工具之一。
Proteus的显著特点如下:
(1)全部满足单片机软件仿真系统的标准,并在同类产品中有明显优势;
(2)具有模拟电路仿真、数字电路仿真、单片机及外围电路组成的系统仿真的功能;
(3)目前支持的单片机类型有:68000系列、51系列、AAVR系列等;
(4)支持大量的存储器和外围设备。
由于实验室条件原因本设计仿真部分不能在实验室完成,因此仅在此将使用Proteus来实现本设计仿真的步骤进行描述如下:
第一步:打开Proteus 6 Professional绘图界面。
第二步:添加所需元件并连接电路图。本设计所需元件有:AT89C51、LED灯、水泵、电磁阀、扬声器等。
第三步:添加仿真文件。
第四步:单击开始图标,开始仿真。此时喷泉开始运行,根据运行状态进行源代码的调试。
标签:仿真,01H,0B4H,音乐,DB,MOV,喷泉,单片机,子程序 来源: https://www.cnblogs.com/MarconiStudio/p/marconi_e.html