毕业设计(论文)凌阳单片机电路板开发与制作.doc
毕 业 设 计(论文)(说 明 书)题 目:凌阳单片机电路板开发与制作姓 名: 编 号: 90701467 平顶山工业职业技术学院 年 月 日平顶山工业职业技术学院毕 业 设 计 (论文) 任 务 书姓名 专业 任 务 下 达 日 期 年 月 日设计(论文)开始日期 年 月 日设计(论文)完成日期 年 月 日设计(论文)题目: A·编制设计 B·设计专题(毕业论文) 指 导 教 师 系(部)主 任 年 月 日平顶山工业职业技术学院毕业设计(论文)答辩委员会记录 系 专业,学生 于 年 月 日进行了毕业设计(论文)答辩。设计题目: 专题(论文)题目: 指导老师: 答辩委员会根据学生提交的毕业设计(论文)材料,根据学生答辩情况,经答辩委员会讨论评定,给予学生 毕业设计(论文)成绩为 。答辩委员会 人,出席 人答辩委员会主任(签字): 答辩委员会副主任(签字): 答辩委员会委员: , , , , , , 平顶山工业职业技术学院毕业设计(论文)评语第 页共 页学生姓名: 专业 年级 毕业设计(论文)题目: 评 阅 人: 指导教师: (签字) 年 月 日成 绩: 系(科)主任: (签字) 年 月 日毕业设计(论文)及答辩评语: 摘 要随着单片机功能集成化的发展,其应用领域也逐渐地由传统的控制,扩展为控制处理、数据处理以及数字信号处理(DSP,Digital Signal Processing)等领域。凌阳的16位单片机就是为适应这种发展而设计的。它的CPU内核采用凌阳最新推出的nSP(Microcontroller and Signal Processor)16位微处理器芯片。围绕nSP所形成的16位nSP系列单片机采用的是模块式集成结构,它以nSP内核为中心集成不同规模的ROM、RAM和功能丰富的各种外设接口部件。 nSP内核是一个通用的核结构。除此之外的其它功能模块均为可选结构,亦即这种结构可大可小或可有可无。借助这种通用结构附加可选结构的积木式的构成,便可形成各种不同系列派生产品,以适合不同的应用场合。这样做无疑会使每一种派生产品具有更强的功能和更低的成本。本设计主要介绍16位的具有语音功能的SPCE061A单片机。本设计共分为6章,简单阐述了SPCE061A的内核结构、性能、原理、开发应用方法、61板的焊接、集成开发环境(IDE)及程序开发流程等。关键词:SPCE061A单片机、原理、焊接、IDE目 录第1章 SPCE061A单片机的硬件结构 11.1 SPCE061A单片机的结构 1 1.2 SPCE061A芯片的信号引脚 2 1.3 功能分区与工理 5第2章 SPCE061A实验板的焊接及测试 9 2.1 焊接前备 10 2.2 用万用表判别器件的管脚 10 2.3 焊接流程 112.4 测试步骤 13第3章 SPCE061A单片机集成开发环境 153.1 概述 16 3.2 开发步骤 17 第4章电子万年历程序设计 184.1 绘制原理图 184.2 主程序流程图 214.3 按键模块 214.4 主程序设计 23 总结 27参考文献第1章SPCE061A单片机硬件结构SPCE061A 是继µnSP系列产品SPCE500A等之后凌阳科技推出的又一款16位结构的微控制器。与SPCE500A不同的是,在存储器资源方面考虑到用户的较少资源的需求以及便于程序调试等功能,SPCE061A里只内嵌32K字的闪存(FLASH)。较高的处理速度使µnSP能够非常容易地、快速地处理复杂的数字信号。本章主要介绍SPCE061A单片机的内部结构、引脚功能、工作方式和时序。1.1 SPCE061A单片机的结构SPCE061A的结构如图1.1所示:图1.1 SPCE061A的结构SPCE061A单片机具有以下基本特征:(1) 16位µnSP微处理器;(2) 工作电压(CPU) VDD为2.43.6V (I/O) VDDH为2.45.5V;(3) CPU时钟:0.32MHz49.152MHz ;(4) 内置2K字SRAM;(5) 内置32K FLASH;(6) 可编程音频处理;(7) 系统处于备用状态下(时钟处于停止状态),耗电仅为2µA3.6V;(8) 2个16位可编程定时器/计数器(可自动预置初始计数值);(9) 2个10位DAC(数-模转换)输出通道;(10) 32位通用可编程输入/输出端口;(11) 14个中断源可来自定时器A / B,2个外部时钟源输入;(12) 使用凌阳音频编码SACM_S240方式(2.4K位/秒),能容纳210秒的语音数据;(13) 锁相环PLL振荡器提供系统时钟信号;(14) 7通道10位电压模-数转换器(ADC)和单通道声音模-数转换器;(15) 声音模-数转换器输入通道内置麦克风放大器和自动增益控制(AGC)功能;(16) 具有低电压复位(LVR)功能和低电压监测(LVD)功能;(17) 内置在线仿真电路ICE(In- Circuit Emulator)接口;1.2 SPCE061A芯片的信号引脚SPCE061A有两种封装片,一种为80个引脚,LQFP80封装形式,它的排列如图1.2所示;另一种为84个引脚, PLCC84封装,它的排列如图1.3所示。图1.2 SPCE061A LQFP80封装引脚排列图图1.3 SPCE061APLCC84封装排列图在PLCC84封装中,有15个空余脚,用户使用时这15个空余脚悬浮。在LQFP80封装中有9个空余脚,用户使用时这9个空余脚接地。此处以LQFP80封装管脚功能介绍。表1.1 管脚描述表管脚名称管脚编号类型描述IOA15:84639输入输出IOA15:8:双向IO端口IOA7:03427输入输出IOA7:0:通过编程,可设置成唤醒管脚 IOA6:0:与ADC Line_In输入共用IOB15:115054输入输出IOB15:11 :双向IO端口。IOB100除用作普通的IO端口,还可作为: IOB1057输入输出IOB10:通用异步串行数据发送管脚TxIOB958输入输出IOB9:TimerB脉宽调制输出管脚BPWMOIOB859输入输出IOB8:TimerA脉宽调制输出管脚APWMOIOB760输入输出IOB7:通用异步串行数据接收管脚RxIOB661输入输出IOB6:双向IO端口IOB562输入输出IOB5:外部中断源EXT2的反馈管脚IOB463输入输出IOB4:外部中断源EXT1的反馈管脚IOB364输入输出IOB3:外部中断源EXT2IOB265输入输出IOB2:外部中断源EXT1IOB166输入输出IOB1:串行接口的数据传送管脚IOB067输入输出IOB0:串行接口的时钟信号DAC112输出DAC1数据输出管脚DAC213输出DAC2数据输出管脚X32I 2 输入32768Hz晶振输入管脚X32O 1 输出32768Hz晶振输出管脚VCOIN 70 输入PLL的RC滤波器连接管脚AGC 16 输入AGC的控制管脚MICN 19 输入麦克风负向输入管脚MICP 21 输入麦克风正向输入管脚V2VREF 14 输出电压源2.0V产生5mA的驱动电流,可用作外部ADC Line_In通道的最高参考输入电压,不可作为电压源使用MICOUT 18 输出麦克风1阶放大器输出管脚,管脚外接电阻决定AGC增益倍数OPI 17 输入麦克风2阶放大器输入管脚VEXTREF 23 输入ADC Line_In通道的最高参考输入电压管脚VMIC 25 输出麦克风电源VADREF 22 输出AD参考电压(由内部ADC产生) VDD 5,69 输入逻辑电源的正向电压VSS 10,26,71 输入逻辑电源和IO口的参考地VDDIO 37,38,56 输入IO端口的正向电压管脚VSSIO 35,36,48 输入IO端口的参考地AVDD 24 输入模拟电路(A/D、D/A和2V稳压源)正向电压AVSS 15 输入模拟电路(A/D、D/A和2V稳压源)参考地 RESET 68 输入低电平有效的复位管脚SLEEP 49 输出睡眠模式(高电平激活) ICE 7 输入激活ICE(高电平激活) ICECLK 8 输入ICE串行接口时钟管脚ICESDA 9 输入输出ICE串行接口数据管脚TEST 3 输入测试模式时接高电平,正常模式时接地GND或悬浮ROMT 47 输入测试闪烁存储器,正常模式时悬浮N/C 55 输入正常使用时接地N/C 4 输入正常使用时接地N/C 6 输入正常使用时接地PFUSE,PVIN20,11 输入程序保密设定脚。用户慎重使用。 1.3 功能分区与工作原理SPCE061A实验板的功能分区如图1.4所示:图1.4 SPCE061A的功能分区电源区:图1.5 电源部分原理图61板采用3节5号电池进行供电,由J10接入,如原理图所示。其中的前后两组电容用来去耦滤波,使其供给芯片的电源更加干净平滑。为了获得标准的3.3V电压在板子上加入SPY0029三端稳压器。两个二极管,是为防止误将电源接反造成不必要损失而设置的,在操作过程中千万不要将电源接反,因为反向电压超过一定的值,二极管将会被损坏,达不到保护的目的。后面的零电阻及其电源、地分成不同的几路是为减少电磁干扰设置的。(二) 程序下载区:图2.3 下载区原理图ICE 基本运作方式是通过控制clock 及通过ICE 喂入指令方式,来控制CPU 的运行及缓存器资料和内存资料的存取,因此必须透过控制缓存器值的设定来控制目前CPU 的动作.每个相连接的不同ICE模块都拥有自己独特的3-bit ID,当PC在传送control信号时都会先传送该3-bit ID,只有ICE本身的ID和control信号的ID 相同时才会执行该命令或回传资料。61板上的74HC244主要在我们选用下载线的时候起作用,主要奇缓存的作用和完成SDA是作为数据回送还是数据下传的选择。(三)音频输入部分:图2.4 音频输入外围电路如下图所示电路, MICP和MICN将随着MIC产生的波形变化,并在两个端口处形成两路反相的波形,再经过两级运放放大,把放大的语音信号交给ADC转换为数字量,这个时候我们就可以通过单片机编程对这些数据进行处理,比如说语音数据压缩、语音识别样本处理。(四)音频输出部分:SPY0030是凌阳公司开发的专门用于语音信号放大的芯片,它的增益如下图2.5所示:图2.5音频输出部分(五)按键部分:按键是通过通断控制来实现它的功能,61板上的按键在没按下时,它的1、3脚是断开的,当按下时这两个脚是连通的。若此时我们在1脚接一个高电平,把第三脚连到一个I/O口上,这就形成了一个人机操作界面,通过编程对I/O扫描,单片机就能识别到我们的按键命令。 SPCE061A 与周边区域:这就是整块板子的大脑,所有控制信息都是从这里发出的,那些周边器件用来协助SPCE061A 单片机正常工作。复位区:这里是由几个简单的电子元器件组成,当按下这里面的按键后,单片机就重新开始工作,也可以说成是单片机里的程序从第一条开始重新运行。端口区:用于对外挂硬件的控制,或者获取外部硬件的一些状态以便SPCE061A 来进行处理。第2章SPCE061A实验板的焊接及测试2.1焊接前准备1焊料与焊剂的选择焊料:一般常用焊锡作焊料。它具有较好的流动性和附着性。在一定是温度、湿度及振动冲击条件下有足够的机械强度。而且具有耐腐性,使用方便的优点。焊剂:作用是除去油污,防止焊件受热氧化,增强焊锡的流动性。2电烙铁与电烙铁头的选择常用的电烙铁有外热式、内热式和速热式三种。一般功率不能过大,选用 2050W 即可。3焊点质量焊点的质量直接关系到整块电路板能否正常工作,也是每个操作人员要学会并掌握的基本功。要避免出现虚焊,重点是搞好清洁处理。焊接时使电烙铁头与焊接元件及铜箔接触面积要尽可能大些。4焊接注意事项(1)防止触电,勿要烫伤人、电源线及衣物等。(2)电烙铁的温度和焊接的时间要适当,焊锡量要适中。不要过多。(3)烙铁头要同时接触元件脚和线路板,使二者在短时间内同时受热达到焊接温度,以防止虚焊。(4)切不可将烙铁头在焊点上来回移动。也不能用烙铁头向焊接脚上刷锡。(5)焊接二极管、三极管等怕热元件时应用镊子夹住元件脚,使热量通过镊子散热,不至于损坏元件。(6)焊接集成电路时,一定等技术熟练后方可进行,注意时间要短,同时在焊接电路板的时候要断开烙铁电源。2.2 用万用表判别器件的管脚1. 二极管的判别方法把万用表拨至X100 或 X1K 档,用两个表笔分别接触二极管的两个引出脚。若表针的示数较小(锗管100200,硅管70012K)时,与黑表笔相接的引出脚为正极。接着调换两个表笔再测量,若表针的示数较大(锗管几百千 ,硅管几兆 )时,说明该二极管是好的,并且原先判明的极性是正确的。如果正反向电阻均为 0 或无穷大,表明该管已经击穿或断路,不能使用。2. 三极管的判别方法在判别出管型和基极 b 的基础之上,先任意假定一个电极为 e 极,另一个为 c 极,将万用表拨动至 X1K 档,对 NPN 型三极管,令黑笔接 c 极,红笔接 e 极,再用手捏一下管子的 b、e 极,注意不要让两个电极直接接触,并观察一下表针向右摆动的幅度,然后使假设的 c、e 极对调,重复以上测试步骤。哪次表针的摆幅大,则该次的假设与实际情况相符。3. 欧姆表使用的注意事项(1)用欧姆表测电阻,每次换挡后和测量前都要重新调零 (2)测电阻时待测电阻不仅要和电源断开,而且要和别的元件断开 (3)测量时注意手不要碰表笔的金属部分,否则将人体的电阻并联进去,影响测量结果 (4)合理选择量程,使指针尽可能在中间刻度附近,参考指针偏转在R中/55R中的范围(或电流表指针偏转满度电流的1323)若指针偏角太大,应改接低挡位,反之就改换高挡位读数时应将指针示数乘以挡位倍数 (5)实际应用中要防止超量程,不得测额定电流极小的电器的电阻(如灵敏电流表的内阻) (6)测量完毕后,应拔出表笔,选择开关置于 OFF挡位置,或交流电压最高挡;长期不用时,应取出电池,以防电池漏电2.3 焊接流程焊接前先认真对照原理图,仔细查看印刷电路板,找到对应元件的功能区后,开始准备元件和工具。此电路板焊接要求使用25W左右尖烙铁,下面详细叙述焊接步骤:第一步:61裸板检测1、电源部分:目的:检测61板裸板电源部分是否短路方法:利用万用表检测61板上U3的第一脚和第三脚之间是否短路,无短路则说明61板电源部分是正常。2、端口部分:目的:检测61板裸板相邻端口部分是否短路方法:用万用表测量相邻端口是否短路,无短路则说明端口部分是正常。第二步:检测元器件、并做器件整形1、用万用表检测12个电解电容、16个独石104、3个独石224是否短路,短路的器件需更换(有条件的可采用电容表逐个测试)。2、利用万用表检测4个按键,按键按下后看1、3脚是否接通,是则说明按键正常。3、先将单排插针掰开,分别为10PIN 4个、5PIN 1个、3PIN和2PIN 各1个。4、将所有检测过的电阻、电容、二极管按电路板间距把引脚折弯,以便插到电路板上。第三步:焊接61板的步骤焊接原则是从低到高,为确保焊接一次成功,按照以下18个步骤进行焊接,各类元件焊接顺序由表3.1的序号大小来决定,序号小的需要先焊。SPY0029电阻(18个)二极管(3个)晶振独石电容(19个)瓷片电容(5个)电解电容C33、C35电源整体初测电源器件初测完成所有电解电容的焊接(12个)焊接按键&电位器发光二极管电源座第二次电源测试单排插针五针座麦克风芯片座焊接管脚修整。焊接效果如下图2.6:图2.6 焊接效果图2.4 测试步骤2.4.1 硬件测试首先应该检查电路板是否有虚焊,虚焊很有可能造成最后结果的不正确或是在整个过程中出现接触不良的现象。所以在焊接时一定要注意焊接的技巧和方法。测试工作可贯穿整个焊接过程,即在焊接好一个元件后就用数字万用表测量它的导通情况。若万用表有蜂鸣声发出,则说明已导通,否则可能出现了短路现象。当所有元件都已焊接完毕并且都处于良好的导通状态下,就将进入后期测试过程,即测试一些重要引脚上的电压是否是正常的工作电压,主要有:1、电源电压5V或接近5V2、VDDH、VDD引脚上的电压分别是3.5v和3v。1.电源部分:在板子的左上角。以下就采用万用表分别测试以下12个点的电压,注意数字万用表的使用方式(黑色的表笔接电源“-”端,红色的表笔接电源“+”端),些时请勿将芯片插入座中,以免电源部分有问题告成芯片烧坏。第一步:测试61电路源和地是否有短路;1、断开电源并拔掉电池盒,将J5的2、3脚用跳线帽短接;2、用万用表测量J10的两脚的电阻是否为零;如果电阻为零,表示焊接过程中可能有短路,应进行电源部分的排查;如果电阻大于300欧,表示正常。第二步:测试61板电源部分器件是否工作正常;首先,电池盒接到J10处,将电池盒开关拔到ON处;如果D1亮了表示正常。D1没点亮,电源器件有问题,按说明书排查。最后电源部分一些器件引脚的电压进行测试,如果电压正常,则进行下一步的测试。第三步:测试61板上各器件电源供电是否正常;1、用跳线冒把S5的1、2脚短接;2、测试U1的第7脚电压3.3v左右;3、测试U4的第20脚电压3.3v左右;4、测试J4的第1脚电压3.3v左右;5、测试U2的第7、8脚电压4.5v左右;6、测试J6、J7、J8、J9的+端电压4.5v左右;如果电压正常进入下一步测试。不正常在供电的某个传输方向上出现了问题,对照原理一步一步的进行排查。2. 键盘部分:1. U1 U2 U4 芯片座中不安放元件:给61板通电,万用表选择电压档,利用万用表的负极接板子的地,万用表笔的正端分别检测接IOA0、IOA1、IOA2;2. 用万用表笔的正端放在IOA0上时,按下KEY1键,读取万用表上的电压值并记录,之后用同样的方法分别检测KEY2、KEY3电压值;如果电压为零,不正常;应更新按键,重新测试按键部分;电压不为零;正常,进入下一部测试。3. 调试步骤:第一步:硬件连接。1、电源连接,可接3接电池,也可以直接连接5V的稳压源;2、在线调试(PROBE)的连接,一端接PC机并口,一端接61板的5针接口 J4,跳线要连接S5的1与2。如果使用EZ-PROBE,将一端接PC机的并口,一端接61板的5针接口J11,跳线要连接S5的2与3;3、喇叭连接,直接接61板的J3。第二步:打开IDE,在安装路径下(example/61-Exa)找到SpeechClock项目文件(speechclock.spj)并打开;第三步:下载程序:检查PROBE是否连接好,程序放在主菜单build-StartDebug下;如果使用EZ-PROBE,操作同上,只是注意IDE下选择EZ-PROBE模式。2.4.2 软件调试在程序编写完成后,就进入程序的调试过程。在IDE环境下,单击Debug菜单项,选择Download,将程序文件编译生成可执行文件。若调试出错,应修改程序,再进行调试,直到程序调试通过为止。IDE环境如图2.7所示:图2.7 61板的程序下载及调试下载软件测试程序:1、模拟部分的测试:主要有晶振部分,I/O部分和音频输出部分的测试,当测试时会有语音输出I/O测试成功。2、数字部分的测试:断开电源,数字万用表选择鸣叫功能,查看74HC244外围电路是否连接正确。3、D/A和A/D部分测试:用排线分别将IOA口的低8位和IOB口的低沉位相连,IOA口的高8位和IOB口的高8位相连,然后按下RESET复位键S4。短接J2的左边两脚短接,听到“I/O测试成功”。4、输出部分测试:看喇叭是否有响声。5、在进行程序下载时要注意当下载完程序后要关掉电源,因为61板所能够支持的热量是有限的当板子过热时就会影响下载程序的结果。如果发生播报的错误是因为板子使用过长所造成的就应该过一段时间再使用,不然很有可能会所芯片损坏。按以上步骤执行后就可以将已经修改好的程序下载到芯片上,按设计要求通过对程序的不断修改来实现电路板的功能。程序实现了以后,通过按键就可以控制语音报时系统。按K1键就可以播报年月日,K2键播报时间,通过K3键对系统时间或年月日进行调整(注意:调整时间或年月日时,要连续按K2或K1键3秒钟)。例如:按K1它播报“2006年1月1日”。按K2播报“现在时刻上午0点0分”。如需调整时间则持续按K2键不少于3秒,接着按K3键先对小时进行调整,然后调整分钟。同理K1键的调整操作。第3章 SPCE061A单片机集成环境 µnSP 集成开发环境集程序的编辑、编译、链接、调试以及仿真等功能为一体。具有友好的交互界面、下拉菜单、快捷键和快速访问命令列表等,使编程、调试工作方便且高效。此外,它的软件仿真功能可以在不连接仿真板的情况下模拟硬件的各项功能来调试程序。3.1 新建一个项目在真正开始编程前,需要先建立程序的项目(又称工程) ;而项目则提供用户程序及资源文档的编辑和管理,并提供各项环境要素的设置途径。因此,用户从编程到调程之前实际上都是围绕着项目的操作。下面将以图示介绍项目工程的建立过程。1. 打开集成开发环境 IDE,选择 File>New,打开“New”对话框。如下图 3.1所示。图3.12. 选择 “Project”标签项。 3. 在“File”文本框里输入项目的名称,本例把新建的项目取名为“TheOne”。在“Location”文本框里,输入项目保存的路径,或者可以点击右边的文件路径选择按钮,在打开的对话框中,选择项目要保存的路径。 4. 点击“OK” ,即完成了一个项目的建立。新建完成的项目会由 IDE 自动生成以下几个文件: Resource.asm、TheOne.rc、Resource.inc、TheOne.h等,新建完的项目如图 4.3 所示,点击“Source File”左边的“+”即可看到该项目所包含的源程序文件(本例中即自动由 IDE 生成的 Resource.asm、TheOne.rc 文件) 。3.2 新建一个文件项目的建立,搭建好了软件开发所需的平台,用户就可以在其上进行针对单片机的软件开发了;但在动手写程序之前, 还需要新建一个源程序文件(也就是常用的 C 语言文件 xx.c、汇编语言文件 xx.asm),而程序的编写是直接在这些源程序文件里面进行直接编写的。1、 选择 File>New,打开“New”对话框,如图3.2所示。图3.22、 选择“File”标签项。3、 在左边的选择框中,选择文件类型“SP IDE C File”,在“File”文本框里面写上要新建的文件的名称,这里将新建一个 C 语言的“main”文件,设置完成后,点击“OK”按钮。4、 完成新建文件的操作之后,就可以开始真正的程序编写、软件开发了。3.3编程与编译在编辑窗中,写入代码到文件“main.c”中,如图3.2所示。程序清单如下:#define P_Watchdog_Clear (volatile unsigned int *) 0x7012 /定义寄存器指针常量 P_Watchdog_Clear /指向0x7012单元int main (void) /主程序入口;unsigned int uiResult ; /定义变量uiResult,用于存放累加结果;unsigned int i ; /定义变量i,用于存放累加次数;uiResult=0; /uiResult先初始化;/循环累加for(i=1;i<=100;i+)uiResult =uiResult+i;/.累加结束;/死循环,不让单片机停止工作;while(1)*P_Watchdog_Clear=0x0001;/清看门狗;编好程序以后,下一步就需要对所编的程序进行链接、优化、编译等,这些工作大部分由IDE来完成,用户所需要做的只是编译前对工程的一些设置,以及启动编译。3.4 在线调试在软件、硬件都准备好之后,并且完成了程序的编写、编译后,就可以进行在线调试了。先点击“Use ICE”工具按钮,使IDE处于在线仿真状态下;再选择菜单项【build】->【Start Debug】->【Download】开始下载程序到61板中;或者直接点击工具按钮“Download”也可以。第四章万年历程序设计 凌阳单片机SPCE061A在现实生活中有非常广泛的应用。它主要有程序开发周期短、便于维护、运行稳定等优点,因此本章主要介绍SPCE061A在现实生活中一个具体的应用-电子万年历。本章主要包括硬件电路的设计、程序设计流程以及软件编写等内容。4.1绘制原理图利用Protel 99的原理图设计系统来绘制电路原理图。将原理图按照程序下载区、音频输出、语音输入、电源分模块设计。1程序下载区(ICE)ICE基本运行方式是通过控制clock及通过ICE伪指令方式,来控制CPU的运行及缓存器资料和内存资料的存取,因此必须通过控制缓存器值的设定来控制目前CPU的动作。61板上的74HC244主要是在我们用下载线进行程序下载时起作用,主要起缓存的作用和完成对SDA是用来作为数据回送还是数据下载进行选择。见图4-1.图