1、课程设计报告专业:_班 级:_姓 名:_指导老师:_二00九年 12月 27日目录1、 (内容) 页码2、3、4、1. 设计题目基于DS18B20传感器温度测量2. 课程设计目的通过基于MCS-51系列单片机AT89C51和DS18B20温度传感器检测温度,熟悉芯片的使用,温度传感器的功能,数码显示管的使用,汇编语言的设计;并且把我们这一年所学的数字和模拟电子技术、检测技术、单片机应用等知识,通过理论联系实际,从题目分析、电路设计调试、程序编制调试到传感器的选定等这一完整的实验过程,培养了学生正确的设计思想,使学生充分发挥主观能动性,去独立解决实际问题,以达到提升学生的综合能力、动手能力、文献
2、资料查阅能力的作用,为毕业设计和以后工作打下一个良好的基础。3. 设计任务和要求 以MCS-51系列单片机为核心器件,组成一个数字温度计,采用数字温度传感器DS18B20为检测器件,进行单点温度检测,检测精度为0.5摄氏度。温度显示采用3位LED数码管显示,两位整数,一位小数。具有键盘输入上下限功能,超过上下限温度时,进行声音报警。4. 正文一、方案选择与论证根据设计任务的总体要求,本系统可以划分为以下几个基本模块,针对各个模块的功能要求,分别有以下一些不同的设计方案:1、温度传感器模块方案一:采用热敏电阻,热敏电阻精度、重复性、可靠性较差,对于检测1摄氏度的信号是不适用的,也不能满足测量范围
3、。在温度测量系统中,也常采用单片温度传感器,比如AD590,LM35等。但这些芯片输出的都是模拟信号,必须经过A/D转换后才能送给计算机,这样就使测温系统的硬件结构较复杂。另外,这种测温系统难以实现多点测温,也要用到复杂的算法,一定程度上也增加了软件实现的难度。方案二:采用单总线数字温度传感器DS18B20测量温度,直接输出数字信号。便于单片机处理及控制,节省硬件电路。且该芯片的物理化学性很稳定,此元件线形性能好,在0100摄氏度时,最大线形偏差小于1摄氏度。DS18B20的最大特点之一采用了单总线的数据传输,由数字温度计DS18B20和微控制器AT89C51构成的温度装置,它直接输出温度的数
4、字信号到微控制器。每只DS18B20具有一个独有的不可修改的64位序列号,根据序列号可访问不同的器件。这样一条总线上可挂接多个DS18B20传感器,实现多点温度测量,轻松的组建传感网络。综上分析,我们选用第二种方案。2、显示模块方案一:采用8位段数码管,将单片机得到的数据通过数码管显示出来。该方案简单易行,但所需的元件较多,且不容易进行操作,可读性差,一旦设定后很难再加入其他的功能,显示格式受限制,且大耗电量大,不宜用电池给系统供电。方案二:采用液晶显示器件,液晶显示平稳、省电、美观,更容易实现题目要求,对后续的园艺通兼容性高,只需将软件作修改即可,可操作性强,也易于读数,采用RT1602两行
5、十六个字符的显示,能同时显示其它的信息如日期、时间、星期、温度。综上分析,我们采用了第二个方案。3、微控制器模块温度传感器有四种主要类型:热点偶、热敏电阻、电阻温度检测器、IC温度传感器。其中IC温度传感器又包括模拟输出和数字输出两种类型。 热电偶应用很广泛,因为它们非常坚固而且不太贵。热电偶有多种类型,它们覆盖非常宽的温度范围,从-200到2000。它们的特点是:低灵敏度、低稳定性、中等精度、响应速度慢、高温下容易老化和有漂移,以及非线性。另外,热电偶需要外部参考端。 电阻温度检测器精度极高且具有中等线性度。它们特别稳定,并有许多种配置。但它们的最高工作温度只能达到400左右。它们也有很大的
6、TC,且价格昂贵(是热电偶的410倍),并且需要一个外部参考源。 模拟输出IC温度传感器具有很高的线性度 (如果配合一个模数转换器或ADC可产生数字输出)、低成本、高精度(大约1%)、小尺寸和高分辨率。它们的不足之处在于温度范围有限(-55150),并且需要一个外部参考源。数字输出IC温度传感器带有一个内置参考源,它们的响应速度也相当慢(100 ms数量级)。虽然它们固有地会自身发热,但可以采用自动关闭和单次转换模式使其在需要测量之前将IC设置为低功耗状态,从而将自身发热降到最低。 综上方案的比较,数字输出IC温度传感器与热敏电阻、RTD和热电偶传感器相比,具有很高的线性,而且由于技术比较成熟
7、,集成复杂的功能,成本也较低,能够提供一个数字输出,省去A/D转化器的使用,有效较低了系统成本,提高系统稳定性,并能够在一个相当有用的范围内进行温度测量。本实验采用DS18B20作为温度传感器二、系统的具体设计与实现1、系统的总体设计方案 采用AT89S52单片机作为控制核心对温度传感器DS18B20控制,读取温度信号并进行计算处理,并送到液晶显示器RT1602显示。按照系统设计功能的要求,确定系统由3个模块组成:主控制器、测温电路和显示电路。数字温度计总体电路结构框图如图5所示。 图5 电路结构框图2、硬件电路设计(1)、单片机控制模块 该模块由AT89S52单片机组成在设计方面,AT89S
8、52的EA接高电平,其外围电路提供能使之工作的晶振脉冲、复位按键,四个I/O分别接8路的单列IP座方便与外围设备连接。当AT89S52芯片接到来自温度传感器的信号时,其内部程序将根据信号的类型进行处理,并且将处理的结果送到显示模块,发送控制信号控制各模块。该模块的硬件电路如下图(2)温度传感器模块DS18B20相关资料1、DS18B20原理与分析DS18B20是美国DALLAS半导体公司继DS1820之后最新推出的一种改进型智能温度传感器。与传统的热敏电阻相比,它能够直接读出被测温度并且可根据实际要求通过简单的编程实现912位的数字值读数方式。可以分别在93.75 ms和750 ms内完成9位
9、和12位的数字量,并且从DS18B20读出的信息或写入DS18B20的信息仅需要一根口线(单线接口)读写,温度变换功率来源于数据总线,总线本身也可以向所挂接的DS18B20供电,而无需额外电源。因而使用DS18B20可使系统结构更趋简单,可靠性更高。他在测温精度、转换时间、传输距离、分辨率等方面较DS1820有了很大的改进,给用户带来了更方便的使用和更令人满意的效果。 以下是DS18B20的特点:(1)独特的单线接口方式:DS18B20与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。(2)在使用中不需要任何外围元件。(3)可用数据线供电,电压范围:+3.0 +5.5
10、V。(4)测温范围:-55 - +125 。固有测温分辨率为0.5 。(5)通过编程可实现9-12位的数字读数方式。(6)用户可自设定非易失性的报警上下限值。(7)支持多点组网功能,多个DS18B20可以并联在惟一的三线上,实现多点测温。(8)负压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。2、DS18B20的测温原理DS18B20的测温原理上图所示,图中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器1,高温度系数晶振随温度变化其震荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入,图中还隐含着计数门,当计数门打开时,DS18B20就对
11、低温度系数振荡器产生的时钟脉冲后进行计数,进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55 所对应的基数分别置入减法计数器1和温度寄存器中,减法计数器1和温度寄存器被预置在 -55 所对应的一个基数值。减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时温度寄存器的值将加1,减法计数器1的预置将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。图中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正减
12、法计数器的预置值,只要计数门仍未关闭就重复上述过程,直至温度寄存器值达到被测温度值,这就是DS18B20的测温原理。另外,由于DS18B20单线通信功能是分时完成的,他有严格的时隙概念,因此读写时序很重要。系统对DS18B20的各种操作必须按协议进行。操作协议为:初始化DS18B20(发复位脉冲)发ROM功能命令发存储器操作命令处理数据。DS18B20工作过程及时序DS18B20内部的低温度系数振荡器是一个振荡频率随温度变化很小的振荡器,为计数器1提供一频率稳定的计数脉冲。高温度系数振荡器是一个振荡频率对温度很敏感的振荡器,为计数器2提供一个频率随温度变化的计数脉冲。初始时,温度寄存器被预置成
13、-55,每当计数器1从预置数开始减计数到0时,温度寄存器中寄存的温度值就增加1,这个过程重复进行,直到计数器2计数到0时便停止。初始时,计数器1预置的是与-55相对应的一个预置值。以后计数器1每一个循环的预置数都由斜率累加器提供。为了补偿振荡器温度特性的非线性性,斜率累加器提供的预置数也随温度相应变化。计数器1的预置数也就是在给定温度处使温度寄存器寄存值增加1计数器所需要的计数个数。DS18B20内部的比较器以四舍五入的量化方式确定温度寄存器的最低有效位。在计数器2停止计数后,比较器将计数器1中的计数剩余值转换为温度值后与0.25进行比较,若低于0.25,温度寄存器的最低位就置0;若高于0.2
14、5,最低位就置1;若高于0.75时,温度寄存器的最低位就进位然后置0。这样,经过比较后所得的温度寄存器的值就是最终读取的温度值了,其最后位代表0.5,四舍五入最大量化误差为1/2LSB,即0.25。温度寄存器中的温度值以9位数据格式表示,最高位为符号位,其余8位以二进制补码形式表示温度值。测温结束时,这9位数据转存到暂存存储器的前两个字节中,符号位占用第一字节,8位温度数据占据第二字节。DS18B20测量温度时使用特有的温度测量技术。DS18B20内部的低温度系数振荡器能产生稳定的频率信号;同样的,高温度系数振荡器则将被测温度转换成频率信号。当计数门打开时,DS18B20进行计数,计数门开通时
15、间由高温度系数振荡器决定。芯片内部还有斜率累加器,可对频率的非线性度加以补偿。测量结果存入温度寄存器中。一般情况下的温度值应该为9位,但因符号位扩展成高8位,所以最后以16位补码形式读出。DS18B20工作过程一般遵循以下协议:初始化ROM操作命令存储器操作命令处理数据 初始化单总线上的所有处理均从初始化序列开始。初始化序列包括总线主机发出一复位脉冲,接着由从属器件送出存在脉冲。存在脉冲让总线控制器知道DS1820 在总线上且已准备好操作。 ROM操作命令一旦总线主机检测到从属器件的存在,它便可以发出器件ROM操作命令之一。所有ROM操作命令均为8位长。这些命令列表如下:Read ROM(读R
16、OM)33h此命令允许总线主机读DS18B20的8位产品系列编码,唯一的48位序列号,以及8位的CRC。此命令只能在总线上仅有一个DS18B20的情况下可以使用。如果总线上存在多于一个的从属器件,那么当所有从片企图同时发送时将发生数据冲突的现象(漏极开路会产生线与的结果)。Match ROM( 符合ROM)55h此命令后继以64位的ROM数据序列,允许总线主机对多点总线上特定的DS18B20寻址。只有与64位ROM序列严格相符的DS18B20才能对后继的存贮器操作命令作出响应。所有与64位ROM序列不符的从片将等待复位脉冲。此命令在总线上有单个或多个器件的情况下均可使用。Skip ROM( 跳
17、过ROM )CCh在单点总线系统中,此命令通过允许总线主机不提供64位ROM编码而访问存储器操作来节省时间。如果在总线上存在多于一个的从属器件而且在Skip ROM命令之后发出读命令,那么由于多个从片同时发送数据,会在总线上发生数据冲突(漏极开路下拉会产生线与的效果)。Search ROM( 搜索ROM)F0h当系统开始工作时,总线主机可能不知道单线总线上的器件个数或者不知道其64位ROM编码。搜索ROM命令允许总线控制器用排除法识别总线上的所有从机的64位编码。Alarm Search(告警搜索)ECh此命令的流程与搜索ROM命令相同。但是,仅在最近一次温度测量出现告警的情况下,DS18B2
18、0才对此命令作出响应。告警的条件定义为温度高于TH 或低于TL。只要DS18B20一上电,告警条件就保持在设置状态,直到另一次温度测量显示出非告警值或者改变TH或TL的设置,使得测量值再一次位于允许的范围之内。贮存在EEPROM内的触发器值用于告警。 存储器操作命令Write Scratchpad(写暂存存储器)4Eh这个命令向DS18B20的暂存器中写入数据,开始位置在地址2。接下来写入的两个字节将被存到暂存器中的地址位置2和3。可以在任何时刻发出复位命令来中止写入。Read Scratchpad(读暂存存储器)BEh这个命令读取暂存器的内容。读取将从字节0开始,一直进行下去,直到第9(字节
19、8,CRC)字节读完。如果不想读完所有字节,控制器可以在任何时间发出复位命令来中止读取。Copy Scratchpad(复制暂存存储器)48h这条命令把暂存器的内容拷贝到DS18B20的E2存储器里,即把温度报警触发字节存入非易失性存储器里。如果总线控制器在这条命令之后跟着发出读时间隙,而DS18B20又正在忙于把暂存器拷贝到E2存储器,DS18B20就会输出一个“0”,如果拷贝结束的话,DS18B20 则输出“1”。如果使用寄生电源,总线控制器必须在这条命令发出后立即起动强上拉并最少保持10ms。Convert T(温度变换)44h这条命令启动一次温度转换而无需其他数据。温度转换命令被执行,
20、而后DS18B20保持等待状态。如果总线控制器在这条命令之后跟着发出读时间隙,而DS18B20又忙于做时间转换的话,DS18B20将在总线上输出“0”,若温度转换完成,则输出“1”。如果使用寄生电源,总线控制器必须在发出这条命令后立即起动强上拉,并保持500ms。Recall E2(重新调整E2)B8h这条命令把贮存在E2中温度触发器的值重新调至暂存存储器。这种重新调出的操作在对DS18B20上电时也自动发生,因此只要器件一上电,暂存存储器内就有了有效的数据。在这条命令发出之后,对于所发出的第一个读数据时间片,器件会输出温度转换忙的标识:“0”=忙,“1”=准备就绪。Read Power Su
21、pply(读电源)B4h对于在此命令发送至DS18B20之后所发出的第一读数据的时间片,器件都会给出其电源方式的信号:“0”=寄生电源供电,“1”=外部电源供电。 处理数据DS18B20的高速暂存存储器由9个字节组成,其分配如图3所示。当温度转换命令发布后,经转换所得的温度值以二字节补码形式存放在高速暂存存储器的第0和第1个字节。单片机可通过单线接口读到该数据,读取时低位在前,高位在后。 DS18B20温度数据表上表是DS18B20温度采集转化后得到的12位数据,存储在DS18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于或等于0,这5位为0,只要将测到的数值乘于
22、0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。温度转换计算方法举例:例如当DS18B20采集到+125的实际温度后,输出为07D0H,则:实际温度=07D0H0.0625=20000.0625=1250C。例如当DS18B20采集到-55的实际温度后,输出为FC90H,则应先将11位数据位取反加1得370H(符号位不变,也不作为计算),则:实际温度=370H0.0625=8800.0625=550C。(3)显示模块六、软件设计系统程序主要包括主程序、读出温度子程序、温度转换子程序、计算温度子程序、显示等等。1.主程序主要功能
23、是完成DS18B20的初始化工作,并进行读温度,将温度转化成为压缩BCD码并在显示器上显示传感器所测得的实际温度。2读出温度子程序读出温度子程序的主要功能是读出RAM中的9字节,在读出时需要进行CRC校验,校验有错时不进行温度数据的改写。其程序流程图如图2所示。3温度转换命令子程序温度转换命令子程序主要是发温度转换开始命令,当采用12位分辩率时转换时间约为750ms,在本程序设计中采用1s显示程序延时法等待转换的完成。温度转换命令子程序流程图如图3所示。4计算温度子程序计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判定,其流程图如图4所示。开始DS18B20初始化读温
24、度子程序读出温度格式化,并转为压缩BCD码显示温度图1 主程序流程图图2读出温度子程序流程图图3 温度转换命令子程序流程图图4 计算温度子程序流程图完整程序如下:;温度传感器18B20采用器件默认的12位转化,最大转化时间要750毫秒;内存分配声明TEMPER_L EQU 31H ;用于保存读出温度的低字节TEMPER_H EQU 30H ;用于保存读出温度的高字节T_DF EQU 33H ;FORMAT后的小数部分(decimal fraction),半字节的温度小数(存在低四位)T_INTEGER EQU 32H ;FORMAT后的整数部分(integer),将两字节的温度整合成1字节FL
25、AG BIT 20H ;标志位DAT BIT P1.4 ;DS18B20数据线;-主函数开始- ORG 0000H AJMP MAIN ORG 0030HMAIN: CLR EA ;使用DS18B20一定要禁止中断 MOV SP,#60H MOV T_DF,#00H ;赋初始温度为30度 MOV T_INTEGER,#30HSTART: LCALL GET_TEMPER ;调用读温度子程序 LCALL T_FORMAT ;将读出的2字节温度格式化,并转换为压缩BCD码 LCALL DISPLAY ;显示温度 AJMP START;-DS18B20的温度转换子程序-GET_TEMPER: LCA
26、LL Set_18B20 MOV A,#0CCH ;跳过ROM匹配 LCALL WRITE_1820 MOV A,#44H ;发出温度转换命令 LCALL WRITE_1820 LCALL DISPLAY ;用显示温度(持续1s左右)来等待AD转换结束,12位的话要转换750ms LCALL Set_18B20 ;准备读温度前先初始化 MOV A,#0CCH ;跳过ROM匹配 LCALL WRITE_1820 MOV A,#0BEH ;发出读温度命令 LCALL WRITE_1820 LCALL READ_1820 RET;-DS18B20初始化程序-Set_18B20: SETB DAT N
27、OP CLR DAT MOV R2,#250 ;主机发出延时500微秒的复位低脉冲 DJNZ R2,$ SETB DAT ;然后拉高数据线 MOV R2,#30 DJNZ R2,$ ;延时60us等待DS18B20回应 JNB DAT,INIT1 JMP Set_18B20 ;超时而没有响应,重新初始化INIT1: MOV R2,#120 DJNZ R2,$ ;延时240us JB DAT,INIT2 ;数据变高,初始化成功 JMP Set_18B20INIT2: MOV R2,#240 DJNZ R2,$ RET;-写DS18B20的子程序(有具体的时序要求)-WRITE_1820: MOV
28、 R2,#8 ;一共8位数据WR0: CLR DAT MOV R3,#6 DJNZ R3,$ RRC A MOV DAT,C MOV R3,#20 DJNZ R3,$ SETB DAT NOP NOP DJNZ R2,WR0 SETB DAT RET;-读DS18B20的程序,从DS18B20中读出两个字节的温度数据-READ_1820: MOV R4,#2 ;将温度高位和低位从DS18B20中读出 MOV R1,#TEMPER_L ;低位存入31H(TEMPER_L)RE0: MOV R2,#8RE1: SETB DAT NOP NOP CLR DAT NOP NOP SETB DAT MO
29、V R3,#4 DJNZ R3,$ MOV C,DAT RRC A MOV R3,#30 DJNZ R3,$ DJNZ R2,RE1 MOV R1,A DEC R1 ;高位存入30H(TEMPER_H) DJNZ R4,RE0 RET;-整合读出的两字节温度(关于DS18B20读出的2字节温度格式请参考资料)-T_FORMAT: MOV A,#0FH ANL A,TEMPER_L MOV T_DF,A ;获得小数部分(4位) MOV A,TEMPER_L SWAP A MOV R0,A MOV A,TEMPER_H SWAP A XCHD A,R0 MOV T_INTEGER,A ;获得整数部
30、分(1字节)TO_BCD: MOV A,T_INTEGER MOV B,#10 DIV AB SWAP A ADD A,B MOV T_INTEGER,A ;整数部分压缩BCD码送T_INTEGER MOV A,T_DF MOV B,#10 MUL AB MOV B,#16 DIV AB MOV R2,A ;暂存R2 MOV A, B MOV B,#10 MUL AB MOV B,#16 DIV AB MOV B,A MOV A,R2 SWAP A ADD A,B MOV T_DF,A ;小数部分压缩BCD码送T_DF RET;-显示温度子程序-DISPLAY:MOV R1,#250DISP1
31、: MOV A,T_INTEGER MOV R3,#01H MOV R4,#02H SETB FLAGDISP2: CPL FLAG MOV B,#10H DIV AB MOV R2,A ;高位送R2暂存 MOV DPTR,#3FFFH ;字位口 MOV A,R3 MOVX DPTR,A ;送字位 MOV A,R2 ;字型R2送A MOV DPTR,#TAB ;表首地址送DPTR MOVC A,A+DPTR ;查表 MOV DPTR,#5FFFH ;字型口 MOVX DPTR,A ;送字型 CALL D1MS ;延时 MOV A,#0FFH MOVX DPTR,A ;关闭字型显示 MOV R2
32、,B ;低位送R2暂存 MOV DPTR,#3FFFH ;字位口 MOV A,R4 MOVX DPTR,A ;送字位 MOV A,R2 ;字型R2送A MOV DPTR,#TAB ;表首地址送DPTR MOVC A,A+DPTR ;查表 JNB FLAG,D1 JMP D2D1: ANL A,#7FHD2: MOV DPTR,#5FFFH ;字型口 MOVX DPTR,A ;送字型 CALL D1MS ;延时 MOV A,#0FFH MOVX DPTR,A ;关闭字型显示 MOV A,T_DF MOV R3,#04H MOV R4,#08H JNB FLAG,DISP2 DJNZ R1,DIS
33、P1 RET;-1mS延时(按12MHZ算)-D1MS: MOV R7,#250LOOP0: NOP NOP DJNZ R7,LOOP0 RET;-共阳数码管对应字型表-TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H ;段码表 ; 0 1 2 3 4 5 6 7 对应内容 DB 80H,90H,88H,83H,0C6H,0A1H,86H,8EH ; 8 9 A B C D E Fend5. 设计体会与致谢通过这次基于DS18B20传感器测量温度的设计,我学到了许多东西。首先,这次设计让我把书本上学到的理论知识转化成为现实生活中有价值的实物。如果没有这次
34、设计为我 们搭建的平台,我们就不能对书本上的知识进行很好的理解,也不能熟练的把它们应用到现实生活中。同时,这次设计加强了我们独立思考的能力。一个好的设计需要通过我们不断的思维,不断的改善。经过设计之后,我们不像以前那样,遇到问题都不愿意独立思考,只会一味的向别人求助。现在,我们会通过自己的思考,解决我们自己遇到的问题和困难。还有,我们学会不能手高眼低,要踏踏实实,从基础学起、做起。一开始我们通过讨论,初步有了设计的方案,觉得还是比较简单的。但是,具体到设计时,我们遇到了很多麻烦,比如如何将传感器得到的温度转换成为对应的电信号,如何将电信号输送到单片机进行控制,如何把测得的温度用数字显示出来等等
35、。这就要求我们学习要一步一个脚印,掌握扎实的理论基础了。最重要的一点是,我们在这次设计中培养了自己的学习能力。由于好多知识超出了我们的课本范围,这就要求我们自己通过查资料来增加我们的知识,解决遇到的一些问题。在短时间内从书本资料中帅选出我们所需要的知识,对我们的自主学习能力有很大的帮助。就那DS18B20来说,由于我们书本上没有介绍到这种温度传感器,所以我们就通过学习DS18B20的说明书,了解它工作的原理以及特性,并弄清楚在实际应用时要注意的事项,对DS18B20进行初始化、编程的要求和规定等。培养了自主学习的能力,无论以后我们要做什么样的设计,我们都能够通过查阅资料来实现。最后,本次设计能够顺利完成,我要特别感谢实验室老师给予的大力支持和热心帮助。参考文献【1】 梁森,欧阳三泰,王侃夫. 自动检测技术及应用【M】.北京:机械工业出版社,2009.【2】 高洪志.MCS-51单片机原理及应用技术教程【M】北京:人民邮电出版社,2009.6. 附录大电路图