全自动洗衣机设计解析.docx
《全自动洗衣机设计解析.docx》由会员分享,可在线阅读,更多相关《全自动洗衣机设计解析.docx(19页珍藏版)》请在冰豆网上搜索。
全自动洗衣机设计解析
题目:
全自动洗衣机设计
第1章引言
1.1基于单片机控制的智能洗衣机研究的意义
随着现代社会生活节奏的不断加快和人们生活水平的不断提高,人们对各种方便、快捷的家用电器需求量越来越大,洗衣机作为人们提高生活效率,追求生活质量的基本条件,也愈来愈成为不可或缺的生活用具。
在工业发达国家,洗衣机的普及率已达到相当高的程度,但由于现阶段国情,洗衣机在我国的普及程度还较低,农村更甚。
随着人民生活水平(特别是乡村生活水平)的不断提高,社会对洗衣机的需求量越来越大,而且随着生活质量的不断提高,人们对洗衣机的功能要求越来越高,使得洗衣机的更新较快,因此,洗衣机作为人们追求现代生活的一个基本要求在我国有着极大的市场。
智能洗衣机综合运用了大量力学,电学,光学等知识。
通过对于基于单片机控制的智能洗衣机的研究我们可以更清晰,更实际的掌握单片机的一些基本的控制和应用。
单片机在日常家电中的应用比较广泛,洗衣机智能控制系统就是一种以单片机为控制核心的系统,它把以往对洗衣机的繁琐的操作变得简单化,不但其机器性能显著提高,还增加了难以实现得功能,同时也提高了控制的精确度,硬件和软件相互配合实现洗衣机工作的智能化和自动化。
因此对于智能洗衣机的研究一方面可以让我们对于所学的单片机和电路有关知识有个更好的理解和巩固,一方面也锻炼了自身的动手能力,特别是能够实现软硬连调所具备的能力。
智能洗衣机的特点是:
通过程序控制器来实现洗涤过程,省时省力。
第2章控制功能需求分析
2.1全自动洗衣机的控制功能要求
洗衣机要完成洗衣工作,除了对一般洗衣过程的人工工作及效能进行模拟之外,还要根据洗衣机的机械电子性质进行有关控制和检测。
对于一台套桶式缸波轮全自动洗衣机而言,首先要求能完成洗衣功能;同时还要根据用户的不同设置几种不同的洗衣程序;还要考虑水流的情况决定洗涤的弱强情况;另外,还要对洗衣过程出现的故障进行诊断;保证高速运转时脱水的安全性等。
所以,对全自动洗衣机,一般要求具有如下基本功能。
1)强、弱洗涤功能。
要求强洗时正、反转驱动时间各为4s,间歇时间为1s,弱洗时正、反转驱动时间各为3s,间歇时间为2s。
2)4种洗衣工作程序,即标准程序、经济程序、单独程序和排水程序
标准程序是进水→洗涤→漂洗→排水→脱水,如此循环3次,每循环一次洗涤或漂洗环节时间比上一循环同一环节时间减少2min,具体是:
第一循环为洗涤,时间为6min,第二,第三次循环为漂洗,时间分别为4min和2min。
排水时间采用动态时间法确定,脱水时间为2min。
经济程序与标准程序一样,只是洗涤次数为二次。
单独程序是进水→洗涤(6min)→结束(留水不排不脱)。
排水程序是排水→脱水→结束,时间确定与上述程序相应环节相同。
3)进、排水系统故障自动诊断功能
洗衣机在进水或者排水过程中,若在一定的时间范围内进水或排水未能达到预定的水位,就说明进、排水系统有故障,此故障由控制系统测知并通过警告程序发出警告信号,提醒操作者进行人工排除。
4)脱水期间安全保护和防振功能
洗衣机在脱水期间若打开机盖时,洗衣机就会自动停止脱水操作。
在脱水期间,如果出现衣物缠绕引起脱水桶重心偏移而不平衡,此时洗衣机也会自动停止脱水,以免振动过大,待人工处理后恢复工作。
5)间歇驱动方式
脱水期间采取间歇驱动方式,以便节能。
本系统要求驱动5s,间歇2s,间歇期间靠惯性力使脱水桶保持高速旋转。
6)暂停功能
不管洗衣机工作在什么状态,当按下暂停键时,洗衣机必须停止工作,等待驱动键按下以后洗衣机又能按照原来所选择的工作方式继续工作。
7)声光显示功能
洗衣机各种工作方式的选择和各种工作状态均有声、光提示或显示。
2.2整机组成框图
针对上述,一方面,涉及到硬件电路,另一方面要配合相应的软件,才能完成上述功能。
下面为本设计的整机框图如图1。
如下图2-1中所示,通过压力传感器,将洗衣机桶内水位的压力值送到微处器内部,进行分析、处理,然后分别进行控制,如进水量、进水阀电路、出水阀电路。
通过二极管管显示相应状态,由简单按键控制,遇到险情由扬声器发声。
由软件和硬件对电机的转速进行控制。
图2-1整机电路组成框图
第3章硬件电路设计
针对上文的功能,硬件电路应包括七个部分:
微处理器控制电路、显示电路、传感器电路、电机控制电路、进水阀控制电路、排水阀控制电路和按键报警电路。
通过这几个部分电路的协调工作,再由软件的配合工作洗衣机就可以模拟人脑进行操作,下面分别阐述各电路的组成原理。
基于AT89C51单片机控制的智能洗衣机原理:
原理图见附录C
控制板电路使用AT89C51芯片,时钟电路采用6MH晶振。
组成的输入信号有:
洗衣机的主程序选择,即洗衣机的控制功能,包括设置洗衣机的强洗弱洗设置,洗衣机的程序选择(标准程序、经济程序、单独程序、排水程序)。
输出控制信号包括:
发光二极管显示、蜂鸣器鸣叫、进水阀控制、排水阀控制、电机正反转的控制信号。
主电路是由交流220V电压经变压、整流、滤波后,其中一路接至低电压保护电路,另一路提供稳定的+5V电压供应给控制板各元件。
当低电压保护电路检测到低电压时,将向单片机的INT0引脚产生中断,单片机将响应该中断,关闭各输出端口,以保护执行部分如电机等设备不因欠压而损坏。
3.1微处理控制电路
微处理电路中我采用的是ATMEL公司的单片机,原因是考虑到其价格便易、功能齐全、可靠性高、使用普遍。
AT89C51单片机是ATMEL公司8位单片机系列产品之一,是一种40引脚双列直播式芯片。
它含有4KB可反复烧录及擦除内存和128字节的RAM,有32条可编程控制的I/O线,5个中断触发源,指令与MCS-51系列完全兼容。
选用它作为核心控制新片,可使电路极大地简化,而且程序的编写及固化也相当方便、灵活。
选用它设计制作全自动洗衣机控制电路,其电路的组成相对简单,工作原理清晰,易于理解。
由于洗衣机的基本功能是实现对衣物的洗涤,所以,关键在于进行洗衣程序的控制。
从这一角度出发,对洗衣机的功能进行分析,确定其最优化的功能。
这些功能主要有以下几种。
1)洗衣工作状态功能:
强、弱洗涤。
2)洗衣程序功能:
含4种独立程序,即标准洗衣程序、经济洗衣程序、单独洗衣程序、排水程序。
3)特殊功能:
故障诊断、安全保护、防振、暂停、间歇工作功能,声光显示功能。
89C51芯片具有40根引脚,其引脚图如下图3-1所示。
在一小块芯片上,集成了一个微型计算机的各个组成部分,即89C51单片机芯片内包括:
(1)一个8位的80C51微处理器(CPU);
(2)片内256字节数据存储器RAM/SFR
片内4KB程序存储器FlashROM;(3)4个8位并行I/O端口P0~P3,每个端口既可以用作输入,也可以用作输出;(4)2个16位的定时/计数器;(5)具有5个中断源,2个中断优先级的中断控制系统;(6)1个全双工的串行I/O口;(7)片内振荡器和时钟产生电路(最高允许振荡频率为24MHz);(8)具有节电工作方式(即空闲方式及掉电方式)。
以上各个部分通过片内8位数据总线(DBUS)相连接。
图3-189C51芯片引脚结构
3.289C51单片机的引脚分类
1.电源线2根。
Vcc:
编程和正常操作时的电源电压,接+5V。
Vss:
地电平。
2.晶体振荡器2根。
XTAL1:
振荡器的反向放大器输入。
使用外部振荡器时必须接地。
XTAL2:
振荡器的反向放大器输出和内部时钟发生器的输入。
当使用外部振荡器时用于输入外部震荡信号。
3.I/O口共有P0、P1、P2、P3四个8位口,32根I/O线,其功能如下:
(1)P0.0—P0.7(AD0—AD7)是I/O端口0的引脚。
端口0是一个8位漏极开路的双向I/O端口。
在存取外部存储器时,该端口分时地用作低8位的地址线和8位双向的数据端口(在此时内部上拉电阻有效)。
(2)P1.0—P1.7是端口1的引脚,是一个带内部上拉电阻的8位双向I/O通道,专供用户使用。
(3)P2.0—P2.7(A8—A15)是端口2的引脚。
端口2是一个带内部上拉电阻的8位双向I/O口,在访问外部存储器时,它输出高8位地址A8—A15。
(4)P3.0—P3.7是端口3的引脚。
端口3是一个带内部上拉电阻的8位双向I/O口,该口的每一位均可独立地定义第一I/O口功能或第二I/O口功能。
作为第一功能使用时,口的结构与P1操作与口完全相同,第二功能如下所示:
引脚第二功能
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2INT0(外部中断)
P3.3INT1(外部中断)
P3.4T0(定时器0外部输入)
P3.5T1(定时器1外部输入)
P3.6WR(外部数据存储器写选通)
P3.7RD(外部数据存储器读选通)
由上看出,89C51单片机不是将地址总线、数据总线和控制总线分开,而是地址线、数据线和部分控制均由I/O口完成。
3.3时钟电路
89C51片内设有一个由反向放大器所构成的振荡电路,XTAL1和XTAL2分别为振荡电路的输入和输出端,时钟可以由内部方式产生或外部方式产生。
内部方式时钟电路如主电路图中所示。
在XTAL1和XTAL2引脚上外接定时元件,内部振荡电路就产生自激振荡。
定时元件通常采用石英晶体和电容组成的并联谐振回路。
晶振可以在1.2MHz到12MHz之间选择,电容值在5-30PF之间选择,电容的大小可起频率微调作用。
外部方式的时钟很少用,若要用时,只要将XTAL1接地,XTAL2接外部振荡器就行。
对外部振荡信号无特殊要求,只要保证脉冲宽度,一般采用频率低于12MHz的方波信号。
时钟发生器把振荡频率两分频,产生一个两相时钟信号P1和P2供单片机使用。
P1在每一个状态S的前半部分有效,P2在每个状态的后半部分有效。
3.4复位操作电路
89系列单片机与其他微处理器一样,在启动时需要复位,使CPU及系统各部件处于确定的初始状态,并从初始状态开始工作。
89系列单片机的复位信号是从RST引脚输入到芯片内的施密特触发器中的。
复位是单片机的初始化操作。
其主要功能是把PC初始化为0000H,使单片机从0000H单元执行程序。
除了进入系统的正常初始化之外,当由于程序运行出错或操作错误使系统处于死锁状态时,为摆脱困境,也须按复位键重新启动。
在系统控制电路中,复位电路是靠电容充放电完成的,当电路需要复位时,按下复位键后RES被强制为高电平,使电路复位,同时电容也开始放电。
在正常工作时,电容充满电后相当于短路,此时RES为低电平无效。
下图3-2所示为复位操作电路
图3-2复位电路
3.5显示电路
洗衣过程中的各状态显示:
标准、经济、单独、排水、强洗和弱洗指示等工作状态。
如图3-3所示。
图3-3LED显示电路
由于本电路CPU管脚有限,所以需要通过74LS139(74LS139为双2-4线译码器,选用它可解决CPUI/O线数量的不足)来扩口,通过两根口线即可实现P3.0、P3.1,如图5中所示。
通过A、B两个口即可完成位码切换。
从控制要求可知,洗衣机有4种洗衣工作程序,因此须有4种不同的显示来加以区别。
74LS139双2—4线译码器仅占用CPU的P3.0和P3.1两口线即可提供4种不同显示的驱动,其逻辑关系是:
P3.2,P3.3为“11”时LED1亮,指示标准程序;为“10”时LED2亮,指示经济程序;为“01”时LED3亮,指示单独程序;为“00”时LED4亮,指示排水程序。
3.6进水阀控制电路
进水阀控制电路如图3-4所示。
它是通固态继电器来实现隔离,反相器74S05实现缓冲,发光二极管指示工作状态,进水阀门的开关由继电器来控制,当继电器线圈中有电流流过时,继电器开关吸合,反之,就断开。
利用这一特性,和单片机P1.1端口相连来控制,首先压力传感器会检测桶内水位的高低,如果桶内水位没有达到所设置的预定水位时,压力传感器会发送给单片机一个控制信号,然后经过CPU的处理后会在输出端口输出低电平,再经反相缓冲后变成高电平,双向可控硅断开,线圈中没有电流流过,继电器开关断开,阀门打开;同理如果桶内水位达到预定水位时此时在输出端口输出是高电平,给反相倒相后变成低电平,点亮发光二极管,双向可控硅开通,继电器线圈绕组中有电流流过,产生磁场,开关吸合,阀门关闭。
图3-4进水阀控制电路
3.7排水阀控制电路
排水阀控制电路如图3-5所示。
它和进水阀控制电路是相似的,通固态继电器来实现隔离,反相器74S05实现缓冲,发光二极管指示工作状态,进水阀门的开关,由继电器来控制,当继电器线圈中有电流流过时,继电器开关吸合,反之,继电器开关就断开。
利用这一特性,和单片机P1.1端口相连来控制,首先由软件设置排水时间,压力传感器会检测桶内水位的高低,如果桶内水位没有达到所设置的预定水位时(即桶内有水且需要排水时),压力传感器会发送给单片机一个控制信号,然后经过CPU的处理后会在输出端口输出低电平,反相缓冲后变成高电平,双向可控硅断开,线圈中没有电流流过,阀门打开,开始排水;同理当桶内水排完后端口输出高电平时,经过反相倒相后变成低电平,点亮发光二极管,双向可控硅开通,继电器线圈绕组中有电流流过,产生磁场,吸合开关,阀门关闭,停止排水。
排水阀门的操作同样也有两个参数,一个为开关时间,另一个为不开关时间,这两个参都是很容易通过单片机实现的。
两者都有共同点,都是需要软件进行模糊处理,什么时候开,什么时候关,开多长时间,关多长时间等,都是通过模糊量来完成全自动的。
图3-5排水阀控制电路
3.8电机控制电路
电机控制电路如图3-6所示,由电路图中可以看出:
AT89C51的P1端口的P1.2和P1.3共2条I/O线通过2块SP1110新型固态继电器分别直接驱动洗衣机的电机工作部件。
AP1110是一种交流固态继电器,内有发光二极管及光触发双向可控硅,10-50mA输入电流即可使双向可控硅完全导通,输出端通态电流为3A(平均值),浪涌电流15A(不重复)。
之说以选用这个器件,是因为它一方面可使电路进一步简化,另一方面还可使强、弱两类电完全隔离,保证主板的安全。
74S05为反相器,用其作为中间缓冲器,其中的2个反相器可分别驱动SP1110固态继电器。
电机是接在220V交流电压上的,通过固态继电器来开通,其内的双向可控硅受发光二极管控制,如图所示,只要给发光二极管加低电平,二极管就会发光,双向可控硅过零后就会导通,此时电机的一个绕组就会有电流流过,同时再用同样的方法开通另外一个绕组,电机就会转动起了,由单片机来控制端口脉冲,即可启动,另外电机的转向控制,主要是改变绕组的电流方向,即可实现,同样也是通过双向可控硅来调节。
图3-6电机控制电路
3.9电机调速部分
在全自动洗衣机的电机控制中,洗衣和脱水时的转速是不同的,要想使洗衣机能正常工作就需要考虑转速的快慢问题,需要对电机进行调速,所以对电机的调速方法和控制电路进行了分析和设计,该方法采用的是先进的过零调功的方式,以功率调节取代常用的电压调节,通过控制可控硅的通断比来调节电动机输出功率,进而达到调速目的。
下面分别对可控硅过零调功原理和硬件电路方面的设计进行说明。
3.9.1可控硅过零调功原理
理论分析:
P=F×V,在外部情况不变即F保持不变时,在规定时间内电功率P的变化将使速度V跟着改变。
因此调电功P就可达到调速的目的。
过零调功通过的工作电压是完整的正弦波形,过零导通且过零截止。
过零调功方式就是通过在给定的时间内改变加进负载的交流正弦波个数来调节负载功率的一种控制方法。
由于可控硅是在电压(电流)过零时触发导通的,导通时的波形是完整的正弦波或半波,所以不存在可控硅移相调压方式所存在的一切缺点。
同时也由于可控硅是在电压过零时导通,其负载浪涌电流和电流变化率都很小,有利于可控硅的安全工作。
实现可控硅的过零控制,需要解决两个问题:
(1)要能实现工频电压的正负过零检测;并在过零时产生脉冲信号。
(2)过零脉冲信号必须受单片机输出控制信息控制。
从而控制可控硅过零触发脉冲的个数。
这两个问题的解决由软硬件协同完成。
3.9.2硬件电路设计
硬件电路完成的任务是:
①工频电压的正、负过零检测。
②由单片机发出的控制电平,去控制门控电路,以控制可控硅的过零触发脉冲数。
3.9.3过零检测电路
过零检测电路的最终目标是实现在50HZ的交流电压通过零点时取出其脉冲。
由于可控硅过零调功方式是通过控制可控硅导通与关断的比值来调节输出功率,相位和移相触发的同步脉冲问题都不必考虑,因此输出的脉冲宽度可以放宽,这也使得电路更易实现。
设计中利用两个光电耦合器实现过零电路。
其电路原理图及波形如图3-7(a)和图3-7(b)所示。
此电路的工作原理是:
交流电源经过电阻加到两个反并联光电二极管上,在交流电源的正、负半周,二极管和轮流导通,从而使T1和T2也轮流导通,在导通期间V0输出低电平,只有在交流电源过零的瞬间,两个二极管均截止,V0输出高电平,因此V0端得到周期为10ms的脉冲信号,该信号送至89C51的引脚。
图3-7(a)过零检测电路
图3-7(b)过零检测波形
3.9.4可控硅触发电路
电路中采用了过零双向可控硅型光耦MOC3041,它集光电隔离、过零检测、过零触发等功能于一身,避免了输入输出通道同时控制双向可控硅触发的缺陷,
大大简化了输出通道隔离-驱动电路的结构。
可控硅触发电路原理图如图3-8所示。
图3-8可控硅过零调功原理图
此电路的工作原理是:
单片机响应用户的参数设置,在I/O口输出一个高电平,经反向器反向后,送出一个低电平,使光电耦合器导通,同时触发双向可控硅,使电路导通工作。
在给定时间内,负载得到的功率可用下式表示:
式中P是负载得到的功率;
n是给定时间内可控硅导通的正弦波的个数;
N是给定时间内交流正弦波的总个数;
U是可控硅在一个电源周期全导通时所对应的电流有效值;
I是可控硅在一个电源周期全导通时所对应的电流有效值;
由以上公式可知,U、I、N是定值,只要改变n值的大小即可控制功率的输出,从而达到调节电机转速的目的。
3.10蜂鸣电路
蜂鸣器在洗衣机中起提示和报警作用。
如图11中所示,继电器是一种电子控制器件,它具有控制系统(又称输入回路)和被控制系统(又称输出回路),通常应用于自动控制电路中,它实际上是用较小的电流去控制较大电流的一种“自动开关”。
故在电路中起着自动调节、安全保护、转换电路等作用。
图3-9所示为蜂鸣电路
图3-9蜂鸣电路
3.11暂停和防振功能电路
洗衣机的暂停功能和安全保护及防振动功能采用中断处理方式。
这两个中断分别对应于CPU的外部中断0和外部中断1。
中断请求信号通过TCAOI3BP双D触发器的两个
分别加到CPU的P3.2和P3.3口线,由触发器锁存直到CPU响应中断为止。
开盖(安全保护)或不平衡(防振动)中断信号通过由BG1和BG2组成的反相器送TC4OI3BP的CP端,经触发器加到P3.3。
本系统对开盖和不平衡中断采取相同的处理方法,因此,共用外部中断1。
图3-10暂停和防振电路图
为了充分利用CPU的I/O口线,P3.4和P3.5采用分时复用技术,每线具有两个功能。
在洗衣机未进人工作状态或洗衣机处于暂停状态期间,P3.4为输入线,用于监测启动键的状态,当启动键按下时,洗衣机即进入工作状态或从暂停状态恢复到原来的工作状态;在洗衣机暂停中断响应期间,P3.4为输出线,用于撤销暂停中断请求。
在洗衣机进水或排水期间,P3.5被用作输入线,用于监测水位开关状态,为CPU提供洗衣机的水位信息;在洗衣机高速脱水期间,当发生开盖或不平衡中断时,P3.5为输出线,用于撤销中断请求信号。
CPU的P3.7线用于驱动蜂鸣器发出各种报警信号。
洗衣机的强、弱洗可通过K1键进行循环选择。
Kl还具有第二功能,即当洗衣机发生故障转入报警程序后,按下K1键可使洗衣机退出报警状态回到初始待命状态。
洗衣工作程序通过K2键循环选择。
脱水期间系统在响应开盖或不平衡中止后,CPU采取软件查询的方式通过P1.6口线对盖开关进行监测以确定洗衣机是否继续进行脱水操作。
3.12压力传感器
由洗衣机的功能可知在洗衣机的进水和排水过程中,都存在有水位高低的检测,因此在电路中需要检测水位高低的传感器,一般的压力传感器其输出的信号大都是模拟信号,由于要送到单片机的信号必须是数字信号,因此还需要在压力传感器的输出部分加上A/D转换器,才能将转换成的数字信号送给单片机进行处理。
在本设计中采用的是HSSC070型号的压力传感器。
选此压力传感器的原因是在HSSC070的内部就集成有A/D转换器,它输出的信号直接就是数字信号,不需要进行模拟量和数字量之间的转换就可直接送至单片机AT89C51的端口对其进行处理,而它的执行器就是进水电磁阀和排水电磁阀,即电磁继电器。
其内部是通过编程软件来实现控制的,当单片机检测到压力传感器输出的压力值大时,说明进水量增多,此时需要软件来控制单片机输出相对应的电平信号来驱动交流固态继电器的导通与关闭,从而来控制电磁继电器的吸合与断开,进而达到对桶内液位的检测与控制。
图3-11是HSSC070封装好的压力传感器芯片模块,根据材质不同,主要分为FR4板封装和陶瓷封装。
封装尺寸小,仅为6.3mm*6.9mm.量程范围可选择5至300PSI不等.与H28数模转化芯片配合使用,可应用于压力测量与控制系统、移动高度计/气压计、天气预报产品、运动或多功能运动表等。
图3-11压力传感器模块
第4章系统软件设计
全自动洗衣机控制系统软件由主程序、中断服务程序和各种功能子程序三个层次组成。
主程序流程图如下图4-1所示:
主程序的工作过程为:
先对其进行初始化工作,随后根据输入的键值分别散转至对应的子程序(设置强洗弱洗、设置洗涤标准等)。
洗衣机开始工作,INT0外部中断服务子函数用于实现功能选择。
图4-1主程序流程图
程序的基本工作流程是:
系统上电复位后,首先进行初始化,默认标准洗衣工作程序和强洗、弱洗方式;然后扫描强弱洗选择键K1、主程序选择键K2和启动键K4,这时洗衣机处于待命状态。
通过K1、K2可分别修改强、弱洗涤方式和洗衣工作程序。
扫描过程中当发现启动键K4按下时,洗衣机即从待命状态进入工作状态。
洗衣机进入工作程序后,系统首先根据RAM中57H单元的特征字判断洗衣机的洗衣工作程序,若特征字为00H,则为排水程序(O1H为单独程序,02H为经济程序,03H为标准程序),这时程序直接跳转至排水操作程序段,执行单独的排水操作,否则进入进水操作程序。
进水操作将P1.0置位,驱动进水阀开启。
进水期间系统不断检测水位开关K5的状态,当检测到K5闭合时,说明进水已达到预定的水位。
若在规定的4分钟极限时间内未检测到K5闭台,说明进水系统发生故障,此时洗衣机退出洗衣工作状态,程序跳转到故障处理程序段进行报警。
其处理方法是:
将P1.0—P1.3位全部置“0”,中止洗衣机的各种操作,然后蜂鸣器以响1秒、停2秒的规律不断地发出报警信号,直到人工干预即按下K1键后为止(按下Kl后,程序跳转至主程序起始地址,洗衣机又回到待命的初始状态)。
程序清单见附录A所示。