文档库 最新最全的文档下载
当前位置:文档库 › C语言单片机(音乐盒)

C语言单片机(音乐盒)

C语言单片机(音乐盒)
C语言单片机(音乐盒)

单片机课程设计报告

题目:电子琴

姓名:

同组人:

班级学号:

指导老师:

日期:

目录

摘要

第一部分:题目要求 (4)

第二部分:方案论证与选择 (4)

第三部分:电路硬件设计 (8)

第四部分:软件设计 (9)

第五部分:系统调试与仪器使用 (10)

总结 (10)

附录 (11)

摘要

本设计是一个基于AT89C51系列单片机的音乐盒,依据单片机技术原理,通过硬件电路制作以及软件编译,设计制作出一个多功能多功能音乐盒。该音乐盒主要由按键电路、复位电路、时钟电路以及蜂鸣器组成。本设计利用KEIL编程软件对音乐盒源程序进行编程并调试,配合PROTEUS仿真软件对硬件进行仿真调试,节约了设计时间。

关键字:音乐盒;AT89C51单片机; KEIL; PROTEUS;音调

第一部分题目要求

一、基本要求

传统的音乐盒多是机械音乐盒,其工作原理是通过齿轮带动一个带有铁钉的铁桶转动,铁桶上的铁钉撞击铁片制成的琴键,从而发出声音。但是,机械式的音乐盒体积比较大,比较笨重,且发音单调。水、灰尘等外在因素,容易使内部金属发音条变形,从而造成发音跑调。另外,机械音乐盒放音时为了让音色稳定,必须放平不能动摇,而且价格昂贵,不能实现大批量生产。

本文设计的音乐盒,是基于单片机设计制作的电子式音乐盒。与传统的机械式音乐盒相比更小巧,音质更优美且能演奏和弦音乐。电子式音乐盒动力来源是电池,制作工艺简单,可进行批量生产,所以价格便宜。基于单片机制作的电子式音乐盒,控制功能强大,可根据需要选歌,使用方便。根据存储容量的大小,可以尽可能多的存储歌曲。

第二部分方案论证与选择

一、系统功能框图

音乐盒的系统结构以A T89C51单片机位控制核心,加上2个按键、时钟复位电路、蜂鸣器、LED模块组成。单片机负责接收按键的输入,根据输入控制音乐播放曲目和音乐花样灯的显示样式以及蜂鸣器发音。系统组成框图如图2.1所示。

图2.1 系统组成框图

音乐盒的功能结构介绍

音乐盒的功能结构如下图所示。Key1——Key7负责切换播放歌曲,播放歌曲共7首。Key8负责控制电子琴与音乐播放的切换。

二、主要设计软件介绍

本设计利用KEIL编程软件对音乐盒源程序进行编程并调试,配合PROTEUS仿真软件对硬件进行仿真调试,两种软件的简介如下:

PROTEUS软件简介

Proteus软件是英国Labcenter electronics公司出版的EDA工具软件(该软件中国总代理为广州风标电子技术有限公司)。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、A VR、ARM、8086和MSP430等,2010年即将增加Cortex和DSP系列处理器,并持续增加其他系列处理器模型。在编译方面,它也支持IAR、Keil和MPLAB等多种编译器。

KEIL简介

单片机开发中除必要的硬件外,同样离不开软件,我们写的汇编语言源程序要变为CPU 可以执行的机器码有两种方法,一种是手工汇编,另一种是机器汇编,目前已极少使用手工汇编的方法了。机器汇编是通过汇编软件将源程序变为机器码,用于MCS-51单片机的汇编软件有早期的A51,随着单片机开发技术的不断发展,从普遍使用汇编语言到逐渐使用高级语言开发,单片机的开发软件也在不断发展,Keil软件是目前最流行开发MCS-51系列单片机的软件,这从近年来各仿真机厂商纷纷宣布全面支持Keil即可看出。Keil提供了包括C 编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部份组合在一起。运行Keil软件需要Pentium或以上的CPU,16MB或更多RAM、20M以上空闲的硬盘空间、WIN98、NT、WIN2000、WINXP 等操作系统。掌握这一软件的使用对于使用51系列单片机的爱好者来说是十分必要的,如果你使用C语言编程,那么Keil几乎就是你的不二之选(目前在国内你只能买到该软件、而你买的仿真机也很可能只支持该软件),即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。

三、音调、节拍以及编码的确定方法

一般说来,单片机演奏音乐基本都是单音频率,它不包含相应幅度的谐波频率,也就是说不能像电子琴那样能奏出多种音色的声音。因此单片机奏乐只需弄清楚两个概念即可,也就是“音调”和节拍表示一个音符唱多长的时间。

音调的确定

不同音高的乐音是用C、D、E、F、G、A、B来表示,这7个字母就是音乐的音名,它们一般依次唱成DO、RE、MI、FA、SO、LA、SI,即唱成简谱的1、2、3、4、5、6、7,相当于汉字“多来米发梭拉西”的读音,这是唱曲时乐音的发音,所以叫“音调”,即Tone。

把C、D、E、F、G、A、B这一组音的距离分成12个等份,每一个等份叫一个“半音”。两个音之间的距离有两个“半音”,就叫“全音”。在钢琴等键盘乐器上,C–D、D–E、F –G、G–A、A–B两音之间隔着一个黑键,他们之间的距离就是全音;E–F、B–C两音之间没有黑键相隔,它们之间的距离就是半音。通常唱成1、2、3、4、5、6、7的音叫自然音,那些在它们的左上角加上﹟号或者b号的叫变化音。﹟叫升记号,表示把音在原来的基础上升高半音,b叫降记音,表示在原来的基础上降低半音。例如高音DO的频率(1046Hz)刚好是中音DO的频率(523Hz)的一倍,中音DO的频率(523Hz)刚好是低音DO频率(266 Hz)的一倍;同样的,高音RE的频率(1175Hz)刚好是中音RE的频率(587Hz)的一倍,中音RE的频率(587Hz)刚好是低音RE频率(294 Hz)的一倍。

1)要产生音频脉冲,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间。利用定时器计时这半个周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚上得到此频率的脉冲。

2)利用AT89C51的内部定时器使其工作在计数器模式MODE1下,改变计数值TH0及TL0以产生不同频率的方法。

此外结束符和休止符可以分别用代码00H和FFH来表示,若查表结果为00H,则表示曲子终了;若查表结果为FFH,则产生相应的停顿效果。

3)例如频率为523Hz,其周期T=1/523=1912us,因此只要令计数器计时956us/1us=956,在每次技术956次时将I/O反相,就可得到中音DO(523Hz)。

计数脉冲值与频率的关系公式如下:

N=Fi÷2÷Fr

N:计算值;Fi:内部计时一次为1us,故其频率为1MHz;

4)其计数值的求法如下:

T=65536-N=65536-Fi÷2÷Fr

例如:设K=65536,F=1000000=Fi=1MHz,球低音DO(261Hz)。中音DO(523Hz)。高音的DO(1046Hz)的计算值

T=65536-N=65536-Fi÷2÷Fr=65536-1000000÷2÷Fr=65536-500000/Fr

低音DO的T=65536-500000/262=63627

低音DO的T=65536-500000/523=64580

低音DO的T=65536-500000/1047=65059

5)C调各音符频率与计数值T的对照表如下表所示。

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

低音频率T 参数中音频率T 参数高音频率T 参数Do 262 1908 229 Do 523 956 115 Do 1046 57 57 Do﹟277 1805 217 Do﹟554 903 108 Do﹟1109 54 54 Re 294 1701 204 Re 587 852 102 Re 1175 51 51 Re﹟311 1608 193 Re﹟622 804 97 Re﹟1245 48 48 Mi 330 1515 182 Mi 659 759 91 Mi 1318 45 45 Fa 349 1433 172 Fa 698 716 86 Fa 1397 43 43 Fa﹟370 1351 162 Fa﹟740 676 81 Fa﹟1480 41 41 So 392 1276 153 So 784 638 77 So 1568 38 38 So﹟415 1205 145 So﹟831 602 72 So﹟1661 36 36 La 440 1136 136 La 880 568 68 La 1760 34 34 La﹟464 1078 129 La﹟932 536 64 La﹟1865 32 32

Si 494 1012 121 Si 988 506 61 Si 1976 30 30

节拍的确定

若要构成音乐,光有音调是不够的,还需要节拍,让音乐具有旋律(固定的律动),而且可以调节各个音的快满度。“节拍”,即Beat,简单说就是打拍子,就像我们听音乐不自主的随之拍手或跺脚。若1拍实0.5s,则1/4 拍为0.125s。至于1拍多少s,并没有严格规定,就像人的心跳一样,大部分人的心跳是每分钟72下,有些人快一点,有些人慢一点,只要听的悦耳就好。音持续时间的长短即时值,一般用拍数表示。休止符表示暂停发音。

一首音乐是由许多不同的音符组成的,而每个音符对应着不同频率,这样就可以利用不同的频率的组合,加以与拍数对应的延时,构成音乐。了解音乐的一些基础知识,我们可知产生不同频率的音频脉冲即能产生音乐。对于单片机来说,产生不同频率的脉冲是非常方便的,利用单片机的定时/计数器来产生这样的方波频率信号。因此,需要弄清楚音乐中的音符和对应的频率,以及单片机定时计数的关系。

表4.2节拍与节拍码对照

节拍码节拍数节拍码节拍数

1 1/4拍 1 1/8拍

2 2/4拍 2 1/4拍

3 3/4拍 3 3/8拍

4 1拍 4 2/1拍

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拍

每个音符使用1个字节,字节的高4位代表音符的高低,低4位代表音符的节拍,图5.2为节拍码的对照。如果1拍为0.4秒,1/4拍实0.1秒,只要设定延迟时间就可求得节拍的时间。假设1/4拍为1DELAY,则1拍应为4DELAY,以此类推。所以只要求得1/4拍的DELAY时间,其余的节拍就是它的倍数,如图5.3为1/4和1/8节拍的时间设定。

表4.3 1/4和1/8节拍的时间设定

曲调值DELAY 曲调值DELAY

调4/4 125毫秒调4/4 62毫秒

调3/4 187毫秒调3/4 94毫秒

调2/4 250毫秒调2/4 125毫秒

编码

do re mi fa so la si分别编码为1~7,重音do编为8,重音re编为9,停顿编为0。播放长度以十六分音符为单位(在本程序中为165ms),一拍即四分音符等于4个十六分音符,编为4,其它的播放时间以此类推。音调作为编码的高4位,而播放时间作为低4位,如此音调和节拍就构成了一个编码。以0xff作为曲谱的结束标志。

举例1:音调do,发音长度为两拍,即二分音符,将其编码为0x18。

举例2:音调re,发音长度为半拍,即八分音符,将其编码为0x22

歌曲播放的设计。先将歌曲的简谱进行编码,储存在一个数据类型为unsigned char的数组中。程序从数组中取出一个数,然后分离出高4位得到音调,接着找出相应的值赋给定时器0,使之定时操作蜂鸣器,得出相应的音调;接着分离出该数的低4位,得到延时时间,

接着调用软件延时。

表4.4简谱对应的简谱码、T值、节拍数

简谱发音简谱码T值节拍码节拍数

5 低音SO 1 64260 1 1/4拍

6 低音LA 2 64400 2 2/4拍

7 低音TI 3 64524 3 3/4拍

1 中音DO 4 64580 4 1拍

2 中音RE 5 64684 5 1又1/4拍

3 中音MI 6 64777 6 1又1/2拍

4 中音FA 7 64820 8 2拍

5 中音SO 8 64898 A 2又1/2拍

6 中音LA 9 64968 C 3拍

7 中音TI A 65030 F 3又3/4拍

1 高音DO B 65058

2 高音RE C 65110

3 高音MI D 65157

4 高音FA E 65178

5 高音SO F 65217

第三部分电路硬件设计

一、单片机最小系统电路设计和元件的选择

根据设计要求和计算简便的原则,我们选择12M的石英晶振、30PF的电容,最小系统图如下:

完整硬件电路如下:

第四部分软件设计部分

一、程序流程

在主程序中调用处理子程序,对采集到的数据进行处理,包括分离,转换,然后根据是否有按键,相应的调用对应的显示子程序。

程序代码如下:(见附录)

第五部分系统调试与仪器使用

1.在PROTUES检查各硬件管脚是否连接正确,线路逻辑是否正确,例如:晶振电路的连接,

复位电路是否设计正确。

2. 根据系统的原理结构检查各流程图是否正确,再根据流程图来检查程序是否也正确。

3. 将所有程序组织起来,在软件环境下运行,检查程序是否正确。通过对硬件和软件系统

的认真检查,反复测试,如果没有出现问题即可把源程序编译成HEX文件装载到单片机中,对硬件进行仿真。

总结

经过一周的艰苦奋战,在指导老师的辛苦指导下,我们最终不但完成了本课题的基本要求,并且实现了功能。虽然过程是艰苦的,但最终成功的喜悦同样令我们快乐。

在这次宝贵的课题设计设计活动中,经验才是对于我们最大的收获,而且还增强了自身对未知问题以及对知识的深化认识的能力,用受益匪浅这个词语来概括这次难忘的活动我觉得再合适不过了。但是,光是完成了作品还是不可以自我满足的,在从一开始的时候就怀着将作品制作得更加人性化,更加令人满意,更加地使功能完美又方便地被应用领域这个最终目的下,随着对单片机这门学科的认识加深,到达了拓展的程度,我想这个目的将在不远的时期内被实现。

总之,这次设计从软件编写、调试到软硬件联机调试,我倾注了大量的时间和心血。真是曾经为程序的编写而冥思查找过,曾经为无法找出错误而郁闷苦恼过,也曾经为某一功能不能实现而犹豫彷徨过,但最终我成功了。

我不仅品味到了结果的喜悦,更明白了过程的弥足珍贵。

附录:

#include

sbit POut =P1^0; //音频输出口

sbit PEX0 = P3^2;//中断按键,控制工作状态为电子琴或者音乐盒#define PKey P2 //电子琴按键

unsigned char TempTH0,TempTL0,bian;

//临时的Th0和Tl0 ,修改定时器中断时间用的变量

unsigned char YinFu,JiePai ;

unsigned char code TabMusic[7][350];

bit Flag;//0:电子琴,1:音乐盒

void Delay05ms(unsigned char Delay05msData);

void Delay10ms(unsigned char Delay10msData);

void FunKeyScan(void);//电子琴程序

void FunPlay(void);//音乐盒播放程序

void main()

{

unsigned char i;

TempTH0=0x00;

TempTL0=0x00;

TH0=TempTH0;

TL0=TempTL0;

TMOD=0x01;

TR0=0;

ET0=1;

EX0=1;

IT0=1;

EA=1;

bian=0;

Delay05ms(1);

while(1)

{

if(Flag==0)//电子琴

{

if(PKey!=0xff) //发现按键按下

{

FunKeyScan();//检测键盘并修改定时时间

TR0=1; //发出声音

}

else //如果发现按键弹起,则关闭声音

TR0=0;

}

else //音乐盒功能

{

i=0;

while(TabMusic[bian][i]!=255)//检查是否到了歌曲结束

{

YinFu=TabMusic[bian][i++];//取得音符,

JiePai=TabMusic[bian][i++];//取得节拍

FunPlay(); //根据音符控制定时器的频率

Delay10ms(JiePai*30);//根据节拍控制频率的持续时间

if(Flag==0)break;//如果发现不是音乐盒状态,退出

}

Flag=0; //自动播放结束,则自动转为电子琴状态

}

}

}

void FunKeyScan(void)

{

switch(PKey)

{

case 0xfe:TempTH0=0xfc;TempTL0=0x8f;bian=0;break;

case 0xfd:TempTH0=0xfc;TempTL0=0xef;bian=1;break;

case 0xfb:TempTH0=0xfd;TempTL0=0x45;bian=2;break;

case 0xf7:TempTH0=0xfd;TempTL0=0x6c;bian=3;break;

case 0xef:TempTH0=0xfd;TempTL0=0xb4;bian=4;break;

case 0xdf:TempTH0=0xfd;TempTL0=0xf4;bian=5;break;

case 0xbf:TempTH0=0xfe;TempTL0=0x2d;bian=7;break;

default :TempTH0=0xfe;TempTL0=0x06;break;

}

}

void FunPlay(void)

{

switch(YinFu)

{

case 11:TempTH0=0xf9;TempTL0=0x1e;TR0=1;break;

case 12:TempTH0=0xf9;TempTL0=0xde;TR0=1;break;

case 13:TempTH0=0xfa;TempTL0=0x8a;TR0=1;break;

case 14:TempTH0=0xfa;TempTL0=0xd8;TR0=1;break; //11---17 表示低音音符case 15:TempTH0=0xfb;TempTL0=0x68;TR0=1;break;

case 16:TempTH0=0xfb;TempTL0=0xe8;TR0=1;break;

case 17:TempTH0=0xfc;TempTL0=0x5a;TR0=1;break;

case 21:TempTH0=0xfc;TempTL0=0x8f;TR0=1;break;

case 22:TempTH0=0xfc;TempTL0=0xef;TR0=1;break;

case 23:TempTH0=0xfd;TempTL0=0x45;TR0=1;break;

case 24:TempTH0=0xfd;TempTL0=0x6c;TR0=1;break; //21---27 中音符case 25:TempTH0=0xfd;TempTL0=0xb4;TR0=1;break;

case 26:TempTH0=0xfd;TempTL0=0xf4;TR0=1;break;

case 27:TempTH0=0xfe;TempTL0=0x2d;TR0=1;break;

case 31:TempTH0=0xfe;TempTL0=0x47;TR0=1;break;

case 32:TempTH0=0xfe;TempTL0=0x77;TR0=1;break;

case 33:TempTH0=0xfe;TempTL0=0xa2;TR0=1;break;

case 34:TempTH0=0xfe;TempTL0=0xb6;TR0=1;break;

case 35:TempTH0=0xfe;TempTL0=0xda;TR0=1;break; //31---37 表示高音音符case 36:TempTH0=0xfe;TempTL0=0xfa;TR0=1;break;

case 37:TempTH0=0xff;TempTL0=0x16;TR0=1;break;

default :TR0=0;break;

}

}

void FunTimer0() interrupt 1

{

TH0=TempTH0;

TL0=TempTL0;

POut=!POut;

}

void Delay05ms(unsigned char Delay05msData)

{

unsigned char i,j;

for(i=0;i

for(j=0;j<167;j++);

}

void Delay10ms(unsigned char Delay10msData)

{

unsigned char i;

for(i=0;i

Delay05ms(20);

}

void FunEx0(void) interrupt 0

{

Delay05ms(60);

if(PEX0==0)

Flag=!Flag;

}

unsigned char code TabMusic[7][350]={

{23,1,25,1,23,1,22,1,23,1,22,1,23,1,23,1,

22,1,16,1,21,1,23,1,22,1,22,1,21,1,16,1,

21,1,22,1,23,1,25,1,22,1,23,1,26,1,25,1,

15,1,22,1,21,1,22,1,21,1,16,1,21,1,22,1,

23,1,25,1,22,1,23,1,26,1,25,1,25,1,23,1,

0,1,22,1,23,1,22,1,21,1,25,1,26,1,23,1,

16,1,25,1,23,1,22,1,23,1,23,1,25,1,31,1,

25,1,26,1,0,1,26,1,25,1,23,1,23,1,25,1,

25,1,23,1,25,1,26,1,31,1,32,1,31,1,25,1,

23,1,22,1,25,1,23,1,23,1,0,1,23,1,25,1,

31,1,25,1,26,1,31,1,32,1,31,1,25,1,23,1,

25,1,31,1,26,1,23,1,22,1,23,1,25,1,33,1,

32,1,32,1,31,1,0,1,31,1,0,1,23,1,25,1,

31,1,25,1,26,1,31,1,32,1,31,1,25,1,23,1,

25,1,31,1,26,1,23,1,22,1,23,1,25,1,33,1,

32,1,32,1,0,1,32,1,0,1,32,1,31,1,0,1,31,1,

0,1,31,1,0,1,31,1,0,1,31,1,0,1,31,1,0,1,

0,4,255}, //1 {16,1,16,1,15,2,16,1,23,1,23,2,22,1,23,1,

22,1,22,1,22,1,21,1,16,2,0,2,

16,1,0,2,16,1,16,1,15,1,16,1,21,2,22,1,

23,1,25,1,26,2,23,1,0,1,23,1,25,1,23,1,

26,1,27,1,26,1,26,1,25,1,23,2,23,1,21,1,

22,1,0,1,23,1,23,1,25,1,26,2,

22,1,22,1,23,1,22,1,23,2,22,1,15,1,22,1,

21,2,16,1,0,1,16,1,0,1,16,1,16,1,15,2,

16,1,23,1,23,2,22,1,23,1,22,1,22,1,22,1,

16,2,16,1,0,1,16,1,16,1,15,1,16,1,21,2,22,1, 23,1,25,1,26,2,23,1,0,1,23,1,0,1,23,1,

25,1,23,2,26,1,27,1,26,1,25,1,23,1,23,1,21,1, 22,1,22,1,23,1,23,1,0,1,23,1,22,1,23,1,

25,1,25,2,22,1,22,1,23,1,22,1,23,2,22,1,15,1, 22,1,21,1,16,1,0,1,16,1,0,1,26,2,

23,1,25,1,31,1,32,1,31,1,26,2,25,1,26,1,31,1, 26,1,25,1,26,1,25,1,23,1,0,4,255}, //2 {26,1,25,1,25,1,23,1,25,1,0,2,26,1,25,1,

23,1,22,1,21,1,21,1,0,2,16,1,

21,1,22,1,23,1,25,1,0,1,23,1,22,1,21,1,

25,1,0,2,26,1,25,1,23,1,22,1,21,1,0,2,

16,1,21,1,22,1,23,1,25,1,0,2,23,1,22,1,21,1,

16,1,21,1,22,1,21,1,21,1,

26,1,25,1,25,1,23,1,25,1,0,2,26,1,25,1,

23,1,22,1,21,1,21,1,0,2,16,1,

21,1,22,1,23,1,25,1,0,1,23,1,22,1,21,1,

23,1,22,1,22,1,0,2,26,1,25,1,25,1,23,1,

25,1,0,2,26,1,25,1,23,1,22,1,21,1,0,2,

16,1,21,1,22,1,23,1,25,1,0,2,23,1,22,1,21,1,

16,1,21,1,22,1,21,1,21,1,

0,4,255}, //3

{16,1,17,1,21,1,23,1,22,1,21,2,22,1,0,2,

16,1,17,2,21,2,17,2,15,1,0,2,

16,1,17,1,21,1,23,1,22,1,21,2,22,1,0,2,

16,1,17,2,21,1,0,1,22,1,23,2,17,1,0,2,

16,1,17,1,21,1,23,1,22,1,21,2,22,1,0,2,

16,1,17,2,21,2,17,2,15,1,0,2,

16,1,17,1,21,1,25,1,23,1,21,1,22,1,0,2,

16,1,17,1,21,1,0,1,22,1,23,1,17,1,0,1,

16,1,26,1,26,1,26,1,26,1,31,1,27,1,27,1,

26,1,26,1,25,1,23,1,25,1,26,1,21,1,21,1,0,2,

16,1,26,1,26,1,26,1,26,1,31,1,27,1,26,1,

26,1,25,1,25,1,26,1,27,1,23,1,23,1,23,1,0,2,

16,1,26,1,25,1,26,1,26,1,31,1,27,1,27,1,

26,1,26,1,25,1,23,1,25,1,25,1,27,1,26,1,0,2,

26,1,27,1,31,1,31,1,31,1,31,1,31,1,

27,1,26,1,26,1,26,1,25,1,23,1,25,1,25,1,27,1,

26,1,0,4,255}, //4 {15,1,21,2,23,1,25,2,21,1,17,2,23,1,25,1,

0,1,25,1,26,1,27,1,31,2,26,1,26,1,25,1,

25,1,0,1,0,1,23,1,22,1,21,2,21,1,21,1,23,1,

22,1,21,2,21,1,21,1,23,1,22,1,21,2,21,1,21,1,

22,1,23,1,22,1,21,1,16,1,22,1,23,1,22,1,0,1,

0,1,15,1,22,2,16,1,17,1,21,1,22,1,21,1,0,1,

0,1,23,1,25,1,23,2,22,1,21,1,25,1,17,1,0,1,

0,1,16,1,17,1,16,2,17,1,16,2,15,1,23,1,0,1,

0,1,25,1,23,2,22,1,21,1,25,1,17,1,0,1,0,1,

16,1,17,1,21,2,21,1,21,1,22,1,23,1,22,1,0,1,

0,1,15,1,21,2,23,1,25,2,21,1,17,2,23,1,25,2,

25,1,26,2,27,1,31,2,26,1,26,1,25,1,25,1,0,1,

23,1,22,1,21,2,21,1,21,1,23,1,22,1,21,2,21,1,

21,1,22,1,23,1,22,2,16,1,17,1,21,1,22,1,21,1,

0,1,0,1,0,4,255}, //5

23,1,0,1,22,1,22,1,21,1,22,1,22,1,25,1,25,1,

23,1,23,1,22,1,23,1,0,1,21,1,21,1,16,1,15,1,

25,1,23,1,22,1,23,1,22,1,21,1,0,1,22,1,22,1,

21,1,22,1,22,1,23,1,22,1,21,1,16,1,22,1,21,1,

0,1,21,1,21,1,16,1,15,1,16,1,21,1,21,1,22,1,

23,1,0,1,22,1,22,1,21,1,22,1,22,1,25,1,25,1,

23,1,23,1,22,1,23,1,0,1,21,1,21,1,21,1,16,1,

15,1,25,1,23,1,22,1,23,1,22,1,21,1,0,1,22,1,

22,1,21,1,22,1,22,1,23,1,22,1,21,1,16,1,22,1,

21,1,0,1,23,1,25,1,25,1,25,1,25,1,26,1,25,1,

23,1,22,1,21,1,0,1,26,1,31,1,26,1,25,1,23,1,

22,1,21,1,16,1,22,1,22,1,23,1,23,1,22,2,23,1,

25,1,25,1,25,1,25,1,26,1,25,1,23,1,22,1,21,1,

0,1,16,1,21,1,16,1,15,1,22,1,23,1,21,1,0,1,

0,4,255}, //6

{13,1,0,1,15,1,16,1,21,1,22,1,16,1,21,1,15,1,

25,2,21,1,26,1,25,1,23,1,25,1,22,1,0,1,0,1,0,1,

22,1,22,1,23,1,17,1,16,1,15,2,16,1,21,1,22,1,

13,1,21,1,16,1,25,1,16,1,21,1,15,1,0,1,0,1,0,1,

23,2,25,1,17,1,22,1,16,1,21,1,15,1,0,1,0,1,

13,2,15,1,13,1,15,2,16,1,17,1,22,1,16,1,0,1,0,1, 15,1,16,1,21,2,22,1,25,1,23,1,22,1,23,1,22,1,

21,1,16,1,15,1,13,1,0,1,21,1,0,1,16,2,21,1,

16,1,15,1,13,1,15,1,16,1,21,1,15,1,0,1,0,1,0,1,

33,1,35,1,32,1,33,1,32,1,31,1,27,1,26,1,25,1,

0,1,0,1,23,1,25,1,22,1,23,1,22,1,21,1,17,1,16,1, 13,1,0,1,15,2,16,1,21,2,22,1,16,1,21,1,15,1,

25,2,21,1,26,1,25,1,23,1,25,1,22,1,0,1,0,1,0,1,

22,2,23,1,17,1,16,1,15,2,16,1,21,1,22,1,13,1,

21,1,16,1,15,1,16,1,21,1,15,1,0,1,0,1,0,1,

23,2,25,1,17,1,22,1,16,1,21,1,15,1,0,1,0,1,

13,2,15,1,16,1,15,2,16,1,17,1,22,1,16,1,0,1,

0,1,15,1,16,1,21,2,22,1,25,1,23,1,0,4,255} //7 };

相关文档