大学本科生毕业设计(论文)
目 录
第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.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主要参数:
图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引脚图
分辨率为8位;最大不可调误差小于+_1LSB;单一+5V供电,模拟输入范围0~5V;具有锁存控制的8路模拟开关;可锁存三态输出,输出与TTL兼容;功耗为15mw;不必进行零点和满度调整;转换速度取决芯片的始终频率,它的时钟为10kHZ~1.2MHZ.当时钟为500KHZ,转换速度为100us。
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。它是一个可以应用于一般工业的液位检测及显示系统的设计方案,测量范围和测量精度满足一般工业应用需要。
致 谢
本次毕业设计是在宁耀斌老师的悉心指导下完成的,在论文设计期间受到宁老师很大的帮助和指导,在这里衷心的感谢宁老师在本次毕业设计中给予的关心和支持。
同时,在这次设计过程中还受到姬军鹏老师的指导和帮助。在此,谨向他们在百忙当中给予的指导和帮助表示衷心的感谢。
同时,本课题能顺利完成还得到了孟杰、彭世业、白礼绒、孟环等同学的大力帮助,感谢他们在本课题的设计过程中给予了许多宝贵意见和帮助,在此一并向他们致谢!
参考文献
- 赵远航. MCS-51 单片机C语言应用程序接口技术及实例[M].航天工业出版社.2003.2
- 陈国先. PIC单片机原理与接口技术[M].北京:电子工业出版社,2001:
- 张毅刚. MCS-51单片机应用设计[M].哈尔滨:哈尔滨工业大学出版社 2003:
- 孙向东,李守智等.电气生产实习指导手册[J].西安:理工大学电气工程系 2004
- 黄正瑾.电子设计竞赛[M].东南大学出版社,2001
- 蒋廷彪. 单片机原理及应用(MCS-51)[M].重庆大学出版社,2003
- 肖婧. 单片机系统设计与仿真---基于proteus [M].北京航空航天大学出版 2010.8
- 周润景,袁伟亭,景晓松.Proteus在MCS-51&ARM7系统中的应用百例 [M].电子工业出版社,2006,10
- 蒋廷彪,刘电霆,高富强,方华 单片机原理及应用(MCS-51)[M].重庆大学出版社 2003,8
- 彭军.传感器与检测技术[M].西安:西安电子科技大学出版社,2003.
- AUG AI-Dhaher, Integrating hardware and software for The development of microcontroller-based systems. Microprocessor and Microsystems,25(2001) 317-328
- Shuakla N V,Deshpande P B.Enhancing the robustness of internal-basedno nlinear ph control.Chemical Engineering Science,1993
- Jae Hyeong Seo, Cang Ho Choi. A new simplified Space-Vector PWM Method for Three-level-Inverters [J].IEEE Trans on PE, July 2001, Vol.16(NO.4):545-550.
- 8-Bit Microcontroller with 4K Bytes Flash AT89c51
附 录
附录1:电路原理图
附录2:参考程序
- LED_0 EQU 30H
- LED_1 EQU 31H
- LED_2 EQU 32H
- LED_3 EQU 33H
- BUFFER EQU 34H ;显示缓存
- ADC EQU 35H
- TCNTA EQU 36H
- TCNTB EQU 37H
- H_TEMP EQU 38H ;液位上限
- L_TEMP EQU 39H ;液位下限
- FLAG BIT 00H
- H_ALM BIT P3.0
- L_ALM BIT P3.1
- SOUND BIT P3.7
- CLOCK BIT P2.4
- ST BIT P2.5
- EOC BIT P2.6
- OE BIT P2.7
- ORG 00H
- SJMP START
- ORG 0BH
- LJMP INT_T0
- ORG 1BH
- LJMP INT_T1
- START: MOV LED_0,#00H
- MOV LED_1,#00H
- MOV LED_2,#00H
- MOV DPTR,#TABLE ;送段码表首地址
- MOV H_TEMP,#153 ;204/255=0.8 高于80%报警
- MOV L_TEMP,#77 ;77/255=0.3 低于30%报警
- MOV TMOD,#12H ;开中断
- MOV TH0,#245
- MOV TL0,#0
- MOV IE,#8AH
- CLR C
- SETB TR0 ;为ADC0808提供时钟
- WAIT: SETB H_ALM
- SETB L_ALM
- CLR ST
- SETB ST
- CLR ST ;启动转换
- JNB EOC,[ DISCUZ_CODE_2 ]nbsp; ;等待输出结果
- SETB OE ;允许输出
- MOV ADC,P1 ;读取A/D转换结果
- CLR OE ;关闭输出
- 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
- PROC: MOV A,ADC ;数值转换
- MOV B,#51
- DIV AB
- MOV LED_2,A
- MOV A,B
- MOV B,#10
- DIV AB
- MOV LED_1,A
- MOV LED_0,B
- LCALL DISP ;显示A/D转换结果
- SJMP WAIT
- INT_T0: CPL CLOCK ;提供ADC0808时钟
- RETI
- INT_T1: CPL SOUND
- INC TCNTA
- MOV A,TCNTA
- JB FLAG,I1 ;判断是低位报警还是高位报警
- CJNE A,#30,RETUNE ;低位报警声
- SJMP I2
- I1: CJNE A,#20,RETUNE ;高位报警声
- I2: MOV TCNTA,#0
- INC TCNTB
- MOV A,TCNTB
- CJNE A,#25,RETUNE
- MOV TCNTA,#0
- MOV TCNTB,#0
- LCALL DELAY2
- RETUNE: RETI
- DISP: MOV A,LED_0 ;数码管显示子程序
- MOVC A,@A+DPTR ;将字段码转换显示码
- CLR P2.3
- MOV P0,A
- LCALL DELAY
- SETB P2.3
- MOV A,LED_1
- MOVC A,@A+DPTR
- CLR P2.2
- MOV P0,A
- LCALL DELAY
- SETB P2.2
- 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
- RET
- DELAY: MOV R6,#10 ;延时5ms
- D1: MOV R7,#250
- DJNZ R7,$
- DJNZ R6,D1
- RET
- DELAY2: MOV R5,#20
- D2: MOV R6,#20
- D3: MOV R7,#250
- DJNZ R7,$
- DJNZ R6,D3
- DJNZ R5,D2
- RET
- TABLE: DB 3FH,06H,5BH,4FH,66H ;0,1,2,3,4 共阴极接法
- DB 6DH,7DH,07H,7FH,6FH ;5,6,7,8,9,
- END
复制代码