《基于单片机的水质监测系统的设计(共32页).doc》由会员分享,可在线阅读,更多相关《基于单片机的水质监测系统的设计(共32页).doc(32页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上基于单片机的水质监测系统的设计作 者薛松林指导教师张仲义摘要:现在水源污染已经成了社会密切关注的话题,所以对水质进行监测成了保护水资源的一项重要措施,基于此本文设计了一款能够有效监测水质的系统。对于水质的监测主要是监测水中自由离子浓度和水的浑浊度。设计的方案是基于单AT89C51单片机,对水源进行采集,再通过传感器对采集到的水源进行处理产生模拟信号,之后再通过模拟信号转变成数字信号转换器(A/D转换器),转变之后的信号传送给单片机,单片机接收到信号之后进行处理后再显示模块进行显示。通过本设计可以有效地得出水中浑浊度、自由离子浓度,从而判断水的污染情况!在本设计中,系统
2、地介绍了水质监测的原理、硬件的结构、工作原理及其使用和各部分功能电路的设计。关键词:水质监测、AT89C51单片机、数据采集、A/D转换、水中自由离子浓度、浑浊度、传感器Water quality monitoring system based on single chip design abstract: now water pollution has become a social topic closely, so the water quality monitoring has become an important measures to protect water, I desig
3、ned a model based on effective monitoring of water quality system. Monitoring for water quality monitoring is mainly free ion concentration in water and the turbidity of water. Design scheme is based on single AT89C51, the acquisition of water and water supply were collected by sensors to produce an
4、alog signal processing, and then through the analog signal into digital signal converter (A/D converter), after the change of signal is transmitted to MCU, MCU receives the signal after processed before display module display. Through this design can effectively draw the water turbidity, free ion co
5、ncentration, to judge the water pollution situation! In this design, systematically introduces the principle of water quality monitoring, the hardware structure, working principle and its usage and function circuit design of each partKeywords: water quality monitoring, AT89C51 single chip microcompu
6、ter, data acquisition, A/D conversion, free ion concentration in water, turbidity, sensors专心-专注-专业目录1.绪论1.1 我国水质监测背景 中国水资源的分布极其不均匀 ,水土流失矿山污水导致人类周围的水环境污染日趋严重,严重制约了经济的发展和危害着人类的健康。严峻的水形势提高了人们对水污染控制的重视,对废水的处理和检测成为了维护良好人民生活环境所必不可少的要求,废水中是否有对环境产生重大影响的元素和他们的含量是否在标准以内直接关系到本设计的生存环境。水是人类生产和生活中必不可少的资源,可是现在,生态环
7、境遭到了人类严重的破坏,水资源持续污染,保护水资源和水污染治理成为当代社会最为关注的问题。污染负荷急剧增加,加重了水体的污染,所以水资源也更加短缺了。工业废水近年来虽然经过治理有所减少,但城市生活污水有增无减,占水质污染的55%以上。水是生命之本,是人类赖以生存必不可少的物质资源之一,水也是为人体获得各种营养物质的重要途径之一。随着科技的发展,水污染越来越严重。对水资源的保护成为一项重要的工程。水质检测是对水资源保护的重要指标。水质检测越来越受到人们的关注。因此本次设计本设计选择水质检测系统。其中饮水安全则是影响人体健康和国计民生的重大问题。饮用水主要考虑对人体健康的影响,其水质标准除有物理指
8、标、化学指标外,还有微生物指标;对工业用水则考虑是否影响产品质量或易于损害容器及管道。近年来,由于国际上一些地区和国家频繁发生恶性事件,饮水安全和卫生问题引起了全球的关注,饮水安全已成为全球性的重大战略性问题。所以水资源的保护成了我国重中之重的一个问题,水土流失矿山污水导致人类周围的水环境污染日趋严重,严重制约了经济的发展和危害着人类的健康。严峻的水形势提高了人们对水污染控制的重视,对废水的处理和检测成为了维护良好人民生活环境所必不可少的要求,废水中是否有对环境产生重大影响的元素和他们的含量是否在标准以内直接关系到本设计的生存环境,做好水质监测是本设计这次课程设计的目标。 1.2 国内水质监测
9、技术的现状许多年以来我国的环境监理工作一直采用传统的环境水质监测工作主要以人工现场采样、实验室仪器分析为主。我国环境水质监测仪器以往主要依赖进口,从2000年开始,成熟的国产化设备才开始在全国范围内大规模推广。水质监测现状揭示了我国水污染的严重程度和水质监测的建设的落后。因此,治理水污染,必须先做好水质监测。近年,水质自动监测技术在许多国家地表水监测中得到了广泛的应用,我国的水质自动监测站的建设也取得了较大的进展。但是,还没有可普遍应用于基层水环境在线监测与数据远程传输、处理的水质监测完备平台在国内产出。并且,近年发展起来的各式数据传输网络,大多数是上下环境监测部门之间的数据传输,基于基层水质
10、的实时采集监测与水质分析系统环节还很薄弱。1.3 水质监测的意义第一,了解污水水质,为污水处理技术方案提供依据。因为描述定义一种污水,主要就是从其常规水质指标角度来说的,常规水质指标包含了污水的基本特征和信息。能被选为常规指标,都有其重要性和意义(或者环境方面有要求,或者在处理工艺方面很重要,或者国家有相关排放规定等)。污水的水质特征决定了它适合采用什么处理方法,常规指标提供了最基本和重要的依据。 第二,为水处理工艺运行提供参考。以生物法处理废水为例,各个工艺单元都对进水水质有相关要求,出水水质也要达到设计效果,所以就要在各个工艺节点对污水水质进行检测,并以此判断运行是否正常,如果异常,也可以
11、从水质指标做出预判。总的来说,常规水质监测是用来反映水质基本特征的。为行政的、经济的、技术的表征污水提供量化指标。另外通过对水质监测系统的研究,可以对监测和测控有一个更深入的了解,尤其是在电子测控方便,应用到电子测试的一些基本知识,配合对单片机的研究,可以对自己在监测和测控方面进行很大的提升,而且在当今时代,监测和测控的技术逐渐的仪表化,通过这次的研究可以做出比较精确的仪表。另外,研究如何将传感器与外围电路配合,将感应的模拟信号转变成数字信号也是非常重要的,这样对传感器和模数转换器的应用也会得到认识上的提升,另外就是单片机的学习,尤为的重要,可以丰富自己的设计能力和单片机程序语言的设计能力。1
12、.4 水质监测的监测指标水质检测是指对水样的各项指标进行测试,可以根据这些指标对水质进行分类,对水体质量进行判断和综合评价。其检测内容可以是pH值、各种溶于水的自由离子(比如氨氮、氯离子、高锰酸根离子、硝酸根离子、磷离子、氟化物和氰化物等)、细菌总数及矿化度等。使用电子设备进行水质检测,主要是利用各类传感器,对水中的参数进行检测。其检测内容可以为浑浊度,电导率,温度等。依据我国地下水水质现状、人体健康基准值及地下水质量保护目标,并参照了生活饮用水、工业、农业用水水质最高要求,将地下水质量划分为五类:类 主要反映地下水化学组分的天然低背景含量。适用于各种用途。类 主要反映地下水化学组分的天然背景
13、含量。适用于各种用途。类 以人体健康基准值为依据。主要适用于集中式生活饮用水水源及工、农业用水。类 以农业和工业用水要求为依据。除适用于农业和部分工业用水外,适当处理后可作生活饮用水。类 不宜饮用,其他用水可根据使用目的选用。表1.1 我国水质标准分类表类别氯化物(mg/L)50150250350350硫酸盐(mg/L)50150250350350硝酸盐(mg/L)2.05.0203030浑浊度(mg/L)5.01020100100溶解性总固体(mg/L)3005001000200020002水质监测的方法和原理2.1 水中自由离子浓度与水的导电率的相互关系纯水本身可微弱地介离,使水具有微弱的
14、导电能力。水中含有各种自由离子使水溶液具有更强的导电性。水质越纯,温度越低,电离度越低。因此水的导电率越低。超纯水几乎不能导电1。由于不同水中所含有的自由离子的含量不同所以水的导电能力不同,本设计通过检测不同水质下水中的电阻,从而得出其电导,判断水质是否纯净。溶液导电能力以电阻值来表示,导电能力强电阻值小。纯水导电性微弱。电阻率P的物理意义是1cm,截面为1cm2均匀导电体的电阻值(即1cm,水或水溶液的电阻值),并称之为水的“电阻率”或“比导电”。电阻率的单位为欧姆厘米(cm)。电阻率(P的倒数称为电导率(x)(单位为记作欧姆-1厘米-1)2。表2.1 某质量分数各水样的相对电导率范围序列测
15、量内容相对电导率变化范围1自来水-0.002-0.0022加入8mg硫酸亚铁-0.176-0.5673加入4mg硫酸亚铁-0.063-0.2524加入4mg氯化钾-0.509-0.8365加入2mg氯化钾-0.406-0.5316加入1mg氯化钾-0.048-0.2017加入2mg磷酸三钠-0.061-0.1958生活污水-0.283-0.2759某电气公司处理前水样-0.500-0.62210某电气公司处理后水样-0.478-0.41211加入汽油的水样-0.448-1.10412加入煤油的水样-0.620-0.8202.2 水的浑浊度的监测原理当液体浊度增加时,由于液体阻碍增强,光的通过率
16、低,光敏电阻器接受光线弱。当液体浊度下降时,光敏电阻器接受光线强,利用这一原理,通过浊度传感器采集数据,可以有效地监测水中浑浊度。3水质监测系统的硬件设计以单片机为主要控制器件,主要包括硬件电路的设计和系统程序的设计。硬件电路主要包括传感器的选取,单片机的选取与应用,A/D转换的选用,电源设计,显示部分设计等;软件设计主要包括主程序设计和子程序设计,监测结果通过显示模块显示。 图2.1是系统的框图,本系统是基于单片机技术的水质监测系统,传感器采集目标对象的信息,将信息送到A/D的模拟通道中,由单片机通过程序将经过A/D模数转换后的信息读到自己内部的寄存器中,单片机通过自己内部的ROM中的程序,
17、将输入的信息处理,然后将得到的信息通过显示装置显示出来。 图3.1是单片机控制系统原理图 3.1 单片机的选择3.1.1单片机介绍单片机也被称为微控制器,它在很多智能控制系统都有广泛的应用。单片机是电脑CPU的小型化。最早的设计理念是通过将大量外围设备和CPU集成在一个芯片中,使计算机系统更小,更容易集成进复杂的而对体积要求严格的控制设备当中。本系统以单片机为系统核心,从单片机发展与应用情况分析,虽然嵌入式技术日臻成熟,但8位单片机仍然是单片机应用场合的宠儿,以MCS-51单片机应用最为广泛,考虑到本系统设计的成本和实用性等多方因素,遂选择同是ATEML公司生产的AT89C51单片机作为系统M
18、CU。本设计以这一代表性的机型进行系统的讲解。AT89C51是一种低功耗、高性能的8位微控制器,具有8K的flash存储器。与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程。AT89C51单片机具有以下标准功能:8KByte Flash,256 Byte RAM,32位I/O口,看门狗定时器,2个数据指针,三个16位定时计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路3。 DIP40封装 PLCC贴片封装图3.2 AT89C51引脚图AT89C51引脚功能描述VCC:电源端GND:接地端:P0口:P0口是一个8位漏极开路的双向I/O接口。当它用作
19、输出口时,每位能驱动8个TTL逻辑电平。对P0口写1时,引脚用作高阻抗输入。当访问数据存储器和外部程序时,P0口也被作为低8位地址/数据分时复用。在这种模式下,P0具有内部上拉电阻。表3.1 P1口第二功能表引脚号第二功能P1.0T2(定时/计数器T2的外部计数输入),时钟输出P1.1T2EX(定时/计数器T2的捕捉/重载触发信号和方向控制)P1.5MOSI(在系统编程用)P1.6MISO(在系统编程用)P1.7SCK(在系统编程用)P1口:P1口是具有内部上拉电阻的8位双向I/O口,P1输出缓冲器能驱动4个TTL逻辑电平。对P1写“1”时,上拉电阻把端口拉高,此时可以用作输入口。此外P1口还
20、有被用作第二功能。P2口:P2口是一个具有上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平。与P1口功能类似。P3口:P2口是一个具有上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平。与P1口功能类似。P3口亦可作为AT89C51单片机特殊功能(第二功能)使用。表3.2 P3口第二功能表引脚号第二功能P3.0RXD(串行输入)P3.1TXD(串行输出)P3.2(外部中断0)P3.3(外部中断1)P3.4T0(定时器0外部输入)P3.5T1(定时器1外部输入)P3.6(外部数据存储器写选通)P3.7(外部数据存储器写读选通)3.1.2 单片机的最小系统所谓最小
21、系统,是指一个真正可用的单片机的最小配置系统。对于单片机内部资源已能够满足系统余姚的,可直接采用最小系统。由于MCS-51系列单片机片内不能集成时钟电路所需要的晶体振荡器,也没有复位电路,因此在构成最小系统时必须外接这些部件。80518751的最小系统特点如下:(1) 由于片外没有扩展存储器和外设,P0、P1、P2、P3都可以作为用户I/O接口使用。(2) 片内数据存储器有128B,地址空间为00H7FH,没有片外数据存储器。(3) 内部有4KB的程序存储器,地址空间为0000H0FFFH,没有片外程序存储器。EA应接高电平。(4) 可以使用两个定时/计数器T0和T1,一个全双工的串行通信接口
22、,5个中断源。如下图为AT89C51的最小原理图3图3.3 单片机最小系统原理图3.2 复位电路和晶振电路单片机若要正常工作,还需要有一些必要的外围电路,才能正常的工作。比如复位电路和晶振电路就是单片机必要的外围的电路。(1)复位电路单片机的复位如同计算机的重启一样,任何单片机工作之前都要有一个复位的过程,对于单片机来说,复位是单片机还没有执行程序之前而做的准备工作。一般单片机的复位只需要5ms的时间。复位电路是典型的单片机系统的外部电路,基本的复位电路一般采用上电复位和按键复位两种复位方式。本系统设计采用按键复位电路,方便并且可以对单片机工作状态进行直接重启。a)上电复位电路b)按键复位电路
23、图3.5复位电路(2)晶振电路与复位电路一样,晶振电路同样是单片机系统的典型外围电路。单片机的工作,是从ROM中读取指令,然后执行的过程。单片机访问一次存储器的时间,称为一个机器周期,作为单片机工作的时间基准。没有晶振,就没有时钟周期,没有时钟周期,就无法执行程序,单片机就无法工作。因此,晶振可以说是单片机系统的心脏。本系统采用的晶振频率为12MHz。晶振电路一般可以分为内部时钟方式和外部时钟方式。本系统采用内部时钟方式的晶振电路3。图3.5 晶振电路3.3 显示电路设计本系统实现的功能要求对待测场所的环境温度实现实时监控和显示,因此,需要有显示电路的设计,来完成这一功能。(1)数码管介绍单片
24、机应用系统中,LED数码管一般用做简单显示输出设备,一般用于显示数字和简单信息。LED数码管显示器具有显示清晰、亮度高、操作简单、接口方便等优点,基本可以满足普通单片机系统的需要而被广泛使用。LED数码管是由发光二极管按一定的结构排列而成的显示器件。通常使用的是带有小数点的段数码管,分为共阳极和共阴极数码管两种4。a) 共阳极数码管 b) 共阴极数码管 c) 数码管引脚图图3.6 8段LED数码管结构图表3.3 数字字符对应共阴极和共阳极字段码显示字符共阴极字段码共阳极字段码显示字符共阴极字段码共阳极字段码03FHC0HC39HC6H106HF9HD5EHA1H25BHA4HE79H86H34
25、FHB0HF71H8EH466H99HP73H8CH56DH92HU3EHC1H67DH82HT31HCEH707HF8HY6EH91H87FH80HL38HC7H96FH90H8FFH0A77H88H灭0FFHB7CH83H.(2) 数显电路设计图3.7 数码管显示电路图3.4 传感器的选择变光型浊度传感器原理:当被测物质浊度变化时,使光源的强度随之变化,光源的强度可对应到被测物质的浊度。当液体浊度增加时,由于液体阻碍增强,光的通过率低,光敏电阻器接受光线弱。当液体浊度下降时,光敏电阻器接受光线强。让传感器接收到的光信号强度一定,当被测物质浊度发生变化时,使光源的强度随之变化,光源强度可对应
26、到被测物的浊度。下图为变光型浊度传感器的结构5图3.8变光型浊度传感器的结构变光型浊度传感器的结构:传感器由光敏电阻器、平衡检测器、固定电源、反馈控制、可调电源、光源和外壳等组成,本传感器的最主要的特点就是要求2个光敏电阻器的阻值相等,也就是他们接受的光强一样,如不同平衡检测器能识别出来,然后,由反馈控制产生信号调整可调电源,从而调整光源的强度来实现这一要求。此传感器具有量程宽、标定过程简单、功耗低、成本低、体积小等特点,该传感器的另一个特点是在高浑浊度时分辨率比低浑浊度高,可满足一些特殊的测量要求5。表3.4 传感器的性能测试实验数据表测试点(序号)12345678910浊度值(mg/L)7
27、4122202332544701898115614811904电压值(mV)106107112125159195253350508770统计实验数据可以得出:浊度值与电压值之间近似一条二次曲线,因此,采用二次曲线拟和,得到浊度传感器的测试公式为:式中Z为浊度mg/L;V为浊度传感器的电压读数mV;相关系数r=0.9983.5 A/D转换A/D转换:由于单片机只能识别数字信号所以必把传感器输出的模拟信号进行数字化处理,因此,在智能仪器的输入通道中加入能把模拟信号转换成数字信号的芯片即A/D转换芯片。使用A/D转换器时需要根据实际所需精度与分辨率的不同选择不同的A/D转换芯片,确定采样频率一保证单
28、片机的实时行要求。由于环境对A/D转换器存在一定影响,一次在选择A/D转换器的时候必须考虑环境因素。还应根据单片机接口特征选择A/D转换器的输出状态。 A/D转换器与单片机的接口一般要完成的操作有单片机发出启动转换信号,单片机取回转换结束状态信号,读取需要转换的数据。由于A/D转换对于提高数据精度具有较大影响,因此需要选择一款精度较高的器件,所以本次采用ADC0832作为A/D转换芯片6。ADC0832 是美国国家半导体公司生产的一种 8 位分辨率、 双通道 A/D 转换芯片。由于它体积小,兼容性强,性价比高而深受单片机爱好者及企业欢迎,其目前已经有很高的普及率。 ADC0832 具有以下特点
29、:(1) 8 位分辨率;(2)双通道 A/D 转换;(3)输入输出电平与 TTL/CMOS 相兼容;(4)5V 电供电时输入电压在 05V 之间;(5)工作频率为 250KHZ,转换时间为 32S;(6)一般功耗仅为 15mW;(7)8P、14PDIP(双列直插) 、PICC 多种封装;(8)商用级芯片温宽为0C to +70C,工业级芯片温宽为40C to +85C单片机对ADC0832的控制原理:正常情况下单片机与ADC0832的接口应该为4条数据线,分别是DI、CS、DO、CLK。但因为DI端和DO端在通信时未同时有效地并与单片机的接口是双向的,固电路设计时可以将DI和DO并联在一根数据
30、线上使用,详情见下图6。 图3.9 ADC0832与单片机的接口电路4 水质监测系统的软件设计4.1 C语言的特点和程序结构软件设计就是用计算机所能接受的语言把所需解决问题的步骤逐一描述出来,也就是编制计算机的程序,在设计应用系统时,软件的编制是重要环节。C语言是近年来在国内外普遍使用的一种程序设计语言,其功能丰富,表达力强,使用灵活方便,应用面广,目标程序效率高,可移植性好,而且也能直接对计算机硬件进行操作,既有高级语言的特点,也有汇编语言的特点。(1)语言简洁、紧凑,使用方便、灵活C语言一共只有32个关键字,9种控制语句,程序书写形式自由,与其他高级语言相比较,程序精炼、简短。(2)运算符
31、丰富C语言包括很多种运算符,总共有34种,而且把括号、赋值、强制类型转换等都作为运算符处理。表达式灵活、多样,可以实现各种各样的运算。(3)数据结构丰富,具有现代化语言的各种数据结构。C语言的数据类型有整型、实型、字符型、数组类型、指针类型等。能用来实现各种复杂的数据结构。(4)可进行结构化程序设计C语言具有各种结构化的控制语句,如ifelse语句、while语句、dowhile语句、switch语句、for语句等。另外C语言程序以函数为模块单位,一个C语言程序就是由许多个函数组成,一个函数相当于一个程序模块,因此C语言程序可以很容易地进行结构化程序设计。 (5)可以直接对计算机硬件进行操作
32、C语言允许直接访问物理地址,能进行位操作,能实现汇编语言的大部分功能,可以对硬件进行操作。 (6)生成目标代码质量高,程序执行效率高 总所周知,用汇编语言生成的目标代码的效率是最高的,但据统计表明,对于同一个问题,用C语言编写的程序生成目标代码的效率仅比汇编语言编写的程序低10%20%。而用C语言编写的程序比用汇编语言编写程序要方便、容易的多,而且可读性强,开发时间也短的多。 (7)可移植性好不同的计算机汇编指令不一样,用于汇编语言编写的程序用于其他的机型使用时,必须改成对应机型的指令代码。而用C语言编写的程序基本上都不用做修改就能用于各种机型和各种操作系统7。4.2水质监测主程序流程图图4.
33、1 水质监测主程序流程图4.3 ADC0832数据读取程序流程图4.2 ADC0832数据读取程序流程总结本系统编程采用C语言,用单片机AT89C51作系统核心,此次设计主要的难处在于软件的设计部分以及外围电路的链接,比如说如何将传感器和数据采集元件有效的组合在一起进行使用,而本设计不足在于只检测了浑浊度和自由离子浓度两块,若能加上其他的传感器,则可以方便的检测水中的PH值,溶解氧等。通过这次设计使自己对单片机的应用得到了更深的认识,另外传感器的使用,程序的开发,显示系统设计,复位电路设计,单片机接口设计,如何滤波,怎么样选择A/D转换等都有了更好的提升。知道了自己在学习单片机方面有哪些不足之
34、处,以便于以后更好更深入的来了解学习单片机。附录1 自由离子浓度和浊度监测原理图2 仿真图3 程序清单#include #include #define uint unsigned int#define uchar unsigned char#define ushort unsigned short#define ulong unsigned longuchar DisDX = 0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8, 0x80,0x90,0x7f,0xff; / 共阳数码管 0,1,2,3,4,5,6,7,8,9,.,空,uchar DisDX_do
35、t = 0x40,0x79,0x24,0x30, 0x19,0x12,0x02,0x78, 0x00,0x10; / 共阳数码管 带点uchar DisWX = 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80;sbit LED_GN = P10;sbit LED_RD = P11;sbit CS = P12; /ADC0832控制端口sbit DI = P13;sbit DO = P13; /DI和DO与单片机共接口sbit Clk = P14;sbit BUZ = P31;uchar v3=0x00,0x00,0x00; /显示缓冲区uchar dis4=0x
36、00,0x00,0x00,0x00; /显示缓冲区uchar TMP3=0x00,0x00,0x00; /显示缓冲区uchar date=0; /AD值uchar CH; /ADC0832通道值uint i;uint ZD;uint Temp;void delay(int x)while(x-)for(i = 0; i 75; i+);ushort sq(ulong a) int i;ulong rem = 0; ulong root = 0; ulong divisor = 0; for(i=0; i16; i+) root = 1; rem = (rem 30); a = 2; divis
37、or = (root1) + 1; if(divisor = rem) rem -= divisor; root+; return (ushort)(root); /*AD0832转换程序*/uchar ADC0832(uchar CH) uchar i,dis0,dis1; Clk=0; /拉低时钟 DI=1; /初始化 _nop_();CS=0; /芯片选定 _nop_(); Clk=1; /拉高时钟 _nop_();if(CH=0) /通道选择 Clk=0; /第一次拉低时钟 DI=1; /通道0的第一位 _nop_(); Clk=1; /拉高时钟 _nop_(); Clk=0; /第二
38、次拉低时钟,ADC0832 DI接受数据 DI=0; /通道0的第二位 _nop_(); Clk=1; _nop_(); else Clk=0; DI=1; /通道1的第一位 _nop_(); Clk=1; _nop_(); Clk=0; DI=1; /通道1的第二位 _nop_(); Clk=1; _nop_(); Clk=0; /第三次拉低时钟,此前DI两次赋值决定通道 DI=1; /DI开始失效,拉高电平,便于DO数据传输 for(i= 0;i8;i+) /读取前8位的值 _nop_(); dis0= 1; Clk=1; _nop_(); Clk=0; if (DO) dis0|=0x0
39、1; else dis0|=0x00; for (i=0;i= 1; if (DO) dis1|= 0x80; else dis1|= 0x00; _nop_(); Clk=1; _nop_(); Clk=0; if(dis0=dis1) /两次结束数据比较,若相等 date=dis0; /则赋值给dat _nop_(); CS=1; /释放ADC0832 DO=1; /拉高输出端,方便下次通道选择DI端有效 Clk=1; /拉高时钟 return date;/*数据转换程序功能:将0-255级换算成0.00-5.00V的电压数*/void convert(uchar a) uint temp
40、; /特别注意这里需定义int型(余数将大于255)uint volt;v0=a/51; /取个位temp=a%51;temp=temp*10;v1=temp/51; /取小数点后第一位temp=temp%51;temp=temp*10;v2=temp/51; /取小数点后第二位volt = v0 * 1000 + 100 * v1 + 10 * v2;ZD = 74 * sq(volt - 105);dis0 = ZD / 1000;dis1 =(ZD % 1000) / 100;dis2 =(ZD % 1000) % 100) / 10;dis3 = ZD % 10;/*显示函数*/voi
41、d display(void)int i = 0;P2 = DisWXi;P0 = DisDXdisi;i+;delay(5);P2 = DisWXi;P0 = DisDXdisi;i+;delay(5);P2 = DisWXi;P0 = DisDXdisi;i+;delay(5);P2 = DisWXi;P0 = DisDXdisi;i+;delay(5);P2 = DisWXi;P3 = 0xff;i+;delay(5);TMP0 = Temp / 100;TMP1 = (Temp % 100) / 10;TMP2 = Temp % 10;P2 = DisWXi;P3 = DisDXTMPi-5;i+;delay(5);P2 = DisWXi;P3 = DisDX_dotTMPi-5;i+;delay(5);P2 = DisWXi;P3 = DisDXTMPi-5;i+;if(7 = i)i = 0;delay(5);/*