四川信息职业技术学院
毕业设计说明书(论文)
设计(论文)题目: 基于单片机的电子秤的设计
专 业: 应用电子技术
班 级: 应电12-3
学 号: 1111111 姓 名: 某某某
指导教师: 某某某
二〇一四年十一月二十五日
四川信息职业技术学院毕业设计(论文)任务书
目 录
摘 要 .................................................................................................................................. 1
绪 论 .................................................................................................................................. 2
第一章 方案设计与论证 .................................................................................................. 3
1.1 方案选择 ........................................................................................................... 3
1.2 方案论证 ........................................................................................................... 4
第二章 硬件设计与分析 .................................................................................................. 5
2.1 单片机最小系统 ............................................................................................... 5
2.1.1 芯片介绍 ............................................................................................. 5
2.1.2 时钟电路设计 ..................................................................................... 7
2.1.3 复位电路设计 ..................................................................................... 8
2.2 信号采集模块 ................................................................................................... 9
2.2.1 传感器的选择 ..................................................................................... 9
2.2.2 传感器的选择 ..................................................................................... 9
2.3 数据转换电路 ................................................................................................. 10
2.3.1 A/D转换器的选择 ............................................................................ 10
2.3.2 ADC0832的介绍 .............................................................................. 11
2.3.3单片机对ADC0832的控制原理 ..................................................... 11
2.4 声光报警电路 ................................................................................................. 12
2.5 显示电路 ......................................................................................................... 13
2.6 整机电路 ......................................................................................................... 13
第三章 软件设计 ............................................................................................................ 14
3.1 主程序流程图 ................................................................................................. 14
3.2 模数转换子程序 ............................................................................................. 15
3.3 报警子程序设计 ............................................................................................. 15
3.3 报警子程序设计 ............................................................................................. 16
第四章 系统仿真与调试 ................................................................................................ 18
4.1 常用调试工具 ................................................................................................. 18
4.2 PROTEUS电子秤的工作过程 ........................................................................... 18
结 论 ................................................................................................................................ 20
参考文献 ............................................................................................................................ 21
附录1 整机电路图 ......................................................................................................... 22
附录2 程序清单 ............................................................................................................. 23
附录3 元器件清单表 ..................................................................................................... 29
摘 要
随着微电子技术的应用,市场上使用的传统称重工具已经满足不了人们的要求。为了改变传统称重工具在使用上存在的问题,在本设计中将智能化、自动化、人性化用在了电子称重的控制系统中。本系统主要由单片机来控制,测量物体重量部分由称重传感器及A/D转换器组成,加上显示单元,此电子秤俱备了功能多、性能价格比高、功耗低、系统设计简单、使用方便直观、速度快、测量准确、自动化程度高等特点。
本系统以AT89C51单片机为主控芯片、辅以传感器采集模块、声光报警电路、电源供电模块、显示电路模块、数据转换模块等构成智能称重系统,从而实现自动称重系统的称重功能、声光报警功能。硬件部分主要由单片机AT89C51、LCD、AD转换器、压力传感器、蜂鸣器等基本外围电子电路组成。可以说,此设计所完成的电子秤很大程度上满足了应用需求。
此电子秤具备备了功能多、性能价格比高、功耗低、系统设计简单、使用方便直观、速度快、测量准确、自动化程度高等特点。
关键词 传感器采集;液晶显示;数模转换;声光报警
绪 论
随着时代科技的迅猛发展,微电子学和计算机等现代电子技术的成就给传统的电子测量与仪器带来了巨大的冲击和革命性的影响。常规的测试仪器仪表和控制装置被更先进的智能仪器所取代,使得传统的电子测量仪器在远离、功能、精度及自动化水平定方面发生了巨大变化,并相应的出现了各种各样的智能仪器控制系统,使得科学实验和应用工程的自动化程度得以显著提高。
作为重量测量仪器,智能电子秤在各行各业开始显现其测量准确,测量速度快,易于实时测量和监控的巨大优点,并开始逐渐取代传统型的机械杠杆测量称,成为测量领域的主流产品。本文设计的电子秤以单片机为主要部件,用汇编语言进行软件设计,硬件则以电阻传感器为主,测量0~5Kg电子秤,随时可改变上限阈值,并达到阈值报警的功能。称重传感器输出的电量是模拟量,数值比较小达不到A/D转换接收的电压范围。所以送A/D转换之前要对其进行前端放大、整形滤波等处理。然后,A/D转换的结果才能送单片机进行数据处理并显示。其数据显示部分采用LCD显示,成本低且能很好地实现所要求的功能。本次课设完成的电子秤的主要优点是:1、实时测量与监控。2、阈值修改与重设功能。3、超值报警功能。4、测量精度高。5、显示速度快、准确。
本文设计的电子秤虽然是一个极其简单的智能仪器,但是通过它可以更深入的了解智能仪器的工作原理以及其优异的性能。
第一章 方案设计与论证
本设计方案采用内部含Flash存储器的单片机AT89C51作为核心部件,并配以时钟电路、复位电路、显示电路、声光报警电路、采集电路、显示电路。成功实现重量显示,从而达到设计要求。
电子秤的工作原理如下:当物体放在秤盘上时,压力施给传感器,该传感器发生形变,从而使阻抗发生变化,同时使用激励电压发生变化,输出一个变化的模拟信号;再将该信号输出到模拟转换器;转换成便于处理的数字信号输出至单片机;单片机进行处理、运算后将结果送至显示器进行显示。
1.1 方案选择
在设计系统时,针对要实现的功能来设计电子秤的方案有以下俩种:
方案一:本方案由时钟电路、复位电路、数据采集电路、数码管显示电路、单片机以及声光报警电路组成。是在系统工作原理的基础上进行了扩展,增加外界对单片机内部的数据设定,使电子秤实现称重的功能。这种方案,硬件部分简单,接口电路易于实现,并且在编程时大大减少了程序量。设计其方框图如图1-1所示:
图1-1 方案一方框图
方案二:本方案由时钟电路、复位电路、数据采集电路、LCD显示电路、A/D转换、单片机以及声光报警电路组成。此方案前端信号处理时,选用信号转换等措施,尤其在显示方面采用具有字符图文显示功能的LCD显示器。这种方案不仅加强了人机交换的
能力,而且显示位数全面。其方框图如图1-2所示:
图1-2方案二方框图
1.2 方案论证
方案一设计的电子秤,可以实现称重功能,但是局限于数码管的功能,在显示时有精度局限。在显示重量时,如果数码管没有足够的位数,那么称量物体重量的精度必受到限制,此方案需要较多的数码管接入电路中。这样在处理输入输出接口时需要另行扩展足够多的I/O接口供数码管使用,比较麻烦。而LCD显示器则大大节省了I/O口的运用。显示位数更多,精度也更高,满足设计要求。另一方面,方案一在前端信号处理不够周到,而方案二在前端信号处理时,多了A/D转换措施,能够有效地处理信号,常符合设计要求。
鉴于本电子秤设计的功能要求,所以在具体设计时采用了第二种设计方案。
第二章 硬件设计与分析
电子秤系统是由单片机最小系统、数据处理电路、数据采集电路、声光报警电路、显示电路和稳压电源等组成,电子秤系统电路原理图见附录1所示。
2.1 单片机最小系统
电路最小系统由单片机、时钟电路、复位电路组成,它是电路工作的最基本的单元电路,任何单片机基于单片机的设计系统都离不开它。
2.1.1 芯片介绍
AT89C51单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线。
中央处理器:
中央处理器(CPU)是整个单片机的控制核心部件,完成运算和控制功能。CPU有运算器和控制器组成。它是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。
内部数据存储器(RAM):
8051内部共有256个RAM单元,其中有128个8位用户数据存储单元和128个专用寄存器单元,它们是统一编址的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以,用户能使用的RAM只有128个,可存放读写的数据,运算的中间结果或用户定义的字型表。
内部程序存储器(ROM):
89C51共有4096个8位掩膜ROM,用于存放用户程序,原始数据或表格。 定时/计数器:
89C51有两个16位的可编程定时/计数器,以实现定时或计数产生中断用于控制程序转向。
并行输入输出(I/O)口89C51共有4组8位I/O口(P0、 P1、P2或P3),用于对外部数据的传输。
全双工串行口:
89C51内置一个全双工串行通信口,用于与其它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器使用。
中断系统:
89C51具备较完善的中断功能,有两个外中断、两个定时/计数器中断和一个串行中断,可满足不同的控制要求,并具有2级的优先级别选择。
时钟电路:
89C51内置最高频率达12MHz的时钟电路,用于产生整个单片机运行的脉冲时序,但89C51单片机需外置振荡电容。
单片机的引脚说明:
89C51系列单片机采用40Pin封装的双列直接DIP结构,下图是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。其引脚排列如图2-1所示:
图2-1 单片机引脚排列图
控制引脚介绍:
(1)ALE:系统扩展时,P0口是八位数据线和低八位地址先复用引脚,ALE用于把P0口输出的低八位地址锁存起来,以实现低八位地址和数据的隔离。
(2)PSEN:低电平有效时,可实现对外部ROM单元的读操作。
(3)EA:当EA信号为低电平时,对ROM的读操作限制在外部程序存储器;而
挡EA为高电平时,对ROM的读操作是从内部程序存储器开始的,并可延至外部程序存储器。
(4)RST:当输入的复位信号延续两个机器周期以上的高电平时即为有效,用以完成单片机的复位初始化操作。
(5)XTAL1和XTAL2:外接晶振引线端。
并行I/O端口介绍:P0端口[P0.0-P0.7] P0是一个8位漏极开路型双向I/O端口,端口置1(对端口写1)时作高阻抗输入端。作为输出口时能驱动8个TTL。
P1端口[P1.0-P1.7] P1是一个带有内部上拉电阻的8位双向I/0端口。输出时可驱动4个TTL。端口置1时,内部上拉电阻将端口拉到高电平,作输入用。对内部Flash程序存储器编程时,接收低8位地址信息。
P2端口[P2.0-P2.7] P2是一个带有内部上拉电阻的8位双向I/0端口。输出时可驱动4个TTL。端口置1时,内部上拉电阻将端口拉到高电平,作输入用。对内部Flash程序存储器编程时,接收高8位地址和控制信息。在访问外部程序和16位外部数据存储器时,P2口送出高8位地址。而在访问8位地址的外部数据存储器时其引脚上的内容在此期间不会改变。
P3端口[P3.0-P3.7] P3是一个带有内部上拉电阻的8位双向I/0端口。输出时可驱动4个TTL。端口置1时,内部上拉电阻将端口拉到高电平,作输入用。除此之外P3端口还用于一些专门功能,如表2-1所示:
表2-1 P3引脚的第二功能说明
2.1.2 时钟电路设计
单片机是一个复杂的同步时序电路,为了保证同步工作方式的实现,电路应在唯一的时钟信号控制下严格的按时序进行工作。时钟电路用于产生单片机的工作的所修要的
时钟信号。时钟可以由内部方式或外部方式产生。89C51内部方式时钟电路,是在XTAL1和XTAL2引脚上外接定时元件,就能构成自激振荡电路。定时元件通常采用石英晶体和电容组成的并联谐振电路。电容器C1和C2主要起频率微调作用,电容值可选取为30pF左右或40pF左右。89C51外部方式时钟电路是XTAL1接外部振荡器,XTAL2悬空。对外部振荡信号无特殊要求,只要保证脉冲宽度,一般采用频率低于12MHz的方波信号。而此设计采用石英晶体内部时钟电路。如图2-2所示。
XTAL1是片内振荡器的反相放大器输入
端,XTAL2则是输出端,使用外部振荡器时,
外部振荡信号应直接加到XTAL1,而XTAL2悬
空。内部方式时,时钟发生器对振荡脉冲二分频,
如晶振为12MHz,时钟频率就为6MHz。晶振的
频率可以在1MHz-12MHz内选择。电容取30pF
左右。系统的时钟电路设计是采用的内部方式,
即利用芯片内部的振荡电路。AT89C51单片机图2-2 时钟电路
内部有一个用于构成振荡器的高增益反相放大器。引脚XTAL1和XTAL2分别是此放大器的输入端和输出端。
这个放大器与作为反馈元件的片外晶体谐振器一起构成一个自激振荡器。外接晶体谐振器以及电容C1和C2构成并联谐振电路,接在放大器的反馈回路中。对外接电容的值虽然没有严格的要求,但电容的大小会影响震荡器频率的高低、震荡器的稳定性、起振的快速性和温度的稳定性。因此此系统电路的晶体振荡器的值为12MHz,电容应尽可能的选择陶瓷电容,电容值约为30pF。
2.1.3 复位电路设计
复位是使单片机或系统中的其他部件处于某种确定的初始状态。单片机的工作就是从复位开始的,当在单片机的RST引脚引入高电平并保持2个机器周期时,单片机内部就执复位操作。
实际应用中,复位操作有两种基本的形式:一种是上电复位,另一种是按键复位。由于本次设计采用的是上电复位,这里只介绍上电复位,如图2-3所示。
上电复位上电瞬间,电容充电电流最大,电容相当于短路,RST端为高电平,自动复位;电容俩端的电压达到电源电压时,电容充电电流为零,电容相当于开路,RST端
为低电平,程序正常运行。
RST引脚的高电平只要能保持足够的时间(2个机器周期),单片机就可以进行复位操作。该电路典型的电阻和电容参数为:晶振为12MHz
时,C1为10uF,R1为8.2kΩ,晶振为6MHz时,C1为22uF,
R1为1kΩ。
单片机的复位操作使单片机进入初始化状态。之后,
程序计数器PC=0000H程序从0000H地址单元开始执行。
单片机启动后,片内RAM为随机值,运行中的复位操作
不改变片内RAM的内容。 图2-3 按键复位电路
特殊功能寄存器复位后状态使确定的。P0~P3为FFH,SP为07H,SBUF不定,IP、IE和PCON的有效值为0,其余的特殊功能寄存器的状态均为00H。相应的意义为:P0~P3=FFH,相当于各口锁存器已写入1,此时不但可以用于输出,也可以用于输入;SP=07H,堆栈指针指向片内RAM的07H单元(第一个入栈内容将写入08H单元);IP、IE和PCON的有效位为0,各中断源处于的优先级且均被关断,串行通信的波特率不加倍;PSW=00H,当前工作寄存器为0组。
2.2 信号采集模块
当物体放在秤盘上时,压力施给传感器,该传感器发生形变,从而使阻抗发生变化,同时使用激励电压发生变化,输出一个变化的模拟信号;再将该信号输出到数据处理模块,进行数据处理。
2.2.1 传感器的选择
传感器对于系统至关重要,需要综合实际的需求和各类压力传感器的性能参数加以选择。传感器属于精密部件,剧烈振动、自由落体、碰撞、过载、过压等等,都非常容易造成传感器永久损坏或者影响精度和线性。目前常用的有:电容式压力传感器;压电式压力传感器;电阻应变式压力传感器。
综合考虑,本设计要实现的电子秤的是绝对压力值,同时为了简化电路,提高稳定性和抗干扰能力,需要使用具有温度补偿能力的电阻应变式压力传感器。本设计选用MXP4115压力传感器,其最大量程为5Kg。
2.2.2 传感器的选择
MPX411系列为压阻传感器是国家的最先进的单片硅压力传感器设计用于广泛的应
用范围,特别是那些采用微控制器或微处理器与A/D输入。这种传感器结合先进的微机械加工技术,薄膜金属化和两极处理,以提供成比例的一个准确的,高层次的模拟输出信号所施加的压力。小型化和片上集成的高可靠性是工程师最合适的打算。
MPX411系列为压阻传感器提供差分和仪表应用;最大误差为1.4%; 温度补偿在 - 40°到+125°C;是优惠减少重量和体积比现有混合动力模块 ;有耐用的环氧Unibody的元素、专利的硅剪应力应变计。其管脚说明如表2-2所示:
表2-2 MPX4115管脚说明
如图2-4所示,本设计主要将传感器1、2脚接到ADC0832的CH0与CH1脚用于获取模拟量,4、5脚接数字地,3脚接VCC+5V。当我们改变传感器的模拟电压值时,相应的其ADC数据传给单片机的数字量会随之变化,在液晶显示屏显示的也不一样。
图2-4 信号采集电路
2.3 数据转换电路
数据采集电路的作用就是将从采集电路接收到的模拟信号转换成便于处理的数字信号,并输出至下级电路。
2.3.1 A/D转换器的选择
A/D转换部分是整个设计的关键,这一部分处理不好,会使得整个设计毫无意义。目前,世界上有多种类型的ADC,有传统的并行、逐次逼近型、积分型ADC,也有近年来新发展起来的∑-Δ型和流水线型ADC,多种类型的ADC各有其优缺点并能满足不同的具体应用要求。
根据系统的精度要求以及综合的分析其优点和缺点,本设计采用了12位A/D转换
器ADC0832。ADC0832为8位分辨率A/D转换芯片,其最高分辨可达256级,可以适应一般的模拟量转换要求。其内部电源输入与参考电压的复用,使得芯片的模拟电压输入在0~5V之间。芯片转换时间仅为32μS,据有双数据输出可作为数据校验,以减少数据误差,转换速度快且稳定性能强。
2.3.2 ADC0832的介绍
ADC0832是美国国家半导体公司生产的一种8位分辨率、双通道A/D转换芯片。由于它体积小,兼容性,性价比高而深受单片机爱好者及企业欢迎,其目前已经有很高的普及率。
ADC0832为8位分辨率A/D转换芯片,其最高分辩可达256级,可以适应一般的模拟量转换要求。芯片转换时间仅为32US,据有双数据输出可作为数据校验,以减少数据误差,转换速度快且稳定性能强。
其独立的芯片使能输入,使处理器控制更加方便。通过DI数据输入端,可轻易实现通道功能的选择。其引脚功能如表2-3所示:
表2-3 ADC0832引脚功能
2.3.3 单片机对ADC0832的控制原理
正常情况下ADC0832与单片机的接口应为4条数据线,分别是CS、CLK/DO/DI.但由于DO端DI端在通信时并未同时有效并与单片机的接口是双向的,所以电路设计时我们将DO和DI并联在一根数据线上使用。
当ADC0832未工作时其CS输入端应为高电平,此时芯片禁用,CLK和DO/DI的电平可任意。当要进行A/D转换时,须先将CS使能端置于低电平直到转换完全结束。此时芯片开始转换工作,同时由处理器向芯片时钟输入端CLK输入时钟脉冲,DO/DI端则使用DI端输入通道功能选择的数据信号。在第1 个时钟脉冲的下沉之前DI端必
须是高电平,表示启始信号。在第2、3个脉冲下沉之前DI端应输入2 位数据用于选择通道功能。其通道控制表2-4所示:
表2-4 通道控制表
到第3个脉冲的下沉之后DI端的输入电平就失去输入作用,此后DO/DI端则开始利用数据输出DO进行转换数据的读取。从第4个脉冲下沉开始由DO端输出转换数据最高位DATA7,随后每一个脉冲下沉DO端输出下一位数据。直到第11个脉冲时发出最低位数据DATA0,一个字节的数据输出完成。也正是从此位开始输出下一个相反字节的数据,即从第11个字节的下沉输出DATA0。随后输出8位数据,到第19 个脉冲时数据输出完成,也标志着一次A/D转换的结束。最后将CS置高电平禁用芯片,直接将转换后的数据进行处理就可以了。其接口电路如图2-5所示:
图2-5 ADC0832的接口电路
2.4 声光报警电路
智能仪器一般都有报警功能,报警主要用于系统运行出错、当测量的数据超过仪表量程或者是超过用户设置的上下限时为提醒用户而设置。本系统中,设置报警的目的是在超出电子秤测量范围不能正常显示时,发出声光报警信号,提示用户,防止损坏仪器。
声光报警电路是由单片机的I/O口来控制的,当称重物体重量超过系统设计所允许的重量,通过程序使单片机的I/O值为低电平,则发光二极管导通,二极管发光,蜂鸣器LS1发出报警声。声光报警电路如图2-6所示:
图2-6 声光报警电路
2.5 显示电路
显示电路的作用是显示被称物体的重量。通过第一章方案论证讨论得出本设计采用LM016L液晶显示,其优点是显示位数更多,精度也更高。其接口电路如图2-7所示:
图2-7 液晶LM016L接口电路
LM016L模块采用HD44780控制器,hd44780具有简单而功能较强的指令集,可以实现字符移动,闪烁等功能,LM016L与单片机MCU通讯可采用8位或4位并行传输两种方式,hd44780控制器由两个8位寄存器,指令寄存器(IR)和数据寄存器(DR)忙标志(BF),显示数RAM(DDRAM),字符发生器ROMA(CGOROM)字符发生器RAM(CGRAM),地址计数器RAM(AC)。其引脚功能表如所示表2-5所示:
表2-5 LM016L引脚功能
2.6 整机电路
电子秤系统原理是:当物体放在秤盘上,压力施给传感器,,产生传感器内部平行四边形形变,由这4片应变片接成的惠斯通(Wheatstone)电桥在供桥电压的激励下随重量不同而输出不同的电压信号后送给A/D转换电路,转换成便于处理的数字信号输出至单片机;单片机进行处理、运算后将结果送至显示器进行显示。整机电路图详见附录1。
第三章 软件设计
本次设计软件系统采用模块化设计方法,不仅易于编程和调试,也可减小软件故障率和提高软件的可靠性。本设计主要包括主程序模块、LCD显示模块、超量程报警模块、AD转换模块等。
3.1 主程序流程图
当单片机上电复位后,系统电路开始运行程序,首先利用压力传感器检测所称物体重量,之后启动AD转换,将转换完成的数字信号送入单片机进行处理,之后判断其值是否达到设定值,若达到设定值,则使P3.0为0,从而启动报警,同时显示重量;若小于设定值,则使P3.0为1,并显示重量。其流程图如图3-1所示:
图3-1 主程序设计流程图
3.2 模数转换子程序
A/D转换子程序主要是指在系统开始运行时,把称重传感器传递过来的模拟信号转换成单片机易于处理的数字信号,并将数字信号传递到单片机,便于单片机进行处理的程序设计。
当主程序调用AD转换子程序时,AD转换便开始初始化,等待初始化完成后,MCU便通过拉低CS、拉高CLK来启动ADC0832进行外部压力传感转换后的电压信号进行采样,每产生8个CLK脉冲,DATA就获得一位完整的8bit数据,所以我们需要判断DATA右移8位是否完成,若未完成则继续转换,若完成,则拉高CS、拉低CLK,返回数据DATA,将数据存储并送入单片机。其流程图如图3-2所示:
图3-2 AD转换子程序设计流程图
3.3 报警子程序设计
报警子程序主要是指在称重过程中,为了防止所称物过重导致仪器损坏,而设置的超量程报警电路,一但所称物体超过设定量程,则启动报警,否则不启动。
当单片机接收到采集的重量值后,立即与程序所设量程值进行比较,若采样值大于设定量程,则启动报警,也就是将P3.0置为0,从而使发光二极管点亮,蜂鸣器发声;若采样值小于设定量程,则关闭报警或者不报警,也就是将P3.0置为1,从而使发光二极管灭,蜂鸣器停止发声。其流程图如图3-3所示。
图3-3 报警子程序流程图
3.3 报警子程序设计
显示子程序主要是来判断是否需要显示,以及如何去显示,也是十分重要的程序之
一。而显示子程序是其他程序所需要去调用的程序之一,因此,显示子程序的设计就显得举足轻重,设计的时候也要十分的小心。
本次设计显示模块采用1602液晶屏,LM016L液晶能够显示比较复杂的汉字和图形对它的操作主要将一些固定的字符写入寄存器中,当需要显示时调用即可,以达到在液晶屏上显示的效果。
LCD液晶显示子程序包括显示液晶显示初始化、字符定位函数、输出字符函数、显示函数、转换函数、写数据函数、写命令函数等组成。
当主程序调用液晶显示函数时,首先调用延时子程序,然后LCD开始初始化,等
待初始化完成后便对其写入控制操作字,包括图形的显示方式,字体的模式等,然后,写入数据,再在其内部输出字符函数。最后将字符显示出来,也就是显示出所称物体的重量。之后调用延时显示重量。最后其流程图如图3-4所示:
图3-4 显示子程序流程图
第四章 系统仿真与调试
4.1 常用调试工具
Keil软件是集成调试环境,集成了编缉器、编译器、调试器,支持软件模拟,支持项目管理功能强大的观察窗口,支持所有的数据类型。树状结构显示,一目了然,支持ASM(汇编)、C语言,多语言多模块源程序混合调试,在线直接修改、编译、调试源程序,错误指令定位。功能很强大。用于对程序的调试和编辑。Keil软件调试情况如图4-1所示:
图4-1 Keil软件界面
4.2 Proteus电子秤的工作过程
绘制电子秤的软件仿真图步骤分以下三步: (1)查找所需要的元器件。 (2)根据要求连接电路图。 (3)下载所写完的C程序并仿真。 通过以上步骤,来实现电子秤的仿真实现。
状态一:如图4-2所示,此时电子秤处于正常阶段,压力传感器压力值小于104.8,蜂鸣器不工作,发光二极管不亮,LCD显示重量,精确到0.001Kg。
图4-2 状态一仿真图
状态二:如图4-3所示,此时电子秤处于超量程阶段,压力传感器压力值大于104.8,蜂鸣器发声,发光二极管点亮,LCD显示重量,精确到
0.001Kg
图4-3 状态二仿真图
结 论
随着集成电路和计算机技术的迅速发展,使电子仪器的整体水平发生巨大变化,传统的仪器逐步的被智能仪器所取代。智能仪器的核心部件是单片机,因其极高的性价比得到广泛的应用与发展,从而加快了智能仪器的发展。而传感器作为测控系统中对象信息的入口,越来越受到人们的关注。传感器好比人体“五官”的工程模拟物,它是一种能将特定的被测量信息按一定规律转换成某种可用信号输出的器件或装置本次设计中的半桥电子秤就是在以上仪器的基础上设计而成的。
本设计是以单片机AT89C51为控制核心,LCD显示器、压力传感器、AD转换器等元器件所组成的电子秤称重系统,当重量低于设定上限时,LCD正常显示其重量;重量高于设定上限时,LCD将不能正常显示其重量,并且发光二极管被点亮,蜂鸣器发声,警告防止物体太重损坏仪器。当重量再次低于设定上限时报警器停止报警,发光二极管灭、蜂鸣器停止发声,LCD正常显示重量。
下面我对整个毕业设计的过程做一下简单的总结。
首先,进行选题;之后,就是找资料了。查找资料是做毕业设计的前期准备工作。到图书馆查找资料或在网上下载资料;再之后就是软件的学习。根据已有论文资料中提到的软件用途,有针对性的学。包括毕业设计前期读文献资料,要与毕业设计紧密联系起来,最好是边做边读,有针对性的读;最后,仿真调试也是设计中重要的一个环节。首先必须熟悉每个元器件在电路中的作用,其次分析电路的运行过程选择合适的元器件,否则无法正常运行。程序也需要不断的改写,才能达到效果。
总之,做这个毕业设计过程中我懂得了许多东西,培养了我独立工作的能力,树立了对自己工作能力的信心,相信会对今后的学习工作生活有非常重要的影响。虽然这个设计还不是很完善,但是,我所在在设计过程中所学到的东西,使我终身受益。
参考文献
[1] 李建忠.单片机原理及应用.西安:西安电子科技大学出版社,2002 [2] 朱宇光.单片机应用新技术教程.北京:电子工业出版社,2000 [3] 刘守义.单片机应用技术.西安:西安电子科技大学出版社,2002 [4] 房小翠.单片机实用系统设计技术.北京:国防工业出版社,1999 [5] 李华.MCS-51系列单片机实用接口技术.北京:电子工业出版社,2000 [6] 李全利.单片机原理及应用技术.北京:高等教育出版社,2006 [7] 何立民.单片机高等教程.航空航天大学出版社,2000
[8] 张毅刚.MCS-51单片机应用设计.哈尔滨工业大学出版社,1997 [9] 潘新民.微型计算机控制技术.人民邮电出版社,1999
[10] 黄智伟.全国大学生电子设计竞赛训练教程.北京:电子工业出版社,2004
附录1
整机电路图
附录2 程序清单
#include #include unsigned char press_shifen=0;
unsigned char press_baifen=0; #include #include
#define uchar unsigned char #define uint unsigned int #define BUSY
0x80 //常量定义
#define DATAPORT P0
sbit ADCS =P3^5; sbit ADDI =P3^7; sbit ADDO =P3^7; sbit ADCLK =P3^6;
sbit LCM_RS=P2^0; sbit LCM_RW=P2^1; sbit LCM_EN=P2^2; uint x1,y1,z1=0,w1,temp1; uchar ad_data,k,n,m,e,num,s; //采样值存储
sbit beep =P3^0; char press_data; //标度变换存储单元
unsigned char ad_alarm; //报警值存储单元
unsigned char press_ge=0; unsigned char press_qianfen=0;
uchar code str0[]={"Weight: . Kg "};
void delay(uint);
void lcd_wait(void);
void
delay_LCM(uint);
//LCD延时子程序 void
initLCM(
void); //LCD初始化子程序
void lcd_wait(void); //LCD检测忙子程序 void
WriteCommandLCM(uchar
WCLCM,uchar BusyC); //写指令到ICM子函数
void WriteDataLCM(uchar WDLCM); //写数据到LCM子函数
Y ,uchar void DisplayOneChar(uchar
X,uchar
DData); // 显示指定坐标的一个字符子函数
Y ,uchar code *DData); void DisplayListChar(uchar X,uchar
// 显示指定坐标的一串字符子函数 void weishu(uint m);
void weishu1(uint m);
void display(void);
uchar Adc0832(unsigned char channel);
void alarm(void); void data_pro(void); /**********main funcation************/
void main(void) { delay(500);
//ad_data=0; initLCM( );
WriteCommandLCM(0x01,1); DisplayListChar(0,0,str0);
while(1)
{
ad_data =Adc0832(0);
//
采样值存储单元初始化为0
alarm(); data_pro(); display();
DisplayListChar(0,0,str0);
}
/***延K*1ms,12.000mhz**********/
void delay(uint k) { uint i,j; for(i=0;i
for(j=0;j
/******写指令到ICM子函数*****/ void WriteCommandLCM(uchar
WCLCM,uchar BusyC)
{
if(BusyC) lcd_wait();
DATAPORT=WCLCM;
LCM_RS=0;
// 选中指令寄存器 LCM_RW=0; LCM_RW=0; // 写
模式
LCM_EN=1; _nop_();
_nop_();
_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); LCM_EN=0; }
/*****写数据到LCM子函数******/ void WriteDataLCM(uchar WDLCM) {
lcd_wait( );
DATAPORT=WDLCM;
LCM_RS=1;
LCM_RW=0;
LCM_EN=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
LCM_EN=0;
}
/*****lcm内部等待函数********/
void lcd_wait(void) {
DATAPORT=0xff;
LCM_EN=1;
LCM_RS=0;
LCM_RW=0; LCM_RW=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); while(DATAPORT&BUSY) { LCM_EN=0;
_nop_();
_nop_(); _nop_();
_nop_(); _nop_(); _nop_(); _nop_(); _nop_();
LCM_EN=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); }
LCM_EN=0;
}
/*****LCM初始化子函数*********/ void initLCM( ) {
LCM_EN=0; DATAPORT=0; delay(15);
WriteCommandLCM(0x38,0); delay(5);
WriteCommandLCM(0x38,0); delay(5);
WriteCommandLCM(0x38,0); delay(5);
WriteCommandLCM(0x38,1); WriteCommandLCM(0x08,1); WriteCommandLCM(0x01,1);
WriteCommandLCM(0x06,1); WriteCommandLCM(0x0c,1); TMOD=0x11;
EA=1; ET1=1;
TR1=1; k=0; x1=0; y1=0; z1=0; }
/****显示指定坐标的一个字符子函数****/
void DisplayOneChar(uchar X,uchar Y,uchar DData)
{
Y&=0x01; X&=0x0f; if(Y)
X|=0x40; //若y为1(显示第二行),地址码+0X40
X|=0x80; //指令码为地址码+0X80
WriteCommandLCM(X,1); WriteDataLCM(DData); }
/*******显示指定坐标的一串字符子函数*****/
void DisplayListChar(uchar X,uchar
Y,uchar code *DData)
{
uchar ListLength=0; Y&=0x01; X&=0x0f; while(X
DisplayOneChar(X,Y,DData[ListLength]);
ListLength++; X++; } }
/*****************系统显示子函数*****************/
void display(void) { WriteCommandLCM(0x0c,1); DisplayListChar(0,0,str0);
//DisplayListChar(0,1,str2);
DisplayOneChar(8,0,press_ge+0x30);
DisplayOneChar(10,0,press_shifen+0x30);
DisplayOneChar(11,0,press_baifen
+0x30);
DisplayOneChar(12,0,press_qianfen+0x30);
delay(1000);
}
/************ 读ADC0832函数 ************/
//采集并返回
uchar Adc0832(unsigned char channel) //AD转换,返回结果
{
uchar i=0; uchar j; uint dat=0; uchar ndat=0;
if(channel==0)channel=2; if(channel==1)channel=3; ADDI=1; _nop_(); _nop_();
ADCS=0;//拉低CS端 _nop_(); _nop_();
ADCLK=1;//拉高CLK端 _nop_(); _nop_();
ADCLK=0;//拉低CLK端,形成下降沿1
_nop_(); _nop_();
ADCLK=1;//拉高CLK端 ADDI=channel&0x1; _nop_();
第27页
_nop_();
ADCLK=0;//拉低CLK端,形成下降沿2
_nop_(); _nop_();
ADCLK=1;//拉高CLK端 ADDI=(channel>>1)&0x1; _nop_(); _nop_();
ADCLK=0;//拉低CLK端,形成下降沿3
ADDI=1;//控制命令结束 _nop_(); _nop_(); dat=0; for(i=0;i
dat|=ADDO;//收数据 ADCLK=1; _nop_(); _nop_();
ADCLK=0;//形成一次时钟脉冲
_nop_(); _nop_(); dat
if(i==7)dat|=ADDO; }
for(i=0;i
j=j|ADDO;//收数据
共29页
ADCLK=1; _nop_(); _nop_();
ADCLK=0;//形成一次时钟脉冲
_nop_(); _nop_(); j=j>=1; }
ADCS=1;//拉低CS端 ADCLK=0;//拉低CLK端 ADDO=1;//拉高数据端,回到初始状态
dat
return(dat); //return ad k
}
void data_pro(void) {
unsigned int; float press; if(0
{ int vary=ad_data;
press=(0.019531*vary);
第28页
temp1=(int)(press*1000);
//放大1000倍,便于后面的计算
press_ge=temp1/1000;
//取压力值百位
press_shifen=(temp1%1000)/100;
//取压力值十位
press_baifen=((temp1%1000)%100)/10;
//取压力值个位
press_qianfen=((temp1%1000)%100)%
10;
//取压力值十分位
}
}
/*****************报警子函数*******************/
void alarm(void) {
if(ad_data>=220)
beep=0; //则
启动报警
else
beep=1;
} 共29页
附录3 元器件清单表
第29页 共29页
四川信息职业技术学院
四川信息职业技术学院
毕业设计说明书(论文)
设计(论文)题目: 基于单片机的电子秤的设计
专 业: 应用电子技术
班 级: 应电12-3
学 号: 1111111 姓 名: 某某某
指导教师: 某某某
二〇一四年十一月二十五日
四川信息职业技术学院毕业设计(论文)任务书
目 录
摘 要 .................................................................................................................................. 1
绪 论 .................................................................................................................................. 2
第一章 方案设计与论证 .................................................................................................. 3
1.1 方案选择 ........................................................................................................... 3
1.2 方案论证 ........................................................................................................... 4
第二章 硬件设计与分析 .................................................................................................. 5
2.1 单片机最小系统 ............................................................................................... 5
2.1.1 芯片介绍 ............................................................................................. 5
2.1.2 时钟电路设计 ..................................................................................... 7
2.1.3 复位电路设计 ..................................................................................... 8
2.2 信号采集模块 ................................................................................................... 9
2.2.1 传感器的选择 ..................................................................................... 9
2.2.2 传感器的选择 ..................................................................................... 9
2.3 数据转换电路 ................................................................................................. 10
2.3.1 A/D转换器的选择 ............................................................................ 10
2.3.2 ADC0832的介绍 .............................................................................. 11
2.3.3单片机对ADC0832的控制原理 ..................................................... 11
2.4 声光报警电路 ................................................................................................. 12
2.5 显示电路 ......................................................................................................... 13
2.6 整机电路 ......................................................................................................... 13
第三章 软件设计 ............................................................................................................ 14
3.1 主程序流程图 ................................................................................................. 14
3.2 模数转换子程序 ............................................................................................. 15
3.3 报警子程序设计 ............................................................................................. 15
3.3 报警子程序设计 ............................................................................................. 16
第四章 系统仿真与调试 ................................................................................................ 18
4.1 常用调试工具 ................................................................................................. 18
4.2 PROTEUS电子秤的工作过程 ........................................................................... 18
结 论 ................................................................................................................................ 20
参考文献 ............................................................................................................................ 21
附录1 整机电路图 ......................................................................................................... 22
附录2 程序清单 ............................................................................................................. 23
附录3 元器件清单表 ..................................................................................................... 29
摘 要
随着微电子技术的应用,市场上使用的传统称重工具已经满足不了人们的要求。为了改变传统称重工具在使用上存在的问题,在本设计中将智能化、自动化、人性化用在了电子称重的控制系统中。本系统主要由单片机来控制,测量物体重量部分由称重传感器及A/D转换器组成,加上显示单元,此电子秤俱备了功能多、性能价格比高、功耗低、系统设计简单、使用方便直观、速度快、测量准确、自动化程度高等特点。
本系统以AT89C51单片机为主控芯片、辅以传感器采集模块、声光报警电路、电源供电模块、显示电路模块、数据转换模块等构成智能称重系统,从而实现自动称重系统的称重功能、声光报警功能。硬件部分主要由单片机AT89C51、LCD、AD转换器、压力传感器、蜂鸣器等基本外围电子电路组成。可以说,此设计所完成的电子秤很大程度上满足了应用需求。
此电子秤具备备了功能多、性能价格比高、功耗低、系统设计简单、使用方便直观、速度快、测量准确、自动化程度高等特点。
关键词 传感器采集;液晶显示;数模转换;声光报警
绪 论
随着时代科技的迅猛发展,微电子学和计算机等现代电子技术的成就给传统的电子测量与仪器带来了巨大的冲击和革命性的影响。常规的测试仪器仪表和控制装置被更先进的智能仪器所取代,使得传统的电子测量仪器在远离、功能、精度及自动化水平定方面发生了巨大变化,并相应的出现了各种各样的智能仪器控制系统,使得科学实验和应用工程的自动化程度得以显著提高。
作为重量测量仪器,智能电子秤在各行各业开始显现其测量准确,测量速度快,易于实时测量和监控的巨大优点,并开始逐渐取代传统型的机械杠杆测量称,成为测量领域的主流产品。本文设计的电子秤以单片机为主要部件,用汇编语言进行软件设计,硬件则以电阻传感器为主,测量0~5Kg电子秤,随时可改变上限阈值,并达到阈值报警的功能。称重传感器输出的电量是模拟量,数值比较小达不到A/D转换接收的电压范围。所以送A/D转换之前要对其进行前端放大、整形滤波等处理。然后,A/D转换的结果才能送单片机进行数据处理并显示。其数据显示部分采用LCD显示,成本低且能很好地实现所要求的功能。本次课设完成的电子秤的主要优点是:1、实时测量与监控。2、阈值修改与重设功能。3、超值报警功能。4、测量精度高。5、显示速度快、准确。
本文设计的电子秤虽然是一个极其简单的智能仪器,但是通过它可以更深入的了解智能仪器的工作原理以及其优异的性能。
第一章 方案设计与论证
本设计方案采用内部含Flash存储器的单片机AT89C51作为核心部件,并配以时钟电路、复位电路、显示电路、声光报警电路、采集电路、显示电路。成功实现重量显示,从而达到设计要求。
电子秤的工作原理如下:当物体放在秤盘上时,压力施给传感器,该传感器发生形变,从而使阻抗发生变化,同时使用激励电压发生变化,输出一个变化的模拟信号;再将该信号输出到模拟转换器;转换成便于处理的数字信号输出至单片机;单片机进行处理、运算后将结果送至显示器进行显示。
1.1 方案选择
在设计系统时,针对要实现的功能来设计电子秤的方案有以下俩种:
方案一:本方案由时钟电路、复位电路、数据采集电路、数码管显示电路、单片机以及声光报警电路组成。是在系统工作原理的基础上进行了扩展,增加外界对单片机内部的数据设定,使电子秤实现称重的功能。这种方案,硬件部分简单,接口电路易于实现,并且在编程时大大减少了程序量。设计其方框图如图1-1所示:
图1-1 方案一方框图
方案二:本方案由时钟电路、复位电路、数据采集电路、LCD显示电路、A/D转换、单片机以及声光报警电路组成。此方案前端信号处理时,选用信号转换等措施,尤其在显示方面采用具有字符图文显示功能的LCD显示器。这种方案不仅加强了人机交换的
能力,而且显示位数全面。其方框图如图1-2所示:
图1-2方案二方框图
1.2 方案论证
方案一设计的电子秤,可以实现称重功能,但是局限于数码管的功能,在显示时有精度局限。在显示重量时,如果数码管没有足够的位数,那么称量物体重量的精度必受到限制,此方案需要较多的数码管接入电路中。这样在处理输入输出接口时需要另行扩展足够多的I/O接口供数码管使用,比较麻烦。而LCD显示器则大大节省了I/O口的运用。显示位数更多,精度也更高,满足设计要求。另一方面,方案一在前端信号处理不够周到,而方案二在前端信号处理时,多了A/D转换措施,能够有效地处理信号,常符合设计要求。
鉴于本电子秤设计的功能要求,所以在具体设计时采用了第二种设计方案。
第二章 硬件设计与分析
电子秤系统是由单片机最小系统、数据处理电路、数据采集电路、声光报警电路、显示电路和稳压电源等组成,电子秤系统电路原理图见附录1所示。
2.1 单片机最小系统
电路最小系统由单片机、时钟电路、复位电路组成,它是电路工作的最基本的单元电路,任何单片机基于单片机的设计系统都离不开它。
2.1.1 芯片介绍
AT89C51单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线。
中央处理器:
中央处理器(CPU)是整个单片机的控制核心部件,完成运算和控制功能。CPU有运算器和控制器组成。它是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。
内部数据存储器(RAM):
8051内部共有256个RAM单元,其中有128个8位用户数据存储单元和128个专用寄存器单元,它们是统一编址的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以,用户能使用的RAM只有128个,可存放读写的数据,运算的中间结果或用户定义的字型表。
内部程序存储器(ROM):
89C51共有4096个8位掩膜ROM,用于存放用户程序,原始数据或表格。 定时/计数器:
89C51有两个16位的可编程定时/计数器,以实现定时或计数产生中断用于控制程序转向。
并行输入输出(I/O)口89C51共有4组8位I/O口(P0、 P1、P2或P3),用于对外部数据的传输。
全双工串行口:
89C51内置一个全双工串行通信口,用于与其它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器使用。
中断系统:
89C51具备较完善的中断功能,有两个外中断、两个定时/计数器中断和一个串行中断,可满足不同的控制要求,并具有2级的优先级别选择。
时钟电路:
89C51内置最高频率达12MHz的时钟电路,用于产生整个单片机运行的脉冲时序,但89C51单片机需外置振荡电容。
单片机的引脚说明:
89C51系列单片机采用40Pin封装的双列直接DIP结构,下图是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。其引脚排列如图2-1所示:
图2-1 单片机引脚排列图
控制引脚介绍:
(1)ALE:系统扩展时,P0口是八位数据线和低八位地址先复用引脚,ALE用于把P0口输出的低八位地址锁存起来,以实现低八位地址和数据的隔离。
(2)PSEN:低电平有效时,可实现对外部ROM单元的读操作。
(3)EA:当EA信号为低电平时,对ROM的读操作限制在外部程序存储器;而
挡EA为高电平时,对ROM的读操作是从内部程序存储器开始的,并可延至外部程序存储器。
(4)RST:当输入的复位信号延续两个机器周期以上的高电平时即为有效,用以完成单片机的复位初始化操作。
(5)XTAL1和XTAL2:外接晶振引线端。
并行I/O端口介绍:P0端口[P0.0-P0.7] P0是一个8位漏极开路型双向I/O端口,端口置1(对端口写1)时作高阻抗输入端。作为输出口时能驱动8个TTL。
P1端口[P1.0-P1.7] P1是一个带有内部上拉电阻的8位双向I/0端口。输出时可驱动4个TTL。端口置1时,内部上拉电阻将端口拉到高电平,作输入用。对内部Flash程序存储器编程时,接收低8位地址信息。
P2端口[P2.0-P2.7] P2是一个带有内部上拉电阻的8位双向I/0端口。输出时可驱动4个TTL。端口置1时,内部上拉电阻将端口拉到高电平,作输入用。对内部Flash程序存储器编程时,接收高8位地址和控制信息。在访问外部程序和16位外部数据存储器时,P2口送出高8位地址。而在访问8位地址的外部数据存储器时其引脚上的内容在此期间不会改变。
P3端口[P3.0-P3.7] P3是一个带有内部上拉电阻的8位双向I/0端口。输出时可驱动4个TTL。端口置1时,内部上拉电阻将端口拉到高电平,作输入用。除此之外P3端口还用于一些专门功能,如表2-1所示:
表2-1 P3引脚的第二功能说明
2.1.2 时钟电路设计
单片机是一个复杂的同步时序电路,为了保证同步工作方式的实现,电路应在唯一的时钟信号控制下严格的按时序进行工作。时钟电路用于产生单片机的工作的所修要的
时钟信号。时钟可以由内部方式或外部方式产生。89C51内部方式时钟电路,是在XTAL1和XTAL2引脚上外接定时元件,就能构成自激振荡电路。定时元件通常采用石英晶体和电容组成的并联谐振电路。电容器C1和C2主要起频率微调作用,电容值可选取为30pF左右或40pF左右。89C51外部方式时钟电路是XTAL1接外部振荡器,XTAL2悬空。对外部振荡信号无特殊要求,只要保证脉冲宽度,一般采用频率低于12MHz的方波信号。而此设计采用石英晶体内部时钟电路。如图2-2所示。
XTAL1是片内振荡器的反相放大器输入
端,XTAL2则是输出端,使用外部振荡器时,
外部振荡信号应直接加到XTAL1,而XTAL2悬
空。内部方式时,时钟发生器对振荡脉冲二分频,
如晶振为12MHz,时钟频率就为6MHz。晶振的
频率可以在1MHz-12MHz内选择。电容取30pF
左右。系统的时钟电路设计是采用的内部方式,
即利用芯片内部的振荡电路。AT89C51单片机图2-2 时钟电路
内部有一个用于构成振荡器的高增益反相放大器。引脚XTAL1和XTAL2分别是此放大器的输入端和输出端。
这个放大器与作为反馈元件的片外晶体谐振器一起构成一个自激振荡器。外接晶体谐振器以及电容C1和C2构成并联谐振电路,接在放大器的反馈回路中。对外接电容的值虽然没有严格的要求,但电容的大小会影响震荡器频率的高低、震荡器的稳定性、起振的快速性和温度的稳定性。因此此系统电路的晶体振荡器的值为12MHz,电容应尽可能的选择陶瓷电容,电容值约为30pF。
2.1.3 复位电路设计
复位是使单片机或系统中的其他部件处于某种确定的初始状态。单片机的工作就是从复位开始的,当在单片机的RST引脚引入高电平并保持2个机器周期时,单片机内部就执复位操作。
实际应用中,复位操作有两种基本的形式:一种是上电复位,另一种是按键复位。由于本次设计采用的是上电复位,这里只介绍上电复位,如图2-3所示。
上电复位上电瞬间,电容充电电流最大,电容相当于短路,RST端为高电平,自动复位;电容俩端的电压达到电源电压时,电容充电电流为零,电容相当于开路,RST端
为低电平,程序正常运行。
RST引脚的高电平只要能保持足够的时间(2个机器周期),单片机就可以进行复位操作。该电路典型的电阻和电容参数为:晶振为12MHz
时,C1为10uF,R1为8.2kΩ,晶振为6MHz时,C1为22uF,
R1为1kΩ。
单片机的复位操作使单片机进入初始化状态。之后,
程序计数器PC=0000H程序从0000H地址单元开始执行。
单片机启动后,片内RAM为随机值,运行中的复位操作
不改变片内RAM的内容。 图2-3 按键复位电路
特殊功能寄存器复位后状态使确定的。P0~P3为FFH,SP为07H,SBUF不定,IP、IE和PCON的有效值为0,其余的特殊功能寄存器的状态均为00H。相应的意义为:P0~P3=FFH,相当于各口锁存器已写入1,此时不但可以用于输出,也可以用于输入;SP=07H,堆栈指针指向片内RAM的07H单元(第一个入栈内容将写入08H单元);IP、IE和PCON的有效位为0,各中断源处于的优先级且均被关断,串行通信的波特率不加倍;PSW=00H,当前工作寄存器为0组。
2.2 信号采集模块
当物体放在秤盘上时,压力施给传感器,该传感器发生形变,从而使阻抗发生变化,同时使用激励电压发生变化,输出一个变化的模拟信号;再将该信号输出到数据处理模块,进行数据处理。
2.2.1 传感器的选择
传感器对于系统至关重要,需要综合实际的需求和各类压力传感器的性能参数加以选择。传感器属于精密部件,剧烈振动、自由落体、碰撞、过载、过压等等,都非常容易造成传感器永久损坏或者影响精度和线性。目前常用的有:电容式压力传感器;压电式压力传感器;电阻应变式压力传感器。
综合考虑,本设计要实现的电子秤的是绝对压力值,同时为了简化电路,提高稳定性和抗干扰能力,需要使用具有温度补偿能力的电阻应变式压力传感器。本设计选用MXP4115压力传感器,其最大量程为5Kg。
2.2.2 传感器的选择
MPX411系列为压阻传感器是国家的最先进的单片硅压力传感器设计用于广泛的应
用范围,特别是那些采用微控制器或微处理器与A/D输入。这种传感器结合先进的微机械加工技术,薄膜金属化和两极处理,以提供成比例的一个准确的,高层次的模拟输出信号所施加的压力。小型化和片上集成的高可靠性是工程师最合适的打算。
MPX411系列为压阻传感器提供差分和仪表应用;最大误差为1.4%; 温度补偿在 - 40°到+125°C;是优惠减少重量和体积比现有混合动力模块 ;有耐用的环氧Unibody的元素、专利的硅剪应力应变计。其管脚说明如表2-2所示:
表2-2 MPX4115管脚说明
如图2-4所示,本设计主要将传感器1、2脚接到ADC0832的CH0与CH1脚用于获取模拟量,4、5脚接数字地,3脚接VCC+5V。当我们改变传感器的模拟电压值时,相应的其ADC数据传给单片机的数字量会随之变化,在液晶显示屏显示的也不一样。
图2-4 信号采集电路
2.3 数据转换电路
数据采集电路的作用就是将从采集电路接收到的模拟信号转换成便于处理的数字信号,并输出至下级电路。
2.3.1 A/D转换器的选择
A/D转换部分是整个设计的关键,这一部分处理不好,会使得整个设计毫无意义。目前,世界上有多种类型的ADC,有传统的并行、逐次逼近型、积分型ADC,也有近年来新发展起来的∑-Δ型和流水线型ADC,多种类型的ADC各有其优缺点并能满足不同的具体应用要求。
根据系统的精度要求以及综合的分析其优点和缺点,本设计采用了12位A/D转换
器ADC0832。ADC0832为8位分辨率A/D转换芯片,其最高分辨可达256级,可以适应一般的模拟量转换要求。其内部电源输入与参考电压的复用,使得芯片的模拟电压输入在0~5V之间。芯片转换时间仅为32μS,据有双数据输出可作为数据校验,以减少数据误差,转换速度快且稳定性能强。
2.3.2 ADC0832的介绍
ADC0832是美国国家半导体公司生产的一种8位分辨率、双通道A/D转换芯片。由于它体积小,兼容性,性价比高而深受单片机爱好者及企业欢迎,其目前已经有很高的普及率。
ADC0832为8位分辨率A/D转换芯片,其最高分辩可达256级,可以适应一般的模拟量转换要求。芯片转换时间仅为32US,据有双数据输出可作为数据校验,以减少数据误差,转换速度快且稳定性能强。
其独立的芯片使能输入,使处理器控制更加方便。通过DI数据输入端,可轻易实现通道功能的选择。其引脚功能如表2-3所示:
表2-3 ADC0832引脚功能
2.3.3 单片机对ADC0832的控制原理
正常情况下ADC0832与单片机的接口应为4条数据线,分别是CS、CLK/DO/DI.但由于DO端DI端在通信时并未同时有效并与单片机的接口是双向的,所以电路设计时我们将DO和DI并联在一根数据线上使用。
当ADC0832未工作时其CS输入端应为高电平,此时芯片禁用,CLK和DO/DI的电平可任意。当要进行A/D转换时,须先将CS使能端置于低电平直到转换完全结束。此时芯片开始转换工作,同时由处理器向芯片时钟输入端CLK输入时钟脉冲,DO/DI端则使用DI端输入通道功能选择的数据信号。在第1 个时钟脉冲的下沉之前DI端必
须是高电平,表示启始信号。在第2、3个脉冲下沉之前DI端应输入2 位数据用于选择通道功能。其通道控制表2-4所示:
表2-4 通道控制表
到第3个脉冲的下沉之后DI端的输入电平就失去输入作用,此后DO/DI端则开始利用数据输出DO进行转换数据的读取。从第4个脉冲下沉开始由DO端输出转换数据最高位DATA7,随后每一个脉冲下沉DO端输出下一位数据。直到第11个脉冲时发出最低位数据DATA0,一个字节的数据输出完成。也正是从此位开始输出下一个相反字节的数据,即从第11个字节的下沉输出DATA0。随后输出8位数据,到第19 个脉冲时数据输出完成,也标志着一次A/D转换的结束。最后将CS置高电平禁用芯片,直接将转换后的数据进行处理就可以了。其接口电路如图2-5所示:
图2-5 ADC0832的接口电路
2.4 声光报警电路
智能仪器一般都有报警功能,报警主要用于系统运行出错、当测量的数据超过仪表量程或者是超过用户设置的上下限时为提醒用户而设置。本系统中,设置报警的目的是在超出电子秤测量范围不能正常显示时,发出声光报警信号,提示用户,防止损坏仪器。
声光报警电路是由单片机的I/O口来控制的,当称重物体重量超过系统设计所允许的重量,通过程序使单片机的I/O值为低电平,则发光二极管导通,二极管发光,蜂鸣器LS1发出报警声。声光报警电路如图2-6所示:
图2-6 声光报警电路
2.5 显示电路
显示电路的作用是显示被称物体的重量。通过第一章方案论证讨论得出本设计采用LM016L液晶显示,其优点是显示位数更多,精度也更高。其接口电路如图2-7所示:
图2-7 液晶LM016L接口电路
LM016L模块采用HD44780控制器,hd44780具有简单而功能较强的指令集,可以实现字符移动,闪烁等功能,LM016L与单片机MCU通讯可采用8位或4位并行传输两种方式,hd44780控制器由两个8位寄存器,指令寄存器(IR)和数据寄存器(DR)忙标志(BF),显示数RAM(DDRAM),字符发生器ROMA(CGOROM)字符发生器RAM(CGRAM),地址计数器RAM(AC)。其引脚功能表如所示表2-5所示:
表2-5 LM016L引脚功能
2.6 整机电路
电子秤系统原理是:当物体放在秤盘上,压力施给传感器,,产生传感器内部平行四边形形变,由这4片应变片接成的惠斯通(Wheatstone)电桥在供桥电压的激励下随重量不同而输出不同的电压信号后送给A/D转换电路,转换成便于处理的数字信号输出至单片机;单片机进行处理、运算后将结果送至显示器进行显示。整机电路图详见附录1。
第三章 软件设计
本次设计软件系统采用模块化设计方法,不仅易于编程和调试,也可减小软件故障率和提高软件的可靠性。本设计主要包括主程序模块、LCD显示模块、超量程报警模块、AD转换模块等。
3.1 主程序流程图
当单片机上电复位后,系统电路开始运行程序,首先利用压力传感器检测所称物体重量,之后启动AD转换,将转换完成的数字信号送入单片机进行处理,之后判断其值是否达到设定值,若达到设定值,则使P3.0为0,从而启动报警,同时显示重量;若小于设定值,则使P3.0为1,并显示重量。其流程图如图3-1所示:
图3-1 主程序设计流程图
3.2 模数转换子程序
A/D转换子程序主要是指在系统开始运行时,把称重传感器传递过来的模拟信号转换成单片机易于处理的数字信号,并将数字信号传递到单片机,便于单片机进行处理的程序设计。
当主程序调用AD转换子程序时,AD转换便开始初始化,等待初始化完成后,MCU便通过拉低CS、拉高CLK来启动ADC0832进行外部压力传感转换后的电压信号进行采样,每产生8个CLK脉冲,DATA就获得一位完整的8bit数据,所以我们需要判断DATA右移8位是否完成,若未完成则继续转换,若完成,则拉高CS、拉低CLK,返回数据DATA,将数据存储并送入单片机。其流程图如图3-2所示:
图3-2 AD转换子程序设计流程图
3.3 报警子程序设计
报警子程序主要是指在称重过程中,为了防止所称物过重导致仪器损坏,而设置的超量程报警电路,一但所称物体超过设定量程,则启动报警,否则不启动。
当单片机接收到采集的重量值后,立即与程序所设量程值进行比较,若采样值大于设定量程,则启动报警,也就是将P3.0置为0,从而使发光二极管点亮,蜂鸣器发声;若采样值小于设定量程,则关闭报警或者不报警,也就是将P3.0置为1,从而使发光二极管灭,蜂鸣器停止发声。其流程图如图3-3所示。
图3-3 报警子程序流程图
3.3 报警子程序设计
显示子程序主要是来判断是否需要显示,以及如何去显示,也是十分重要的程序之
一。而显示子程序是其他程序所需要去调用的程序之一,因此,显示子程序的设计就显得举足轻重,设计的时候也要十分的小心。
本次设计显示模块采用1602液晶屏,LM016L液晶能够显示比较复杂的汉字和图形对它的操作主要将一些固定的字符写入寄存器中,当需要显示时调用即可,以达到在液晶屏上显示的效果。
LCD液晶显示子程序包括显示液晶显示初始化、字符定位函数、输出字符函数、显示函数、转换函数、写数据函数、写命令函数等组成。
当主程序调用液晶显示函数时,首先调用延时子程序,然后LCD开始初始化,等
待初始化完成后便对其写入控制操作字,包括图形的显示方式,字体的模式等,然后,写入数据,再在其内部输出字符函数。最后将字符显示出来,也就是显示出所称物体的重量。之后调用延时显示重量。最后其流程图如图3-4所示:
图3-4 显示子程序流程图
第四章 系统仿真与调试
4.1 常用调试工具
Keil软件是集成调试环境,集成了编缉器、编译器、调试器,支持软件模拟,支持项目管理功能强大的观察窗口,支持所有的数据类型。树状结构显示,一目了然,支持ASM(汇编)、C语言,多语言多模块源程序混合调试,在线直接修改、编译、调试源程序,错误指令定位。功能很强大。用于对程序的调试和编辑。Keil软件调试情况如图4-1所示:
图4-1 Keil软件界面
4.2 Proteus电子秤的工作过程
绘制电子秤的软件仿真图步骤分以下三步: (1)查找所需要的元器件。 (2)根据要求连接电路图。 (3)下载所写完的C程序并仿真。 通过以上步骤,来实现电子秤的仿真实现。
状态一:如图4-2所示,此时电子秤处于正常阶段,压力传感器压力值小于104.8,蜂鸣器不工作,发光二极管不亮,LCD显示重量,精确到0.001Kg。
图4-2 状态一仿真图
状态二:如图4-3所示,此时电子秤处于超量程阶段,压力传感器压力值大于104.8,蜂鸣器发声,发光二极管点亮,LCD显示重量,精确到
0.001Kg
图4-3 状态二仿真图
结 论
随着集成电路和计算机技术的迅速发展,使电子仪器的整体水平发生巨大变化,传统的仪器逐步的被智能仪器所取代。智能仪器的核心部件是单片机,因其极高的性价比得到广泛的应用与发展,从而加快了智能仪器的发展。而传感器作为测控系统中对象信息的入口,越来越受到人们的关注。传感器好比人体“五官”的工程模拟物,它是一种能将特定的被测量信息按一定规律转换成某种可用信号输出的器件或装置本次设计中的半桥电子秤就是在以上仪器的基础上设计而成的。
本设计是以单片机AT89C51为控制核心,LCD显示器、压力传感器、AD转换器等元器件所组成的电子秤称重系统,当重量低于设定上限时,LCD正常显示其重量;重量高于设定上限时,LCD将不能正常显示其重量,并且发光二极管被点亮,蜂鸣器发声,警告防止物体太重损坏仪器。当重量再次低于设定上限时报警器停止报警,发光二极管灭、蜂鸣器停止发声,LCD正常显示重量。
下面我对整个毕业设计的过程做一下简单的总结。
首先,进行选题;之后,就是找资料了。查找资料是做毕业设计的前期准备工作。到图书馆查找资料或在网上下载资料;再之后就是软件的学习。根据已有论文资料中提到的软件用途,有针对性的学。包括毕业设计前期读文献资料,要与毕业设计紧密联系起来,最好是边做边读,有针对性的读;最后,仿真调试也是设计中重要的一个环节。首先必须熟悉每个元器件在电路中的作用,其次分析电路的运行过程选择合适的元器件,否则无法正常运行。程序也需要不断的改写,才能达到效果。
总之,做这个毕业设计过程中我懂得了许多东西,培养了我独立工作的能力,树立了对自己工作能力的信心,相信会对今后的学习工作生活有非常重要的影响。虽然这个设计还不是很完善,但是,我所在在设计过程中所学到的东西,使我终身受益。
参考文献
[1] 李建忠.单片机原理及应用.西安:西安电子科技大学出版社,2002 [2] 朱宇光.单片机应用新技术教程.北京:电子工业出版社,2000 [3] 刘守义.单片机应用技术.西安:西安电子科技大学出版社,2002 [4] 房小翠.单片机实用系统设计技术.北京:国防工业出版社,1999 [5] 李华.MCS-51系列单片机实用接口技术.北京:电子工业出版社,2000 [6] 李全利.单片机原理及应用技术.北京:高等教育出版社,2006 [7] 何立民.单片机高等教程.航空航天大学出版社,2000
[8] 张毅刚.MCS-51单片机应用设计.哈尔滨工业大学出版社,1997 [9] 潘新民.微型计算机控制技术.人民邮电出版社,1999
[10] 黄智伟.全国大学生电子设计竞赛训练教程.北京:电子工业出版社,2004
附录1
整机电路图
附录2 程序清单
#include #include unsigned char press_shifen=0;
unsigned char press_baifen=0; #include #include
#define uchar unsigned char #define uint unsigned int #define BUSY
0x80 //常量定义
#define DATAPORT P0
sbit ADCS =P3^5; sbit ADDI =P3^7; sbit ADDO =P3^7; sbit ADCLK =P3^6;
sbit LCM_RS=P2^0; sbit LCM_RW=P2^1; sbit LCM_EN=P2^2; uint x1,y1,z1=0,w1,temp1; uchar ad_data,k,n,m,e,num,s; //采样值存储
sbit beep =P3^0; char press_data; //标度变换存储单元
unsigned char ad_alarm; //报警值存储单元
unsigned char press_ge=0; unsigned char press_qianfen=0;
uchar code str0[]={"Weight: . Kg "};
void delay(uint);
void lcd_wait(void);
void
delay_LCM(uint);
//LCD延时子程序 void
initLCM(
void); //LCD初始化子程序
void lcd_wait(void); //LCD检测忙子程序 void
WriteCommandLCM(uchar
WCLCM,uchar BusyC); //写指令到ICM子函数
void WriteDataLCM(uchar WDLCM); //写数据到LCM子函数
Y ,uchar void DisplayOneChar(uchar
X,uchar
DData); // 显示指定坐标的一个字符子函数
Y ,uchar code *DData); void DisplayListChar(uchar X,uchar
// 显示指定坐标的一串字符子函数 void weishu(uint m);
void weishu1(uint m);
void display(void);
uchar Adc0832(unsigned char channel);
void alarm(void); void data_pro(void); /**********main funcation************/
void main(void) { delay(500);
//ad_data=0; initLCM( );
WriteCommandLCM(0x01,1); DisplayListChar(0,0,str0);
while(1)
{
ad_data =Adc0832(0);
//
采样值存储单元初始化为0
alarm(); data_pro(); display();
DisplayListChar(0,0,str0);
}
/***延K*1ms,12.000mhz**********/
void delay(uint k) { uint i,j; for(i=0;i
for(j=0;j
/******写指令到ICM子函数*****/ void WriteCommandLCM(uchar
WCLCM,uchar BusyC)
{
if(BusyC) lcd_wait();
DATAPORT=WCLCM;
LCM_RS=0;
// 选中指令寄存器 LCM_RW=0; LCM_RW=0; // 写
模式
LCM_EN=1; _nop_();
_nop_();
_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); LCM_EN=0; }
/*****写数据到LCM子函数******/ void WriteDataLCM(uchar WDLCM) {
lcd_wait( );
DATAPORT=WDLCM;
LCM_RS=1;
LCM_RW=0;
LCM_EN=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
LCM_EN=0;
}
/*****lcm内部等待函数********/
void lcd_wait(void) {
DATAPORT=0xff;
LCM_EN=1;
LCM_RS=0;
LCM_RW=0; LCM_RW=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); while(DATAPORT&BUSY) { LCM_EN=0;
_nop_();
_nop_(); _nop_();
_nop_(); _nop_(); _nop_(); _nop_(); _nop_();
LCM_EN=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); }
LCM_EN=0;
}
/*****LCM初始化子函数*********/ void initLCM( ) {
LCM_EN=0; DATAPORT=0; delay(15);
WriteCommandLCM(0x38,0); delay(5);
WriteCommandLCM(0x38,0); delay(5);
WriteCommandLCM(0x38,0); delay(5);
WriteCommandLCM(0x38,1); WriteCommandLCM(0x08,1); WriteCommandLCM(0x01,1);
WriteCommandLCM(0x06,1); WriteCommandLCM(0x0c,1); TMOD=0x11;
EA=1; ET1=1;
TR1=1; k=0; x1=0; y1=0; z1=0; }
/****显示指定坐标的一个字符子函数****/
void DisplayOneChar(uchar X,uchar Y,uchar DData)
{
Y&=0x01; X&=0x0f; if(Y)
X|=0x40; //若y为1(显示第二行),地址码+0X40
X|=0x80; //指令码为地址码+0X80
WriteCommandLCM(X,1); WriteDataLCM(DData); }
/*******显示指定坐标的一串字符子函数*****/
void DisplayListChar(uchar X,uchar
Y,uchar code *DData)
{
uchar ListLength=0; Y&=0x01; X&=0x0f; while(X
DisplayOneChar(X,Y,DData[ListLength]);
ListLength++; X++; } }
/*****************系统显示子函数*****************/
void display(void) { WriteCommandLCM(0x0c,1); DisplayListChar(0,0,str0);
//DisplayListChar(0,1,str2);
DisplayOneChar(8,0,press_ge+0x30);
DisplayOneChar(10,0,press_shifen+0x30);
DisplayOneChar(11,0,press_baifen
+0x30);
DisplayOneChar(12,0,press_qianfen+0x30);
delay(1000);
}
/************ 读ADC0832函数 ************/
//采集并返回
uchar Adc0832(unsigned char channel) //AD转换,返回结果
{
uchar i=0; uchar j; uint dat=0; uchar ndat=0;
if(channel==0)channel=2; if(channel==1)channel=3; ADDI=1; _nop_(); _nop_();
ADCS=0;//拉低CS端 _nop_(); _nop_();
ADCLK=1;//拉高CLK端 _nop_(); _nop_();
ADCLK=0;//拉低CLK端,形成下降沿1
_nop_(); _nop_();
ADCLK=1;//拉高CLK端 ADDI=channel&0x1; _nop_();
第27页
_nop_();
ADCLK=0;//拉低CLK端,形成下降沿2
_nop_(); _nop_();
ADCLK=1;//拉高CLK端 ADDI=(channel>>1)&0x1; _nop_(); _nop_();
ADCLK=0;//拉低CLK端,形成下降沿3
ADDI=1;//控制命令结束 _nop_(); _nop_(); dat=0; for(i=0;i
dat|=ADDO;//收数据 ADCLK=1; _nop_(); _nop_();
ADCLK=0;//形成一次时钟脉冲
_nop_(); _nop_(); dat
if(i==7)dat|=ADDO; }
for(i=0;i
j=j|ADDO;//收数据
共29页
ADCLK=1; _nop_(); _nop_();
ADCLK=0;//形成一次时钟脉冲
_nop_(); _nop_(); j=j>=1; }
ADCS=1;//拉低CS端 ADCLK=0;//拉低CLK端 ADDO=1;//拉高数据端,回到初始状态
dat
return(dat); //return ad k
}
void data_pro(void) {
unsigned int; float press; if(0
{ int vary=ad_data;
press=(0.019531*vary);
第28页
temp1=(int)(press*1000);
//放大1000倍,便于后面的计算
press_ge=temp1/1000;
//取压力值百位
press_shifen=(temp1%1000)/100;
//取压力值十位
press_baifen=((temp1%1000)%100)/10;
//取压力值个位
press_qianfen=((temp1%1000)%100)%
10;
//取压力值十分位
}
}
/*****************报警子函数*******************/
void alarm(void) {
if(ad_data>=220)
beep=0; //则
启动报警
else
beep=1;
} 共29页
附录3 元器件清单表
第29页 共29页
四川信息职业技术学院