【《简易电子秤的设计(附代码)》11000字(论文)】_第1页
【《简易电子秤的设计(附代码)》11000字(论文)】_第2页
【《简易电子秤的设计(附代码)》11000字(论文)】_第3页
【《简易电子秤的设计(附代码)》11000字(论文)】_第4页
【《简易电子秤的设计(附代码)》11000字(论文)】_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

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

文档简介

简易电子秤的设计摘要如今,电子称的结构小、价格便宜、操作简单,在日常生活中随处可见。尤其是像在超市、菜市场这种需要用到称量计价的场合内,电子称显得更加具有必要性。本次电子秤设计是基于单片机来设计一个电子秤,测量范围为(0-10)kg,测量精度为0.01kg。具有去皮、校准、输入单价、清零、计算总价、超重报警等基本功能。按键的设置参考超市内的电子秤。电子秤的设计电路中包含单片机最小系统、数据采集及处理电路、电源电路、4*4矩阵键盘电路、LCD显示电路和蜂鸣器报警电路。整个系统的结构清晰、操作简单、功能齐全。关键字:电子秤单片机数据采集电路AbstractToday,electronicallycalledsmallstructure,cheap,simpleoperation,indailylifeeverywhere.Especiallyinsupermarkets,vegetablemarkets,suchastheneedtouseweighingandpricingoccasions,electroniccallsappeartobemorenecessary.Theelectronicscaledesignisbasedonamicrocontrollertodesignanelectronicscale,measuringrangeof(0-10)kg,measurementaccuracyof0.01kg.Theelectronicscalehasthebasicfunctionsofpeeling,calibration,inputunitprice,zeroing,calculatingtotalprice,overweightalarmandsoon.Thesettingofthekeysreferstotheelectronicscaleinthesupermarket.Thedesigncircuitoftheelectronicscaleincludesthesmallestsystemofthemicrocontroller,thedataacquisitionandprocessingcircuit,thepowercircuit,the4x4matrixkeyboardcircuit,theLCDdisplaycircuitandthebuzzeralarmcircuit.Thewholesystemisclearlystructured,simpletooperateandfullyfunctional.Keywords:Electronicscales;Microcontroller;Dataacquisitioncircuit目录摘要 IAbstract II第一章引言 11.1选题的背景意义 11.2电子秤的研究概况及发展趋势综述 1第二章电路硬件总体设计 22.1电路总体设计 22.2电路元器件的选取 22.2.1单片机的选取 22.2.2STC89C52的工作原理及引脚功能介绍 22.2.3A/D转换芯片的选取 42.2.4HX711芯片介绍 42.2.5称重传感器的选择 52.3系统硬件设计 72.3.1单片机最小系统设计 72.3.2数据采集电路设计 92.3.3显示电路设计 102.3.4键盘电路设计 112.3.5报警模块 122.3.6电源模块 132.4硬件设计电路图 152.5硬件电路设计总结 15第三章系统软件总体设计 173.1主程序设计流程图 173.2显示程序设计 183.3按键程序设计 193.4A/D转换程序设计 213.5总结 23第四章系统调试 244.1实物组装 244.2测量数据及测量结果分析 254.2.1理论计算 254.2.2测量数据 254.2.3测量结果分析及调试校准 26总结与拓展 281.系统展望 282.总结 28附录1程序清单 32附录2电路图 46第一章引言1.1选题的背景意义随着当今社会人们的物质生活质量不断提高,人们越来越在意自己的身体状况,自然而然越来越多的人对自己的体重变化投入更多的精力。但其实计量称重一直就在我们的生活中扮演着很重要的角色,是一种非常重要的测量手段,几乎在每个地方都有它的身影存在,比如说我们生活周边的超市里和工厂里。并且电子称还是人们日常测量工作中研究使用频率非常高的一种仪器。而且随着我们在电子称技术方向的不断拓展,它的功能将会越来越强大,毫无疑问,它肯定会取代以前的称量工具。并且相比于传统的称重器具,电子秤在测量物体重量时十分的精准,现实生活中可以应用的范围相比来说比较大,而且现在电子称的构造和制造材料等各方面来说都属于是比较新颖的,具有技术含量。1.2电子秤的研究概况及发展趋势综述在中国,我们在电子工业上的发展经历了一个漫长的过程,尤其是在传统产业上。几百年来,我国一直在很大程度上以机械化为主,直到90年代我国电子技术才发生了较大的变化,电子工业经历了一场“手动到自动”、“机械到电子”的重大技术革命。电子技术发展高潮兴起以来,我国电子秤技术发展也逐步开始步入正轨。如今我们现代电子秤和技术检测设备已达到国际水平,电子制造技术及其应用实现了质的飞跃。通过观察最近这几年来国内外市场的需求和电子称产品的发展趋势,我们可以知道电子称总的发展趋势基本上都是向小型化、模块化、集成化、智能化不断靠拢;其中“小型化”指的是体积小、高度低、重量轻。“模块化”指的是对于大型的承载器结构,采用几种长度的标准结构的模块,经过分体组合,产生新的品种和规格。“集成化”指的是对于一些品种和结构的电子称来说,可以实现电子秤的秤体和其称重传感器的合为一体。“智能化”指的是电子称的称重显示控制器与计算机相结合,使电子称在原有功能的基础上更进一步,增加推理、判断、自诊断、自适应、自组织等功能。

第二章电路硬件总体设计第二章电路硬件总体设计2.1电路总体设计本课题是设计一个简易电子称,系统一共分为五个模块:数据采集模块、信号放大模块、模数转换模块、单片机控制模块、人机交换模块。本次设计的电路包含单片机最小系统、按键模块、LCD液晶显示模块、A/D转化模块、电源模块。系统总体设计框图如图2-1所示:图2-1系统总体设计框图2.2电路元器件的选取2.2.1单片机的选取对于单片机的选取,考虑到设计的经济性和便利性,这里选用STC89C52型号单片机。因为在烧录程序时,STC89C52用USB转串口线就可以实现功能,十分简单。价格也比较便宜。并且在单芯片上,由于STC89C52含有灵巧的8位CPU和在系统可编程Flash,在使用时会更加灵活。2.2.2STC89C52的工作原理及引脚功能介绍工作原理:STC89C52单片机按照时钟周期,依次取出指命和数据,作出相应的硬件动作。下图为STC89C52内部结构图。图2-2STC89C52内部结构图引脚功能介绍:STC89C52有2根主电源引脚、2根外接晶振引脚、4根控制引脚、32根可编程输入/输出引脚。主电源引脚分别接电源输入和地线,分别为40号引脚和20号引脚。晶振引脚接片内震荡电路的输入/输出端,分别为19号引脚和20号引脚。9号、29号、30号、31号引脚为控制引脚。其余的为可编程输入/输出引脚。下图为STC89C52的引脚图。图2-3STC89C52引脚图2.2.3A/D转换芯片的选取对于本次设计中的A/D转换芯片,选择采用HX711。因为HX711是一个专门为高精度的称重传感器而设计的24位A/D转换器芯片,而且我们只需要一个HX711芯片就可以完成称重信号的处理及A/D转换。对于本次设计来说,如果单片机想要获取传感器上重物的重量值,那么只需要通过一个简单函数,就可以读取此刻的AD值,然后通过一个线性方程的转换就可以测出此时物体的实际重量。2.2.4HX711芯片介绍HX711芯片集成了很多其他同类型芯片所需要的外围电路——像稳压电源和片内时钟振荡器这些。并且其集成度十分高、响应速度也很快、抗干扰能力强、还具有上电自动复位功能。其工作电压范围大概在(2.6到5.5)V之间,工作温度范围在(-20到85)℃之间,而且其内部含有A和B两个通道,A通道的可编程增益倍数要比B通道的增益倍数要大,一般来说A通道的增益倍数为128或64倍,B通道为固定的32倍。本次设计采用的是A通道。HX711采用16管脚的SOP-16封装。如下图所示:图2-4HX711芯片引脚图HX711芯片的引脚功能如下图所示:表2-1HX711引脚功能管脚号名称性能描述1VSUP电源用作稳压电路的供电电源,电压范围一般在(2.6-5.5)V2BASE模拟输出稳压电路控制输出(不用稳压电路时为无连接)3AVDD电源模拟电源,范围一般在(2.6-5.5)V4VFB模拟输入稳压电路控制输入(不用稳压电路时应接地)5AGND地模拟地6VBG模拟输出参考电源输出7INA-模拟输入A通道的负输入端8INA+模拟输入A通道的正输入端9INB-模拟输入B通道的负输入端10INB+模拟输入B通道的正输入端11PD-SCK数字输入断电控制(一般高电平有效)和串口时钟输入12DOUT数字输出串口数据输入13XO数字输入输出晶振输入(如果不用晶振的话,就不连接)14XI数字输入外部时钟或晶振输入,0:使用片内振荡器15RATE数字输入输出数据速率控制,0:10HZ;1:80HZ16DVDD电源数字电源,范围一般为(2.6-5.5)V2.2.5称重传感器的选择称重传感器实际上是一种将重力信号转变为可测量的电信号输出的装置。因此称重传感器的选取对于本次电子称设计来说至关重要。在选择中需要考虑称重传感器可以承受的最大重量和灵敏度等一些重要参数。因为本次设计的量程要求是0.00kg-10.00kg,测量精度要求0.01kg。所以在比较不同的称重传感器后,选择采用电阻应变式传感器。因为电阻应变式传感器的精度很高、固有频率高。且结构简单,加工容易,还具有较强的抗偏载能力。下面为本次用到的电阻应变式传感器的参数表:图2-2传感器参数表额定载荷102040精度等级C2绝缘电阻(MΩ)5000(100VDC)综合误差(%F.S)0.03激励电压(V)3~12(DC)灵敏度(mV/V)2±0.1温度补偿范围(℃)-10~+40非线性(%F.S)0.03使用温度范围(℃)-35~+65滞后(%F.S)0.03零点温度影响(%F.S/10℃)0.03重复性(%F.S)0.02灵敏度温度影响(%F.S/10℃)0.02蠕变(%F.S/30min)0.02安全过载范围(%F.S)120零点输出(%F.S)±1极限过载范围(%F.S)150输入阻抗(Ω)405±6防护等级IP65输出阻抗(Ω)350±3电缆线(屏蔽电缆线)0.42m电阻应变式传感器是一种将其所感受到的重力变化量转换为电信号变化量的结构型传感器。因为当传感器上的物体重量发生变化时,传感器内的电阻应变片就会变形,而它的电阻应变片变形时其电阻会随之改变。导体的电阻随着机械变形而发生变化的效应称为电阻应变效应。但由于应变量及相应的电阻变化一般都很小,无法精确测量。因此一般都要采用转换电路把应变片的电阻变化转换成电压或电流变化。其转换电路常用测量电桥。下图为传感器内部的连接图:图2-5传感器内部接线图由图可知Ra和Rc为应变片电阻。Ein为输入电压,Eout为输出电压。其工作原理:为当传感器上没有物体时,应变片不会发生变化,应变片阻值不变。即电桥平衡,输出的电压为0。当传感器上有物体时,应变片发生变形,应变片阻值发生变化,电桥的平衡被破坏,输出的电压不为0。本设计中没有考虑温度补偿电阻,电桥的输出电压为[()*]V。设Ra=Rb=Rc=Rd=R,应变片电阻变换量为Ra和Rc。经化简后输出电压等于。求出输出电压后就可以求出传感器的灵敏度。传感器的灵敏度等于(Eout/Ein)mV/V。本设计中的传感器灵敏度由上表可知为(2±0.1)mV/V。2.3系统硬件设计2.3.1单片机最小系统设计单片机的最小系统也可以称为最小应用系统。一般包括单片机、晶振电路、电源和复位电路。指的是用最少的元件组成的单片机可以工作的系统。下图是本次设计中所用到的单片机最小系统。图2-6单片机最小系统电路选择好单片机后考虑电源的选取,对于一个电子设备来说,电源是必不可少的。目前主流的单片机电源有5V和3.3V这两个标准。由于本次设计中选用的是STC89C52,所以采用5V供电系统。从图中可以看出,供电电路在40引脚和20引脚处。40引脚处接的是+5V,通常也称为VCC。代表电源正极。20引脚接的是GND,代表电源的负极。然后考虑晶振电路的设计,晶振电路起到的作用一般是为单片机系统提供基准时钟信号。因为STC89C52内部没有集成内部时钟,所以必须外接一个晶振电路。下图是这次设计用到的晶振电路:图2-7晶振电路本次设计采用的STC89C52单片机的18号引脚和19号引脚是晶振引脚,接了一个12MHZ的晶振,外加了两个22PF的电容,这两个电容一般称为“配备电容”或“负载电容”。接电容的作用是为了满足谐振条件,使晶振两端的等效电容等于或接近负载电容,帮助晶振起振。将电容的大小设为22pF是为了可以更好使晶体工作在最佳状态。并维持震荡信号的稳定,保证更高的精度。最后考虑复位电路的设计,复位电路的作用是当我们的单片机失去响应时,通过复位电路,可以使单片机重新启动。一般单片机在开始工作时都需要进行复位操作,这样的话,可以让单片机内部CPU及各部件处于设定好的初始状态,并从这种状态开始工作。单片机的复位一般有三种情况:上电复位、手动复位、程序自动复位。本次用到的是手动复位。下图为本次用到的复位电路图:图2-8复位电路本次设计中的复位电路接到了STC89C52的9号引脚——RST复位引脚。当我们对系统进行复位,我们只需按下按钮,VCC的+5V电源就会直接加入到RST端。这样RST引脚上就会有一个高电平,且因为即使我们按按纽的动作再快,也会使按钮保持接通数十毫秒。那么这个高电平完全可以维持2个机器周期以上,这时单片机的CPU就可以响应并将系统复位。2.3.2数据采集电路设计对于本次设计的电子称系统来说,数据采集电路的设计至关重要。因为这涉及到该电子称系统的精度问题和系统能不能正常的实现测重功能的问题。数据采集电路的作用就是将外界加在称重传感器上的非电气量转化成电气量在进而转化成数字量,以便单片机能够顺利执行相应的操作。本次设计的数据采集电路设计如图所示:图2-9数据采集电路由图可知,该数据采集电路是以HX711芯片为核心部件。P2左侧连接的是电桥电路,HX711的稳压电源通过HX711的AVDD和AGND端口向传感器的电桥供电,由于本次HX711内部使用的是A通道,所以这次电桥输出的信号量仅通过电路图P2上的3和4接口与HX711的INA-和INA+连接。然后电桥输出的信号量通过HX711内部的A\D转换变成数字量再经HX711的DOUT端口输出。为了求得HX711的最大输出值,我们得先求出HX711的供电电压。根据HX711芯片的工作原理可得HX711的供电电压等于VBG*(R1+R3)/R2,且基准电压VBG=1.25V,R1=20K,R3=8.2K。最后可以求出HX711的供电电压为4.3V,则传感器的满量程输出电压为8.6mV。然后由于本次HX711选通的是A通道,那么信号的发大倍数为128倍,那么当输出电压经过HX711放大后,输出的最大电压为1100.8mV。再经过A/D转换可得HX711输出的数字信号。HX711输出的数字信号=(1100.8mV*2^24)/(4.3V)=4294966。2.3.3显示电路设计

本次设计中,显示部分采用的是LCD12864液晶屏。其横向可以显示128个点,纵向可以显示64个点。是具有4位/8位并行、2线或3线串行多种接口方式的一种点阵图形液晶显示模块。由于其内置了8192个16*16点汉字,和128个16*8点ASCII字符集,所以完全可以可构成全中文人机交互图形界面。并且与其他的同类型的显示模块相比,LC12864的硬件电路结构和显示程序都要更加简单,更加容易操作。且LCD12864的价格也相对来说比较便宜,更加经济。本次设计的显示电路图如下:图2-10LCD12864显示电路本电路中其各引脚功能如下:1号引脚为VSS,是LCD12864的电源地。2号引脚为VDD,是LCD12864的电源正端,接+5V电源。3号引脚为V0,是LCD12864的驱动电压输入端,用来调节亮度,外接电阻端。4号引脚为RS(CS),接收串行的片选信号,接+5V电源。5号引脚为R/W(SID),是串行的数据口,是数据的输入端。6号引脚为E(SCLK),是时钟信号的输入端。7-14号引脚指DB0-DB7,与数据线相连。15号引脚为PSB,用来选择串并模式,本电路中接地,选择串行模式。16号引脚为NC,是空引脚,不连接。17号引脚为RSTET,为复位端,低电平有效。18号引脚为VOUT,是LCD12864的驱动电压输出端,外接电阻。19号引脚为BLA,背光源正极,接+5V。20号引脚为BLK,背光源负极,接地。本次设计中LCD12864采用的是串行模式,分析其数据传输过程如下图所示:图2-11串行模式下的数据传输过程2.3.4键盘电路设计本设计中采用4*4矩阵键盘实现相应的单价输入、去皮、清零、总价计算等功能。4*4的键盘设计比起独立按键占用更少的IO口资源,实现的功能更多。按键的设置参考了日常生活中超市里的电子秤。矩阵键盘电路图如下:图2-12键盘电路按键的对应功能如下表所示:表2-3按键功能表123去皮456清零789矫正-切换单价0.矫正+按键功能介绍:去皮功能是为了测量物体的净重。因为称本身有重量,去皮就是指去除称本身的重量。一般我们测量物体重量之前都要进行去皮步骤。清零功能可以将之前设置的单价给清除掉,方便重新输入单价。矫正(+\-)功能是为了当电子秤测量物体时存在误差时,可以进行矫正。比如当实际物体为5kg,但测量出来是4.95kg时,我们可以按下S16按键,将电子称上显示的重量调到5kg。测量结果偏大,则按S12按钮进行调节。切换单价功能可以快速切换事先设置好的几种单价。中间的数字“0-9”和小数点“.”就是我们输入单价的按键。2.3.5报警模块本设计中采用蜂鸣器作为报警模块。当电子秤测量的物体超过了设定的最高值时,蜂鸣器动作报警提示。这样可以避免当物体的重量太高时损坏传感器。报警指示电路如下图所示:图2-13报警指示电路报警指示电路由三极管PNPS8550驱动蜂鸣器来实现报警功能。本次设计中单片机STC89C52的P37口通过1K的电阻R7与三极管S8550的基极相连,当单片机STC89C52的P37口输出为低电平时,三极管S8550将导通,由于蜂鸣器的正极与电源接通,负极与GND相连,蜂鸣器形成了一个有效回路。蜂鸣器将正常导通工作发出报警声。当单片机STC89C52的P37口输出高电平时,三极管S8550将截止,蜂鸣器无法形成有效回路,蜂鸣器不工作,停止报警。2.3.6电源模块由于本次系统中用到单片机和A\D转换芯片以及液晶显示屏所需供电电压都是5V电压,所以如果我们要保证该系统能够稳定可靠的工作,那么就需要设计一个可以稳定提供5V直流电压的供电系统。这里选用LM7805作为电路的稳压器,以保证系统电压为稳定的直流5V电压。三端稳压器LM7805的原理图如下:图2-14稳压器LM7805原理图由图可知稳压器LM7805只有三条引脚,分别是输入端、接地端、输出端。并且当外部电压经过LM7805稳压器后会变成+5V的电压输出。其电参数表如下:表2-4LM7805参数表参数测试条件最小值最大值典型值输出电压V0Tj=25℃4.8V5.2V5.0V线性调整率ΔV0Tj=25℃,Vi=(7.5-25)V100mV4.0mV负载调整率ΔV0Tj=25℃,I0=(0.005-1.5)A100mV9mV静态电流IQTj=25℃8mA5.0mA静态电流变化率ΔIQI0=(0.005-1)A0.5mA0.03mA输出电压温漂ΔV0/ΔTI0=5mA0.8mV/℃输出噪音电压VNf=(10-100000)HZ,Ta=25℃42μV纹波抑制比RRf=120HZ,Vi=(8-18)V62dB73Db输入输出电压差V0I0=1.0A,Tj=25℃2V输出阻抗R0f=1000HZ15mΩ短路电流ISCVi=35V,Ta=25℃230mA峰值电流IPKTj=25℃2.2A本次设计的电源电路如图所示:图2-15电源电路本设计采用了双电源接口方式供电,外部采用220V交流电源作为系统的供电电源。220V的交流电源经过变压器变化成12V的交流电源,然后通过三端稳压器LM7805变成5V的直流电源,同时系统电源输入接口处和LM7805的输入端都并联滤波电容以保证工作电压稳定。另外在电源输出接口处接LED电源指示灯,这样可以判定电源是否处于正常的工作状态。2.4硬件设计电路图本次设计的总体硬件电路如下:图2-16硬件电路图2.5硬件电路设计总结对于这次的电子秤硬件部分设计来说,首先要把握好原始材料,考虑相应的电路器件的选取。这就要求我们严格按照设计计划书里的性能要求去选取满足要求的硬件,拟定出不同的方案。然后比较不同类型的单片机、A\D转换芯片、传感器。最后得出一个最佳的方案。最后根据我们想要本系统能够实现的功能,设计相应的电路模块,并按照一定的逻辑关系,将不同模块连接起来。本次硬件电路的绘制是在protel99se软件上完成的,该软件操作起来简单,而且查找元件库和自己直接绘制电路元器件十分方便,容易上手。硬件电路的设计过程并不顺利,中间也遇到了各种各样的困难,像传感器类型的选取、电源电路的设计、按键功能的设置、引脚的功能以及相互模块之间的连接。所以要多收集资料,翻阅文献,才能顺利完成硬件电路的设计。第三章系统软件总体设计第三章系统软件总体设计本次的系统软件总体设计分为主程序设计、显示程序设计、按键程序设计、A/D转化设计。3.1主程序设计流程图图3.1主程序流程图上图为本次设计的主程序流程图,系统开始后,按照流程图先执行初始化程序,对单片机STC89C52、液晶显示LCD12864和定时器进行初始化。初始化完成后,屏幕上显示设置好了的初始画面。后按下去皮键进入去皮状态。去皮完成后进入主程序的while循环(本程序的while循环为无限循环),然后系统可进行称重测试,判断定时器的设定时间是否为0.5s,如果判断结果为是,则称重并显示。判断结果为否的话,则跳转至扫描键盘状态,判断校准按键是否按下,如果校准按键按下了,系统进入校准状态,并把校准值保存到单片机内部,然后回到while循环头部,继续执行相应程序。如果判断校准按键没有按下,则无校准值,相当于直接返回至while循环头部。3.2显示程序设计显示程序可以使LCD12864显示所测到的物体的重量和设定的单价以及物体的总价。下图为本次设计的显示程序流程图:图3.2显示程序流程图由图可知,当系统开始运行后,首先对LCD12864进行初始化,初始化完成后显示设定好的开机画面。当电子称上有重物时,LCD12864将接收单片机传送过来的数字信号,并在液晶屏上显示出来。3.3按键程序设计键盘电路设计成4*4式矩阵键盘,因为4*4的矩阵键盘相比于独立按键可以节省单片机的IO口资源。在程序中可以先判断是哪个按键被按下,然后将按键代表的数值送到相应的存储单元,再进行相应的功能选择或数据处理。按键程序设计流程图如图3-3所示:图3.3按键程序流程图由图可知,本次设计的键盘按键包括数字键、去皮键、清零键、校准键以及小数点键。程序开始运行后,对所按下的键进行判断,本次程序设计采用逐行扫描来判断是哪个键按下。首先先对矩阵键盘的每行输入低电平,判断键盘每列的输出是否有低电平,如果有低电平输出则说明有按键被按下。然后依次使矩阵键盘的行所连接的地址线输出0111、1011、1101、1110电平信号,即单片机与矩阵键盘的行所连接的IO口依次输出低电平,且其他三个IO口输出为高电平。再经过延时消抖后,判断矩阵键盘的列所连接的IO口是否是低电平。就可以判断出是哪个键被按下。比如说现在矩阵键盘的行地址线输入0111,与矩阵键盘的列所相连的IO口电平信号为1011,则说明是第一行、第二列的键被按下。然后根据按下的键所代表的内容,返回相应的结果。判断完是什么功能键按下后,按照上述流程图所示,依次执行相应的程序步骤,最终实现每个按键的功能。其键盘扫描程序如下:externbitbdataF-key;unsignedcharGetkeyboard(void){unsignedcharnumber=0;unsignedchara;h1=h2=h3=h4=0;//行输入低电平 if(((l1!=1)||(l2!=1)||(l3!=1)||(l4!=1))&&F-key==1)//如果列输出不全为高,则说明有键按下 { F-key=0;//输入0111 h1=0; h2=h3=h4=1; for(a=0;a<20;a++);//延时消抖 if(l1==0)return1; //7 elseif(l2==0)return2; // 8 elseif(l3==0)return3; // 9 elseif(l4==0)return10; // 10 h2=0;//输入1011 h1=h3=h4=1; for(a=0;a<20;a++); if(l1==0)return4; //4 elseif(l2==0)return5;//5 elseif(l3==0)return6; //6 elseif(l4==0)return11; // 11 h3=0;//输入1101 h1=h2=h4=1; for(a=0;a<20;a++); if(l1==0)return7;//1 elseif(l2==0)return8; //2 elseif(l3==0)return9; //3 elseif(l4==0)return12; //12 h4=0;//输入0111 h1=h2=h3=1; for(a=0;a<20;a++); if(l1==0)return14; elseif(l2==0)return0; elseif(l3==0)return15; elseif(l4==0)return13; return99;//没有检测到列低电平 } elseif(l1==1&&l2==1&&l3==1&&l4==1) F-key=1; return99;}3.4A/D转换程序设计本次设计使用的是24位A/D转换芯片HX711。HX711的引脚PD_SCK和DOUT是串口通讯线,是用来输出数据,选择输入通道和增益的。当HX711的引脚DOUT为高电平时,表明HX711还没准备好输出数据,引脚PD_SCK这时将输出为低电平。当引脚DOUT从高电平变低电平后,引脚PD_SCK将输入24个脉冲信号,并依次读出24位输出数据,并且这24位输出数据是从最高位至最低位逐位输出完成。然后引脚PD_SCK将输入第25至27个时钟脉冲用来选择下一次A/D转换的输入通道和增益。由于本次仅使用到HX711内部的A通道且增益固定为128,所以不需要考虑当改变通道和增益时,A/D转换器稳定所需要的周期数。本设计中一次A/D转换周期中PD_SCK仅需要输入25个时钟脉冲信号即可。下图为HX711的数据输出,输入通道和增益选择时序图:图3.4数据输出、通道、增益选择时序图所以在设计程序时要收集完24次数据后等第25个脉冲下降沿来时,再开始转换数据。下图为A/D转换程序流程图:图3.5A/D转换流程图由上图可知,系统开始运行后,依次读取24位传感器传入的信号,128倍放大后,进行A/D转换,返回相应的值到单片机中。3.5总结系统的软件设计对于整个设计来说至关重要,系统能不能正常运行并实现相应的功能都取决于软件设计是否正确。本次软件设计将整个系统分成各个模块,分别进行阐述。本次软件程序的编写使用到了‘keil4’软件,该应用软件包含了我们日常生活中能用到的大多数51和52类型的单片机。容易实现软件程序代码设计所需要的编译环境。代码编写完后容易生成后缀为‘.hex’的文件,方便进行程序烧录。本次程序设计流程图的绘制使用到了‘Visio’软件,该应用软件对于工程流程图的绘制非常方便,对于不同类型的图,都有相对应的模块。

第四章系统调试第四章系统调试4.1实物组装首先准备好本次设计要用到的STC89C52单片机、HX711芯片、传感器、托盘、LCD12864显示屏、4*4的矩阵按键、相应电路模块里要用到的电阻、电容、晶振、以及相应的焊接设备。各个元器件准备完后,将在‘keil4’软件里编写好的程序代码编译生成的后缀为‘.hex’文件通过STC-ISP软件烧录至本次用到STC89C52单片机中。然后按照原理图上的电气连接,将各个元器件在PCB板上焊接起来。焊接的时候要注意不要把不同引脚给焊到一起。焊接好的实物如下图所示:图4.1实物图焊接完后,在通电之前,先进行本系统中的电源和地的校验。将万用表调到电阻档,分别测量电源与地之间的电阻。如果万用表显示的电阻正常,即万用表的示数不在‘0’左右,表明该系统的电源和地均正常焊接。这时在通电,运行系统,测量相关数据。4.2测量数据及测量结果分析4.2.1理论计算本次设计中传感器满量程的输出电压为8.6mV,且设计中HX711芯片对应的满额度差分输入信号幅值为20mV。设传感器的满量程输出电压对应的HX711转换芯片的数字转换量为X。则有。可算出X等于3607101.44。测量出来的重量=(HX711转换芯片输出的AD转换量*10/3607)g。4.2.2测量数据采用1kg~10kg的砝码进行测试,按照从小到大依次进行测试,测量9次。测试结果如下表所示:表4.1重量测试结果实际重量(kg)测量重量(kg)测量误差(kg)1.000.980.022.001.990.013.002.980.024.003.990.015.004.970.036.005.970.037.006.980.028.007.970.039.008.960.04将表格绘制成折线图如下所示:图4.2重量测试折线图4.2.3测量结果分析及调试校准由上表可知,本次设计的电子称的测量结果偏小,表明传感器的满量程输出电压对应的HX711转换芯片的数字转换量可能偏大。出现这个问题的原因可能是传感器的实际参数与理论参数存在误差。后面经过反复不断的调试X的取值,最终发现X的值设置为3500比较合理。重新烧录完程序后,重新再测一次,结果如下:表4.2重量测试结果实际重量(kg)测量重量(kg)测量误差(kg)1.001.010.012.002.010.013.003.010.014.004.020.025.005.030.036.006.020.027.007.010.018.008.030.039.009.020.02将表格绘制成折线图如下所示:图4.3重量测试折线图通过测试发现测量结果虽有误差存在,但误差基本在可接受的区间内。因为在测量中,测量环境的温度、托盘摆放的平衡、和砝码的重量的损耗等因素都会对实验结果造成影响。

总结与拓展总结与拓展1.系统展望虽然本次设计的电子称可以实现测量、计价、校准、去皮等基本功能。但这次设计的电子称功能还可以更加完善,在这里对本次的简易电子称设计作出展望。为了使该电子称使用起来更加人性化,可以在现有的基础上增添一个语音录放模块。将语音模块和矩阵键盘相互联系,实现键盘按键功能和总价的播报。比如当按下数字键‘1’时,系统立即反应,系统语音模块工作,播放之前录好的音频。每个按键都设置不同的专属音频。对于总价的播报,可以将本次矩阵键盘的S13键功能进行变化,变化后,当按下S13键时,系统就播报现在LCD显示屏上显示的总价。对于语音录放电路的设计可以考虑采取ISD2500系列语音芯片和AT89C51单片机。ISD2500系列语音芯片结构简单,使用方便。具有录音高保真和录放一体化的优点,利用了ISD公司的专利技术——“直接模拟存储技术”。把模拟数据成功地存入半导体存储器中并且不需要经过D/A或A/D转化。这种直接将模拟数据写入单个存储单元的储存方法十分具有创新性。为了可以更加灵活的录制和播放不同的语音,并且考虑经济性,这里可以不使用专门的ISD语音开发设备,考虑用AT89C51单片机来和ISD2500芯片相互搭配,实现相应语音录放功能。2.总结本次论文中主要描述了基于STC89C52单片机和HX711转换芯片的简易电子秤设计,电子秤的量程为10kg,精度为0.01kg。本文对本次电子秤系统中的各个模块电路均进行了介绍。本次系统的硬件和软件设计简单,能够实现日常生活中常见的电子称的功能。其中硬件部分包括单片机最小系统、电源模块、LCD显示模块、矩阵键盘模块、报警模块、数据采集模块。其中矩阵键盘和LCD显示屏构成了系统的人机交互界面,数据采集电路中选取的称重传感器采用了电阻应变式传感器,传感器将待测重量转换成微弱的电信号,然后经过HX711内部放大和AD转换后送入单片机中,最终实现系统的测量功能。且由于HX711是一个高精度的24位A/D转换芯片,所以本次设计的电子秤的测量误差非常小,具有一定使用价值。在本次系统的设计中,用到了许多的工程软件——‘protel99se’、‘KeiluVision4’、‘STC-ISP’。就本次设计而言,这些软件说功能强大、使用起来十分简单。

附录1程序清单附录1程序清单Main.c主程序如下:#include<reg52.h>#include<intrins.h>#include<string.h>#defineucharunsignedchar#defineuintunsignedintbitbdataF-key;#include"main.h"#include"LCD12864.h"#include"HX711.h"#include"keyboard.h"#include"eeprom52.h"unsignedlongHX711_Buffer=0;unsignedlongWeight_Maopi=0;unsignedlongWeight_Maopi_0=0;intqupi=0;longWeight_Shiwu=0;//键盘处理变量unsignedcharkeycode;unsignedcharDotPos; //小数点标志及位置uintX,X1;unsignedlongidataprice;//单价,长整型值,单位为分unsignedlongidatadanjia[8]={11,22,33,44,100,200,300,400};unsignedcharcount_danjia;unsignedlongidatamoney,total_money;//总价,长整型值,单位为分//定义标识volatilebitFlagTest=0; //定时测试标志,每0.5秒置位,测完清0volatilebitFlagKeyPress=0;//有键按下标志,处理完毕清0//校准参数//因为不同的传感器特性曲线不是很一致,因此,每一个传感器需要矫正这里这个参数才能使测量值很更准确。//当发现测试出来的重量偏大时,增加该数值。//如果测试出来的重量偏小时,减小改数值。//该值可以为小数//#defineX349sbitBuzzer=P3^7;volatilebitClearWeighFlag=0;//传感器调零标志位,清除0漂/******************把数据保存到单片机内部eeprom中******************/voidW_eeprom(){ SectorErase(0x2000); X1=X&0x00ff; byte_write(0x2000,X1); X1=(X&0xff00)>>8; byte_write(0x2001,X1); byte_write(0x2060,a_a); }/******************把数据从单片机内部eeprom中读出来*****************/voidR_eeprom(){ X=byte_read(0x2001); X=(X<<8)|byte_read(0x2000); a_a=byte_read(0x2060);}/**************开机自检eeprom初始化*****************/voidI_eeprom(){ read_eeprom(); //先读 if(a_a!=1) //新的单片机初始单片机内问eeprom { X=3500; a_a=1; write_eeprom(); //保存数据 } } //显示单价,单位为元,四位整数,两位小数voidD_Price(){LCD12864_write_com(0x88); LCD12864_write_word("单价:"); LCD12864_write_data(price/100+0x30); LCD12864_write_data(price%100/10+0x30); LCD12864_write_data('.'); LCD12864_write_data(price%10+0x30); LCD12864_write_word("元");}//显示重量,单位kg,两位整数,三位小数voidD_Weight(){ LCD12864_write_com(0x90); LCD12864_write_word("重量:");LCD12864_write_data(''); LCD12864_write_data(Weight_Shiwu/1000+0x30); LCD12864_write_data('.'); LCD12864_write_data(Weight_Shiwu%1000/100+0x30); LCD12864_write_data(Weight_Shiwu%100/10+0x30); LCD12864_write_data(Weight_Shiwu%10+0x30); LCD12864_write_word("Kg");}//显示总价,单位为元,四位整数,两位小数voidD_Money(){//unsignedinti,j;LCD12864_write_com(0x98); //指针设置LCD12864_write_word("总价:");LCD12864_write_com(0x9f); //指针设置LCD12864_write_word("元");if(money>=1000){LCD12864_write_com(0x9c); LCD12864_write_data(''); LCD12864_write_data(money/1000+0x30); LCD12864_write_data(money%1000/100+0x30); LCD12864_write_data(money%100/10+0x30); LCD12864_write_data('.'); LCD12864_write_data(money%10+0x30);}elseif(money>=100){LCD12864_write_com(0x9c); LCD12864_write_data(''); LCD12864_write_data(0x20); LCD12864_write_data(money%1000/100+0x30); LCD12864_write_data(money%100/10+0x30); LCD12864_write_data('.'); LCD12864_write_data(money%10+0x30);}elseif(money>=10){LCD12864_write_com(0x9c); LCD12864_write_data(''); LCD12864_write_data(0x20); LCD12864_write_data(0x20); LCD12864_write_data(money%100/10+0x30); LCD12864_write_data('.'); LCD12864_write_data(money%10+0x30);}else{LCD12864_write_com(0x9c); LCD12864_write_data(''); LCD12864_write_data(0x20); LCD12864_write_data(0x20); LCD12864_write_data(0+0x30); LCD12864_write_data('.'); LCD12864_write_data(money%10+0x30);}}//数据初始化voidI_Data(){price=0;DotPos=0;}//定时器0初始化voidI_Timer0(){ ET0=1;//允许定时器0中断 TMOD=1;//定时器工作方式选择 TL0=0xb0; TH0=0x3c;//定时器赋予初值 TR0=1;//启动定时器}//定时器0中断voidTimer0_ISR(void)interrupt1using0{ucharCounter; TL0=0xb0; TH0=0x3c;//定时器赋予初值 //每0.5秒钟刷新重量Counter++;if(Counter>=10){FlagTest=1; Counter=0;}}//按键响应程序,参数是键值//返回键值://78910(清0)//45611(校准-)//12312(校准+)//14(调整单价)015(.)13(确定价格)voidPKey(ucharkeycode){ switch(keycode) { case0: case1: case2: case3: case4: case5: case6: case7: case8: case9: //目前在设置整数位,要注意price是整型,存储单位为分 if(DotPos==0) { //最多只能设置到千位 if(price<100) { price=price*10+keycode*10; } }//目前在设置小数位 elseif(DotPos==1)//小数点后第一位 { price=price+keycode; DotPos=2; } D_Price(); break; case10://清零键// speak(41); if(qupi==0) qupi=Weight_Shiwu; else qupi=0; D_Price(); // FlagSetPrice=0; DotPos=0; break; case11: //删除键,按一次删除最右一个数字 price=0; DotPos=0; D_Price(); break; case12: //加 if(X<10000) X++; // Get_Weight(); break; case13://减 if(X>1) X--;// Get_Weight(); break; case14:count_danjia++; if(count_danjia>7) count_danjia=0; price=danjia[count_danjia]; D_Price(); break; case15://小数点按下 DotPos=1;//小数点后第一位 break;}}//****************************************************//主函数//****************************************************voidmain(){ //yyxp_rest=1;// yyxp_data=1; I_eeprom();//开始初始化保存的数据 I_LCD12864(); //初始化LCD1602EA=0;I_Data();I

温馨提示

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

最新文档

评论

0/150

提交评论