毕业论文(烧水恒温系统)_第1页
毕业论文(烧水恒温系统)_第2页
毕业论文(烧水恒温系统)_第3页
毕业论文(烧水恒温系统)_第4页
毕业论文(烧水恒温系统)_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

湖南长沙航空职业技术学院changshaaeronauticalvocational&technicalcollege(毕业实践)类别设计类题目基于MCS-51单片机技术烧水恒温系统系名称电子电气工程系专业与班级声像0901学生姓名学号指导教师完成日期2012年04月28日目录前言 7第一章绪论 91.1微处理器的发展趋势 91.2温度控制系统设计的背景、发展历史与意义 91.3系统的设计原则 10(1)安全可靠 10(2)操作维护方便 10(3)实时性强 10(4)通用性好 11(5)经济效益高 111.3.1系统的设计步骤 111.3.2系体的总体方案设计和框图设计 111.4设计方案 12第二章硬件设计 142.1主要器件说明 142.1.1主控制器 142.1.2显示器(1602液晶的简介) 162.1.3温度传感器 192.1.4稳压电源7805 272.2各部分电路说明 272.2.1单片机控制部分 272.2.2传感器数据采集电路 292.2.3显示电路 302.2.4输入电路 302.2.5报警电路 312.2.6指示灯电路 32第三章软件设计 333.1主程序 333.2读出温度子程序 343.3温度转换命令子程序 353.4温度控制子程序 353.5键盘扫描子函数 36 36第四章实物制作与调试说明 374.1原材料的选择与采购 374.2印刷电路板的设计与制作 374.3单片机测试 384.4硬件与软件调试 384.5整机的调试与测试 38使用说明书 40致谢 41参考文献 42附件1:电路原理图 43附件2:程序清单 44前言温度是日常生活中无时不在的物理量,温度的控制在各个领域都有积极的意义。很多行业中都有大量的用电加热设备,如用于热处理的加热炉,用于融化金属的坩锅电阻炉与各种不同用途的温度箱等,采用单片机对它们进行控制不仅具有控制方便、简单、灵活性大等特点,而且还可以大幅度提高被控温度的技术指标,从而能够大大提高产品的质量。因此,智能化温度控制技术正被广泛地采用。本温度设计采用现在流行的AT89S52单片机,配以DS18B20数字温度传感器,该温度传感器可自行设置温度上下限。单片机将检测到的温度信号与输入的温度上、下限进行比较,由于温度随时在变化,为了让恒温系统更加稳定的工作,引入了PID算法,PID算法是一种闭环结构的算法,根据外来采取的数据的变化来做相应的计算。关键词:单片机应用;温度采集控制;DS18B20应用,PID算法;ABSTRACTThetemperatureisindailylifetheever-presentphysicalquantities,thecontrolofthetemperatureinvariousfieldshavepositivesignificance.Manyindustrytherearealargenumberofelectricheatingequipment,suchastobeusedinheattreatmentfurnace,usedtomeltmetalcrucibleresistancefurnace,andallkindsofdifferentUSESoftemperatureboxandsoon,USESthemonolithictheycontrolhasnotonlyconvenientcontrol,simple,flexibleandothercharacteristics,butalsocouldincreasethetemperaturewaschargedwiththetechnicalindex,whichcangreatlyimprovethequalityoftheproducts.Therefore,intelligenttemperaturecontroltechnologyisbeingwidelyadopted.ThistemperaturedesignUSESpopularnowAT89S52SCM,matchwithDS18B20digitaltemperaturesensor,thetemperaturesensorcanbesetonthetemperaturelimit.Thetemperatureofthesinglechipmicrocomputerdetectthetemperatureoftheinputsignalandtheupperandlowerlimitcarriesonthecomparison,duetotemperaturechangesinatanytime,inordertomakethesystemmorestableworkofconstanttemperature,theintroductionofthePIDalgorithm,PIDalgorithmisaclosedloopstructurealgorithm,accordingtothechangeoftheforeigntakedatatomakecorrespondingcalculation.Keywords:SCM;Temperaturegatheringcontrol;DS18B20application,PID;基于MCS-51单片机恒温系统第一章绪论1.1微处理器的发展趋势在后经济危机时代,消费者更趋于理智,希望可以用更低的价格获得更高性能更好用户体验的便携电子产品,对低成本差异化产品要求提升了。这就要求半导体行业开发先进的片上芯片(SoC)平台,推动创新,从而为新一轮移动互联应用和服务提供更出色的用户体验。这符合ARM一贯遵循的商业模式和市场策略,鼓励技术创新并降低成本。ARM已经与国内许多芯片厂商展开合作,降低设计门槛,授权更多先进的技术给国内公司,满足以中国为中心的发展中国家市场和新兴市场对高性能低成本产品的需求。ARM始终坚持一贯的市场战略,并没有因为金融危机而改变。我们现在的重点加大了软件方面的投入,与合作伙伴的关系也变得更加紧密,这是为了扩大并加强ARM的生态环境,生产出更多符合市场需求的产品。平板电脑叩开移动互联大门以平板电脑叩开移动互联大门2011年,移动互联和云计算将继续成为推动支持互联网功能的消费电子产品需求增长的主要因素。由此我们相信诸如智能手机、平板电脑、数字家庭等互联消费设备将在2011年得到迅猛发展。1.2温度控制系统设计的背景、发展历史与意义随着社会的发展,科技的进步,以与测温仪器在各个领域的应用,智能化已是现代温度控制系统发展的主流方向。特别是近年来,温度控制系统已应用到人们生活的各个方面,但温度控制一直是一个未开发的领域,却又是与人们息息相关的一个实际问题。针对这种实际情况,设计一个温度控制系统,具有广泛的应用前景与实际意义。温度是科学技术中最基本的物理量之一,物理、化学、生物等学科都离不开温度。在工业生产和实验研究中,像电力、化工、石油、冶金、航空航天、机械制造、粮食存储、酒类生产等领域内,温度常常是表征对象和过程状态的最重要的参数之一。比如,发电厂锅炉的温度必须控制在一定的范围之内;许多化学反应的工艺过程必须在适当的温度下才能正常进行;炼油过程中,原油必须在不同的温度和压力条件下进行分馏才能得到汽油、柴油、煤油等产品。没有合适的温度环境,许多电子设备就不能正常工作,粮仓的储粮就会变质霉烂,酒类的品质就没有保障。因此,各行各业对温度控制的要求都越来越高。可见,温度的测量和控制是非常重要的。单片机在电子产品中的应用已经越来越广泛,在很多的电子产品中也用到了温度检测和温度控制。随着温度控制器应用范围的日益广泛和多样,各种适用于不同场合的智能温度控制器应运而生。1.3系统的设计原则一般系统的设计原则包含安全性(稳定抗干扰性),操作的便利性(人性化),实时性,通用性和经济性。(1)安全可靠首先要选用高性能的AT89C52单片机,保证在恶劣的工业环境下能正常运行。其次是设计可靠的控制方案,并具有各种安全保护措施,如报警、事故预测、事故处理和不间断电源等。(2)操作维护方便操作方便表现在操作简单、直观形象和便于掌握且不强求操作工要掌握计算机知识才能操作。(3)实时性强选用高性能的AT89C52单片机的实时性,表现在内部和外部事件能与时地响应,并做出相应的处理。(4)通用性好系统设计时应考虑能适应不同的设备和各种不同设备和各种不同控制对象,并采用积木式结构,按照控制要求灵活构成系统。主要表现在两个方面:一是硬件板设计采用标准总线结构(如PC总线),配置各种通用的模板,以便扩充功能时,只需增加功能模板就能实现;二是软件功能模块或控制算法采用标准模块结构,用户使用时不需要二次开发,只需各种功能模块,灵活地进行控制系统组态。(5)经济效益高1.3.1系统的设计步骤(1)系统总体方案设计、(2)方案论证评审硬件和软件的分别细化设计硬件和软件的分别调试系统的组装(3)离线仿真和调试阶段1.3.2系体的总体方案设计和框图设计(1)系统的主要功能、技术指标、原理性方框与文字说明。(2)系统的硬件结构几配置,主要软件的功能、结构几框图。(3)保证性能指标要求的技术措施。(4)抗干扰性和可靠性设计。(5)工艺要求实现温度闭环控制,控制温度误差范围≤±0.1℃。温度范围:-50℃~125℃。供电电压:交流220V和直流电5V。1.4设计方案方案一:考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到的,所以可以使用热敏电阻之类的器件利用其感温效应,感温电路比较麻烦,进行A/D转换,才可以满足设计要求。优点:便宜。缺点:准确度不高。热敏电阻M热敏电阻MCUAD转换器图1.1采用热敏电阻的框图方案二:由于本设计是测温电路,首先要选用高性能的AT89C52单片机,保证在恶劣的工业环境下能正常运行。单片机AT89C52具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,很适合便携手持式产品的设计使用系统可用二节电池供电。测温传感器使用二极管结电压变化的数值来转化成温度的变化,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来。从以上两种方案,很容易看出,采用方案二,电路比较简单,软件设计也比较简单,故采用了方案二。考虑到方案中制作数字温度计,在单片机电路设计中,大多都是使用传感器,这是非常容易想到的,所以可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求。温度计电路设计总体设计方框图如图1所示,控制器采用单片机AT89C51,温度传感器采用DS18B20,用4位LED数码管以串口传送数据实现温度显示。MMCULCD显示单片机复位LCD显示单片机复位报警点按键调整报警点按键调整时钟振荡温度传感器时钟振荡温度传感器Led和蜂鸣器外设Led和蜂鸣器外设图1.2采用18B20传感器的框图第二章硬件设计2.1主要器件说明2.1.1主控制器单片机AT89S51具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,很适合便携手持式产品的设计使用系统可用二节电池供电。如图2.1所示。图2.1AT89C52主要特性:图2.1AT89C52·与MCS-51兼容·4K字节可编程闪烁存储器

寿命:1000写/擦循环

数据保留时间:10年

·全静态工作:0Hz-24Hz

·三级程序存储器锁定

·128*8位内部RAM

·32可编程I/O线

·两个16位定时器/计数器

·5个中断源

·可编程串行通道

·低功耗的闲置和掉电模式

·片内振荡器和时钟电路管脚说明:VCC:供电电压。

GND:接地。P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口也可作为AT89C51的一些特殊功能口,如下表所示:P3口管脚备选功能P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2/INT0(外部中断0)P3.3/INT1(外部中断1)P3.4T0(记时器0外部输入)P3.5T1(记时器1外部输入)P3.6/WR(外部数据存储器写选通)P3.7/RD(外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号。RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。XTAL1:反向振荡放大器的输入与内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。2.1.2显示器(1602液晶的简介)字符型液晶1602主要技术参数如表2.1所示:表2.1字符型液晶1602主要技术参数显示容量:16*2个字符芯片工作电压:4.5—5.5V工作电流:2.0mA(5.0V)模块最佳工作电压:5.0V字符尺寸:2.95*4.35(W*H)mm接口信号说明如表2.2所示:表2.21602接口信号说明编号符号引脚说明编号符号引脚说明1Vss电源地9D2DataI/O2VDD电源正极10D3DataI/O3VL液晶显示偏压信号11D4DataI/O4Rs数据/命令选择端(H/L)12D5DataI/O5R/W读/写选择端(H/L)13D6DataI/O6E使能信号14D7DataI/O7D0DataI/O15BLA背光源正极8D1DataI/O16BLK背光源负极控制器接口说明(HD44780与兼容芯片)基本操作时序a读状态:输入:Rs=L,Rw=H,E=H输出:D0—D7=状态字b写指令:输入:Rs=L,Rw=L,D0—D7=指令码输出:无E=高脉冲C读数据:输入:Rs=H,Rw=L,E=H输出:D0—D7=数据d写数据:输入:Rs=H,Rw=L,D0—D7=数据输出:无E=高脉冲状态字说明如表2.3所示:表2.3状态字说明(a)STA7D7STA6D6STA5D5STA4D4STA3D3STA2D2STA1D1STA0D0表2.4状态字说明(b)STA0--6当前数据地址指针的数值STA7读写操作使能1:禁止0:允许注:对控制器进行读写操作之前,都必须进行读写检测,确保STA7为0RAM地址映射图控制器内部带有80*8位(80字节)的RAM缓冲区,对应关系如下图2.5所示:表2.5RAM地址映射图LCD16字*2行000102030405060708090A0B0C0D0E0F10…27404142434445464748494A4B4C4D4E4F50…67指令说明初始化设置显示模式设置如表2.6所示:表2.6显示模式设置指令码功能00111000设置16*2显示,5*7点阵,8位数据接口显示开关与光标设置如表2.7所示:表2.7显示开关与光标设置指令码功能00001DCBD=1开显示;D=0关显示C=1显示光标;C=0不显示光标B=1光标闪烁;B=0光标不显示000001NSN=1当读或写一个字符后地址指针加一,且光标加一N=0当读或写一个字后地址指针减一,且光标减一S=1当写一个字符后,整屏显示左移(N=1)或右移(N=0),以得到光标不移动而屏幕移动的效果S=0当写一个字符,整屏显示不移动数据控制控制器内部没有一个数据地址指针,用户可通过它们来访问内部的全部80字节RAM。数据指针设置如表2.8所示表2.8数据指针设置(a)指令码功能80H+地址码(0—27H,40—67H)设置数据地址指针读数据:见c写数据:见d其它设置如表2.9所示表2.9数据指针设置(b)指令码功能01H显示清屏:1.数据指针清零2.所有显示清零02H显示回车:1.数据指针清零2.1.3温度传感器DS18B20温度传感器是采用美国DALLAS公司生产的DS18B20可组网数字温度传感器芯片,经焊接,外加不锈钢保护管封装而成,具有耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。①::技术性能描述

*独特的单线接口方式,DS1820在与微处理器连接时仅需要一条口线即可实现微处理器与DS1820的双向通讯,在使用中不需要任何外围元件。

*测温范围-55℃~+125℃,固有测温分辨率0.5℃。

-

*支持多点组网功能,多个DS1820可以并联在唯一的三线上,实现多点测温。

*工作电源:

3~5V/DC

*测量结果以9位数字量方式串行传送。

*不锈钢保护管直径

Φ6

*适用于1/2”,3/4”,1”,DN40~DN250各种介质工业管道和狭小空间设备测温

②:应用范围

*

该产品适用于冷冻库,粮仓,储罐,电讯机房,电力机房,电缆线槽等测温和控制领域

*

轴瓦,缸体,纺机,空调,等狭小空间工业设备测温和控制。

*

汽车空调、冰箱、冷柜、以与中低温干燥箱等。

*

供热/制冷管道热量计量,中央空调分户热能计量和工业领域测温和控制

③.DS18B20的性能特点如下:*独特的单线接口仅需要一个端口引脚进行通信;*多个DS18B20可以并联在惟一的三线上,实现多点组网功能;*无须外部器件;*可通过数据线供电,电压范围为3.0~5.5V;*零待机功耗;*温度以9或12位数字;*用户可定义报警设置;*报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;*负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作;I/OC64I/OC64位ROM单线接口高速缓存存储器与控制逻辑温度传感器高温触发器TH低温触发器TL配置寄存器8位CRC发生器Vdd图2.2DS18B20内部结构DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。DS18B20的管脚排列如图2.3所示:图2.3DS18B20温度传感器的内部存储器还包括一个高速暂存RAM和一个非易失性的可电擦除的EERAM。高速暂存RAM的结构为8字节的存储器,结构如图2.6所示。头2个字节包含测得的温度信息,第3和第4字节TH和TL的拷贝,是易失的,每次上电复位时被刷新。第5个字节,为配置寄存器,它的内容用于确定温度值的数字转换分辨率。DS18B20工作时寄存器中的分辨率转换为相应精度的温度数值。该字节各位的定义如图2.7所示。低5位一直为1,TM是工作模式位,用于设置DS18B20在工作模式还是在测试模式,DS18B20出厂时该位被设置为0,用户要去改动,R1和R0决定温度转换的精度位数,来设置分辨率。由表2.10可见,DS18B20温度转换的时间比较长,而且分辨率越高,所需要的温度数据转换时间越长。因此,在实际应用中要将分辨率和转换时间权衡考虑。表2.10DS18B20温度转换时间表R1R0分辨率/位温度最大转换时间/MS00993.750110187.510113751112750高速暂存RAM的第6、7、8字节保留未用,表现为全逻辑1。第9字节读出前面所有8字节的CRC码,可用来检验数据,从而保证通信数据的正确性。当DS18B20接收到温度转换命令后,开始启动转换。转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1、2字节。单片机可以通过单线接口读出该数据,读数据时低位在先,高位在后,数据格式以0.0625℃/LSB式表示。当符号位S=0时,表示测得的温度值为正值,可以直接将二进制位转换为十进制;当符号位S=1时,表示测得的温度值为负值,要先将补码变成原码,再计算十进制数值。表2是一部分温度值对应的二进制温度数据。DS18B20完成温度转换后,就把测得的温度值与RAM中的TH、TL字节内容作比较。若T>TH或T<TL,则将该器件内的报警标志位置位,并对主机发出的报警搜索命令做出响应。因此,可用多只DS18B20同时测量温度并进行报警搜索。在64位ROM的最高有效字节中存储有循环冗余检验码(CRC)。主机ROM的前56位来计算CRC值,并和存入DS18B20的CRC值作比较,以判断主机收到的ROM数据是否正确。另外,由于DS18B20单线通信功能是分时完成的,它有严格的时隙概念,因此读写时序很重要。系统对DS18B20的各种操作按协议进行。操作协议为:初使化DS18B20(发复位脉冲)→发ROM功能命令→发存储器操作命令→处理数据。分别说明如下:初始化单总线的所有处理均从初始化开始。初始化过程是主机通过向作为从机的DS18B20芯片发一个有时间宽度要求的初始化脉冲实现的。初始化后,才可进行读写操作。(2)ROM操作命令总线主机检测到DS18B20的存在便可以发出ROM操作命令之一这些命令表2.11:表2.11ROM操作命令指令代码ReadROM(读ROM)[33H]MatchROM(匹配ROM)[55H]SkipROM(跳过ROM][CCH]SearchROM(搜索ROM)[F0H]Alarmsearch(告警搜索)[ECH](3)存储器操作命令如表2.3:表2.12存储器操作命令指令代码WriteScratchpad(写暂存存储器)[4EH]ReadScratchpad(读暂存存储器)[BEH]CopyScratchpad(复制暂存存储器)[48H]ConvertTemperature(温度变换)[44H]RecallEPROM(重新调出)[B8H]ReadPowersupply(读电源)[B4H](4)时序主机使用时间隙(timeslots)来读写DS18B20的数据位和写命令字的位①初始化图2.4初始化时序时序见图2.7,主机总线to时刻发送一复位脉冲(最短为480us的低电平信号),接着在tl时刻释放总线并进入接收状态。DS18B20在检测到总线的上升沿之后等待15-60us,接着DS18B20在t2时刻发出存在脉冲(低电平持续60-240us)。如图中虚线所示:②写时间隙图2.5写0时序图2.6写1时序当主机总线to时刻从高拉至低电平时,就产生写时间隙见图2.8.1和图2.8.2。从to时刻开始15us之内应将所需写的位送到总线上,DSl820在to后15-60us间对总线采样。若低电平,写入的位是0。见图2.5.1。若高电平写入的位是1见图2.5.2。连续写2位间的间隙应大于1us。③读时间隙见图2.9,主机总线to时刻从高拉至低电平时,总线只须保持低电平lus。之后在t1时刻将总线拉高,产生读时间隙,读时间隙在t1时刻后t2时刻前有效,t2距to为15us。也就是说t2时刻前主机必须完成读位,并在to后的60us一120us内释放总线,读位子程序(读得的位到C中)。图2.7读时序DSl820多路测量简介初始化初始化跳过ROM变换温度等待1S初始化设置1820个数匹配ROM读存储器存放在缓冲区指针增1初始化b-1=0?否是图2.8DSl820原理框图每一片DSl820在其ROM中都存有其唯一的48位序列号,出厂前已写入片内ROM中,主机在进入操作程序前必须逐一接入DS18B20用读ROM(33H)命令将该DS18B20的序列号读出并登录。当主机需要对众多在线DS18B20的某一个进行操作时,首先要发出匹配ROM命令(55H),紧接着主机提供64位序列(包括该DS18B20的48位序列号)。之后的操作就是针对该DS18B20的。而所谓跳过ROM命令即:MOVA,#0CCH。图2.10中先有跳过ROM,即是启动所有DS18B20进行温度变换,之后通过匹配ROM再逐一地读回每个DS18B20的温度数据。在DS18B20组成的测温系统中,主机在发出跳过ROM命令之后,再发出统一的温度转换启动码44H,就可以实现所有DS18B20的统一转换,再经过1s后,就可以用很少的时间去逐一读取。这种方式使其T值往往小于传统方式。(由于采取公用的放大电路和A/D转换器只能逐一转换)。显然通道数越多,这种省时效应就越明显。DS1820使用中注意事项DS1820虽然具有测温系统简单、测温精度高、连接方便、占用口线少等优点,但在实际应用中也应注意以下几方面的问题:(1)较小的硬件开销需要相对复杂的软件进行补偿,由于DS1820与微处理器间采用串行数据传送,因此,在对DS1820进行读写编程时,必须严格的保证读写时序,否则将无法读取测温结果。在使用PL/M、C等高级语言进行系统程序设计时,对DS1820操作部分最好采用汇编语言实现。(2)在DS1820的有关资料中均未提与单总线上所挂DS1820数量问题,容易使人误认为可以挂任意多个DS1820,在实际应用中并非如此。当单总线上所挂DS1820超过8个时,就需要解决微处理器的总线驱动问题,这一点在进行多点测温系统设计时要加以注意。(3)连接DS1820的总线电缆是有长度限制的。试验中,当采用普通信号电缆传输长度超过50m时,读取的测温数据将发生错误。当将总线电缆改为双绞线带屏蔽电缆时,正常通讯距离可达150m,当采用每米绞合次数更多的双绞线带屏蔽电缆时,正常通讯距离进一步加长。这种情况主要是由总线分布电容使信号波形产生畸变造成的。因此,在用DS1820进行长距离测温系统设计时要充分考虑总线分布电容和阻抗匹配问题。(4)在DS1820测温程序设计中,向DS1820发出温度转换命令后,程序总要等待DS1820的返回信号,一旦某个DS1820接触不好或断线,当程序读该DS1820时,将没有返回信号,程序进入死循环。这一点在进行DS1820硬件连接和软件设计时也要给予一定的重视。测温电缆线建议采用屏蔽4芯双绞线,其中一对线接地线与信号线,另一组接VCC和地线,屏蔽层在源端单点接地。2.1.4稳压电源78057805管脚图如图2.11所示:图2.9图2.92.2各部分电路说明2.2.1单片机控制部分在本设计中,采用了AT89C51单片机作为本电路的核心电路的设计。AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。(1)振荡器特性:XTAL1和XTAL2的反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。(2)单片机芯片的擦除:整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms来完成。在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。AT89C52的稳态逻辑可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。在闲置模式下,CPU停止工作。但RAM,定时器,计数器,串口和中断系统仍在工作。在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。(3)单片机的时钟电路图2.10片内振荡电路的时钟电路AT89C1单片机内部的振荡电路是一个高增益反向放大器,引线XTAL1和XTAL2分别是放大器的输入端和输出端。单片机内部虽然有振荡电路,但要形成时钟,外部还需附加电路。AT89C51的时钟产生方式有两种:内部时钟电方式和外部时钟方式。由于外部时钟方式用于多片单片机组成的系统中,所以此处选用内部时钟方式。即利用其内部的振荡电路在XTAL1和XTAL2引线上外接定时元件,内部振荡电路产生自激振荡。最常用的是在XTAL1和XTAL2之间接晶体振荡器与电路构成稳定的自激振荡器,如图2.13电路所示为单片机最常用的时钟振荡电路的接法,其中晶振可选用振荡频率为6MHz的石英晶体,电容器一般选择30PF左右。(4)单片机的复位电路图2.11AT89C51的复位电路图2.11AT89C51的复位电路本设计中AT89C51是采用上电自动复位和按键复位两种方式。最简单的复位电路如图2.13所示。上电瞬间,RC电路充电,RST引线端出现正脉冲,只要RST端保持10ms以上的高电平,就能使单片机有效地复位。其中R1和R2分别选择200Ω和1KΩ的电阻,电容器一般选择22μF。(5)AT89C51的最小应用系统AT89C51是片内有程序存储器的单片机,要构成最小应用系统时只要将单片机接上外部的晶体或时钟电路和复位电路即可,如图2.14所示。这样构成的最小系统简单可靠,其特点是没有外部扩展,有可供用户使用的大量的I∕O线。图2.12AT89C51单片机构成的最小系2.2.2传感器数据采集电路传感器数据采集电路主要指DS18B20温度传感器与单片机的接口电路。DS18B20可以采用两种方式供电,一种是采用电源供电方式,如图2.15所示,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源。另一种是寄生电源供电方式,如图2.15所示单片机端口接单线总线,为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个MOSFET管来完成对总线的上拉。当DS18B20处于写存储器操作和温度A/D转换操作时,总线上必须有强的上拉,上拉开启时间最大为10us。采用寄生电源供电方式时VDD端接地。由于单线制只有一根线,因此发送接口必须是三态的。考虑到实际应用中寄生电源供电方式适应能力差且易损坏,此处采用电源供电方式,I/O口接单片机的P2.0口。图2.13电源供电方式2.2.3显示电路显示电路是采用P0口输出LCD的数据口,P2.0、P2.1、P2.2分别是液晶的使能端、读写控制端、指令和数据选择端如图2.16所示:还带有背光控制电路,当持续很久没有操做时,液晶就会自动关闭背光。达到节能的目的。图2.14显示电路2.2.4输入电路 可以设置需要恒温的温度,和需要设定的温度进行加温。图2.15按键输入2.2.5报警电路当温度加热到所设定的温度时,蜂鸣器就提醒。图2.16蜂鸣器2.2.6指示灯电路 用3盏灯(黄、红、绿),分别表示正在加热、加热已完成、正在保温。图2.17指示灯第三章软件设计系统程序主要包括主程序,读出温度子程序,温度转换命令子程序,计算温度子程序,显示数据刷新子程序,设置温度等。3.1主程序主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值,其程序流程见图3.1所示。开始开始设置恒温温度红灯指示灯亮蜂鸣器提示调用存储器中上次使用的温度黄灯指示灯亮显示当前温度系统初始化判断是否有按键按下判断温度是否达到设定温度程序结束否是否是图3.1系统总流程图当系统上电之后,系统会初始化,在2分之内还没有设置恒温温度,系统会自动从存储器里调用上次设置的温度。这样就不会每次在烧水的时候要设置温度了,烧水启动后在通过闭环的方式进行控制(PID算法),当水温到达所设定的温度时,指示灯和蜂鸣器都有提示告诉用户水以烧好,在一分钟之后,用户还没有用水,系统就会进入恒温状态。3.2读出温度子程序读出温度子程序的主要功能是读出RAM中的9字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写。其程序流程图如图3.2所示发DS18B20复位命令发DS18B20复位命令发跳过ROM命令发读取温度命令读取操作,CRC校验9字节完?CRC校验正?确?移入温度暂存器结束NNYY图3.2读出温度子程序流程3.3温度转换命令子程序温度转换命令子程序主要是发温度转换开始命令,当采用12位分辨率时转换时间约为750ms,在本程序设计中采用1s显示程序延时法等待转换的完成。温度转换命令子程序流程图,如图3.3所示发DS18B20复位命令发DS18B20复位命令发跳过ROM命令发温度转换开始命令结束图3.3温度转换流程图3.4温度控制子程序处理器根据设定的温度进行控制,其程序流程图如图3.4所示。是否小于设定温度是否小于设定温度开始结束全速加温恒温LED指示否PID算法控制显示温度是图3.4计算温度流程图3.5键盘扫描子函数设置需要恒温的温度,设置温度之后需要按下“#”来确定,支持退格和清除功能。开始判断是否有按键按下按键编码处理任务结束开始判断是否有按键按下按键编码处理任务结束不做任何处理否是图3.5按键程序流程图第四章实物制作与调试说明4.1原材料的选择与采购本次设计在原材料的选择与采购上做到了设计最优化,即用最小的开支,获得性价比较高的元器件和材料。设计中,印刷电路板采用单面板,给人看起来没有太复杂的感觉。选元器件时,尽量选择能使电路简化的器件。例如,为了不增大电路板的体积与减小功耗,本设计采用ATMEL公司的89S52单片机,体积小,工作电压低。4.2印刷电路板的设计与制作电路板的设计与制作是整个电路制作过程中比较重要的一步,如果电路板做不好,再好的电路设计也不行。下面就对简单电路板的设计与制作过程做一个简单的介绍。1、利用DXP2004画原理图。在画原理图的时候为了电路板比较好看,要注意布局,同时还得注意元件封装,命名等。画好原理图后要对其进行电气检测,检查原理图是否有错,同时还要创建网络表为下一步的工作做好准备。2、PCB版图的设计。在对PCB图设计时首先要添加封装库,这样原理图中给予的封装才能有效,然后调入网络表看原理图的封装,命名等是否有错,如果没错便可进行下一步操作。对其进行布线,首先先对布线规则作一些必要的设置,如焊盘的大小,导线的粗细等。做好这些设置后便可进行自动布线,自动布线后如果布线不是很理想还可用手动布线进行手动修改,这样PCB图就画好了。3、电路板的制作。把设计布局好的PCB图打印出来之后,然后进行压板、腐蚀、钻孔。注意,腐蚀之前要检查是否有断线与焊盘的脱落等。4、元件的焊接。元件焊接的时候要先查看跳线,首先焊接所有的跳线,其次再焊接分离元件,最后焊接集成块和外接的引线。当然为了美观在布线中最好不要出现跳线。5、整体检查。查看是否有断线和虚焊等。6、烧录程序4.3单片机测试判断单片机芯片与时钟系统是否正常工作有一个简单的办法,就是用万用表测量单片机晶振引脚(18、19脚)的对地电压,以正常工作的单片机用数字万用表测量为例:18脚对地约2.24V,19脚对地约2.09V。对于怀疑是复位电路故障而不能正常工作的单片机也可以采用模拟复位的方法来判断,单片机正常工作时第9脚对地电压为零,可以用导线短时间和+5V连接一下,模拟一下上电复位,如果单片机能正常工作了,说明这个复位电路有问题。4.4硬件与软件调试硬件调试,第一步是目测,在印好电路板之后,先检查印制线是否有断线、是否有毛刺、是否与其它线或焊盘粘连、焊盘是否有脱落、过孔是否有未金属化现象。而在目测的过程中,我们发现有一条印制线断开,因此我们用焊锡使这条断线连在一起。第二步是用万用表测量。在目测完之后,利用万用表来测量连线和接点,检查它们的通断状态是否和设计一样。再检查各种电源线和地线是否有短路现象,在检查的过程中,发现不管是连线还是接点都符合设计规定,电源和地线也没有短路现象。第三步是加电检查。给印制板加电时,我们检查到的器件的电源端符合要求的电压值+5V,同时接地端的电压为0。第四步是联机检查。利用系统和单片机开发系统用仿真电缆连接起来,发现联机检查完后以上是连接都正确、畅通、可靠。软件调试,第一步是在具有汇编软件的主机上和用户系统连接起来,进行调试准备。第二步是单步运行。第三步是系统连调,即进行软件和硬件联合调试。经调试,软件运行良好。4.5整机的调试与测试首先是测试显示电路的正确性,根据硬件写好一段显示程序,写入单片机中。安装好硬件,上电,显示正常,达到预期效果。证明显示电路正常。按下复位按键,LCD无显示,松开,显示正常,证明复位电路正常。然后测试得到温度程序,将初始化程序,DS18B20正常工作的初始化程序、写DS18B20程序、读DS18B20程序,得到温度子程序,温度转换子程序,数据转换子程序,显示子程序正确编排后写入单片机中,上电,显示不正常。重新读取源程序,经检查后发现问题在于DS18B20初始化程序有错,修改后重新编译并写入单片机。上电后,显示当前温度。证明温度传感器DS18B20工作正常,各部分子程序运行正常。最后是按键子程序与报警子程序的调试,将按键子程序与报警子程序与上述程序正确编排后,写入单片机中,上电后,各个部分工作正常,在测得当前温度超出设定温度上下限后,蜂鸣器发出报警声,调试基本成功。但后来发现,按键要在按下1S后才反应,再次研读程序发现原因在于按键程序采用扫描方式,程序每执行一遍才扫描按键一次。进而到考虑采用中断方式解决此问题,但因为DS18B20正常工作有严格的时序限制,否则不能正常工作,而中断则在很大可能上会影响到DS18B20正常工作。在尝试并采用中断方式却失败后,决定仍采用扫描方式。后来仔细排查发现按键反应迟缓是由于显示程序占用时间过长造成的,修改显示程序并且在主程序和按键子程序中增加调用显示程序的次数,问题得以解决。至此,此次设计的调试部分完成。设计的所有功能全部得以实现。使用说明书本电路额定工作直流电压为+5V,有极性判别保护功能,采用7805集成稳压芯片以保证电路的供电稳定,用户输入电源在7-25V均可正常工作。系统初始化之后,用户可以通过输入“*”键之后3盏LED闪烁表示要重新设置温度,然用户就可以通过数字键盘输入想要恒温的温度,当输入的时候入错了,则可以通过“-”键来删除,温度设置完之后按“#”来确认,同时将这个数存入到存储器中。LED只是灯分别指示不同的含义绿灯:表示处于保温状态。红灯:加热完成。黄灯:正在加热。致谢大学三年的学习和生活就要随着这篇论文的答辩而结束了。有许许多多的舍不得,也有许许多多的感谢要说。首先要衷心感谢的是我的指导教师程老师!在我学习期间不仅指导了我当论文设计,还传授了做学问的秘诀。这些都将使我终生受益。无论是在理论学习阶段,还是在论文的选题、资料查询、开题、研究和撰写的每一个环节,无不得到导师的悉心指导和帮助。我想借此机会向导师表示衷心的感谢!其次要感谢所有教育过我的老师!你们传授给我的专业知识是我不断成长的源泉,也是完成本论文的基础。我还要向关心和支持我学习的朋友们表示真挚的谢意!感谢他们对我的关心、关注和支持!大学的生活让我有了坚强的性格,冷静的头脑和永远乐观的态度。最重要的是让我有了责任感,对自己、对家人和对社会。我愿在未来的学习过程中,以更加丰厚的成果来答谢曾经关心、帮助和支持过我的所有领导、老师、同学和朋友。永远以一颗为人民服务的心来回报。参考文献[1]陈权昌,李兴富·单片机原理与应用·华南理工大学出版社,2007年[2]陈明.DXP2004原理图与PCB设计教程.北京:机械工业出版社,2006[3]阎石.数字电子技术基础(第四版).北京:高等教育出版社,1997[4]王恩荣.MCS-51单片机应用技术.北京:化学工业出版社,2001[5]黄河.郭纪林.单片机原理与应用.大连:大连理工大学出版社,2006[6]周贵连.电子技术基础.机械工业出版社,2005[7]孙萍·电子技术专业英语·机械工业出版社,2001年6月[8]李广弟.单片机基础.北京:北京航空航天大学出版社,1994[9]阎石.数字电子技术基础.北京:高等教育出版社,1989[10]栾桂冬·传感器与其应用·西安电子科技大学出版社,2003[11]周荷琴,吴秀清,微型计算机原理与接口技术。合肥,中国科学技术大学出版社,2004.[12]范立南,谢子殿.单片机原理与应用教程.北京大学出版社,2006.[13]沈德金.MCS-51系列单片机接口电路与应用程序实例.:北京航空航天大学.2005.[14]潘松,赵敏笑·EDA技术与其应用·科学出版社,2007年[15]丁元杰,单片机原理与应用,机械工业出版社,1999年附件1:电路原理图附件2:程序清单程序分.h和.c文件@@文件名:main.c@@时间:2012年2月22日@@作者:@@叙述://**************************include*******************************#include<intrins.h>#include"main.h"#include"delay.h"#include"lcd1602.h"#include"ds18b20.h"#include"iic.h"#include"key.h" #defineCOMFRIM88 //#键#defineWENTIAO44 //*键#defineCLEAR 22#defineERROR111//***************************变量定义**************************charbai,shi,ge,qian,KK=0;//定义变量ucharwenshi,wenge;inttemp=80,HIGT;ucharnum;/******************************port****************************/sbitled1=P2^2;sbitled2=P2^3;sbitled3=P2^4;sbitctrl=P3^0;--函数名:timerinit--函数功能:定时器初始化--入口参数:无--出口参数:无--全局变量:无--局部变量:无--调用情况:--备注:voidtimeinit() EA=1;//开总中断 ET0=1;//开定时中断 TR0=1;//启动定时器 TH0=(65535-50000)/256; TL0=(65535-50000)%256;--函数名:wen_init--函数功能:初始化温度--入口参数:无--出口参数:无--全局变量:无--局部变量:无--调用情况:--备注:voidwen_init() ucharshi,ge; write(0,9); delay1(100); write(1,0); delay1(100); shi=read(0); delay1(100); ge=read(1); HIGT=shi*10+ge;iic_xs(5,HIGT); //显示设置温度--函数名:wendu_set--函数功能:设置温度控制--入口参数:无--出口参数:无--全局变量:无--局部变量:无--调用情况:--备注:voidwendu_set(ucharhh,ucharorder) switch(order) case2: write(0,hh); iic_xs(5,hh);wenshi=hh*10; delay1(100); break; case3: write(1,hh); wenge=hh; delay1(100); break; if(order==3) led1=0; HIGT=wenshi+wenge; iic_xs(5,HIGT); //显示设置温度--函数名:main--函数功能:主函数--入口参数:无--出口参数:无--全局变量:无--局部变量:无--调用情况:--备注:voidmain() bitqq=0; ucharhh=0,order=0; lcd1602_init(); initiic(); timeinit(); //定时器初始化wen_init(); //系统上电时设置的初始温度 while(1) temp=ReadTemperature(); //读温度 qian=temp/1000; bai=temp%1000/100; //显示百位 shi=temp%100/10; //显示十位 ge=temp%10; //显示个位 write_sx(qian,bai,shi,ge); //显示函数 hh=bianma(); if(hh==88) //按下确认键 KK=0; write_com(0x80+0x40); write_dat(0x20); //清楚指定位置的显示 if(hh==CLEAR) order=0; iic_xs(5,0); if(hh==WENTIAO) num++; KK=1; if(num==2) KK =0; order=0; write_com(0x80+0x40); write_dat(0x20);/****************************开始温度设置***************************/ if(KK==1) qq=~qq; if(qq==0) write_com(0x80+0x40); write_dat(0xf8); //显示设置字符 else write_com(0x80+0x40); write_dat(0x20); //清楚指定位置的显示 if(hh!=ERROR) order++; wendu_set(hh,order); /*****************************定时器中断*****************************/voidtimer0()interrupt1 TH0=(65535-5000)/256; TL0=(65535-5000)%256; if(temp>HIGT) led1=0; //指示灯报警温度过高 led2=1; led3=1; ctrl=0; //停止加热 if(temp<HIGT) led1=1; led2=0; //温度过低 led3=1; ctrl=1; //启动加热 if((temp<=99)&&(temp>50))led3=0;//正常//********************************endflie*****************************@@文件名:ds18b20.c@@时间:2012年2月22日@@作者:@@叙述:/**************************文件包含*****************************/#include"main.h"#include"ds18b20.h"#include"delay.h"--函数名:Init_DS18B20--函数功能:ds18b20初始化--入口参数:无--出口参数:无--全局变量:无--局部变量:无--调用情况:--备注:voidInit_DS18B20(void) //传感器初始化 ucharx=0; DATA=1;//DQ复位 delay(1);//稍做延时 DATA=0;//单片机将DQ拉低 delay(80);//精确延时大于480us//450 DATA=1;//拉高总线 delay(10); x=DATA;//稍做延时后如果x=0则初始化成功x=1则初始化失败 delay(30);--函数名:ReadOneChar--函数功能:ds18b20读函数--入口参数:无--出口参数:无--全局变量:无--局部变量:无--调用情况:--备注:intReadOneChar(void) uchari=0; uchardat=0; for(i=8;i>0;i--) DATA=0;//给脉冲信号 dat>>=1; DATA=1;//给脉冲信号 if(DATA) dat|=0x80; delay(10); return(dat);--函数名:WriteOneChar--函数功能:ds18b20写函数--入口参数:dat--出口参数:无--全局变量:无--局部变量:无--调用情况:--备注:voidWriteOneChar(unsignedchardat) uchari=0; for(i=8;i>0;i--) DATA=0; DATA=dat&0x01; delay(10); DATA=1; dat>>=1; delay(8);--函数名:ReadTemperature--函数功能:ds18b20读取温度--入口参数:无--出口参数:t--全局变量:无--局部变量:无--调用情况:--备注:intReadTemperature(void) uchara=0; ucharb=0; intt=0; floattt=0; Init_DS18B20(); WriteOneChar(0xCC);//跳过读序号列号的操作 WriteOneChar(0x44);//启动温度转换 Init_DS18B20(); WriteOneChar(0xCC);//跳过读序号列号的操作 WriteOneChar(0xBE);//读取温度寄存器等(共可读9个寄存器)前两个就是温度 a=ReadOneChar();//低位 b=ReadOneChar();//高位 t=b; t<<=8; t=t|a; tt=t*0.0625; t=tt*10+0.5; return(t);@@文件名:lcd1602.c@@时间:2012年2月22日@@作者:@@叙述:#include"main.h"#include"lcd1602.h"#include"delay.h"voidwendu();--函数名:write_com--函数功能:lcd1602写入--入口参数:com--出口参数:无--全局变量:无--局部变量:无--调用情况:--备注:voidwrite_com(ucharcom) rs=0; e=0; P0=com; e=1; delay1(5); e=0; delay1(2);--函数名:write_dat--函数功能:lcd1602读--入口参数:com--出口参数:无--全局变量:无--局部变量:无--调用情况:--备注:voidwrite_dat(uchardate) rs=1; e=0; P0=date; e=1; delay1(5); e=0; delay1(2);--函数名:write_dat--函数功能:lcd1602初始化--入口参数:无--出口参数:无--全局变量:无--局部变量:无--调用情况:--备注:voidlcd1602_init(void)write_com(0x38);write_com(0x0c);write_com(0x04);write_com(0x01); wendu();--函数名:write_sx--函数功能:液晶显示--入口参数:无--出口参数:无--全局变量:无--局部变量:无--调用情况:--备注:voidwrite_sx(ucharqian,ucharbai,ucharshi,ucharge) write_com(0x80+0x45); write_dat(0x30+qian); write_dat(0x30+bai); write_dat(0x30+shi); write_dat(0x2e); write_dat(0x30+ge); write_dat(0xdf); write_dat(0x43); --函数名:iic_xs--函数功能:--入口参数:无--出口参数:无--全局变量:无--局部变量:无--调用情况:--备注:voidiic_xs(ucharadress,uchardate) write_com(0x80+adress); write_dat(0x30+date/10); write_dat(0x30+date%10); write_dat(0xdf); write_dat('C'); --函数名:wendu--函数功能:上限温度和下限温度--入口参数:无--出口参数:无--全局变量:无--局部变量:无--调用情况:--备注:voidwendu()write_com(0x81);write_dat('-');write_com(0x89); write_dat('+');@@文件名:delayiic.c@@时间:2012年2月22日@@作者:@@叙述:#include"main.h"--函数名:delayiic--函数功能:延时--入口参数:无--出口参数:无--全局变量:无--局部变量:无--调用情况:--备注:voiddelayiic()--函数名:delay--函数功能:延时--入口参数:无--出口参数:无--全局变量:无--局部变量:无--调用情况:--备注:/*延时子函数*/voiddelay(uintnum) while(num--);--函数名:delay1--函数功能:延时--入口参数:z--出口参数:无--全局变量:无--局部变量:x、y--调用情况:--备注:voiddelay1(ucharz) ucharx,y; for(x=z;x>0;x--) for(y=110;y>0;y--);//endfile@@文件名:iic.c@@时间 :2012年2月22日@@作者:@@叙述://***************************include****************************#include"main.h"#include"iic.h"#include"delay.h"//****************************24c02****************************--函数名:initiic--函数功能:IIC引脚初始化--入口参数:无--出口参数:无--全局变量:无--局部变量:无--调用情况:--备注:voidinitiic() scl=1; delayiic(); sda=1; delayiic();--函数名:start--函数功能:IIC开始信号--入口参数:无--出口参数:无--全局变量:无--局部变量:无--调用情况:--备注:voidstart() sda=1; scl=1; delayiic(); sda=0; delayiic();--函数名:stop--函数功能:IIC停止信号--入口参数:无--出口参数:无--全局变量:无--局部变量:无--调用情况:--备注:voidstop() sda=0; delayiic(); scl=1; delayiic(); sda=1; delayiic();--函数名:ask--函数功能:IIC应答信号--入口参数:无--出口参数:无--全局变量:无--局部变量:无--调用情况:--备注:voidask() scl=1; sda=0; delayiic(); scl=0;--函数名:writeiic--函数功能:IIC写一个字节函数--入口参数:address--出口参数:无--全局变量:无--局部变量:无--调用情况:--备注:voidwriteiic(ucharaddress) uchartemp,i; temp=address; for(i=0;i<8;i++) temp=temp<<1; scl=0; delayiic(); sda=CY; delayiic(); scl=1; delayiic(); scl=0; delayiic(); sda=1; delayiic(); --函数名:readiic--函数功能:IIC读一个字节函数--入口参数:无--出口参数:k--全局变量:无--局部变量:无--调用情况:--备注:ucharreadiic() ucharj,k; scl=0; delayiic(); sda=1; delayiic(); for(j=0;j<8;j++) scl=1; delayiic(); k=(k<<1)|sda; scl=0; delayiic(); returnk; --函数名:write--函数功能:IIC写数据--入口参数:address、date--出口参数:无--全局变量:无--局部变量:无--调用情况:--备注:voidwrite(ucharaddrss,uchardate) start(); writeiic(0xa0); ask(); writeiic(addrss); ask(); writeiic(date); ask(); stop(); --函数名:read--函数功能:IIC读数据--入口参数:无--出口参数:shuju--全局变量:无--局部变量:无--调用情况:--备注:ucharread(ucharaddrss) ucharshuju; start(); writeiic(0xa0); ask(); writeiic(addrss); ask(); start(); writeiic(0xa1); ask(); shuju=readiic(); ask(); stop(); returnshuju;//endfile@@文件名:key.c@@时间:2012年4月22日@@作者:@@叙述:#include"main.h"#include"delay.h"#include

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论