找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 53251|回复: 8
收起左侧

基于单片机的电子秤系统设计论文

  [复制链接]
ID:290276 发表于 2018-3-11 09:32 | 显示全部楼层 |阅读模式
基于单片机的电子秤系统设计

摘要

电子秤是将检测与转换技术、计算机技术、信息处理、数字技术等技术综合一体的现代新型称重仪器。它与我们日常生活紧密结合息息相关。

电子称主要以单片机作为中心控制单元,通过称重传感器进行模数转换单元,在配以键盘、显示电路及强大软件来组成。电子称不但计量准确、快速方便,更重要的自动称重、数字显示,对人们生活的影响越来越大,广受欢迎。

本系统的设计主要从硬件电路设计,软件编程调试,实物焊接调试三部分进行详细阐述。硬件电路主要是基于单片机AT89S52为核心的控制单元实现数据的处理,采用压力传感器对数据进行采集,电子秤专用24位AD转换芯片HX711对传感器采集到的模拟量进行AD转换,转换后的数据送到单片机进行处理显示,数据显示由LCD1602液晶实现,液晶显示效果稳定无闪烁


目录

摘要

ABSTRACT

目录

第1章 绪论

1.1课题背景与研究意义

1.2 系统设计要求

1.3系统设计方案

1.4电子秤的主要组成

1.4.1  电子秤的基本结构

1.4.2  电子秤的工作原理

1.4.3  电子秤的计量性能

第2章 系统硬件设计

2.1              流系统元器件选型及参数介绍

2.1.1 系统单片机选型

2.1.2 系统传感器选型

2.1.3 系统AD转换芯片选择

2.1.4系统显示器选择

2.1.5系统时钟芯片选择

2.2              系统硬件电路设计

2.2.1系统电源电路设计

2.2.2系统单片机主控电路设计

2.2.3系统显示部分电路设计

2.2.4系统超重报警指示电路设计

2.2.5系统按键输入电路设计

2.3系统硬件电路的绘制与PCB线路板制作

2.3.1              Protell 99 SE软件介绍

2.3.2 系统原理图绘制与PCB印刷线路板制作

第3章 系统软件设计

3.1系统软件编程环境介绍

3.2系统主程序流程图

3.3系统显示部分流程图

3.4系统按键调整部分流程图

第四章 系统的制作、安装与调试

4.1电路的绘制与PCB板的制作

4.2 系统的调试

第五章  总结与体会

5.1  总结

5.2  体会

参考文献

致谢










第1章
绪论
1.1课题背景与研究意义

电子秤作为一种计量手段,广泛应用于工农业、科研、交通、内外贸易等各个领域,与人民的生活紧密相连。电子秤是电子衡器中的一种,衡器是国家法定计量器具,是国计民生、国防建设、科学研究、内外贸易不可缺少的计量设备,衡器产品技术水平的高低,将直接影响各行各业的现代化水平和社会经济效益的提高。称重装置不仅是提供重量数据的单体仪表,而且作为工业控制系统和商业管理系统的一个组成部分,推进了工业生产的自动化和管理的现代化,它起到了缩短作业时间、改善操作条件、降低能源和材料的消耗、提高产品质量以及加强企业管理、改善经营管理等多方面的作用。称重装置的应用已遍及到国民经济各领域,取得了显著的经济效益。

电子秤是称重技术中的一种新型仪表,广泛应用于各种场合。电子秤与机械秤比较有体积小、重量轻、结构简单、价格低、实用价值强、维护方便等特点,可在各种环境工作,重量信号可远传,易于实现重量显示数字化,易于与计算机联网,实现生产过程自动化,提高劳动生产率。从世界水平看,衡器技术已经经历了四个阶段,从传统的全部由机械元器件组成的机械称到用电子线路代替部分机械元器件的机电结合秤,再从集成电路式到目前的单片机系统设计的电子计价秤。我国电子衡器从最初的机电结合型发展到现在的全电子型和数字智能型。现今电子衡器制造技术及应用得到了新发展:电子称重技术从静态称重向动态称重发展;计量方法从模拟测量向数字测量发展;测量特点从单参数测量向多参数测量发展。常规的测试仪器仪表和控制装置被更先进的智能仪器所取代,使得传统的电子测量仪器在远离、功能、精度及自动化水平定方面发生了巨大变化,并相应的出现了各种各样的智能仪器控制系统,使得科学实验和应用工程的自动化程度得以显著提高。

电子称重的实现首先是通过压力传感器采集到被测物体的重量并将其转换成电压信号。输出电压信号通常很小,需要通过前端信号处理电路进行准确的线性放大。放大后的模拟电压信号经A/D转换电路转换成数字量被送入到主控电路的单片机中,再经过单片机控制译码显示器,从而显示出被测物体的重量。按照设计的基本要求,系统可分为三大模块,数据采集模块、控制器模块、人机交互液晶显示界面模块。其中数据采集模块由压力传感器、信号的前级处理和A/D转换部分组成。转换后的数字信号送给控制器处理,由控制器完成对该数字量的处理,驱动显示模块完成人机间的信息交换。此部分对软件的设计要求比较高,系统的大部分功能都需要软件来控制。在扩展功能上,本设计增加了一个过载报警提示功能和电子日历功能使本电子称的设计更人性化智能化。


1.2 系统设计要求

一、基本要求

设计并制作一款基于单片机的电子秤重系统。

二、具体要求

本课题研究的内容是以单片机STC89C52RC为控制核心,实现电子秤的基本策略及价格计算功能。本课题在电子称的基本功能基础上扩展了电子日历及时钟功能。该系统可以分为单片机最小系统、数据采集系统、人机交互界面系统、电源系统、时钟及语音报数六大部分组成。单片机最小系统部分主要包括STC89C52RC和经典复位电路;数据采集部分由称重传感器、信号放大和A/D转换部分组成,信号放大和A/D转换部分主要由专用型高精度24位AD转换芯片HX711实现;人机交互界面为键盘输入和点阵式液晶显示,主要使用4*4矩阵键盘和1602液晶显示器,可以方便的输入数据和直观的显示数据;时钟模块主要由时钟芯片DS1302和时钟电路组成;语音报数模块可语音报读电子秤系统的重量、单价、金额等语音内容,主要由SC1010B电子称专用语音芯片实现。

本课题的主要设计任务如下所述:

1)系统可实现电子称基本的称重功能(称重范围为0~5Kg,重量误差不大于±0.005Kg);

2)系统应具备输入单价,计算总价及语音报价的功能;

3)系统超出最大测量范围5Kg时应有报警指示功能(蜂鸣器报警提示);

4)该电子称设计需完成电子日历及时钟显示功能的扩展。在未称重状态下系统应具备显示年月日、星期及时钟功能。

1.3系统设计方案

结合所学知识,通过查找资料和论证,可通过以下方案来实现课题要求实现的指标,各方案介绍如下所述。

方案一  数码管显示:

图1-1 数码管显示方案

此方案利用数码管显示物体重量,简单可行,可以采用内部带有模数转换功能的单片机。由此设计出的电子秤系统,硬件部分简单,接口电路易于实现,并且在编程时大大减少程序量,在电路结构上只有简单的输出输入关系。缺点是:硬件部分简单,虽然可以实现电子称基本的称重功能,但是不能实现外部数据的输入,无法根据实际情况灵活地设定各种控制参数。由于数码管只能实现简单的数字和英文字符的显示,不能显示汉字以及其他的复杂字符,不能达到显示购物清单的要求。又因为采用了具有模数转换功能的单片机,系统电路过于简单,系统硬件的扩展必受到限制,电子秤的功能过于单一,达不到设计的标准。

方案二  在前一种方案的基础上进行扩展,增加一键盘输入装置,增加外界对单片机内部的数据设定,使电子称实现称重计价的功能。

结构简图如图1-2所示:


图1-2带有键盘输入的结构简图

此方案设计的电子秤,可以实现称物计价功能,但是局限于数码管的功能,在显示时只能显示单价、购物总额以及简单的货物代码等。在显示重量时,如果数码管没有足够的位数,那么称量物体重量的精度必受到限制,所以此方案需要较多的数码管接入电路中。这样在处理输入输出接口时需要另行扩展足够多的I/O接口供数码管使用,比较麻烦。

方案三 前端信号处理时,选用放大、信号转换等措施来增加信号采集强度但会增加相应的设计成本;显示方面采用具有字符图文显示功能的LCD显示器。这种方案不仅加强了人机交换的能力,而且满足设计要求,可以显示购物清单、所称量的物体信息等相关内容,当需要增加扩展功能时可以通过切换液晶显示界面的方式来实现。

结构简图如下图1-3所示:

图3带有键盘输入及液晶显示的结构简图

鉴于上述三种方案的优缺点,本系统在设计时充分考虑到系统的实用性及成本的可行性的前提下,设计完成了最终的电子称方案,最终的硬件设计方案图如图4所示,该方案增加了电子日历功能,从而使本系统的设计功能得到了很好的扩展与应用。

1.4电子秤的主要组成1.4.1  电子秤的基本结构

    电子秤是利用物体的重力作用来确定物体质量(重量)的测量仪器,也可用来确定与质量相关的其它量大小、参数、或特性。不管根据什么原理制成的电了秤均由以下三部分组成:

  • 承重、传力复位系统

它是被称物体与转换元件之间的机械、传力复位系统,又称电子秤的秤体,一般包括接受被称物体载荷的承载器、秤桥结构、吊挂连接部件和限位减振机构等。

2) 称重传感器

即由非电量(质量或重量)转换成电量的转换元件,它是把支承力变换成电的或其它形式的适合于计量求值的信号所用的一种辅助手段。

按照称重传感器的结构型式不同,可以分直接位移传感器(电容式、电感式、电位计式、振弦式、空腔谐振器式等)和应变传感器(电阻应变式、卢表面谐振式)或是利用磁弹性、压电和压阻等物理效应的传感器。

对称重传感器的基本要求是:输出电量与输入重量保持单值对应,并有良好的线性关系;有较高的灵敏度;对被称物体的状态的影响要小;能在较差的工作条件下工作;有较好的频响特性;稳定可靠。

3) 测量显示和数据输出的载荷测量装置

即处理称重传感器信号的电子线路(包括放人器、模数转换、电流源或电压源、调节器、补尝元件、保护线路等)和指示部件(如显示、打印、数据传输和存贮器件等)。这部分习惯上称载荷测量装置或二次仪表。在数字式的测量电路中,通常包括前置放大、滤滤、运算、变换、计数、寄存、控制和驱动显示等环节。

1.4.2  电子秤的工作原理

当被称物体放置在秤体的秤台上时,其重量便通过秤体传递到称重传感器,传感器随之产生力一电效应,将物体的重量转换成与被称物体重量成一定函数关系(一般成正比关系)的电信号(电压或电流等)。此信号由放大电路进行放大、经滤波后再由模/数( A/D)器进行转换,数字信号再送到微处器的CPU处理,CPU不断扫描键盘和各功能开关,根据键盘输入内容和各种功能开关的状态进行必要的判断、分析、由仪表的软件来控制各种运算。运算结果送到内存贮器,需要显示时,CPU发出指令,从内存贮器中读出送到显示器显示,或送打印机打印。一般地信号的放大、滤波、A/D转换以及信号各种运算处理都在仪表中完成。

1.4.3  电子秤的计量性能

电子秤的计量性能涉及的主要技术指标有:量程、分度值、分度数、准确度等级等。

(1) 量程:电子衡器的最大称量Max,即电子秤在正常工作情况下,所能称量的最大值。

(2) 分度值:电子秤的测量范围被分成若干等份,每份值即为分度值。用e或d来表示。

(3) 分度数:衡器的测量范围被分成若干等份,总份数即为分度数用n表示。

电子衡器的最大称量Max可以用总分度数n与分度值d的乘积来表示,即Max=n·d

(4) 准确度等级

国际法制计量组织把电子秤按不同的分度数分成T、II、III、Ⅳ四类等级,分别对应不同准确度的电子秤和分度数n的范围,如表1-1所示:

表1-1 不同准确度的电子秤和分度数

标志及等级

电子秤分类

分度数范围

特种准确度

基准衡器

n> 100000

高准确度

精密衡器

10000 < n≤100000

中准确度

商业衡器

1000 < n≤10000

普通准确度

粗衡器

100<n≤1000

第2章 系统硬件设计

2.1          流系统元器件选型及参数介绍2.1.1 系统单片机选型
单片机的选择在整个系统设计中至关重要,要满足大内存、高速率、通用性、价格便宜等要求,本课题选择AT89S52作为主控芯片。
AT89S52是一个低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S52可为许多嵌入式控制应用系统提供高性价比的解决方案。AT89S52芯片具有以下特性[[]4:
①指令集和芯片引脚与Intel公司的8051兼容;
②4KB片内在系统可编程Flash程序存储器;
③时钟频率为0~33MHz;
④128字节片内随机读写存储器(RAM);
⑤32个可编程输入/输出引脚;
⑥2个16位定时/计数器;
⑦6个中断源,2级优先级;
⑧全双工串行通信接口;
⑨监视定时器;
⑩2个数据指针。
AT89S52单片机的40个引脚中有2个专用于主电源引脚,2个外接晶振的引脚,4个控制或与其它电源复用的引脚,以及32条输入输出I/O引脚[[]5。
AT89S52单片机引脚图如图2-1所示:





图2-1 单片机引脚图
2.1.2 系统传感器选型

系统采用压电传感器是一种典型的有源传感器,又称自发电式传感器。其工作原理是基于某些材料受力后在其相应的特定表面产生电荷的压电效应。

压电传感器体积小、重量轻、结构简单、工作可靠,适用于动态力学量的测量,不适合测频率太低的被测量,更不能测静态量。目前多用于加速度和动态力或压力的测量。压电器件的弱点:高内阻、小功率。功率小,输出的能量微弱,电缆的分布电容及噪声干扰影响输出特性,这对外接电路要求很高。

电阻应变式传感器是一种利用电阻应变效应,将各种力学量转换为电信号的结构型传感器。电阻应变片式电阻应变式传感器的核心元件,其工作原理是基于材料的电阻应变效应,电阻应变片即可单独作为传感器使用,又能作为敏感元件结合弹性元件构成力学量传感器。

导体的电阻随着机械变形而发生变化的现象叫做电阻应变效应。电阻应变片把机械应变信号转换为△R/R后,由于应变量及相应电阻变化一般都很微小,难以直接精确测量,且不便处理。因此,要采用转换电路把应变片的△R/R变化转换成电压或电流变化。其转换电路常用测量电桥。

直流电桥的特点是信号不会受各元件和导线的分布电感及电容的影响,抗干扰能力强,但因机械应变的输出信号小,要求用高增益和高稳定性的放大器放大。

图2-2为一直流供电的平衡电阻电桥,接直流电源E:




图2-2 传感器内部连接图

当电桥输出端接无穷大负载电阻时,可视输出端为开路,此时直流电桥称为电压桥,即只有电压输出。

当忽略电源的内阻时,由分压原理有:

=                                   (2.1)

当满足条件R1R3=R2R4时,即

                                                                   (2.2)

=0,即电桥平衡。式(2.2)称平衡条件。

应变片测量电桥在测量前使电桥平衡,从而使测量时电桥输出电压只与应变片感受的应变所引起的电阻变化有关。

若差动工作,即R1=R-△R,R2=R+△R,R3=R-△R,R4=R+△R,按式(2.1),则电桥输出为

                                              (2.3)                                         

应变片式传感器有如下特点:

(1)应用和测量范围广,应变片可制成各种机械量传感器。

(2)分辨力和灵敏度高,精度较高。

(3)结构轻小,对试件影响小, 对复杂环境适应性强,可在高温、高压、强磁场等特殊环境中使用,频率响应好。

(4)商品化,使用方便,便于实现远距离、自动化测量[5]。

通过对压力传感器与电阻应变式传感器比较分析,最终选择了第二种方案。题目要求称重范围0~5Kg,满量程量误差不大于0.005Kg,考虑到秤台自重、振动和冲击分量,还要避免超重损坏传感器,所以传感器量程必须大于额定称重5Kg。我们选择的是电阻应变片压力传感器,量程为5Kg,精度为0.01% ,满足本系统的精度要求。


2.1.3 系统AD转换芯片选择

HX711是一款专为高精度电子秤而设计的24位A/D转换器芯片。与同类型其它芯片相比,该芯片集成了包括稳压电源、片内时钟振荡器等其它同类型芯片所需要的外围电路,具有集成度高、响应速度快、抗干扰性强等优点。降低了电子秤的整机成本,提高了整机的性能和可靠性。该芯片与后端MCU 芯片的接口和编程非常简单,所有控制信号由管脚驱动,无需对芯片内部的寄存器编程。输入选择开关可任意选取通道A 或通道B,与其内部的低噪声可编程放大器相连。通道A 的可编程增益为128 或64,对应的满额度差分输入信号幅值分别为±20mV或±40mV。通道B 则为固定的64 增益[[]9,用于系统参数检测。芯片内提供的稳压电源可以直接向外部传感器和芯片内的A/D 转换器提供电源,系统板上无需另外的模拟电源。芯片内的时钟振荡器不需要任何外接器件。上电自动复位功能简化了开机的初始化过程。芯片管脚图如图2-3所示。

图2-3 HX711管脚定义

HX711典型应用电路如图2-4所示。

图2-4 HX711典型应用电路

2.1.4系统显示器选择

方案一 数码管显示

数码管是一种半导体发光器件,其基本单元是发光二极管。数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);按能显示多少个“8”可分为1位、2位、4位等等数码管;按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。当某一字段的阴极为高电平时,相应字段就不亮。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。当某一字段的阳极为低电平时,相应字段就不亮。

数码管显示信息有限,当显示信息较多时需要多个数码管级联方可,这样会造成硬件连接复杂,成本增加;数码管对大部分字符不能很好的显示,动态扫描时处理不好易出现闪烁现象。

方案二 LCD字符液晶显示

采用点阵字符型 LCD 液晶显示,液晶显示模块具有体积小、功耗低、显示内容丰富等特点,现在字符型液晶显示模块已经是单片机应用设计中最常用的信息显示器件,但采用LCD液晶显示会造成设计成本增加。

LCD1602可以显示2行 16 个字符,有 8 位数据总线 D0-D7,和 RS、R/W、 EN 三个控制端口,工作电压为 5V,并且带有字符对比度调节和背光[10]。

具体引脚说明如表2-1所示。

表2-1 LCD1602液晶显示器引脚说明

LCD1602 液晶模块内部的字符发生存储器(CGROM)已经存储了 160 个不同 的点阵字符图形,如表 1 所示,这些字符有:阿拉伯数字、英文字母的大小写、 常用的符号、和日文假名等,每一个字符都有一个固定的代码,它的读写操作、 屏幕和光标的操作都是通过指令编程来实现的。

最后综合了多方面因素的考虑采用了方案二,选择 LCD1602 显示器作为系统的显示界面。

2.1.5系统时钟芯片选择

DS1302是美国DALLAS公司推出的一种高性能、低功耗的实时时钟芯片,附加31字节静态RAM,采用SPI三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。实时时钟可提供秒、分、时、日、星期、月和年,一个月小与31天时可以自动调整,且具有闰年补偿功能。工作电压宽达2.5~5.5V。采用双电源供电(主电源和备用电源),可设置备用电源充电方式,提供了对后背电源进行涓细电流充电的能力。 DS1302用于数据记录,特别是对某些具有特殊意义的数据点的记录上,能实现数据与出现该数据的时间同时记录,因此广泛应用于测量系统中。DS1302实物和管脚图分别如图2-5、图2-6所示。

  

图2-5 DS1302实物图

                 

图2-6 DS1302管脚定义

DS1302各引脚的功能为:

VCC1:备用电源;VCC2:主电源。当VCC2>VCC1+0.2V时,由VCC2向DS1302供电,当VCC2< VCC1时,由VCC1向DS1302供电。

SCLK:串行时钟,输入;

I/O:三线接口时的双向数据线;

CE:输入信号,在读、写数据期间,必须为高。该引脚有两个功能:第一,CE开始控制字访问移位寄存器的控制逻辑;其次,CE提供结束单字节或多字节数据传输的方法。

  DS1302有关日历、时间的寄存器共有12个,其中有7个寄存器(读时81h~8Dh,写时80h~8Ch),存放的数据格式为BCD码形式。

2.2          系统硬件电路设计2.2.1系统电源电路设计

由于该系统中 51 单片机及 AD 转换芯片及液晶显示器所需供电电压均为 5V 电压,所以要保证系统稳定可靠的工作,需要设计一个可以稳定提供 5V 电压的供电系统。本设计采用双电源接口供电方式,USB 接口供电方便程序调试,也可采用外置电源作为系统的供电电源,但是需另加三端稳压器件 LM7805 作为系统电源的稳压器件以保证系统电压为稳定的直流 5V 电压,同时外置电源的输出电压要高于 5V输出,系统电源输入接口要加滤波电容以确保工作电压稳定。电源输出接口加上LED 电源指示灯,用来判定电源是否正常工作。该系统电源电路设计如图 2-7所示。

                                

图2-7电源接口电路

C1,C2实现对电源滤波,以滤除可能存在的高频杂波对电源的影响,C4实现对电源电压的平滑稳定作用[10],当USB接口输出电压高时C4用来储能,当后续电路负载过高USB供电不足时电解电容C4通过释放储存的电能来保证电源电压不跌落。LED0用作电源指示,其亮灭代表电源工作与否,R0用来限流,以保证LED不被烧坏[13]。


2.2.2系统单片机主控电路设计

系统主控电路由AT89S52单片机及晶振电路和复位电路组成,该电路作为整个系统功能实现的核心单元,其连接方式如图2-8所示。


图2-8 单片机控制模块电路

晶振全称为晶体振荡器,其作用在于产生原始的时钟频率,这个频率经过频率发生器的放大或缩小后就成了电脑中各种不同的总线频率。晶振一般叫做晶体谐振器,是一种机电器件,是用电损耗很小的石英晶体经精密切割磨削并镀上电极焊上引线做成。这种晶体有一个很重要的特性,如果给它通电,它就会产生机械振荡,反之,如果给它机械力,它又会产生电,这种特性叫机电效应。他们有一个很重要的特点,其振荡频率与他们的形状,材料,切割方向等密切相关。由于石英晶体化学性能非常稳定,热膨胀系数非常小,其振荡频率也非常稳定,由于控制几何尺寸可以做到很精密,因此,其谐振频率也很准确。根据石英晶体的机电效应,我们可以把它等效为一个电磁振荡回路,即谐振回路。他们的机电效应是机-电-机-电..的不断转换,由电感和电容组成的谐振回路是电场-磁场的不断转换。在电路中的应用实际上是把它当作一个高Q值的电磁谐振回路。由于石英晶体的损耗非常小,即Q值非常高,做振荡器用时,可以产生非常稳定的振荡,作滤波器用,可以获得非常稳定和陡削的带通或带阻曲线[10]。

复位电路采用按键复位加上电复位来实现,S1为复位按键,复位按键按下后,复位端通过1K的小电阻与电源接通,迅速放电,使RST引脚为高电平,复位按键弹起后,电源通过10KΩ的电阻对10μF的电容C1重新充电,RST引脚端出现复位正脉冲。AT89S52内部有一个高增益反相放大器,用于构成振荡器,但要形成时钟脉冲,外部还需附加电路,本设计采用内部时钟方式,利用芯片内部的振荡器,然后在引脚XTAL1和XTAL2两端跨接晶体振荡器,就构成了稳定的自激振荡器,发出的脉冲直接送入内部时钟电路,C2和C3的值通常选择为30pF左右,晶振Y1选择12MHz.为了减小寄生电容,更好地保证振荡器稳定、可靠地工作,振荡器电容应尽可能安装得与单片机引脚XTAL1和XTAL2靠近[[]7。

单片机的31脚(EA)接+5V电源,表示允许使用片内ROM。

2.2.3系统显示部分电路设计

显示部分采用LCD1602液晶显示模块,液晶板上排列着若干 5×7或 5×10点阵的字符显示位,每个显示位可显示1个字符,从规格上分为每行 8、16、20、24、32、40位,有一行、两行及四行三类。其与单片机的连接电路如图2-9所示

图2-9 液晶显示接口电路

    1脚和2脚为液晶1602地和电源引脚,3脚为背光调节引脚,通过10K电位器接地,背光可通过电位器来调节亮度;4脚、5脚、6脚为液晶片选控制引脚,分别连接到单片机的P2.0、P2.1、P2,2端口,7~14脚为数据接口,与单片机的P0口相连实现数据的传输,15、16、脚为液晶的背光控制脚,分别接到电源和地[9]。


2.2.4系统超重报警指示电路设计

超重报警指示电路用来在称重测量超出最高值时报警提示,以免重量太高的情况下损坏传感器。报警指示电路由PNP三极管9012驱动蜂鸣器来实现,单片机IO口控制三极管的基极,当单片机的IO口输出为低电平时,三极管导通,蜂鸣器的正极与电源接通,蜂鸣器通电发出报警声,当单片机IO口输出高电平时,三极管截止,蜂鸣器停止报警。报警指示电路如图2-10所示。

图2-10报警指示电路


2.2.5系统按键输入电路设计
按键输入电路用来在电子称测量过程中输入单价值,按键输入电路采用4*4矩阵键盘实现,矩阵键盘电路如图2-11所示。


图2-11按键输入电路
电子称按键功能分配如表2-2所示:
表2-2系统按键配置表
7
8
9
去皮
4
5
6
清零
1
2
3
累计
0
计算


此电子秤是开机检测托盘重量,并将托盘重量清零(即电子秤每次开机后检测托盘重量,并程序中自动将托盘重量保存在一个变量中,称量过程中每次都将获得的重量减去托盘重量,而得到所要称量物体的真正的重量)。
计算功能:在正确输入了单价之后,按下计算按键,将会计算出金额,并在液晶显示器上显示出重量、单价、总价。
电子日历时钟键盘面板:
设置












对应矩阵键盘按键
S1
S2
S3












通过设置按键可以切换日期、星期、时间的设置,通过加减键来进行各个状态的调节。

2.3系统硬件电路的绘制与PCB线路板制作2.3.1        Protell 99 SE软件介绍

本文在硬件电路的设计过程中,原理图和PCB的绘制采用Protel99SE软件,Protel99SE是应用于Windows9X/2000/NT操作系统下的EDA设计软件,该软件以其简单易操作的优势一直以来备受电子工程师的喜爱,因而也成了很多高校电子相关专业EDA工具的必选课程。

2.3.2 系统原理图绘制与PCB印刷线路板制作

采用Protel99SE软件绘制原理图和PCB的主要步骤如下所述:

  • 建立系统所需原件库;
  • 加载所建原件库到工程项目中;
  • 在原理图页面中放置所需元器件并按照电气性能连接各元件;
  • 建立原件封装库并加载到工程文件中;
  • 绘制好电路后进行ERC电气检测,并生成网络表;
  • 在工程中建立PCB文件,导入生成的网络表;
  • 按照网络飞线提示绘制PCB,最后完成DRC检测[13]

按照如上步骤最终完成绘制的电路图与PCB图分别如图2-12、2-13所示。



     图2-12 系统电路原理图

图2-13 系统PCB印刷线路板图











第3章 系统软件设计
3.1  系统软件编程环境介绍

系统软件设计采用C语言编程,编译环境为keil UV3。

keil c51 是美国Keil Software 公司出品的51 系列兼容单片机C 语言软件开发系统,和汇编相比,C 在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。

Keil c51 软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows 界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到keil c51 生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。

Keil C51 可以完成编辑、编译、连接、调试、仿真等整个开发流程。开发人员可用IDE 本身或其它编辑器编辑C 或汇编源文件,然后分别有C51 及A51 编辑器编译连接生成单片机可执行的二进制文件(.HEX),然后通过单片机的烧写软件将HEX 文件烧入单片机内。软件主要三个方面:一是初始化系统;二是按键检测;三是数据采集、数据处理并进行显示。这三个方面的操作分别在主程序中来进行。程序采用模块化的结构,这样程序结构清楚,易编程和易读性好,也便于调试和修改。


3.2系统主程序流程图
系统软件部分主程序流程图如图3-1所示
图3-1  系统主程序流程图

3.3系统显示部分流程图
系统示子程序主要是来判断是否需要显示,以及如何去显示,也是十分重要的程序之一。设计流程图如图3-2所示。

图3-2系统显示部分流程图
3.4系统按键调整部分流程图
键盘电路设计成4X4矩阵式,在程序中可以先判断按键编码,然后根据编码将键盘代表的数值送到相应的存储单元,再进行功能选择或数据处理。设计流程图如图3-3所示。
图3-3  按键调整程序流程图

  第四章 系统的制作、安装与调试
4.1电路的绘制与PCB板的制作
把系统的电路原理图设计好以后。下一步工作就是进行实物制作了,而实物制作的第一步就是对电路进行排版布线;虽然PROTEL99 SE软件有自动布局布线的功能,但是,我还是选择了手动布线。虽然可能布的不是很漂亮,但是很多问题是只有亲自动手了,才会发现。PCB板制作遇到以下几个方面。
1. 电路原理图的布局
在器件布局的过程中应注意以下几点:(1)一个模块及其附属的一些分离元器件应尽量放到一起;(2)不同的电路模块尽量划分清晰,使得在调试过程中多电路的检查能够一目了然;(3)较容易发热的元器件尽量放到电路的边缘,有利于散热。
2. 布线
PCB布线的好坏对系统性能有直接的影响,在高频电路表现的尤为突出,所以,在进行电路布线时还需注意以下几点:(1)模拟地和数字地应分开接地,避免数字信号和模拟信号会相互干扰;(2)每一根走线,能短则短,不要为了盲目追求少跳线而绕远路,因为线越短电阻越小,干扰也会越小;(3)电源线和地线尽量从电路板的边缘走线,且电源线尽量画的比一般线宽略粗一些;(4)走线在改变方向时应该走45°角或曲线,避免直角的拐角。
3. 打印与转印
打印时要注意油纸不能折叠,打印的设置必须准确,只留下底层的走线和焊盘。而在转印时首先覆铜板要刷洗干净,以免在转印时油墨不能完全的转印;其次,转印机必须预热到机器发出提示音,这表明,转印机已经准备好转印了;第三,转印机的转印速度档位应放在“正常”档位,板子的类型应放在“印刷板” 档位。第四,在转印时,注意油纸上的走线图必须能够完整的附在覆铜板上,一块板子最好转印两次,确保把油墨完全的转印到覆铜板上。
4. 腐蚀
将油纸上的电路图转印到覆铜板后,接着就要把多余的铜腐蚀掉。不过在刚转印好的时候,首先应检查是否转印完整,若有断线、走线空心的问题,必须用油墨笔将断线补起来,空心的走线填完整。确保转印工序完成后,就可以将电路板放入FeCl3溶液里进行腐蚀了,俗称“烂板”。如果有条件,可以将腐蚀液加热,再放入电路板,这样能够有效的提高腐蚀的速度。
5. 打孔
腐蚀好的板子,在洗净之后就可以打孔了,打孔时尤其要注意孔的大小不能将焊盘的铜箔完全打掉,否则焊接时,焊盘没有铜箔就无法进行焊接了。
最后,打孔完成,用砂纸将毛糙磨平,这样电路图的绘制与PCB板的制作就顺利完成了。
4.2 系统的调试
电路板实物做完以后,接下来的工作就是调试。这是理论指导实践最重要的一步。调试工作需要耐心与恒心。所以在调试过程中必须保持冷静的头脑,较强的电路分析能力。一个系统的调试需要软硬件结合调试。
在软硬件结合调试的过程中所遇到的问题:
1、电子电路的设计中对各种影响因素的考虑不够完全,比如在对过电压情况的处理中未作防范措施。
2、系统设计不够优化,有待改善。比如系统的超量程信号直接由单片机送入报警电路,没有设计保护电路再入单片机处理后送入报警电路。
3、没有扩展更多电路,如温度显示功能,通讯接口电路与上位机(PC机)进行通讯,上位机显示功能从而将大量的商品数据存于上位机,然后通过串口或并口通讯与电子称相连,达到远距离控制的目的。
4、对各种实用芯片价格了解不够,选择上任有欠缺,如所选的称重传感器价格较贵。这些都为我今后的学习和工作留下了积极的影响。

第五章  总结与体会
5.1  总结

本文采用AT89S52单片机计的电子计重秤, 无论是计量精度, 还是稳定性都满足国家对A级电子秤的要求, 它具有较好的标定校准方法, 性能稳定, 操作简单, 价格低廉。该电子秤集传感器技术、微计算机技术、数字显示技术于一体、其反应灵敏、准确度高、显示直观,便于使用。通过硬件的少量扩展和软件的修改, 能设计出性能优越的计价秤、电子台秤等, 满足各行各业对现代电子衡器的需求。另外稍加扩展,该电子秤还可与其它生产质量管理系统项连接,具有推广应用价值。

下面就电子秤软件组成部分展望一下它的发展:

  在整个毕业设计过程中,我对大学四年所学的知识有了一个系统的认识和理解,尤其是对本课题所用到的单片机及其相关知识有了进一步的掌握,对利用单片机进行控制系统的设计与开发又及对系统的分析和问题的解决有了切身的认识和体会,正所谓学以致用,在此实践过程中增长了知识、丰富了经验,提高了解决问题的能力。系统的分析与设计过程是对学习的总结过程,更是进一步学习和探索的过程。控制系统的开发设计是一项复杂的系统工程,必须严格按照系统分析、系统设计、系统实施、系统运行与调试的过程来进行。系统的分析和设计是项很辛苦的工作,同时也是一个充满乐趣的过程,在设计过程中,要边学习,边实践,遇到新问题就不断探索和努力即可使问题得到解决。

理论和实际必须紧密结合,在设计中要针对不同的系统根据理论给与不同的方案,综合考虑各方面的因素和需要,选择出最佳的方案与结论。

本课题软件和硬件相结合,有相当大的难度,同时也有很大的实用性。在做毕业设计的过程中,我的理论和实践水平都有了较大的提高。在本课题的设计中,我熟练掌握了单片机硬件设计和接口技术,同时对称重传感器的原理及应用有了一定的了解,掌握了各种控制电路及其相关元器件的使用。通过这次毕业设计,我不仅学会如何将所学专业知识运用到实际生活中,还学会如何克服未知的困难,解决难题的方法。

5.2  体会

毕业设计终于结束了,这意味着我的大学生涯中最后一项任务也完成了,在此毕业设计过程中,巩固了我在大学4年内学过的知识,尤其是单片机和C语言编程方面的知识,同时通过这次毕设提高了单片机编程的能力,尤其是获得的软件调试经验,同时了解到了其它相关领域的知识,对今后的工作学习有着极大的帮助。

由于时间太仓促,经验不足,理论方面也相应的存在不足,加上条件有限,仍存在着一些设计方面的问题,个人技能也有待提高。理论知识还要巩固加强。但是宝贵的实践经验还是对自己的提高有着极大的帮助。

参考文献


[[1] 薛均义,张彦斌.《MCS-516系列单片微型计算机及应用》[M].西安交通大学出版社,1999

[2]  中国机械工业教育协会 组编.《单片机原理与应用》.机械工业出版社.2001

[3] 黄继昌.《传感器工作原理及应用实例》[A],人民邮电出版社,1998

[4]  郭永贞,  《数字电子技术》[M]  西安电子科技大学出版社  2000

[5]  杨金岩等.《8051单片机数据传输接口扩展技术与应用实例》[M]人民邮电出版社,2005.

[6]  张齐,杜群贵.《单片机应用系统设计技术》[M].电子工业出版社,2007

[7]  李广弟  《单片机基础》[M],北京航空航天大学出版社,2001

[8] 于京《51系列单片机C程序设计与应用方案》[M] 中国电力出版社  2002.

[9]  张齐,杜群贵  《单片机应用系统设计技术》[M].电子工业出版社,2004

[10] 张洪润  《电子线路与电子技术》[M].清华大学出版社,2005

[11] 童诗白,华成英.《模拟电子技术基础》[M]. 高等教育出版社,2006

[12] 胡海学.《单片机原理及应用系统设计》[M].电子工业出版社,2005.

[13] 及力,《Protel99SE原理图与PCB设计教程》[M]电子工业出版社,2004.

[14] 戴佳,《51单片机C语言设计实例精讲》[M] 电子工业出版社        2006

[15 ] INTEGRATED CIRCUITS DATA HANDBOOK 80C51-based 8-bit microcontrollers PHILIPS,1992

[16 ] Adel S.Sedra,Kenneth C.Smith:Microelectronics Circuits,3rd Edition,Holt Rinehart and Winston,Inc.,1991

            


致谢

四年的本科学习生涯即将结束,在本人做毕业设计中,得到了我的导师的悉心指导和无私帮助。他严谨的治学态度和谦和的为人给我留下了深刻的印象。

本课题在选题及研究过程中得到???老师的悉心指导。?老师多次询问研究进程,并为我指点迷津,帮助我开拓研究思路,精心点拨、热忱鼓励。?老师一丝不苟的作风,严谨求实的态度,踏踏实实的精神,不仪授我以文,而且教我做人,虽历时三载,却给以终生受益无穷之道。
    通过这次毕业设计,使我得到了一次用专业知识、专业技能分析和解决问题全面系统的锻炼。使我在传感器的基本原理、传感器的实际应用,以及在常用传感器设计思路技巧的掌握方面都能向前迈了一人步,为日后成为合格的应用型人才打下良好的基础。我在?老师的精心指导和严格要求下,获得了丰富的理论知识,极大地提高了实践能力,并对当前电了领域的研究状况和发展方向有了一定的了解,这对我今后进一步学习传感器方面的知识有极人的帮助。在此,我衷心感谢???老师的指导和支持。在未来的工作和学习中,我将以更好的成绩来回报老师。
    在此,我还要感谢在一起愉快的度过人学生生活的机电工程系全体老师和同学门,正是由于你们的帮助和支持,我才能克服一个一个的困难和疑惑,直至本文的顺利完成。
    在论文即将完成之际,我的心情无法平静,从开始进入课题到论文的顺利完成,有多少可敬的师长、同学、朋友给了我无言的帮助,在这里请接受我诚挚的谢意!最后我还要感谢培养我长大含辛茹苦的父母,谢谢你们!


系统部分代码:
  1. void shizhong_hanshu()
  2. {
  3.               init();
  4.               Init_DS1302();//初始化芯片
  5.               init_1602();//初始化lcd
  6.               while(1)
  7.               {
  8.                             if(du_k2==0)
  9.                             dianzhicheng_hanshu();              //跳去运行电子称
  10.                             tmpchange();              //温度转换                                         
  11.                             wendu_100bei=tmp();               //获得温度
  12.                             show_date();
  13.                             keyscan();
  14.                             if((shi==clock_shi)&&(fen==clock_fen)&&(status==2)&&(miao<5))
  15.                             {
  16.                                           clock_flag=1;
  17.                                           TR1=1;
  18.                             }
  19.                             if(status==1)              //闹钟状态A解除闹钟
  20.                             {
  21.                                           clock_flag=0;
  22.                                           clock=1;
  23.                                           TR1=0;
  24.                             }
  25.               }
  26. }
  27. void get_pizhong()
  28. {
  29.               uint j;
  30.               ulong hx711_dat;
  31.               for(j=0;j<5;j++)
  32.               Delay10ms();
  33.               hx711_dat=ReadCount();
  34.               temp=(uint)(hx711_dat/100);            
  35. }
  36. void get_weight()
  37. {
  38.               ulong hx711_data,a;
  39.               uint get,aa;            
  40.               hx711_data=ReadCount();
  41.               get=(uint)(hx711_data/100);
  42.               if(get<(temp+4))
  43.               {
  44.                             while(1)
  45.                             {
  46.                                           if(du_k1==0)
  47.                                           shizhong_hanshu();              //跳去运行时间
  48.                                           weight=0;
  49.                                           TR0=0;              //不允许运行
  50.                                           chaozhong_flag=0;              //无重物,超重标志为0;
  51.                                           clock=1;
  52.                                           if(leiji_flag==1)
  53.                                           {
  54.                                                         weight_shuzhi(leiji_weight);//显示累计重量
  55.                                                         P3=0xf0;
  56.                                                         if(P3!=0xf0)
  57.                                                         {
  58.                                                                       leiji_count--;
  59.                                                                       break;
  60.                                                         }              //按键就提出
  61.                                           }
  62.                                           else            
  63.                                           weight_shuzhi(weight);//显示重量            
  64.                                           hx711_data=ReadCount();
  65.                                           get=(uint)(hx711_data/100);
  66.                                           if(get>(temp+4))break;
  67.                             }
  68.               }
  69.               a=ReadCount();
  70.               aa=(uint)(a/100)-temp;
  71.               weight=(uint)((float)aa/4.4+0.05);
  72.               weight=weight-qi_weight;              //去皮
  73.               if(weight>=0)
  74.               {
  75.                             if(weight>5000)
  76.                             {chaozhong_flag=1;TR0=1;}              //重量大于5000g,超重报警?
  77.                             else
  78.                             {chaozhong_flag=0;TR0=0;clock=1;}
  79.                             weizhi_zifu(0x00,'+');
  80.               }
  81.               else {weizhi_zifu(0x00,'-');}
  82. }

  83. void press(uchar *s)
  84. {
  85.               unsigned char dat;
  86. nn:              P3=0xf0;                                                                                                                //保存第一位
  87.               while(P3==0xf0)
  88.               {
  89.                             get_weight();//得到重量
  90.                             if(weight>0)
  91.                             {weight_shuzhi(weight);}//显示重量
  92.                             else
  93.                             {weight_shuzhi(-weight);}
  94.               }
  95.     dat=key_scan();
  96.               if(dat>=0&&dat<10)
  97.     {  
  98.                             if(leiji_flag==1)
  99.                             {
  100.                                           leiji_weight=leiji_weight+weight;
  101.                                           leiji_count++;
  102.                                           if(leiji_count==10)
  103.                                           leiji_count=0;
  104.                                           weizhi_zifu(0x04,0x30+leiji_count);
  105.                                           weight_shuzhi(leiji_weight);
  106.                             }
  107.                             *s=dat;
  108.                             price_shuzhi(1,dat+0x30);//显示
  109.                             s++;
  110.               }
  111.               if(dat==16)                                          //去皮
  112.               {qi_weight=weight+qi_weight;goto nn;}
  113.               if(dat==15)                                          //置零
  114.               {  
  115.                             qi_weight=0;
  116.                             weight=0;
  117.                             price=0;
  118.                             money=0;
  119.                             pricetable[2]=0;
  120.                             pricetable[1]=0;
  121.                             pricetable[0]=0;
  122.                             leiji_flag=0;
  123.                             leiji_weight=0;
  124.                             leiji_count=0;
  125.                             chaozhong_flag=0;
  126.                             clock=1;
  127.                             TR0=0;
  128.                             write_com(0x01);//清屏;
  129.                             init_1602();
  130.                             system();
  131.                             goto nn;
  132.               }
  133.               if(dat==14)//累计
  134.               {
  135.                             leiji_flag=1;
  136.                             leiji_weight=leiji_weight+weight;
  137.                             leiji_count++;
  138.                             if(leiji_count==10)
  139.                             {leiji_count=0;}
  140.                             write_com(0x01);//清屏;
  141.                             init_1602();
  142.                             system();
  143.                             weizhi_zifu(0x04,0x30+leiji_count);
  144.                             goto nn;
  145.               }
  146. mm:              P3=0xf0;                                                                                                    //保存第二位
  147.               while(P3==0xf0)
  148.               {
  149.                             get_weight();//得到重量
  150.                             if(leiji_flag==1)
  151.                             {weight_shuzhi(leiji_weight);}//如果累计标志为1,显示累计重量
  152.                             else
  153.                             {
  154.                                           if(weight>0)
  155.                                           {weight_shuzhi(weight);}//显示重量
  156.                                           else
  157.                                           {weight_shuzhi(-weight);}
  158.                             }
  159.               }                                                                                   
  160.     dat=key_scan();
  161.               if(dat>=0&&dat<10)
  162.     {  
  163.                             *s=dat;
  164.                             price_shuzhi(2,dat+0x30);//显示
  165.                             s++;
  166.               }
  167.               if(dat==16)                                          //去皮
  168.               {qi_weight=weight+qi_weight;goto mm;}
  169.               if(dat==12)                                          //清除
  170.               {s--;*s=0;price_shuzhi(1,' ');goto nn;}
  171.               if(dat==15)                                          //置零
  172.               {  
  173.                             s--;
  174.                             qi_weight=0;
  175.                             weight=0;
  176.                             price=0;
  177.                             money=0;
  178.                             pricetable[2]=0;
  179.                             pricetable[1]=0;
  180.                             pricetable[0]=0;
  181.                             leiji_flag=0;
  182.                             leiji_weight=0;
  183.                             leiji_count=0;
  184.                             chaozhong_flag=0;
  185.                             clock=1;
  186.                             TR0=0;
  187.                             write_com(0x01);                            //清屏;
  188.                             init_1602();
  189.                             system();
  190.                             goto nn;
  191.               }
复制代码

完整的Word格式文档51黑下载地址:
基于单片机的电子秤系统设计(附程序代码).doc (508 KB, 下载次数: 273)
回复

使用道具 举报

ID:462839 发表于 2019-1-6 02:00 来自手机 | 显示全部楼层
楼主有电路仿真图的原文件吗
回复

使用道具 举报

ID:565349 发表于 2019-6-18 09:55 | 显示全部楼层
非常棒!
回复

使用道具 举报

ID:565349 发表于 2019-6-18 09:57 | 显示全部楼层
zhangbingtao 发表于 2019-1-6 02:00
楼主有电路仿真图的原文件吗

请问您要到了吗
回复

使用道具 举报

ID:663839 发表于 2019-12-14 16:15 | 显示全部楼层
谢谢分享
回复

使用道具 举报

ID:680901 发表于 2020-1-4 10:56 | 显示全部楼层
楼主能把word文档分享一下吗?
回复

使用道具 举报

ID:758645 发表于 2020-5-23 06:34 来自手机 | 显示全部楼层
程序代码在那
回复

使用道具 举报

ID:907769 发表于 2021-4-19 15:14 | 显示全部楼层
楼主有电路仿真图的原文件吗
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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