程序采用模块化结构,所有用到的常数或数组都用EQU或DATA或DB伪指令定义与命名,以使程序易于修改、调试和升级。本系统将TO溢出中断用于软件看门狗。
1喷池数据
喷池数据是用以对喷池内的水泵、电磁阀和彩灯等进行开与关控制的数据。一组可循环使用的这种数据,就决定了喷泉和彩灯的一个特定的变化形态。这组喷池数据可称为花样数据。对一个特定构造的喷池,这种花样数据可编写出很多。
下面以图3.1为例说明花样数据的编排方法。假设希望外圈喷头每隔一定时间顺次增喷2个喷头,且从2个经4步顺时针增至8个后,再顺次以同样的方向同样的速度每次减喷2个喷头,即从8个喷头经4步减至0。以后不断按上述规律循环变化。在这期间,里圈和中心喷头一直不喷。在不考虑其它控制的情况下,图4.1喷池只需2个输出寄存器,其各位控制喷头定义如下:
8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
X | X | X | 13 | 12 | 11 | 10 | 9 |
图3-1喷头布局例
以上各位若为1时相应的喷头喷水,为0时不喷水,则外圈喷头数据应为:
0000 0011B
0000 1111B
0011 1111B
1111 1111B
1111 1100B
1111 0000B
1100 0000B
0000 0000B
若该花样数据定义为HYSJ01则数据定义如下:
HYSJ01:
DB 03H,0FH,3FH,0FFH,0FCH,0FOH,0COH,00H;外圈喷头数据
DB 0,0,0,0,0,0,0,0 ; 里圈和中心喷头数据
每次将花样数据输出时都是顺次取一列输出的,且可循环取用。显然这样的花样数据可以编不少,还可将两个以上的数据搭配起来,组成新的更复杂一些的花样数据。
2主程序框图
程序重新设置后,进入0000H开始的主程序,其流程图如图3.2所示。可以看出:P1.4上的开关K决定是否测试输出通道;乐曲是否演奏决定了喷池是否有动作,即P1.5的电平;拔码开关的设定值决定了延时多少倍的0.1秒时间,即喷池动作改变的时间间隔:奏曲每停一次(大多数乐曲奏曲中间不会停),下次再奏曲就换一组花样数据,若用完了最后一组,以后就从头再取。也就是多个乐曲依次轮流循环使用编制好的喷池花样数据。
3 控制潜水泵软件设计模块
目前,潜水泵结构简单,成本较低,控制方便,只有一种转速。要控制潜水泵的流量变化,就必须使潜水泵的转速发生变化。
我们使用无触点开关分时接通的方法提高潜水泵的转速档次,在硬件电路基本不变的条件下,使潜水泵具有十八档转速的调速能力和更好的节能效果,这种方法无需增加较多的硬件,仅在控制器中采用新的调速程序,即可达到提高潜水泵转速档次和节能的目的。
3.1 潜水泵开关调速的原理
潜水泵调速电路中, L、M、H分别为单相潜水泵的低速抽头、中速抽头和高速抽头,单相潜水泵采用电容运行方式,三个抽头与电源的连接由三个双向晶闸管TL、TM、TH来控制,当TL导通时潜水泵的低速抽头与电源连接,潜水泵低速运转,同样,TM导通时潜水泵中速运转,TH导通时潜水泵高速运转。我们采用分时接通L、M、H的方法,可以调节潜水泵的转速,使潜水泵获得十八档转速的变速能力。设电源频率为50HZ,其周期为0.02S,取调速周期TS=6T(T为电源周期),低速调速时,调速周期内不接通任何一个晶闸管,则潜水泵的转速0,调速周期内全接通晶闸管TL,则潜水泵低速运转,但如果在6个电源周期内,N个周期接通晶闸管TL(0≤N≤6),其他时间不接通,那么,在潜水泵的低速下可获得6档更低的转速。同样,中速调速时,调速周期内全接通晶闸管TL,则潜水泵低速运转,全接通晶闸管TM,则潜水泵中速运转,如果在6个电源周期内N个周期接通晶闸管TM,(6-N)个周期接通TL,那么在潜水泵的低速和中速之间可获得6档转速。同样道理,在中速和高速间又可获得6档转速。由此可见采用分时接通的方法,可以使潜水泵具有十八档转速的调速能力。
3.2潜水泵开关调速的软件设计
单相潜水泵采用单片机AT89C51控制,单片机的输出端口P2.0、P2.1、P2.2经反相器与晶闸管TL、TM、TH的控制极连接,当P2.0=“0”时,晶闸管导通,潜水泵可低速运转,反之,P2.0=“1”时,晶闸管截止,潜水泵停转,即由P2.0输出电位控制潜水泵的低速档;同样,由P2.1输出电位控制潜水泵的中速档,P2.2控制潜水泵的高速档。采集的音乐信号经过傅立叶变换再去查幅值对应的分贝转速表直接得到转速代码,这样就可以控制潜水泵的转速,再此只以生日快乐音乐程序为例,控制潜水泵转速的方法如下:
每个音符对应一种转速代码,潜水泵的转速随音符改变而改变。调速程序必须经过一个最小时间1/4拍才能输出一个转速代码的转速,在调速程序中,采用一个存储单元(90H)作为转速输入单元,另一个存储单元(95H)记录晶闸管导通时间,并通过延时程序来实现。
在调速程序中,我们采用8位数据记录电机的转速代码,其中低3位(b2b1b0)表示接通比例N,第4、5位(b4b3)表示接通档次,高3位(b7b6b5)不用。接通档次表示调速为低速调速、中速调速还是高速调速,其值为b4b3={00B,01B,10B,11B},当接通档次为00B时,在转速代码设定的接通比例内接通晶闸管TL,接通比例外不接通晶闸管;当接通档次为01B时,在转速代码设定的接通比例内接通晶闸管TM,接通比例外接通晶闸管TL,当接通档次为10B时,在转速代码设定的接通比例内接通晶闸管TH,接通比例外接通晶闸管TM;当接通档次为11B时,接通比例只有00H一种,这时在整个调速周期内接通晶闸管TH,潜水泵高速运转。接通比例的取值范围000B-110B,由此可知,转速代码的取值范围为00H-06H,09H-0EH,11H-16H总共十八个代码,其中00H-06H为低速档代码,09H-0EH为中速档代码,11H-16H为高速档代码。所以潜水泵除零速外共有十八档转速。
上述方法可以使潜水泵具备十八档转速的调速能力,但这个方法也有一些缺点,主要是:
(1) 潜水泵的转矩是脉动的,使潜水泵的机械噪声增大,在此我采取防止转子轴向运动的措施减少噪声,把潜水泵和水管固定。
(2)低速档接通比例较低时,潜水泵主轴出现蠕行,不能正常工作,必须限制最小转速代码。可去掉低速档转速代码中最低接通比例的三个代码,保留转速较高的十五档转速。采用改进的控制位波形和限制最小转速代码之后,潜水泵在应用中取得较好的调速和调节流量的效果。
4控制电磁阀软件设计模块
控制阀主要是控制喷池花型,由于采用PA0到PA7,PB0到PB4口控制电磁阀,除去相同的花型喷头,所以喷池花型只有1到256种。可以人工按键选择,其喷池花型值通过LED数码管显示出来,即第几号花型,选择了喷池花型值就使相应的电磁阀通电,高电平口使电磁阀有电。高电平口使电磁阀有电,电磁阀编号与PA、PB口的编号对应,则PA、PB口的喷头数据一样。
控制电磁阀子程序模块
DIAN: MOV A,31H; 求出花型数据
ADD A,32H
ADDC A,33H
MOV 34H,A; 保存起来
MOV DPTR, #0F700H;指向1#8155命令口
MOV A, #3H; 设置命令字
MOVX @DPTR, A
INC DPTR; 指向1#PA口
MOV A,34H
MOVX @DPTR,A; 高电平口使电磁阀有电
INC DPTR; 指向1#PB口
MOV A,R7
MOVX @DPTR, A
RET
5 歌曲存储模块
5.1音频脉冲的产生
若要产生音频脉冲,只要算出某一音频的周期(1/频率),再将此周期除以2,即为半周期的时间。利用定时器计时半周期时间,每当计时终止后就将I/O反相,然后重复计时再反相。就可在I/O引脚上得到此频率的脉冲。利用单片机的内部定时器使其工作计数器模式(MODE1)下,改变计数值TH0及TL0以产生不同频率的方法产生不同音阶,例如,频率为523Hz,其周期T=1/523=1912μs,因此只要令计数器计时956μs/1μs=956,每计数956次时将I/O反相,就可得到中音DO(523Hz)。
表3-1 C调各音符频率与计数值T的对照表
音符 | 频率Hz | 简谱码(T值) | 音符 | 频率Hz | 简谱码(T值) |
低1DO | 262 | 63628 | #4FA# | 740 | 64860 |
#DO# | 277 | 63731 | 中5SO | 784 | 64898 |
低2RE | 294 | 63835 | #5SO# | 831 | 64934 |
#2RE# | 311 | 63928 | 中6LA | 880 | 64968 |
低3M | 330 | 64021 | #6 | 932 | 64994 |
低4FA | 349 | 64103 | 中7SI | 988 | 65030 |
#4FA# | 370 | 64185 | 高1DO | 1046 | 65058 |
低5SO | 392 | 64260 | #1DO# | 1109 | 65085 |
#5SO# | 415 | 64331 | 高2RE | 1175 | 65110 |
低6LA | 440 | 64400 | #2RE# | 1245 | 65134 |
#6 | 466 | 64463 | 高3M | 1318 | 65157 |
低7SI | 494 | 64524 | 高4FA | 1397 | 65178 |
中1DO | 523 | 64580 | #4FA# | 1480 | 65198 |
#1DO# | 554 | 64633 | 高5SO | 1568 | 65217 |
中2RE | 587 | 64684 | #5SO# | 1661 | 65235 |
#2RE# | 622 | 64732 | 高6LA | 1760 | 65252 |
中3M | 659 | 64777 | #6 | 1865 | 65268 |
中4FA | 698 | 64820 | 高7SI | 1967 | 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 | 1/4拍 | 1 | 1/8拍 | ||
2 | 2/4拍 | 2 | 1/4拍 | ||
3 | 3/4拍 | 3 | 3/8拍 | ||
4 | 1拍 | 4 | 1/2拍 | ||
5 | 1又1/4拍 | 5 | 5/8拍 | ||
6 | 1又1/2拍 | 6 | 3/4拍 | ||
8 | 2拍 | 8 | 1拍 | ||
A | 2又1/2拍 | A | 1又1/4拍 | ||
C | 3拍 | C | 1又1/2拍 | ||
F | 3又3/4拍 | ||||
表3-3 各调1/4节拍的时间设定
曲调值 | DELAY | 曲调值 | DELAY |
调4/4 | 125毫秒 | 调4/4 | 62毫秒 |
调3/4 | 187毫秒 | 调3/4 | 94毫秒 |
调2/4 | 250毫秒 | 调2/4 | 125毫秒 |
表3-4简谱对应的简谱码、T值
简谱 | 发音 | T值 | 简谱码 | 简谱 | 发音 | 简谱码 | T值 |
5 | 低音 | 64260 | 1 | 6 | 中音 | 9 | 64968 |
6 | 低音 | 64400 | 2 | 7 | 中音 | A | 65030 |
7 | 低音 | 64524 | 3 | 1 | 高音 | B | 65058 |
1 | 中音 | 64580 | 4 | 2 | 高音 | C | 65110 |
2 | 中音 | 64684 | 5 | 3 | 高音 | D | 65157 |
3 | 中音 | 64777 | 6 | 4 | 高音 | E | 65178 |
4 | 中音 | 64820 | 7 | 5 | 高音 | F | 65217 |
5 | 中音 | 64898 | 8 | 高音 | 0 |
5.2音乐程序
先根据乐谱的音符按表3.1建立T值表的顺序,把T值表建立在TABLE1,构成发音符的计数值放在TABLE中;简谱码(音符,参照表3.4)为高4位,节拍(节拍数,参照表3.2)为低4位,音符节拍码放在程序的“TABLE”处。
6灯光控制模块
LC182是音频调制彩灯控制专用芯片,其内部分配器频率的高低受音频信号大小的调制,特别适用于声光音响控制场合,可直接驱动驱动众多发光二极管闪光,也可驱动交流彩色电灯作循环闪光。LC182为四路驱动输出。他们的内部均有信号整流电路。压控振荡器,脉冲分配器。在本系统中,单片机便开启LC182时,LC182四路输出依次变为高电平,其循环频率约为0.5~1HZ,一有音乐信号的输入,彩灯的循环频率随音频信号的大小而变化,其最高循环频率为15HZ。
7看门狗子程序
软件看门狗由“喂狗”子程序和(看门狗定时器)TO溢出子程序组成。“喂狗”子程序如下:
此子程序应在系统程序的若干处调用,保证在程序正常执行时TO总不溢出。当受到某种干扰程序跑飞时,“喂狗”子程序得不到执行,经130MS后TO溢出中断,就会执行如下的(看门狗定时器)To溢出子程序:
当执行从中断返回指令RETI时,栈顶内容0049H就会弹出至程序计数器PC,从而重新设定起始喷池花样序号后,再进行乐曲控制初始化,喷池继续正常动作。
8实验仿真
仿真是利用计算机对实际额屋里模型或数学模型进行试验(虚拟仪器的虚拟实验),通过这样的模型试验来随一个实际系统的性能和工作状态进行分析和研究。
近年来计算机仿真技术取得了快速的发展,同时推动了单片机仿真技术的进步。目前,用于单片机仿真的工具很多,有些主要用于软件仿真,侧重于算法的验证;有些用于硬件仿真的工具对CPU的仿真能力有限,至于对CPU外围的硬件仿真更是无能为力。Proteus在单片机CPU和外围器件方面表现出卓越的仿真能力使其成为目前最好的仿真工具之一。
Proteus的显著特点如下:
(1)全部满足单片机软件仿真系统的标准,并在同类产品中有明显优势;
(2)具有模拟电路仿真、数字电路仿真、单片机及外围电路组成的系统仿真的功能;
(3)目前支持的单片机类型有:68000系列、51系列、AAVR系列等;
(4)支持大量的存储器和外围设备。
由于实验室条件原因本设计仿真部分不能在实验室完成,因此仅在此将使用Proteus来实现本设计仿真的步骤进行描述如下:
第一步:打开Proteus 6 Professional绘图界面。
第二步:添加所需元件并连接电路图。本设计所需元件有:AT89C51、LED灯、水泵、电磁阀、扬声器等。
第三步:添加仿真文件。
第四步:单击开始图标,开始仿真。此时喷泉开始运行,根据运行状态进行源代码的调试。
1、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“文章版权申述”(推荐),也可以打举报电话:18735597641(电话支持时间:9:00-18:30)。
2、网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
3、本站所有内容均由合作方或网友投稿,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务。
原创文章,作者:写文章小能手,如若转载,请注明出处:https://www.447766.cn/chachong/572.html,