找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 21779|回复: 9
打印 上一主题 下一主题
收起左侧

单片机水塔水位(液位检测)及显示电路仿真+程序设计

  [复制链接]
跳转到指定楼层
楼主
在网上发现一个很好的资料,分享给大家学习


仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)



摘要

随着社会的进步,生产工艺和生产技术的发展,人们对液位检测提出了更高的要求。由于新型电子技术、微电子技术和微型计算机被广泛的应用,单片机控制系统以其控制精度高,性能稳定可靠,设置操作方便,造价低等诸多特点,被应用到液位系统的控制中来。
本文介绍了以LM型液位传感器,A/D转换芯片ADC0809,以及AT89C51单片机作为主控元件的液位检测系统的设计方法。本文分别从液位检测,A/D转换,数码管显示,超限报警等几个方面对硬件电路进行了比较详细的介绍,然后对A/D转换程序,数码管显示程序,超限报警程序等做了比较详细的阐述,并用流程图做进一步的解释。
通过软件和硬件的联合调试,实现了在一定范围内对液位的调节,动态显示出液位结果,实现报警,完全实现了任务书上的要求。

目 录
第1章 绪论1
1.1 液位检测系统的概况1
1.2 国内外研究动态 1
1.3 本次毕业设计的意义 2
1.4 本次毕业设计的任务 2
第2章 硬件电路设计3
2.1 硬件电路工作原理 3
2.2 硬件电路设计 3
2.2.1 系统总体设计框图 3
2.2.2 核心芯片的介绍 4
2.3 硬件电路各模块设计10
2.3.1 电源电路设计10
2.3.2 单片机最小系统电路设计10
2.3.3 显示电路设计11
2.3.4 液位传感器的接口电路设计12
2.3.5 AT89C51与ADC0809的接口电路设计13
2.3.6 报警电路设计14
2.4 硬件电路总结14
第3章 软件设计 17
3.1 AT89C51的I/O口应用 17
3.1.1 P0口的信号输入 17
3.1.2 P1口的信号输入 17
3.1.3 P2口的信号输入 17
3.1.4 P3口的信号输入 18
3.2 软件模块设计19
3.2.1 主程序的设计19
3.2.2 A/D转换的设计20
3.2.3 显示子程序的设计21
3.2.4 报警子程序的设计24
3.3 软件设计总结25
第4章 联机调试28
4.1 仿真电路调试 28
4.2 硬件电路调试 29
4.3 硬件电路调试出现的问题及解决方法 30
4.4 软件程序调试30
4.5 软件程序调试出现的问题及解决方法 31
4.6 联机调试总结 31
第5章 结论32
致谢 33
参考文献 34
附录 36

第1章  绪 论
随着人们生活水平和工业标准的提高,液位的检测越来越受到人们重视,检测的精度和实时性要求也越来越高,另外还要求系统能提供对液位的自动控制功能。今后液位的监测和控制系统的研究将是一个重要的课题。
1.1 液位检测系统的概况
在日常生产和生活中经常遇到液位的检测和控制问题。尤其在许多工业生产系统中,需要对系统的液位或物料位进行检测和控制,特别是对具有腐蚀性的液体液位的测量,传统的电极法是采用差位分布电极,通过给电脉冲来检测液面,电极长期浸泡在液体中,极易被腐蚀、电解、失去灵敏性,因而对测试设备的抗腐蚀性要求较高。LM型液压传感器采用316L不锈钢膜片及PVC塑料螺纹头相结合,可测量水、其它液体及气体液位。LM型液压传感器采用拥有专利技术的低成本不锈钢传感器,其安装在PVC塑料过程接头内。监控工程实施方便、迅速、易做到实时控制,而且测量精度又能达到工业实用的要求,所以有广泛的应用前景。为了降低工人的劳动强度,改善工人的工作环境,节省财力、物力,避免资源的浪费,特别是对一些具有高温、高压、低温、低压、有辐射性、毒性、易挥发易爆等液体,就要对液位进行检测,而且液位的检测显得尤为重要。今后液位的监测和控制系统的研究将是一个重要的课题。
1.2 国内外研究动态
随着工业生产自动化高速发展, 对液位检测和控制技术的要求也越来越高。为解决生产中的测量问题, 一方面是采用新的测量原理, 开发新的液位检测仪表, 扩大检测的手段, 另一方面需要朝着实现微机化和智能化的方向发展。近些年来, 微电子技术的发展使得液位检测技术发生了根本性的变化。新的检测原理与电子部件的应用使得液位计更趋向小型化和微型化, 特别是一些小型现场液位开关发展极快, 如光纤液位计, 由于没有可动部件, 所以可靠性高, 不仅可现场显示, 而且可以发出控制信号。与此同时, 液位检测和控制也正向着智能化方向发展, 在液位测量领域内广泛应用微处理技术, 以实现故障诊断和报警功能, 提高测量的精确度、可靠性、安全性和多功能化。在应用和设计液位计时尽量实现精确测量,提高液位检测系统对恶劣环境的抵抗能力, 以便在恶劣环境下准确、可靠地工作。
1.3 本次毕业设计的意义
目前,市面上进行液位测量的仪表种类繁多,但是同时具有测量、监控、数据记录及处理的液位测量装置并不多。在某些工业控制系统中,数据的测量这一基本功能已不能满足现代工业的要求,往往需要对大批数据进行记录,对其进行后期处理分析,实现差错控制、工艺改善、资源优化等一系列工作。在液位测量这一领域中,如江河湖海、城市用水等方面,大量数据长时间,多网点的采集记录分析具有普遍的意义。液位的变化分析,有助于人们进一步对自然环境、天气变化甚至是灾害预警提供可靠的支持。单片微机在许多过程控制设备和产品中都得到广泛的应用。由于其体积小,价格低,具有逻辑判断、定时计数、程序控制等多种功能,在各个领域、各个行业都得到了广泛应用。不仅有常用的8位机,而且4位单片机和16位单片机也得到了普及,随着过程控制精度要求的增加和运算速度的增快,单片机得到了进一步的应用。
1.4 本次毕业设计的任务
本文的主要任务是以单片机为主控制器,开发一个基于液位传感器的液位监控系统,可测量并显示液位高度。设定最高液位和最低液位,当液位高于最高液位或低于最低液位时发出报警信号,提醒工作人员液位信息。研究设计内容包括:
(一)液位检测的基本原理与方法;
(二)液位检测系统的整体方案设计;
(三)模数转换电路的设计;
(四)显示电路设计;
(五)系统软件流程设计;
(六)电源电路的设计;
(七)PCB布线及硬件抗干扰设计。
设计完成之后提供一个可以应用于一般工业的液位检测及显示系统的设计方案,测量范围和测量精度满足一般工业应用需要。通过毕业设计的整个过程,可以综合运用传感器、单片机、电子电路和程序设计等方面的知识,锻炼和提高科研的能力。

第2章  硬件电路设计
2.1 硬件电路工作原理
该系统以AT89C51作为核心控制部件,外加传感器,一片A/D转换芯片和数码管来完成系统的预期任务,即液位的检测、显示和超限报警。传感器实现液位信号到电压信号的转换,再由8位A/D转换芯片ADC0809将模拟信号转换为数字信号,实现液位信息的输入,AT89C51从ADC0809读取液位信息后进行数据处理和超限判断,随后将处理过的数据输出到数码管显示,设置最高液位和最低液位,若液位超限则由单片机报警。
2.2  硬件电路设计
2.2.1  系统总体设计框图
图2—1 系统总体设计框图
各部分功能:
  • 电源部分提供+5V电压供系统各部分使用。
  • LM传感器实现液位信息到电压信号的转换。
  • ADC0809将传感器输出的电压信号经A/D转换后送到单片机。
  • AT89C51为处理器,实现液位信息的接收、数据处理、和输出到数码管。
  • 蜂鸣器部分在单片机检测到液位超限是由单片机驱动LED灯亮灭报警。
  • 单片机对液位数据处理后输出,数码管显示。
2.2.2  核心芯片的介绍
(1)单片机AT89C51
单片机应用系统的基本构成:
图2—2 单片机应用系统的基本构成
AT89C51主要参数:
型号
存储器
定时器
I/O
串行口
中断
速度(MH)
其他特点
E2PROM
ROM
RAM
89C51
4K
128
2
32
1
6
24
低电压
图2—3 AT89C51主要参数
AT89C51含 E2PROM电可编闪速存储器。有两级或三级程序存储器保密系统,防止E2PROM中的程序被非法复制。不用紫外线擦除,提高了编程效率。程序存储器E2PROM容量可达20K字节。
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
1. AT89C51主要特性:
与MCS-51兼容,4K字节可编程闪烁存储器,寿命:1000写/擦循环,全静态工作:0HZ-24HZ,三级程序存储器锁定8位CPU;振荡频率1.2-12MHz;128个字节的片内数据存储器(片内RAM);21个专用寄存器;4KB的片内程序存储器;8位并行I/O口P0,P1,P2,P3;一个全双工串行I/O口;2个16位定时器/计数器;5个中断源,分为2个优先级。
2. I/O口引脚:
a:P0口,双向8位三态I/O口,此口为地址总线(低8位)及数据总线分时复用;
b:P1口,8位准双向I/O口
c:p2口,8位准双向I/O口,与地址总线(高8位)复用;
d:P3口,8位准双向I/O口,双功能复用。
(2)A/D转换器ADC0809
A/D转换芯片ADC0809为8路模拟信号的分时采集,片内有8路模拟选通开关,以及相应的通道抵制锁存用译码电路,其转换时间为100μs左右。

  • ADC0809的内部结构:
图2—4 ADC0809的内部逻辑结构图


图中多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用一个A/D转换器进行转换,这是一种经济的多路数据采集方法。地址锁存与译码电路完成对A、B、C 3个地址位进行锁存和译码,其译码输出用于通道选择,其转换结果通过三态输出锁存器存放、输出,因此可以直接与系统数据总线相连,
图2—5 ADC0809的通道选择表         图2—6 ADC0809引脚图
  • ADC0809功能介绍:
分辨率为8位;最大不可调误差小于+_1LSB;单一+5V供电,模拟输入范围0~5V;具有锁存控制的8路模拟开关;可锁存三态输出,输出与TTL兼容;功耗为15mw;不必进行零点和满度调整;转换速度取决芯片的始终频率,它的时钟为10kHZ~1.2MHZ.当时钟为500KHZ,转换速度为100us。
  • ADC0809的原理
ADC0809是一款8位AD转换器,数据获取的关键部分是它的8位模/数转换器。这个部分主要由N位逐次逼近寄存器SAR,D/A转换器,比较器,置数选择电路组成。转换过程如下:
A.选选置数电路置SAR的最高位为“1”,其余位为“0”,经D/A转换器转换成的模拟电压Uo与输入模拟电压Ui在电压比较器进行比较,若Ui大于等于Uo,则保留最高位“1”,若Ui小于Uo,则最高位为“0”。
B.置次高位为“1”,低位全为“0”,按上述步骤进行转换,比较,判断。
C.重复此过程,直到确定SAR的最低位的值取“1”,还是“0”为止。此时,SAR内容就是对应的输入模拟电压转换后的数字量。









图2—7 ADC0809的工作时序图
3)LM型液压传感器
LM系列液压传感器采用316L不锈钢膜片及PVC塑料螺纹头相结合,可测量水、其它液体及气体液位。LM系列液压传感器采用拥有专利技术的低成本不锈钢传感器安装在PVC塑料过程接头内。该设计可使传感器具有多种外形,方便客户应用于需要高性能、小尺寸的压力和真空系统。传感器标准输出为0.5~4.5V,供电为5V。
特    点: 螺纹接口式,-20~85℃工作温度范围,±0.1%非线性,±3.0%总误差,固态结构
应    用: 灌溉系统,RV和船舶水位保持,蓄水和水循环系统,小型罐体液位,冷却器&蒸气冷凝设备
技术指标:
类   型: 表压
量   程: 0~1,2,5,15,30,50,150(psi)
精 确 度: ±5%(<5Psi);±3%(>5Psi)
输   出: 0.5~4.5V
电气连接: 电缆                       
工作温度: -35℃~85℃
供电电源: 5VDC                       图2—8 LM系列液压传感器
特   点: 低成本,微量程(最佳量程1Psi~15Psi),适于OEM客户批量应用。
典型应用: 灌溉,RV和船用邮箱液位,水存储和水回收系统,小罐体液位,冷凝器,蒸发冷却塔

  
图2—9  LM传感器尺寸外形图        图2—10  LM传感器电气连接图

2.3 硬件电路各模块设计
2.3.1  电源电路设计
图2—11  电源电路
本系统供电为市电AC220v,经变压器TR1降为交流6v,经整流桥堆BR1整流后得到脉动直流电压6v,再经三端稳压器LM7805得到VCC(+5v) ,其中电解电容C4、C6、起滤波作用,C5、C7是旁路电容,起抑制干扰的作用。
2.3.2  单片机最小系统电路设计
图2—12  单片机最小系统电路
RST:复位输入。在单片机工作期间,当此引脚上出现连接2个机器周期的高电平时可实现复位操作。复位电路除了具有上电复位功能外,还可通过复位键迫使RESET为高电平。当系统通电时,RESET引脚获得高电平,随着电容的充电,RESET引脚的高电平将逐渐下降。RESET的高电平只有保持足够的时间(2个机械周期),单片机才可以进行复位操作 。
时钟电路采用12MHz的晶振,因为ADC0809的工作时钟最高允许值为12MHz,单片机ALE管脚2分频后为500KHz,可以作为ADC0809转换器的时钟信号CLK。XTAL1:反向放大振荡器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。XTAL1脚是内部反相放大器的输入端,而XTAL2脚是该放大器的输出端。在晶体振荡中,晶体工作于基本响应模式,它作为一个感抗与外部电容形成并联谐振,使正反馈放大器维持震荡。所选电容为瓷片电容22PF,因为22PF对于工作于1MHZ以上的晶振都能获得良好的效果。
2.3.3  显示电路设计
图2—13  显示电路
本设计由P1口控制七段发光二极管亮或灭,使用共阴极8段数码管,由图2.9可知,要使七段显示器的某一段亮,则应该是与该段相连的段选寄存器即P1口的某位线输出为1。若使某段熄灭,则必须输出0。例如要显示数字4。则应使P1口的P1.7-P1.0输出为11100110B,若用一个字节表示该输出值,即字形代码为66H,依此类推,可以得到0—9一共10个十进制数的字形代码依次为3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH。
本设计由P2.0,P2.1,P2.2,P2.3做位选,以控制哪一位七段数码管显示,例如,要求第一位数码管显示,则应设置P2.0为“1”,P2.1,P2.2,P2.3为“0”。
PNP型三极管9012起到增加驱动电流的目的。电阻R12~R19控制通过数码管的电流,R20~R23控制通过三极管9012的电流,R4~R11为单片机P1口的上拉电阻。

2.3.4  液位传感器的接口电路设计
图2—14  电位器RV1与ADC0809接口
设计所选LM型液位传感器能够根据不同的液位产生不同的电压,电压值大小范围为0.5~4.5V,且能够便于远距离传输。由于芯片ADC0809的输入为0~5V的电压,仿真时需要将输入信号转换为电压信号,为此外接一电位器R=1kΩ,把电压转换成0~5V电压。在设计中,把电位器的1,3脚接+5V电压和地线,调节滑钮2能够很好的得到0~5V电压,因此可以用电位器模拟液位传感器。

2.3.5  AT89C51与ADC0809的接口电路设计
图2—15  AT89C51与ADC0809的接口电路
ADC0809与AT89C51相连接,ADC0809中的START与ALE相连通,ALE——地址锁存允许信号,对应ALE上跳沿,A、B、C地址状态送入地址锁存器中。START——转换启动信号。START上升沿时,复位ADC0809;START下降沿时启动芯片,开始进行A/D转换;在A/D转换期间,START应保持 低电平。当ALE上升沿时,ALE锁存数据,A/D转换截止,当ALE下降沿时,START低电平,ALE低电平,不锁存,A/D转换开始。P2.4,P2.5,P2.6,P2.7分别控制CLK,START和ALE,EOC,OE信号,其控制A/D转换的开始和截止。CLK使用AT89C51内部时钟信号。
ADDA,ADDB,ADDC相连通接地,信号输入为000,表示输入通道选择为IN0口。8位数据信号线2-1~2-8与单片机的P1.0~P1.7相连,实现ADC0809与AT89C51的数据传输。
Vref——参考电源参考电压用来与输入的模拟信号进行比较,作为逐次逼近的基准。其典型值为+5V(Vref(+)=+5V, Vref(-)=0V)。
2.3.6  报警电路设计
图2—16  报警电路
本电路的P3.0,P3.1作为高位和低位的报警控制线,通过设置高低液位报警线来实现报警功能。如果当前液位高于设置的高位报警线时,P3.0置低电平,高位报警灯亮。如果当前液位低于于设置的低位报警线时,P3.1置低电平,低位报警灯亮。如果当前液位低于设置的高位液位且高于低位液位时,高位报警灯和低位报警灯灭。
2.4 硬件电路总结
在本章中主要讲述了硬件电路的结构,电路原理和部分芯片的功能,根据电路组成情况分成六个电路模块,分别介绍了各个电路模块的工作原理和功能,通过本次设计掌握了更多的基本硬件电路设计原理及其工作特点。并自行绘制电路原理图,PCB封装图,为做PCB板做准备。下面是电路的一些照片。
图2—17  电路原理图
图2—18  PCB封装图
图2—19  硬件电路图
图2—20  液位在3.00米时的实物图
图2—21  液位在4.01米时的实物图

第3章  软件设计
3.1 AT89C51的I/O口应用
AT89C51共有P0,P1,P2,P3,4个8位的并行双向I/O口。各个I/O口实现不同的功能,详细情况如下。
3.1.1  P0口的信号输入
在程序中将P0口做为段选口使用,显示十位数字的段选信号,下例为显示十位数字的指令:
MOV DPTR,#TABLE            ;取段码表首址。
MOV A,LED_2                ;取显示的十位数字。
MOVC A,@A+DPTR             ;取段码。
MOV P0,A                   ;输出段码的显示。
TABLE:   DB 3FH,06H,5BH,4FH,66H        ;共阴极数码管表
DB 6DH,7DH,07H,7FH,6FH
3.1.2  P1口的信号输入
在程序中将P0口作为输入口,用来读A/D转换值。设计中,要求选通通道0,并把转化后得到数字量存入内部RAM的35H单元中,下例为把转化后的数字量存入内部RAM中的指令:
CLR P2.5,   ;SRART置0,
MOV A,P1     ;
MOV R7,A
MOV 35H,R7
3.1.3  P2口的信号输入
P2.0,P2.1,P2.2,P2.3做数码管的位选信号用,要哪个数码管亮,则置相应位高电平,就可将其选中。例如要求显示第一个数码管,端口设置指令为:
CLR P2.0
CLR P2.1
CLR P2.2
CLR P2.3
P2.4,P2.5,P2.6,P2.7作为通用I/O口使用,与ADC0809连接。P2.4作为A/D转换的CLK信号,P2.5作为开始A/D转换的启动信号,P2.6作为查询A/D转换是否完成的判断信号,P2.7作为输出A/D转换的数字量允许信号。下例为P2.4,P2.5,P2.6,P2.7作为通用I/O口使用的指令:
CLOCK   BIT  P2.4
ST       BIT  P2.5
EOC     BIT  P2.6
OE      BIT  P2.7
3.1.4  P3口的信号输入
P3.0、P3.1、P3.7作为通用I/O口使用,与LED灯和蜂鸣器相连,输出报警信号,如果当前液位高于设置的高位报警线时,P3.0置低电平,高位报警灯亮。如果当前液位低于于设置的低位报警线时,P3.1置低电平,低位报警灯亮。如果当前液位低于设置的高位液位且高于低位液位时,高位报警灯和低位报警灯灭。
H_ALM    BIT    P3.0
L_ALM    BIT    P3.1
LALM:    CLR    L_ALM          ;低位报警
         SETB   TR1
         CLR    FLAG
        LJMP   PROC
HALM:    CLR    H_ALM          ;高位报警
        SETB   TR1
         SETB   FLAG
         LJMP   PROC
3.2 软件模块设计
3.2.1  主程序的设计
系统分为初始化,A/D转换,十进制转换,LED显示,电机控制和报警电路。因此整个程序需要包含上述六个子程序。
其中,LED_0   定义地址30H,以存放显示十进制的小数点后十位数字。
LED_1   定义地址31H,以存放显示十进制的小数点后个位数字。
LED_2   定义地址32H,以存放显示十进制的个位数字。
ADC     定义地址35H,以存放经A/D转换后的数字。
流程图如下:

图3—1  主程序流程图
3.2.2  A/D转换的设计
ADC0809芯片实现A/D转换的时间为0.1ms左右,A/D转换后得到的数字量应及时传送到单片机进行处理。
OE——输出允许信号。用于控制三态输出锁存器向单片机输出转换得到的数据。OE=0,输出数据线呈高阻;OE=1,输出转换得到的数据。
ALE——地址锁存允许信号。对应ALE上跳沿,A、B、C地址状态送入地址锁存器中。
START——转换启动信号。START上升沿时,复位ADC0809;START下降沿时启动芯片,开始进行A/D转换;在A/D转换期间,START应保持 低电平。本信号有时简写为ST。
CLK——时钟信号。ADC0809的内部没有时钟电路,所需时钟信号由外界提供,因此有时钟信号引脚。通常使用频率为500KHz的时钟信号。
EOC——转换结束信号。EOC=0,正在进行转换;EOC=1,转换结束。使用中该状态信号即可作为查询的状态标志,又可作为中断请求信号使用。
CLOCK    BIT    P2.4
ST         BIT    P2.5
EOC      BIT    P2.6
OE       BIT    P2.7
CLR       ST
SETB      ST
CLR       ST         ;启动转换
JNB       EOC,$      ;等待输出结果
SETB      OE         ;允许输出
MOV      ADC,P1     ;读取A/D转换结果
CLR       OE         ;关闭输出
MOV      A,ADC       ;将A/D转换结果转换成BCD码


图3—2  A/D转换程序流程图
3.2.3  显示子程序的设计
设计中采用动态扫描法,实现四位数码管的数值显示,并显示小数点。数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低
通过逐次选通P2.0,P2.1 ,P2.2,P2.3依次送十进制的相应字段码给P1口,并延时5ms完成显示。
显示程序:
MOV    LED_0,#00H
MOV    LED_1,#00H
MOV    LED_2,#00H
MOV    LED_3,#00H
MOV    DPTR,#TABLE      ;送段码表首地址
DISP:    MOV    A,LED_2
         MOVC   A,@A+DPTR
ORL    A,#80H                                                ;显示小数点
                   MOV    BUFFER+2,A       ;送显示缓存
         CLR    P2.1
         MOV    P0,A
         LCALL  DELAY
         SETB   P2.1
SETB   P2.0
         MOV    A,LED_1
         MOVC   A,@A+DPTR
         CLR    P2.0
         MOV    P0,A
         LCALL  DELAY
         RET
DELAY:  MOV    R6,#10            ;延时5ms
图3—4  显示子程序流程图
3.2.4  报警子程序的设计
本电路的P3.0,P3.1作为高位和低位的报警控制线,通过设置高低液位报警线来实现报警功能。本设计要求为:液位在小于1.5米时低位报警灯亮进行低位报警,液位在1.5~4米时灯都不亮,液位在大于4米时高位报警灯亮进行高位报警。
报警程序:
MOV    H_TEMP,#153           ;204/255=0.6  高于80%报警
MOV    L_TEMP,#77            ;77/255=0.3   低于30%报警
MOV    A,ADC                 ;将A/D转换结果转换成BCD码
         SUBB   A,L_TEMP      ;判断是否低于下限
         JC     LALM
         MOV    A,H_TEMP
         MOV    R0,ADC
         SUBB   A,R0           ;判断是否高于上限
         JC     HALM
         CLR    TR1
         LJMP   PROC
LALM:   CLR    L_ALM          ;低位报警
         SETB   TR1
         CLR    FLAG
         LJMP   PROC
HALM:   CLR    H_ALM          ;高位报警
         SETB   TR1
         SETB   FLAG
         LJMP   PROC


图3—5  报警子程序流程图
3.3 软件设计总结
在本章中主要讲述了软件设计的一些情况,对软件的一些功能进行了解释,根据程序组成情况分成六个程序模块,分别介绍了各个程序模块的工作原理和功能,对部分程序进行了简单的注释,通过流程图直观的表现出各个模块的作用及程序运行过程。在本次的软件设计中,运用Keil进行编程,将编辑好的程序进行编译,查看是否语法错误,如果没有错误,设置晶振频率,编译生成.Hex文件,进行仿真。在此过程中,我收益良多,熟悉了单片机汇编语言的使用,对单片机的编程有了进一步的理解,通过和同学的交流,学会了很多以前自己不能解决的问题。

第4章  调  试
4.1 仿真电路调试
在仿真程序中通过模块编程,用Proteus软件与Keil软件相结合进行调试,(调试程序见附录I)
1.建立工程文件
1)点击菜单project,选择new project:
2)然后选择要保存的路径,输入工程文件的名字,比如保存到论文目录里,工程文件的名字为yang.uv2.
3)这时会弹出一个对话框,选择单片机的型号,你可以根据你使用的单片机来选择,keil c51几乎支持所有要求你的51核的单片机,这里选AT89S51。
这时要新建一个源程序文件,建立一个汇编文件,输入编写好的程序。
保存。选择要保存的路径,在文件名里输入文件名,注意一定要输入扩展名,这里有汇编语言,文件名为:yang.asm。
2. 调试程序
(1)点击Target 1前面的+号,展开里面的内容source Group1:
(2)用右键点击Sourece Group 1(注意用鼠标的右键,而不是左键),将弹出一个菜单,选择Add Files to Guoup'Source Group 1'.
(3)选择刚才的文件yang.asm.这时在source group 1 里就有yang.asm文件
(4)单击“Project”菜单,再在下拉菜单中单击“Built Target”选项(或者使用快捷键F7),编译成功后,再单击“Project”菜单,在下拉菜单中单击“Start/Stop Debug Session”(或者使用快捷键Ctrl+F5)。硬件仿真原理图如下图
图4—1  仿真原理图
3. 仿真结果
通过改变电位器阻值的变化来模拟液位的变化,液位数值在数码管上显示,液位在小于1.5米时低位报警灯报警,液位在1.5米到4.0米时不报警,液位大于4.0米时高位报警灯报警。芯片ADC0809的转换精度为1/256,所以本电路的最小分辨率为0.05V。
4.2 硬件电路调试
1.焊接电路时注意布局是否合适,芯片摆放是否正确,元器件是否齐全。
2.焊接好电路后,用万用表检测电路是否有短路、断路现象发生,检测地线和电源线是否短路。
3.用万用表按照电路原理图重新检查电路,检查是否有焊接错误的情况发生,检查元器件是否虚焊。
4.插上芯片,注意管脚方向是否与PCB设计一致。
5.连通电源,检查电路在没有程序时是否与仿真结果一致。
4.3 硬件电路出现的问题及解决方法
1.电源接通后,发现ADC0809芯片发烫。
解决过程:开始考虑是否是电源接错了,导致接在ADC0809两端的电压过大导致的,用万用表检测后发现电源正确,后经老师指导找出问题是使用双电源供电,两个电源电压有偏差,导致芯片发烫,后改正后芯片正常工作。
2.调试电路时,数码管有第一个不显示。
解决过程:开始考虑是否是程序的问题导致数码管不显示,仔细检查程序后,经proteus仿真证明程序没有问题,后考虑是不是数码管出现问题,交换数码管控制信号线后,发现第一个数码管的信号线能使其他数码管显示,后用万用表检测发现它的两个管脚短路,证明第一个数码管已损坏,不能显示,于是重新换取数码管后,数码管显示正常。
4.4 软件程序调试
本设计调试程序使用的是Keil编译软件和Proteus仿真软件。先将编辑好的程序进行编译,检查程序是否有语法上的错误。在编译、连接无错误和警告后,把程序进行分块调试。然后用单步调试的方法进行检查寄存器中的内容是否与预期结果一致。例如:显示部分,在调试中,可以用相关窗口查看相应寄存器的内容,35H单元存放采样值,30H,31H,32H,33H单元内容则为其转换值,再对比显示的数据就可以知道是否正确。
运行编译生成.hex文件,然后在Proteus中加入.hex文件,进行仿真,查看显示是否正确,能否达到要求。进行单步调试,查看硬件电路的电平是否和预期结果一致。
用STC_ISP_V3.1软件将.hex文件烧写进单片机中,与硬件相连接。通电后,用万用表检查电路的电压是否与仿真图中的电压一致,用仿真结果验证硬件电路是否正确。
4.5 软件程序调试出现的问题及解决方法
1.在仿真时,ADC0809不能进行仿真。
解决方法:在仿真时使用Proteus软件,芯片ADC0809不能进行仿真,系统提示是没有模型,于是仿真时采用ADC0808芯片进行。由于ADC0809与ADC0808的区别在于:ADC0808的输出数据线D0~D7是从高位依次到低位,ADC0809的输出数据线D0~D7是从低位依次到高位。于是采用ADC0808进行仿真,ADC0809用在实物电路上。
2.在Keil中编辑程序时,程序出现有错误,其不能运行。
解决方法:在Keil中运行后双击出现的错误,错误行被指出来,根据程序的上下文,改正出现的错误。由于在程序中START后少添加了“:”,使得程序不能运行,改正后程序运行正常。
4.6 联机调试总结
联机调试是做硬件电路中的一个很重要的环节,它的调试结果直接体现出对硬件和软件的熟悉程度,对任务的理解。
在整个调试过程中对Keil编译软件,STC_ISP_V3.1烧写软件和Proteus仿真软件有了进一步的认识和理解,对AT89C51单片机的汇编语言有了更进一步的了解,和同学的交流更进一步的提高自己。通过对调试软件和硬件时出现的一些问题的讨论,使我能更好的对电路、程序有个更深的认识,使我学会了分析电路的方法和技巧。

第5章  结  论
在本次毕业设计中完成了电路原理图设计,PCB板设计,电路焊接,程序的设计,软、硬件的联机调试。硬件电路的各个模块,包括单片机最小系统电路,A/D转换电路,数码管显示电路,报警电路等都能够正常工作。在与软件进行联机调试时,通过改变电位器阻值的变化来模拟液位的变化,液位数值在数码管上显示,液位在小于1.5米时低位报警灯报警,液位在1.5米到4.0米时不报警,液位大于4.0米时高位报警灯报警。芯片ADC0809的转换精度为1/256,所以本电路的最小分辨率为1/256V。
本次毕业设计完成了任务书下达的所有任务,实现了液位的检测及液位的显示,并实现了超限报警。显示液位范围为0~5m,显示的最小分辨率为1/256V。它是一个可以应用于一般工业的液位检测及显示系统的设计方案,测量范围和测量精度满足一般工业应用需要。

附录1:电路原理图

单片机源程序如下:
  1. LED_0    EQU    30H
  2. LED_1    EQU    31H
  3. LED_2    EQU    32H
  4. LED_3    EQU    33H
  5. BUFFER  EQU    34H           ;显示缓存
  6. ADC      EQU    35H
  7. TCNTA    EQU    36H
  8. TCNTB    EQU    37H
  9. H_TEMP   EQU    38H          ;液位上限
  10. L_TEMP   EQU    39H          ;液位下限
  11. FLAG     BIT    00H
  12. H_ALM    BIT    P3.0
  13. L_ALM    BIT    P3.1
  14. SOUND    BIT    P3.7
  15. CLOCK    BIT    P2.4
  16. ST        BIT    P2.5
  17. EOC      BIT    P2.6
  18. OE       BIT    P2.7
  19.           ORG    00H
  20.           SJMP   START
  21.           ORG    0BH
  22.           LJMP   INT_T0
  23.           ORG    1BH
  24.           LJMP   INT_T1
  25. START:   MOV    LED_0,#00H
  26.           MOV    LED_1,#00H
  27.           MOV    LED_2,#00H
  28.           MOV    DPTR,#TABLE     ;送段码表首地址
  29.           MOV    H_TEMP,#153     ;204/255=0.8  高于80%报警
  30.          MOV    L_TEMP,#77       ;77/255=0.3   低于30%报警
  31.          MOV    TMOD,#12H        ;开中断
  32.          MOV    TH0,#245            
  33.          MOV    TL0,#0
  34.          MOV    IE,#8AH              
  35.          CLR    C
  36.          SETB   TR0        ;为ADC0808提供时钟
  37. WAIT:   SETB   H_ALM
  38.          SETB   L_ALM
  39.          CLR    ST
  40.          SETB   ST
  41.          CLR    ST          ;启动转换
  42.          JNB    EOC,[        DISCUZ_CODE_1        ]nbsp;      ;等待输出结果
  43.          SETB   OE         ;允许输出
  44.          MOV    ADC,P1     ;读取A/D转换结果
  45.          CLR    OE         ;关闭输出
  46.          MOV    A,ADC       ;将A/D转换结果转换成BCD码
  47.          SUBB   A,L_TEMP       ;判断是否低于下限
  48.          JC     LALM
  49.          MOV    A,H_TEMP
  50.          MOV    R0,ADC
  51.          SUBB   A,R0           ;判断是否高于上限
  52.          JC     HALM
  53.          CLR    TR1
  54.          LJMP   PROC
  55. LALM:   CLR    L_ALM          ;低位报警
  56.          SETB   TR1
  57.          CLR    FLAG
  58.          LJMP   PROC
  59. HALM:   CLR    H_ALM          ;高位报警
  60.          SETB   TR1
  61.          SETB   FLAG
  62.          LJMP   PROC
  63. PROC:   MOV    A,ADC         ;数值转换
  64.          MOV    B,#51
  65.          DIV    AB
  66.          MOV    LED_2,A
  67.          MOV    A,B
  68.          MOV    B,#10
  69.          DIV    AB
  70.          MOV    LED_1,A
  71.          MOV    LED_0,B
  72.          LCALL  DISP            ;显示A/D转换结果
  73.          SJMP   WAIT
  74. INT_T0:  CPL    CLOCK          ;提供ADC0808时钟
  75.          RETI
  76. INT_T1:  CPL    SOUND
  77.          INC    TCNTA
  78.          MOV    A,TCNTA
  79.          JB     FLAG,I1         ;判断是低位报警还是高位报警
  80.          CJNE   A,#30,RETUNE     ;低位报警声
  81.          SJMP   I2
  82.       I1: CJNE   A,#20,RETUNE       ;高位报警声
  83.       I2: MOV    TCNTA,#0
  84.          INC    TCNTB
  85.          MOV    A,TCNTB
  86.          CJNE   A,#25,RETUNE
  87.          MOV    TCNTA,#0
  88.          MOV    TCNTB,#0
  89.          LCALL  DELAY2
  90. RETUNE:  RETI
  91. DISP:    MOV    A,LED_0         ;数码管显示子程序
  92.          MOVC   A,@A+DPTR       ;将字段码转换显示码
  93.          CLR    P2.3
  94.          MOV    P0,A
  95.          LCALL  DELAY
  96.          SETB   P2.3
  97.          MOV    A,LED_1
  98.          MOVC   A,@A+DPTR
  99.          CLR    P2.2
  100.          MOV    P0,A
  101.          LCALL  DELAY
  102.          SETB   P2.2
  103.          MOV    A,LED_2
  104.          MOVC   A,@A+DPTR
  105. ORL    A,#80H                            ;显示小数点
  106.               MOV    BUFFER+2,A       ;送显示缓存
  107.          CLR    P2.1
  108.          MOV    P0,A
  109.          LCALL  DELAY
  110.          SETB   P2.1
  111. ……………………

  112. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

以上转载资料51hei提供下载:
水位水塔.rar (3.86 MB, 下载次数: 320)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏8 分享淘帖 顶3 踩
回复

使用道具 举报

沙发
ID:550728 发表于 2019-6-13 11:11 | 只看该作者
下载了两天怎么电脑上就没了。
回复

使用道具 举报

板凳
ID:472844 发表于 2019-7-4 13:23 | 只看该作者
谢谢分享
回复

使用道具 举报

地板
ID:585131 发表于 2019-7-18 13:45 | 只看该作者
这篇在论坛里好像跟另一份材料很类似唉
回复

使用道具 举报

5#
ID:740788 发表于 2020-5-7 13:36 | 只看该作者
谢谢楼主分享!
回复

使用道具 举报

6#
ID:785554 发表于 2020-6-21 10:43 | 只看该作者

你好 可以把余下的代码给我发一份吗
回复

使用道具 举报

7#
ID:785554 发表于 2020-6-21 10:45 | 只看该作者
DELAY2 和 TABLE 内容是什么呢
回复

使用道具 举报

8#
ID:873205 发表于 2021-1-4 16:28 | 只看该作者
楼主太牛了,对于刚做设计的小白简直救星
回复

使用道具 举报

9#
ID:990666 发表于 2021-12-15 17:18 | 只看该作者
作者大大能不能发一下参考文献
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表