毕业设计水位检测仪设计_第1页
毕业设计水位检测仪设计_第2页
毕业设计水位检测仪设计_第3页
毕业设计水位检测仪设计_第4页
毕业设计水位检测仪设计_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

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

文档简介

目录摘要 11引言 21.1水位检测仪器现实状况和发展前景 21.2本文结构安排 22水位监测仪基本原理 32.1功效说明 32.2整体架构 33硬件设计 53.1水位检测与数据采集 53.2数码管与LED显示 73.2.1相关芯片介绍 73.2.2显示部分工作原理 94系统软件设计 124.1初始化程序 124.1.1I/O端口方向控制存放器 124.1.2TMR1初始化 124.1.3TMR0初始化 134.2定时/计数器 134.2.1TMR1中止服务程序 144.2.2TMR0中止服务程序 154.3数据转换子程序 17结束语 19致谢 20参考文件 21附录 22附录程序清单及注释 22水位检测仪设计摘要:水位检测和显示仪表装置在工业上有着广泛应用,本文设计了一个能实时检测并显示水位仪器----水位检测仪。设计主要阐述对水位数据采集系统设计与实现,其主要功效是完成数据采集、处理、显示、数据存放等。依照对数据采集系统体系结构及功效要求分析,以PIC16F877单片机为关键设计并实现采集系统,结合CD4051实现对水位检测,结构简单,实现可靠。在PIC单片机中实现了数据存放和处理,获取了当前水位,并设计实现了数码管驱动显示电路。该设计是基于单片机技术设计实现低功耗水位数据采集装置,是一个具备一定实用性实时数据采集系统。最终试验结果验证了水位监测仪总体设计思绪及硬件、软件设计方案正确,能够准确地实现了水位自动检测。关键词:PIC单片机;水位检测;LED显示DesignofWater-levelDetectingMeterAbstract:Waterleveldetectionanddisplaydeviceshasawiderangeofapplicationsinindustry,thisarticledesignareal-timedetectionanddisplayequipment----waterleveldetector.Thisdesignfocusesonthedesignandimplementationofdataacquisitionsystemforthewaterlevel,anditsmainfunctionistocompletethedatacollection,processing,display,datastorageandsoon.Accordingtothedataacquisitionsystemarchitectureandfunctionalrequirementsanalysis,thearticledesignandaccomplishtheacquisitionsystemwithsimplestructureusingPIC16F877single-chipasthecore,itcandetectthewaterlevelwithCD4051reliably.ItimplementsthedatastorageandprocessinginthePICMCU,accesstothecurrentwaterlevel,anddesigndigitaldisplaydrivecontrolcircuit.Thedesignisalow-powerwater-leveldataacquisitiondevicebasedonsingle-chiptechnology,it'sapracticalreal-timedataacquisitionsystem.Finally,theexperimentalresultsverifythewaterlevelmonitortheoveralldesignideasandhardware,softwaredesigniscorrect,canbeachievedaccuratelythewaterlevelauto-detection.Keywords:PICSingle-chipComputer;Waterleveldetection;LEDdisplay第1章引言1.1水位检测仪器现实状况和发展前景伴随科学技术不停发展,我国监测仪器已具备一定研究、开发和生产能力,尤其是各种仪器数据处理系统及自动控制系统最新研究结果,使我国仪器研制和在用仪器改造升级,迈上了一个新台阶。现在国产仪器在功效齐全、性能稳定等方面,与国际上较为先进同类产品不相上下,完全能够满足水位检测需要,且价格比国外进口仪器廉价得多。即使我国地下水环境监测仪器,从工艺力量和工艺装备,从行业生产水平和专业化水平等方面来看,与发达国家相比有较大差距,但在一些方面,已具备一定优势,尤其是各种仪器数据处理系统及自动控制系统最新研究结果,使我国仪器研制和在用仪器改造升级,迈上了一个新台阶,而就功效设置与软件编辑来说,更适合我国国情。在水位检测仪器方面,国外具备较为先进产品,但不适合我国国情,突出表现在:仪器设备昂贵,操作步骤复杂,质控程序繁琐。我们应采取有效方法,扬长避短,将国外先进技术引入国内消化吸收,建立既适合我国国情又尽可能与国际接轨监测方法。在地下水监测仪器研制中,要在多品种和提升技术水平上下功夫,真正做到能准确、及时、真实数据反应地下水情况和改变规律[1]。水位检测和显示仪表装置在工业上有着广泛应用[2-9]。为了适应我国自动检测发展现实状况,本文设计了一个能实时检测并显示水位仪器----水位监测仪1.2本文结构安排本文主要分三个章节介绍水位监测仪开发流程:第二章介绍水位监测仪基本原理,简单介绍水位监测仪功效以及整体架构第三章介绍硬件设计,从数据采集和显示两个方面分别介绍第四章介绍软件设计,从TMR1中止服务程序、子程序转换程序、TMR0中止服务程序三部分进行系统分析。水位监测仪基本原理2.1功效说明对偏离零点水位进行检测,然后将带符号水位置(低于或高于零点)用数码管显示出来,并经过双色发光二极管LED阵列对水位高度进行模拟显示。水位检测:在0mm、±10mm,±25mm、±50mm、±80mm、±120mm、±160mm、±240mm共15点基础上,检测水位偏离零点大小。水位显示:将上一步检测结果用数码管显示出来,显示值以比实际水位小最近点为准,同时用15个竖直排列双色LED阵列直观地模拟当前水位高度,当水位没有达成某点时对应LED显示红色、达成或超出则显示绿色。当水位低于-240mm时报警灯显示绿色,高于240mm是报警灯显示红色,当水位恢复正常时报警灯熄灭。2.2整体架构水位监测仪主要由三部分组成:水位检测与数据采集电路、PIC16F877单片机以及数码管与LED显示电路。整体框图如图2.1所表示。电源电源数码管及LED显示电路PIC16F877水位数据采集电路数码管及LED显示电路PIC16F877水位数据采集电路图2.1水位监测仪整体构架框图水位数据采集电路将采集到数据经过采样通道输入口传输给PIC16F877单片机,PIC单片机对数据进行处理后信号输出给显示电路,数码管及LED显示电路将水位显示出来。本设计引入一个独特扫描思想----循环扫描,因为水位检测数据采集及显示实时性要求不是很高,而单片机运行速度相对很快,假如分时选通各个采样及显示通道,整体开来近似为同时进行,只要不停重复这一扫描过程,就能够完成无间隔数据采集和无闪烁显示。水位检测与数据采集电路部分采取电接点水位检测方法,在每一个预定水位检测点处,将两个电极安装在容器壁,使其一端能够与没过该点水充分接触,另一端引出到容器外面同检测电路相连接,两个电极等高度并间隔一定距离。当水位没有达成该检定点是,两个电极间电阻为无穷大;而一旦水位上升到该点高度,则两个电极同时没入水中,因为水导电性,两个电极导通。经过检测两个电极是否导通就能够检测水位高度了。数码管与LED显示电路部分主要由15个双色发光二极管和4个数码管组成。模拟水位高度由15个双色发光二极管(LED)来完成,共分4组。数字水位高度显示由四个数码管来完成,分别表示正负、百位、十位和各位。在某一特定时刻,每组LED与一个数码管一起被选通(4组LED对应4个数码管),两个8位移位存放器74LS164级联,将单片机送出2个字节串行数据转化为16位并行数据,分别送选通LED和数码管。在不一样时刻,系统对4组LED和数码管快速循环扫描,就完成了面板显示功效。第3章硬件设计本部分介绍多通道水位循环检测硬件设计、利用串行芯片扩展I/O端口方法以及循环扫描方式实现面板显示硬件结构。水位检测仪电路原理图如图3.1所表示。图3.1水位监测仪电路原理图3.1水位检测与数据采集本设计采取电接点水位检测方法,经过检测两个电极是否导通就能够检测水位高度了。对15个检测点对应有15个检测通道,本设计利用两片8通道多路选择开关CD4051,对各个通道循环检测来实现数据采集。CD4051是一个双向8通道多路开关,能够8路选通输入,1路输出;也能够1路输入,8路选通输出。经过3为数据位A,B,C进行通道选择。禁止输入输出端INH能够禁止和允许工作。其引脚定义如图3.2所表示,真值表如表1所表示。IN/OUTVDD103ABC16151413121110901234567846OUT/IN75INHVEEVSSIN/OUTIN/OUT图3.2CD4051引脚图表1CD4051真值表选通通道输入状态INHIBITCBA0000010001200103001140100501016011070111NONE1***尽管水位检测原理简单,但应用时却不能仅仅用每路通断来判断水位时否没过该路点击。实际上水电阻因水所含成份不一样有很大差异,比如蒸馏水就不到点,就不能用这种方法来检测。另首先,空气电阻也不是无穷大,也跟其成份关于,比如饱和蒸汽组织大约有1M欧左右。所以,不能经过判断单片机数据采集引脚输入电平高低来判断水位是否抵达某点,不然介于高低电平之间电平状态就无法做出判断,而这种情况可能存在。一个可靠方法就是对输入引脚数据进行采样,然后将结果与一个阀值电压进行比较,从而得出结论。依照这个原理设计水位检测仪数据采集部分电路如图3.3所表示。从图中能够看出,RD3口是地址扩展口,其与一个非门连接,结合INH引脚,将2个8路选通开关扩展为一个16路选通开关。经过RD0~3口进行采样通道地址译码,在不一样时刻选通15个通道中1个,循环扫描15个通道。当水位上升到某一对电极高度时,对应通道采样电压将会较低;若没有上升到电极高度,那么上拉电阻将会把采样值箝位到+5V。经过判断采样电压高低,就能够判断选通通道是否没于水中,进而判断水位高度,RA0口作为A/D采样通道输入口。POLE0~14为15对模拟水位高度电极。图3.3数据采集原理图3.2数码管与LED显示键盘和显示器是单片机系统中人机对话不可缺乏一部分。在许多智能仪表设计中,多用LED数码管来显示。这是因为LED数码管驱动简单,成本较低而且能适应恶劣环境。用于数码管显示驱动芯片有很多个,常见有MAX7219、MAX7221、ZLG7290、ICM7218B以及8279等。这些专用芯片使用方便,功效较强,但价格偏高。本设计中采取循环扫描方式,充分利用单片机快速处理能力对各显示单元分时选通,只需普通串行移位芯片,就能够达成显示驱动目标。3.2.1相关芯片介绍显示部分用到芯片包含移位存放器74LS164、数据缓冲器74LS244以及多路开关CD4051。下面就74LS164和74LS244作简单介绍。移位存放器74LS164。74LS164引脚定义如图3.4所表示,起真值表如表2所表示,其功效是将外部输入串行数据转化为8位并行数据输出,+5V供电,串行传输频率由外部时钟控制,其数据输出具备锁存功效。A,B端为穿行数据输入端,QA~QH为并行数据输出端,CLK为外部时钟输入端,CLR为清零端。当去除端CLEAR为低电平时,输出端(QA~QH)均为低电平。串行数据输入端(A、B)可控制数据,当A、B任意一个为低电平,则禁止新数据输入,在时钟端(CLOCK)脉冲上升沿作用下QA为低电平。当A、B有一个为高电平则另一个就允许数据输入,并在CLOCK上升沿作用下决定QA状态。图3.474LS164引脚图[10]表274LS164真值表输入输出CLEARCLOCKABQAQBQHLXXXLLLHLXXQA0QB0QH0H↑HHHQAnQGnH↑LXLQAnQGnH↑XLLQAnQGn注:QA0、QB0、QH0为在稳态输入条件建立之前QA、QB和QH对应电平;QAn、QGn为 在最近时钟↑转换前QA或QG电平,表示移1位。数据缓冲器74LS244。因为74LS164在高电平输出时,其输出最大电流为0.4mA;低电平输出时,起输出最大电流为8mA,不足以驱动数码管或发光二极管正常工作,所以在本设计中外加数据缓冲器以增大驱动能力,使数码管和二极管能够正常工作。74LS244缓冲器惯用作三态缓冲或总线驱动,+5V供电,其高电平时输出最大电流可达15mA,低电平输出时最大电流可达24mA,足以驱动数码管和LED工作。74LS244共8个输入输出通道,经过门控端1G和2G来选择其通断,其引脚图如图3.5所表示。图3.574LS244内部结构及引脚图从图中能够看出,当引脚1G为低电平时,输入通道1A1~1A4与输出通道1Y1~1Y4连通;当引脚1G为高电平时则截止。当引脚2G为低电平时,输入通道2A1~2A4与输出通道2Y1~2Y4连通;当引脚2G为高电平时,输入通道2A1~2A4与输出通道2Y1~2Y4截止。3.2.2显示部分工作原理首先介绍一下双色二极管功效和使用方法。如图3.6所表示,1个双色二极管有3个引脚,引脚1,2均为信号“+”端,引脚3为GND端(信号“-”端)。引脚电平(TTL电平)与LED显示颜色如表3所表示。图3.6双色二极管外观图表3双色二极管功效表引脚1引脚2二极管状态00熄灭01绿色10红色11混合颜色数码管及LED显示电路如图3.7所表示,其主要功效流程是:将单片机输出串行数据经过74LS164移位存放器转化并行数据,经74LS244数据缓冲器驱动数码管及LED显示。RC5口作为串行数据输出端,与74LS164数据输入端相连,当单片机输出串行数据输入74LS164;RC3口作为串行数据同时时钟端,与74LS164时钟同时输入端相连。两片移位存放器74LS164并行数据输出端则分别与两片数据缓冲器74LS244输入端相连,两片74LS244分别驱动数码管和LED显示,RD7口作为数据缓冲器74LS244门控信号输出端,控制74LS244通断。图3.7数码管及LED显示电路每4个双色二极管和1个数码管一组,二极管8个信号“+”端分别与第一片74LS2448位数据输出端相连,数码管8为数据输入端分别与第二片74LS2448为数据输出端相连,每组二极管和数码管GND端都与CD40511个输入通道相连,CD4051输出端与系统“地”相连。RE0~RE1口作为地址译码输出端口,用于多路开关CD40514路通道选择,每一时刻只有一组共4个二极管和一个数码管被选通,其GND端同系统“地”组成通路,其余二极管与数码管则不能组成通路。每向74LS164传送完2个字节共16位数据,经过RD7口使能74LS244,将数据送到二极管和数码管输入口,然后经过RE0~RE1口打开一条通道,则被选通数码管和二极管就会按照接收数据进行对应显示。不停发送新数据并利用CD4051循环扫描4个通道,则全部二极管和数码管就会连续发光显示。利用人视觉暂留现象,每个LED或数码管两次被选通时间间隔不能大于100ms。另外由一个双色二极管作为报警灯,RD5口与二极管引脚1相连,作为上限报警灯;RD4口与二极管引脚2相连,作为上限报警灯。第4章系统软件设计本设计关键关键是两个不循环执行中止程序:TMR0中止用于驱动数码管和LED显示;TMR1中止用于采集水位值而且将采集结果送缓冲存放器供显示部分读取,同时对采集结果进行简单分析,判断其是否超出水位上限和下限,若超出则点亮对应报警灯。整个软件大致能够分为初始化程序、TMR0中止服务程序、数据转换子程序、TMR1中止服务程序4个部分,以下分别加以描述。4.1初始化程序初始化程序位于主程序开始部分,主要对3部分进行初始化:I/O端口、TMR1和TMR0。各部分初始化步骤以下描述。4.1.1I/O端口方向控制存放器RA0端口用于将采集到数据输入,故将A/D端口RA0设置为输入方式串行数据同时端口RC3,设置为输出方式串行数据输出端口RC5,设置为输入方式采样通道地址译码端口RD0~RD3,设置为输出方式显示部分地址译码端口RE0~RE1,设置为输出方式报警输出端口RD4~RD5,设置为输出4.1.2TMR1初始化TMR1初始化步骤以下:将第一外设中止标志存放器PIR1(地址为0CH)中TRM1溢出中止标志位TMR1IF(Bit0)清零。将第一外设中止屏蔽存放器PIE1(地址为8CH)中TMR1溢出中止屏蔽位TMR1IE(Bit0)置位。经过TMR1中止控制存放器T1CON(地址为10H)设置时钟及分频比等。即:①时钟源选择位TMR1CS(Bit1)清零,选择内部时钟源②分频比选择位T1CKPS0~T1CKPS1(Bit5~4)置位11,选择分频比1:8给TMR1计数器TMR1H(地址为0FH)、TMR1L(地址为0EH)赋初值将中止控制存放器INTCON(地址为0BH)中全局中止屏蔽位GIE(Bit7)置位,响应全部外围设备模块产生中止请求将中止控制存放器INTCON(地址为0BH)中外设中止屏蔽位PEIE(Bit6)置位,开放第二级别外围中止4.1.3TMR0初始化TMR0初始化步骤以下:经过选项存放器OPTION_REG(地址为81H)设置TMR0分频比及时钟即:①时钟选择位T0CS(Bit5)清零,由内部提供指令周期信号作为时钟源②分频器分配为PSA(Bit3)清零,分频器分配给TMR0③分频器分频比选择位PS2~PS0(Bit2~0)置位111,选择分频比1:128将INTCON存放器(地址为0BH)中TMR0中止标志位T0IF(Bit2)清零并将中止屏蔽位T0IE(Bit5)置位将中止控制存放器INTCON(地址为0BH)中全局中止屏蔽位GIE(Bit7)置位,响应全部外围设备模块产生中止请求将中止控制存放器INTCON(地址为0BH)中外设中止屏蔽位PEIE(Bit6)置位,开放第二级别外围中止给TMR0计数器赋初值4.2定时/计数器定时/计数器其功效都是靠存放器计数值累积来实现,PIC单片机采取递增方式,计数值累加到上限后会产生溢出,对应会在溢出中止标志位上反应出来。计数值累加又是靠时钟来触发,它能够是单片机内部时钟,也能够来自外部。定时长短以及数值上限都是定时/计数器位宽、分频器分频值关于。PIC16F87X系列单片机集成3个定时/计数器模块TMR0、TMR1、TMR2。在结构和功效上不尽相同,其定时长短,计数上限所以也不一样,应用场所也不一样[11]。TMR0为8位宽,与WDT共用一个可选预分频器,用于通常通用目标。TMR1为16位宽,附带一个可编程预分频器以及一个可选低频时基振荡器,不但能够用来计数,还可与CCP模块一起实现输入捕捉与输出比较功效。TMR2也是一个8位宽定时/计数器,附带一个可编程预分频器,一个可编程后分频器,一个周期存放器和比较器,只能用于定时,不能用于计时,可与CCP模块一起实现PWM功效(即产生脉宽调制信号)。TMR0特点:8位宽定时/计数器计数器TMR0内容可读可写8位软件可编程预分频器内部/外部时钟可选,外部时钟触发边缘可选溢出中止功效TMR1特点:16位宽定时/计数器计数器TMR1内容可读可写3位软件可编程预分频器累加计数信号源可选内部时钟、外部触发信号或自带时基振荡器信号溢出中止功效TMR2特点:8位宽定时器计数器TMR2内容可读可写2位软件可编程与预分频器,4位软件可编程后分频器累加计数信号源可选内部时钟信号,所以只能工作在定时器模式8位周期存放器溢出次数经过分频后溢出中止能够由用户软件关闭退出定时本设计应用到了TRM0和TMR14.2.1TMR1中止服务程序设定系统水位刷新时间为1S,即单片机每秒钟对采样通道进行一遍A/D转换、软件上则设定TMR1定时器每秒产生一次中止,执行数据采样程序,从最高水位采样通道向下执行,并不停将每次采样结果与系统设定门限值比较(采样结果假如小于门限值,说明电平低,即电容两极同时没于水中,水位已经超出该电极)当检测到水位超出某一对电极时,则退出采样程序。接下来判断水位是否越限,若是则点亮对应报警灯,不然使报警灯熄灭。然后调用数据转换子程序,将水位采样结果转化为对应数码管和LED显示段码值存入显示数据缓冲存放器。因为PIC单片机中止矢量只有一个,而本设计中用到两个中止(TMR1和TMR0),故而在中止服务程序入口处,需要对中止源进行判断,这是经过判断对应中止标志存放器来实现。TMR1中止服务程序流程图如图4.1所表示。设置TMR1定时器分频比为1:8,采取内部时钟源,系统采取2M晶振。那么TMR1时钟脉冲周期为2μs,因为分频比为1:8,则每16μs计数一次,1s需要计数62500次,即从计时开始到62500个计数周期后,TMR1存放器达成上限65536并溢出,所以TMR1存放器初始值65536-62500=3036,即0BDCH。下面对流程图中关键部分进行简单说明:关于ADC控制存放器ADCON0设置:AD转换时钟选择位Bit7~6置位01,选择系统时钟,频率为fosc/8,模拟输入通道选择位Bit5~3置位000,选择通道0(RA0/AN0)。关于ADC控制器ADCON1设置:A/D转换结果格式选择位(Bit7)清零,A/D转换结果左对齐,ADRESH有效,ADRESL低六位为0,A/D端口控制位(Bit3~0)置位1110,选择RA0口为模拟输入口采样开始部分,要先关闭A/D转换器(Bit0=0),令其退出工作状态,等候采样值稳定后在重新开启A/D转换器(Bit0=1),开始采样。并经过检测A/D转换状态位GO/DONE(Bit2)是否为0,确定采样是否结束。图4.1TMR1中止服务程序流程图4.2.2TMR0中止服务程序TMR0中止用于数码管及LED显示,每次中止将两个字节数据串行发送发送至认为存放器,后经74LS244驱动一组LED和1个数码管发光。因为每个LED或数码管两次被选通时间最大不能烧过100ms(利用人视觉暂留现象,不然就会出现闪烁),加之TMR1中止可能占用时间,所以每次TMR0中止溢出时间不能太长;两首先,TMR0中止溢出时间又不能太短,必须确保串行发送正常发送完成。综合两方面原因,将TMR0溢出时间设定为10ms。TMR0中止服务程序流程图如图4.2所表示。设置TMR0定时器分频比为1:128,采取内部时钟源,系统采取2M晶振。那么TMR0时钟脉冲周期为1μs,因为分频比为1:128,则每256μs计数一次,10ms需要计数39次,即从计时开始到39个计数周期后,TMR0存放器达成上限256并产生溢出,所以TMR0存放器初始值256-39=217,即0D9H。图4.2TMR0中止服务程序流程图下面对流程图中关键部分进行简单说明:发送两个字节,依照硬件电路原理可知,先发送字节经过移位存放器74LS164及数据缓冲器74LS244驱动一组LED;后发送字节经过移位存放器74LS164及数据缓冲器74LS244驱动一个数码显示管。发送字节过程中,需清74LS244使能位,暂时禁止数据输出显示,待发送完成后,置74LS244使能位,允许数据输出显示。当使用SPI来进行数据发送时,采取软件对标志位查询方式来完成。关于同时串口控制存放器SSPCON设置:同时串行口允许位SSPEN(Bit5)置位,允许串口工作;同时串行口工作模式选择位SSPM3~0(Bit3~0)置位0000,选择SPI主控模式,而且时钟频率为系统时钟1/4。4.3数据转换子程序在进行水位检测后,会产生一个水位高度值(设置为HEIGHT),但它并不是一个真实水位值,只是一个标识水位高度通道号,其值为0~15中某个数,分别表示没有水以及15种水位高度共16种情况。故而需要将其转化为LED和数码管实际显示段码值。表4列出了高度值HEIGHT、LED段码值LED1~LED4和数码管显示数据SEG1~SEG4对应关系,表5则为数码管七段码值遇显示符号对应关系。表4高度值与显示段码对照表HEIGHTLED1LED2LED3LED4SEG1SEG2SEG3SEG400F0H0F0H0F0H0F0H----10E1H0F0H0F0H0F0H-24020C3H0F0H0F0H0F0H-160387H0F0H0F0H0F0H-12040FH0F0H0F0H0F0H-8050FH0E1H0F0H0F0H-5060FH0C300F0H0F0H-2570FH87H0F0H0F0H-1080FH0FH0F0H0F0H090FH0FH0E1H0F0H10100FH0FH0C3H0F0H25110FH0FH87H0F0H50120FH0FH0FH0F0H80130FH0FH0FH0E1H120140FH0FH0FH0C3H160150FH0FH0FH87H240表5数码管七段码显示符号共阳极七段码共阴极七段码显示符号共阳极七段码共阴极七段码00C0H3FH682H7DH10F9H06H70F8H07H20A4H5BH880H7FH30B0H4FH990H6FH499H66H-0BFH40H592H6DH全灭FFH00H有三种方法对LED和数码管显示缓冲存放器写入数据:第一个是采取查表方法,将各个高度值对应数据预先存入一块缓冲区内,经过对指令指针赋值来访问特定数据单位,返回转换后数值;第二种是采取逐一比较方法,将采样结果与1~15数逐一比较,若相等则向缓冲区赋对应值;第三种方法是依照表特征来赋值,很显然,第二、三种方法比较费时间,第一个方法即使程序代码最大,但执行起来速度快,本设计采取第一个方法,详细可参见查表子程序程序代码。结束语因为许多数据采集、显示实时性要求不是很高,所以单片机执行速度相对于这些过程要快得多,若分时选通各个采样或显示通道,即使单片机对各个通道处理是依次进行,不过只要这一过程达成一定速度,总看来几乎同时执行,不停重复这一过程,就产生了循环扫描思想,它在单片机系统设计中得到了广泛应用。本设计中水位采样通道设计以及数码管、LED显示都是基于这一思想。主要是经过移位方法,用74LS164芯片将每个通道串行数据转化为并行方式,在经过数据缓冲器74LS244输出,用CD4051循环对每个通道选通,从而实现对数码管驱动。串行通信上则利用PICCCP模块,采取硬件SPI方式进行串行通信。软件上采取了两个中止程序分别进行采样和显示。致谢此次毕业设计历时两个多月,从选题、开题答辩到设计完成,设计完稿。其间每一过程都得到指导教师王灵矫老师悉心指导,在此表示我对他深深敬意和由衷感激!同时,我要向我家人表示我深深感激!在我求学生涯中,他们给了我最无私关心和激励。假如没有他们无限支持和帮助,我也不能在我学习之路上勇往直前。最终,我要感激一同学习了4年同学们和所关于心我朋友们,他们给予了我大量帮助和支持,在我犹豫和迷惑时候,他们支持帮我坚定了目标,走出了困境,他们是我一生财富。参考文件[1]史云.我国地下水监测仪器现实状况与发展[电子文件]北京:地质环境信息网,[2]杨恢先、黄辉先.单片机原理及应用[M].北京:人民邮电出版社,[3]罗翼、张宏伟.PIC单片机应用系统开发经典实例[M].北京:中国电力出版,[4]李学海.PIC单片机实用教程-基础篇[M].北京:北京航空航天大学出版设,[5]李学海.PIC单片机实用教程-提升篇[M].北京:北京航空航天大学出版设,.[6]李学海.PIC单片机原理[M]北京:北京航空航天大学出版社,[7]彭树生.PIC单片机原理及应用[M]机械工业出版社,[8]杨圣.PIC系列单片机原理与实践[M]合肥:中国科学技术大学出版社,[9]刘启中、李荣正等.PIC单片机原理及应用[M].北京:北京航空航天大学出版社,[10]阎石.数字电子技术基础[M].北京:高等教育出版社,[11]求是科技.PIC单片机经典模块设计实例导航[M].北京:人民邮电出版社,附录附录程序清单及注释LISTP=16F877INCLUDEP16F877.INCSTATUSEQU 03H ;定义状态存放器地址PCLEQU02H;定义程序计数器低8位指针地址PORTAEQU 05H ;定义端口RA数据存放器地址PORTCEQU 07H ;定义端口RC数据存放器地址PORTDEQU 08H ;定义端口RD数据存放器地址PORTEEQU 09H ;定义端口RE数据存放器地址TRISAEQU 85H ;定义端口RA方向控制存放器地址TRISCEQU 87H ;定义端口RC方向控制存放器地址TRISDEQU 88H ;定义端口RD方向控制存放器地址TRISEEQU 89H ;定义端口RE方向控制存放器地址INTCONEQU 0BH ;定义中止控制存放器地址T1CONEQU10H;定义TMR1中止控制存放器TMR0EQU 01H ;定义TMR0存放器地址PIR1EQU 0CH ;定义第一外设中止标志存放器地址PIE1EQU8CH;定义第一外设中止屏蔽存放器地址ADRESHEQU 1EH ;定义ADC结果存放器高字节地址ADCON0EQU 1FH;定义ADC控制存放器0地址ADCON1EQU 9FH ;定义ADC控制存放器1地址T1CONEQU 10H ;定义TMR1控制存放器地址TMR1LEQU 0EH ;定义TMR1低字节地址TMR1HEQU 0FH ;定义TMR1高字节地址SSPBUFEQU13H;定义SPI收发缓冲存放器地址SSPCONEQU14H;定义同时串口控制存放器地址SSPSTATEQU94H;定义同时串口状态存放器地址OPTION_REGEQU81H;定义选项存放器;=====================变量申明===========================TEMPEQU20H;定义暂存存放器HEIGHTEQU22H;定义采样结果存放器,用以标识水位高度SELECT_COUNTEQU23H;定义翻转计数器,用以标识选通显示通道AD_COUNTEQU24H;定义翻转计数器,用以标识选通采样通道TX_LEDEQU25H;LED数据串行发送暂存存放器TX_DATAEQU26H;数码管数据串行发送暂存存放器LED1EQU29H;发光二极管显示数据存放器1LED2EQU30H;发光二极管显示数据存放器2LED3EQU31H;发光二极管显示数据存放器3LED4EQU32H;发光二极管显示数据存放器4SEG1EQU33H;数码管显示数据存放器1SEG2EQU34H;数码管显示数据存放器2SEG3EQU35H;数码管显示数据存放器3SEG4EQU36H;数码管显示数据存放器4;====================常量申明=========================TMR1LBEQU 0DCH ;定义TMR1低字节存放器初始值(定时1秒)TMR1HBEQU 0BH ;定义TMR1高字节存放器初始值TMR0BEQU0D9H;定义TMR0存放器初始值(定时10毫秒)GATE_VALUEEQU07FH;定义采样结果门槛值,用以区分水和空气阻值;***************复位矢量和中止矢量***************** ORG000H;复位矢量 NOP GOTOMAIN ORG004H;中止矢量;****************中止服务程序********************* BTFSCPIR1,0;检测是否是TMR1中止GOTOTMR1_INT;是,则转TMR1中止BTFSCINTCON,2;否,检测是否是TMR0中止GOTOTMR0_INT;是,则转TMR0中止RETFIE;否,中止返回;===============TMR1中止服务程序================TMR1_INTBCFPIR1,0;清TMR1中止标志位BCFSTATUS,5MOVLW0FH;水位检测通道为15个MOVWFAD_COUNT;通道数送翻转计数器TEST_LOOPDECFAD_COUNT,0IORLW0F0H;屏蔽高4位ANDWFPORTD,1;输出到CD4051通道译码端,以选通某一采样通道BSFSTATUS,5MOVLW0EHMOVWFADCON1;AD采样结果左对齐,选择RA0口为模拟量输入口BCFSTATUS,5MOVLW41HMOVWFADCON0;选择系统时钟8分频,通道0,关闭AD开启位NOP;等候采样值稳定NOP;等候采样值稳定NOP;等候采样值稳定BSFADCON0,2;开启AD采样AD_LOOPNOPBTFSCADCON0,2;检测采样是否结束GOTOAD_LOOP;否,继续检测MOVFADRESH,0;是,读取采样结果高8位MOVWFTEMP;采样结果送暂存存放器TEMPMOVFAD_COUNT,0MOVWFHEIGHT;将当前通道数送HEIGHTDECFSZAD_COUNT,1;当前通道数减1后是否为0GOTOTMR1_NEXT1;否,将采样结果与门限值比较MOVLW00H;是,置水位高度为0MOVWFHEIGHTGOTOTMR1_NEXT2;退出采样循环TMR1_NEXT1MOVFTEMPSUBWFGATE_VALUE,0;门限值减去采样结果BTFSCSTATUS,0;检测是否产生借位GOTOTEST_LOOP;否,继续进行下一个通道采样TMR1_NEXT2BCFPORTD,4;是,熄灭下限报警灯BCFPORTD,5;熄灭上限报警灯BCFSTATUS,0;清借位标志位MOVLW15HSUBWFHEIGHT;采样结果与上限值比较BTFSSSTATUS,0;检测借位标志位是否为1GOTOTMR1_NEXT3;否,转下限检测BSFPORTD,5;是,点亮上限报警灯TMR1_NEXT3BCFSTATUS,2;清零标志位MOVLW00HSUBWFHEIGHT;采样结果与下限值比较BTFSSSTATUS,2;检测零标志位是否为1GOTOTMR1_NEXT4;否,转采样结果转换BSFPORTD,4;是,点亮下限报警灯TMR1_NEXT4CALLADRES_CON;调转采样结果转换子程序MOVLW04HMOVWFSELECT_COUNT;将显示通道选择翻转计数器赋初值MOVLWTMR1LBMOVWFTMR1L;写入TMR1存放器低字节数MOVLWTMR1HBMOVWFTMR1H;写入TMR1存放器高字节数RETFIE;中止返回;===================TMR0中止服务程序====================TMR0_INTBCFINTCON,2;清TMR0中止标志位BCFSTATUS,0DECFSELECT_COUNT,0MOVWFTEMP;将翻转计数器内容减1送TEMP存放器RLFTEMP,0;TEMP存放器内容乘以2,作为查询显示数据 ;地址偏移量ADDWFPCL,1;将地址偏移量与程序计数器值叠加MOVFLED1GOTOTMR0_NEXT1MOVFLED2GOTOTMR0_NEXT1MOVFLED3GOTOTMR0_NEXT1MOVFLED4TMR0_NEXT1MOVWFTX_LED;将此次显示LED数据送LED发送存放器RLFTEMP;TEMP存放器内容乘以2,作为查询显示数据 ;地址偏移量ADDWFPCL,1;将地址偏移量与程序计数器值叠加MOVFSEG1GOTOTMR0_NEXT2MOVFSEG2GOTOTMR0_NEXT2MOVFSEG3GOTOTMR0_NEXT2MOVFSEG4TMR0_NEXT2MOVWFTX_DATA;将此次显示数码管数据送数码管发送存放器BCFPORTD,7;清74LS244使能位,暂时禁止数据输出显示BSFSTATUS,5CLRFSSPSTAT;SPI方式清SMP位、CKE位和BF位,在脉冲上;沿移位输出数据跳MOVLW30HMOVWFSSPCON;允许串口工作,时钟频率为系统时钟1/4MOVFTX_LED,0;将第一个待发送字节送缓冲存放器CALLSPI_TX;调发送完成查询子程序MOVFTX_DATA,0;将第二个待发送字节送缓冲存放器CALLSPI_TX;调发送完成查询子程序DECFSELECT_COUNT,0;通道存放器减1MOVWFPORTE;选通待显示通道BSFPORTD,7;置74LS244使能位,允许数据输出显示DECFSZSELECT_COUNT,1;通道存放器减1,并检测是否为0GOTOTMR0_NEXT3;否,转TMR0_NEXT3MOVLW04H;是,重新对通道存放器赋初值MOVWFSELECT_COUNTTMR0_NEXT3MOVLWTMR0BMOVWFTMR0;TMR0存放器赋初值RETFIE;中止返回;******************主程序************************MAINBSFSTATUS,5MOVLW01HMOVWFTRISA;置RA0口为输入方式MOVLW00HMOVWFTRISC;置RC口为输出方式MOVWFTRISD;置RD口为输出方式MOVWFTRISE;置RE口为输出方式;=================TMR0初始化====================MOVLW07HMOVWFOPTION_REG;分频器给TMR0,分频比1:128,选取系统时钟BCFSTATUS,5MOVLW0E0HMOVWFINTCON;开全局中止,允许响应TMR0及第二梯队中止;请求(TMR1中止),TM0中止标志位清零MOVLWTMR0BMOVWFTMR0;TMR0存放器赋初值;====================TMR1初始化==================== BSFSTATUS,5 MOVLW01H MOVWFPIE1;允许TMR1中止 BCFSTATUS,5 MOVLW00H MOVWFPIR1;TMR1中止标志位清零MOVLW30HMOVWFT1CON;分频比为1:8,选取内部时钟源MOVLWTMR1LB MOVWFTMR1L;TMR1存放器低字节赋初值 MOVLWTMR1HB MOVWFTMR1H;TMR1存放器高字节赋初值 BSFT1CON,0;开启TMR1定时MOVLW04H MOVWFSELECT_COUNT;显示通道存放器赋初值MAIN_LOOPGOTOMAIN_LOOP;**************SPI发送完成查询子程序****************SPI_TXMOVWFSSPBUFBCFSTATUS,6SPI_LOOPBSFSTATUS,5BTFSSSSPSTAT,0;查询发送受否完成GOTOSPI_LOOP;否,继续查询BCFSTATUS,5;是,选择BANK0MOVFSSPBUF;将缓冲存放器数据读出,不论数据是否有用RETURN;子程序返回;***************数据转换子程序****************ADRES_CON;================LED1赋值=====================MOVFHEIGHT,0CALLLED1_CONMOVWFLED1;===============LED2赋值======================MOVFHEIGHT,0CALLLED2_CONMOVWFLED2;===============LED3赋值======================MOVFHEIGHT,0CALLLED3_CONMOVWFLED3;===============LED4赋值======================MOVFHEIGHT,0CALLLED4_CONMOVWFLED4;===============SEG1赋值=====================MOVFHEIGHT,0CALLSEG1_CONMOVWFSEG1;===============SEG2赋值=====================MOVFHEIGHT,0CALLSEG2_CONMOVWFSEG2;===============SEG3赋值===================== MOVFHEIGHT,0CALLSEG3_CONMOVWFSEG3;===============SEG4赋值===================== MOVFHEIGHT,0CALLSEG4_CONMOVWFSEG4RETURN;===============LED1查表子程序===============LED1_CONADDWFPCL,1RETLW0F0HRETLW0E1HRETLW0C3HRETLW87HRETLW0FHRETLW0FHRETLW0FHRETLW0FHRETLW0FHRETLW0FHRETLW0FHRETLW0FHRETLW0FHRETLW0FHRETLW0FHRETLW0FH;===============LED2查表子程序===============LED2_CONADDWFPCL,1RETLW0F0HRETLW0F0HRETLW0F0HRETLW0F0HRETLW0F0HRETLW0E1HRETLW0C3HRETLW87HRETLW0FHRETLW0FHRETLW0FHRETLW0FHRETLW0FHRETLW0FHRETLW0FHRETLW0FH;===============LED3查表子程序=========

温馨提示

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

评论

0/150

提交评论