基于单片机智能电子秤设计_第1页
基于单片机智能电子秤设计_第2页
基于单片机智能电子秤设计_第3页
基于单片机智能电子秤设计_第4页
基于单片机智能电子秤设计_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

1、-. z基于单片机的智能电子秤设计-. z目录 TOC o 1-3 h z u HYPERLINK l _Toc3246030201 绪论HYPERLINK l _Toc3246030211.1 选题的背景和意义 PAGEREF _Toc324603021 h 3HYPERLINK l _Toc3246030221.2 研究现状 PAGEREF _Toc324603022 h 3HYPERLINK l _Toc3246030231.3 论文主要研究容 PAGEREF _Toc324603023 h 3HYPERLINK l _Toc3246030242 总体方案设计2HYPERLINK l _

2、Toc3246030252.1 电子秤整体方案2HYPERLINK l _Toc3246030262.2 主控制器的方案2HYPERLINK l _Toc3246030272.3 称重传感器的方案3HYPERLINK l _Toc3246030282.4 放大器的方案5HYPERLINK l _Toc3246030292.5 模数转换器的方案6HYPERLINK l _Toc3246030302.6 键盘局部的方案7HYPERLINK l _Toc3246030312.7 显示局部的方案8HYPERLINK l _Toc3246030322.8 过载报警局部的方案8HYPERLINK l _T

3、oc3246030333 电子秤的硬件设计8HYPERLINK l _Toc3246030343.1 系统设计的总体思路8HYPERLINK l _Toc3246030353.2 单片机AT89S51最小系统8HYPERLINK l _Toc3246030363.3 放大电路9HYPERLINK l _Toc3246030373.4 模数转换器与单片机接口电路10HYPERLINK l _Toc3246030383.5 显示电路与单片机接口电路11HYPERLINK l _Toc3246030393.6 键盘电路与单片机接口电路12HYPERLINK l _Toc3246030403.7 报警

4、电路13HYPERLINK l _Toc3246030413.8 电源电路13HYPERLINK l _Toc3246030424 电子秤系统的软件设计15HYPERLINK l _Toc3246030434.1 主程序的设计15HYPERLINK l _Toc3246030444.2 子程序的设计16HYPERLINK l _Toc3246030454.2.1 模数转换子程序的设计16HYPERLINK l _Toc3246030464.2.2 键盘扫描子程序的设计17HYPERLINK l _Toc3246030474.2.3 显示子程序的设计18HYPERLINK l _Toc32460

5、30484.2.4 价格计算子程序的设计29HYPERLINK l _Toc3246030494.2.5 报警子程序的设计20HYPERLINK l _Toc3246030505 系统调试22HYPERLINK l _Toc3246030515.1 软件调试22HYPERLINK l _Toc3246030525.2 硬件调试23结论24HYPERLINK l _Toc324603056致25HYPERLINK l _Toc324603057参考文献26HYPERLINK l _Toc324603058附录A27HYPERLINK l _Toc324603059附录B28HYPERLINK l

6、 _Toc324603060附录C29-. z1 绪论1.1 选题的背景和意义电子秤是日常生活中常用的称重器材,广泛应用于超市、大中型商场、物流配送中心。电子秤在构造和原理上取代了以杠杆平衡为原理的传统机械式称量工具。相比传统的机械式称量工具,电子秤具有称量精度高、装机体积小、应用围广、易于操作使用等优点,在外形布局、工作原理、构造和材料上都是全新的计量衡器。电子秤的设计首先是通过压力传感器采集到被测物体的重量并将其转换成电压信号。经放大后的模拟电压信号经A/D转换电路转换成数字量被送入到主控微处理器中,再经过单片机控制译码显示器,从而显示出被测物体的重量。1.2 研究现状电子秤不仅要向高精度

7、、高可靠方向开展,而且更需向多种功能的方向开展。据悉,目前电子秤的附加功能主要有以下几种:1.电子秤附加了处理机构计算机信息补偿装置,可以进展自诊断、自校正和多种补偿计算和处理。2.具有皮重、净重显示等特种功能。电子秤有些已具备了动物称量模式,即通过进展算术平均、积分处理和自动调零等方法,消除上述的误差。3.附加特殊的数据处理功能。目前的电子秤有附加多种计算和数据处理功能,以满足多种使用的要求。今后,随着电子高科技的飞速开展,电子秤技术的开展定将日新月异。同时,功能更加齐全的高精度、高智能的先进电子秤将会不断问世,其应用围也会更加拓宽。1.3 论文主要研究容本文主要是设计的容是简易电子秤,它用

8、单片机作为处理核心,信号由压力传感器感受后经放大器放大和模数转换后输入到单片机处理,同时该电子秤具有LCD显示和键盘输入。该电子秤具体实现的功能是能够测量一定质量物体的质量,能够利用键盘输入价格,具有清零,可以计算总价,并能通过LCD直接显示出来,超过所测重量时能够报警。2 总体方案设计2 电子秤整体方案电子秤设计的整体方案是:传感器采集到因压力变化产生的电信号,但是一般这样产生的电信号很小,需要利用放大电路将其放大,放大的电信号通过模数转换器转换为数字信号后送入到微处理器中处理,微处理器处理后输出信号控制显示器显示出来。同时还需要键盘对物品单价等信息输到微处理器部,还需要有过载报警装置。其整

9、体设计方案如图2-1所示:放大电路传感器A/D转换器报警电路主控制器LCD显示键盘输入图21 电子秤整体设计方案图2.2 主控制器的方案主控制器是电子秤的核心局部,它需要承受转换后的传感器信号,同时也能扫描承受到键盘的输入信号,计算价格后控制显示器的输出,当超过称重量量程时还要控制报警装置报警。主控制器的选择有两个如下两个方案。方案一:单片机作为主控制器单片机控作为主控制器其优点有:可以做成专用的控制系统,程序被固化,可靠性较高,操作简单,易于维护,并且本钱低。在比拟小型的控制系统中,最适合的应是单片机作为控制核心。但在大型的控制系统中,控制系统各方面性能要求很高,或者工作环境很恶劣,有很强的

10、电噪声、电磁干扰、机械振动、极端温度和湿度很大的环境中,如果利用单片机作为控制系统,其性能会受到相应的影响。方案二:PLC作为主控制器PLC作为主控制器应用广泛,它具有接线简单,通用性好,编程简单,使用方便,可连接为控制网络系统,易于安装,便于维护,其主要应用在准确、精细、快速、稳定和多点控制的系统中,但是其价格昂贵。本文设计的简易电子秤精度不需要很高,它需要控制器及程序被固化,并且工作环境适宜。单片机作为处理器完全能够满足要求,并且单片机价格低廉,体积小,最终我选择了市面上常见的51系列的单片机AT89S51作为主控制器。2.3 称重传感器的方案称重传感器按转换方法分为光电式、液压式、电磁力

11、式、电容式、磁极变形式、振动式、陀螺仪式、电阻应变式等8类,我选择应用最广泛的电阻应变式传感器。电阻应变式称重传感器是利用电阻应变片变形时其电阻也随之改变的原理工作的,根据传感器理论可知,设长为L、截面积为S、电阻率为的电阻丝,其阻值为:2-1当电阻丝两端有机械应力F时,、L、S都会发生变化,从而导致电阻发生变化。这种应变片式传感器是基于材料的电阻应变效应,电阻应变片即可单独作为传感器使用,又能作为敏感元件结合弹性元件构成力学量传感器。电阻应变片把机械应变信号转换为R/R后,由于应变量及相应电阻变化一般都很微小,难以直接准确测量,且不便处理。因此,要采用转换电路把应变片的R/R变化转换成电压或

12、电流变化。其转换电路常用测量电桥4。如图2-2所示为常见的直流供电的平衡差动测量电桥:图22 直流供电的平衡差动测量电桥图中, QUOTE 为供桥电源电压,当初始有 QUOTE 时,则电桥输出电压或电流为零,这时电桥处于平衡状态。其测量原理:用应变片测量时,将其粘贴在弹性体上。当弹性体受力变形时,应变片的敏感栅也随同变形,其电阻值发生相应变化,通过转换电路转换为电压或电流的变化。由于部线路采用惠更斯电桥,当弹性体承受载荷产生变形时,输出信号电压可由下式给出:2-2本文的目的是设计一简易电子秤,最大称重约为2.5千克,重量误差不大于0.01千克;考虑到与其相配置的各种电路的设计的难易程度和设计性

13、价比,最终选择了CZAF-6058电阻应变式称重传感器,其称重规模为5kg。2.4 放大器的方案压力传感器感受重力转换后输出的信号一般电平较低;经由电桥等电路变换后的信号亦难以直接用来显示、记录、控制或进展模数转换。为此,测量电路中需要模拟放大环节。这一环节目前主要依靠由集成运算放大器的根本元件构成具有各种特性的放大器来完成。所采用的传感器输出电压振幅围010mV。而模数转换的输入电压要求为02V,因此放大环节至少200倍的增益,此处我们需要放大500倍。根据本设计的实际情况增列出了两种方案。方案一:由高精度低漂移运算放大器构成差动放大器。差动放大器具有高输入阻抗,增益高的特点,可以利用普通运

14、放 ( 如 OP07) 做成一个差动放大器,其部电路如图2-3所示。图23 差动放大器部电路电阻 R1、R2电容C1、C2、C3、C4用于滤除前级的噪声,C1、C2为普通小电容,可以滤除高频干扰,C3、C4为大的电解电容,主要用于滤除低频噪声。优点:输入级参加射随放大器,增大了输入阻抗,中间级为差动放大电路,滑动变阻器 R6 可以调节输出零点,最后一级可以用于微调放大倍数,使输出满足满量程要求。输出级为反向放大器,所以输出电阻不是很大,比拟符合应用要求。缺点:此电路要求 R3、R4相等,误差将会影响输出精度,难度较大。实际测量,每一级运放都会引入较大噪声,对精度影响较大。方案二:采用专用仪表放

15、大器12,如:INA128,INA129等。此类芯片部采用差动输入,共模抑制比高,差模输入阻抗大,增益高,精度也非常好,且外部接口简单。以INA128为例,引脚图如2-4所示:图2-4 INA128引脚图放大器增益G=1+50k/Rg,通过改变Rg的大小来改变放大器的增益。因为放大的倍数是500,所以大致选用100欧姆的电阻就可以了。基于以上分析,采用专用仪表放大器能跟好的满足要求,我最终选择了INA128。2.5 模数转换器的方案称重传感器采集的压力信号是模拟量,单片机系统部运算时用的都是数字量,即0和1,因此对于单片机而言我们无法直接操作模拟量,必须将模拟量转换为数字量。这就需要在单片机前

16、段加上模数转换器,模数转换器就是将输入的模拟信号转换成数字信号。而模数转换器的数字信号提供应微处理器处理。现在模数转换的根本方法有十几种,常用的有计数法、逐次比拟法、双斜积分法和并行转换法。由于逐次比拟法模数转换具有速度快、分辨率高等特点,而且采用这种方法的ADC芯片本钱较低,所以我们选用逐次比拟型模数转换集成芯片ADC0832,ADC0832 是美国国家半导体公司生产的一种8 位分辨率、双通道模数转换芯片,其输入输出电平与TTL/CMOS相兼容,电源供电时输入电压在05V之间,工作频率为250KHZ转换时间为32S,一般功耗仅为15mW;由于它体积小,兼容性,性价比高而深受单片机爱好者及企业

17、欢送,其目前已经有很高的普及率。图2-5为AD0832双列直插式封装引脚图。图2-5 ADC0832引脚图2.6 键盘局部的方案键盘局部有两个可行的方案,第一是采用34的矩阵键盘构造的键盘接口电路,第二是采用44的矩阵键盘构造的键盘接口电路。由于电子秤需要设置单价十个数字键,还具有确认、清零等功能,总共需设置13个键包括一个复位键,其中复位可以单独拿出来。所以我们采用34的矩阵键盘构造的键盘接口电路。34矩阵式键盘的特点是把检测线分成两组,一组为行线,一组列线,按键放在行线和列线的穿插点上。图2-6给出了一个34的矩阵键盘构造的键盘接口电路,图中的每一个按键都通过不同的行线和列线与主机相连这。

18、34矩阵式键盘共可以安装12个键,但只需要7条测试线。图26 34矩阵式键盘图显示局部的方案:数据显示是电子秤的一项重要功能,是人机交换的主要组成局部,它可以将测量电路测得的数据经过微处理器处理后直观的显示出来。数据显示局部可以有以下两种方案供选择:一是 LED数码管显示,二是LCD液晶。LED显示每一个数码管只能显示一个数字,电子秤系统需要许多数码管,会使线路变得复杂化。LCD液晶显示器是一种极低功耗显示器,其能够多行显示,并且能够显示汉字或英文字母,应用于电子秤中能够更人性化,更容易操作。所以最终选择了两行显示的LCD1602,LCD1602的引脚图如2-7所示。图27 液晶显示器LCD1

19、6022.8 过载报警局部的方案智能仪器一般都具有报警和通讯功能,报警主要用于系统运行出错、当测量的数据超过仪表量程或者是超过用户设置的上下限时为提醒用户而设置。在本系统中,设置报警的目的就是在超出电子秤测量围时,发出声光报警信号,提示用户,防止损坏仪器。超限报警电路是由单片机的I/O口来控制的,当称重物体重量超过系统设计所允许的重量时,通过程序使单片机的I/O值为高电平,从而三极管导通,使蜂鸣器SPEAKER发出报警声,同时使二极管发光。3 电子秤的硬件设计3.1 系统设计的总体思路物体放在压力传感器上,传感器发生形变,阻抗就发生变化,产生一个变化的模拟信号,该信号需要有放大电路放大后输入到

20、模数转换器,转换为数字信号后输入到微处理器处理。微处理器根据键盘命令以及程序将结果输出到显示器,直到显示结果。如下列图所示3-1所示。压力传感器放大电路模数转换微处理器键 盘* = 0.8* = 0.8* = 0.8* = 0.8* = 0.8* = 0.8* = 0.8* = 0.8* = 0.8* = 0.8* = 0.8* = 0.8* = 0.8* = 0.8* = 0.8* = 0.8LCD显示* = 0.8* = 0.8* = 0.8* = 0.8* = 0.8* = 0.8* = 0.8* = 0.8* = 0.8* = 0.8* = 0.8* = 0.8* = 0.8* = 0

21、.8* = 0.8* = 0.8图3-1 硬件设计的总体思路3.2 单片机AT89S51最小系统AT89S51是一种带4K字节FLASH存储器的低电压、高性能CMOS 8位微处理器,128字节RAM,32个双向I/O 口线,两个16位定时器/计数器,5个中断源,一个全双工串行通信口,片振荡器及时钟电路。同时,AT89S51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停顿CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM中的容,但振荡器停顿工作并制止其它所有部件工作直到下一个硬件复位。AT89S51的P0口为一个8位漏级开路双向I

22、/O口,P1、P2和P3口是一个部提供上拉电阻的8位双向I/O口,同时P3口还作为AT89S51的一些特殊功能口16。AT89S51是片有ROM/EPROM的单片机,其最小系统简单、可靠,仅由时钟电路、复位电路、电源电路构成。如图3-2所示。时钟电路AT89S51虽然有部振荡电路,但要形成时钟,必须外部附加电路。AT89S51单片机的时钟产生方法有两种。部时钟方式和外部时钟方式。本设计采用最常用的部时钟方式,即用外接晶体和电容组成的并联谐振回路。振荡晶体可在1.2MHZ到12MHZ之间选择。电容取值对振荡频率输出的稳定性、大小、振荡电路起振速度有少许影响,可在20pF到100pF之间取值。所以

23、本设计中,振荡晶体选择12MHZ,电容选择22pF11。图32 AT89C52最小系统的设计复位电路AT89S51的复位电路是由外部的复位电路来实现的。只需给复位引脚RST加上大于2个机器周期的高电平就可使其复位。复位电路通常采用上电自动复位和按键复位两种方式。本设计就是用的按键手动复位。其中电平复位是通过RST端经电阻与电源Vcc接通而实现的。电源电路AT89S51的电源脚分别为20脚Vss和40脚Vcc图中已默认连接,未显示出来。这两个脚分别接地和+5V直流电源,31脚EA为外存储器的控制端,接+5V允许访问外部存储器。3.3 放大电路传感器检测电路的功能是把电阻应变片的电阻变化转变为电压

24、输出,本设计中选用的是CZAF-605电阻应变式称重传感器,因为通过其得到的电压信号很小,为所以还需要放大器放大信号。考虑到干扰的作用,对传感器的信号进展了滤波处理,最终设计如图3-3所示。图33 传感器与放大器的接口电路INA128的2和3脚为信号输入端,4、5和7脚为电源引脚。微弱信号放大后从INA128的第6脚输出。通过调节Rg的阻值可以来改变放大倍数,使得输出电压在A/D转换的基准电压要求围之。根据要求,A/D转换器的输入电压变化围是0V4.999V,传感器的输出电压信号在010mv,因此取放大器的放大倍数500。因此代入公式,。3.4 模数转换器与单片机接口电路ADC0832 为8位

25、分辨率A/D转换芯片,其最高分辨可达256级,可以适应一般的模拟量转换要求。其部电源输入与参考电压的复用,使得芯片的模拟电压输入在05V之间。芯片转换时间仅为32S,据有双数据输出可作为数据校验,以减少数据误差,转换速度快且稳定性能强。独立的芯片使能输入,使多器件挂接和处理器控制变的更加方便。通过DI 数据输入端,可以轻易的实现通道功能的选择21。正常情况下ADC0832 与单片机的接口应为4条数据线,分别是CS、CLK、DO、DI。但由于DO端与DI端在通信时并未同时有效并与单片机的接口是双向的,所以电路设计时可以将DO和DI 并联在一根数据线上使用。当ADC0832未工作时其CS输入端应为

26、高电平,此时芯片禁用,CLK 和DO/DI 的电平可任意。当要进展A/D转换时,须先将CS使能端置于低电平并且保持低电平直到转换完全完毕。此时芯片开场转换工作,同时由处理器向芯片时钟输入端CLK 输入时钟脉冲,DO/DI端则使用DI端输入通道功能选择的数据信号。在第1 个时钟脉冲的下沉之前DI端必须是高电平,表示启始信号。在第2、3个脉冲下沉之前DI端应输入2 位数据用于选择通道功能9。作为单通道模拟信号输入时ADC0832的输入电压是05V且8位分辨率时的电压精度为19.53mV。如果作为由IN+与IN-输入的输入时,可是将电压值设定在*一个较大围之,从而提高转换的宽度。但值得注意的是,在进

27、展IN+与IN-的输入时,如果IN-的电压大于IN+的电压则转换后的数据结果始终为00H。ADC0832与单片机的接口电路如图3-4所示。图34 ADC0832与单片机的接口电路图3.5 显示电路与单片机接口电路本设计采用的是LCD1602显示,LCD1602液晶也叫1602字符型液晶它是一种专门用来显示字母、数字、符号等的点阵型液晶模块它有假设干个57或者511等点阵字符位组成,每个点阵字符位都可以显示一个字符。每位之间有一个点距的间隔每行之间也有间隔起到了字符间距和行间距的作用,正因为如此所以他不能显示图形。1602LCD是指显示的容为162,即可以显示两行,每行16个字符液晶模块显示字符

28、和数字。1602采用标准的16脚接口,其中1和2脚为电源正负极,3脚为比照度调整端,4脚RS为存放器选择,5脚RW为读写信号线,6脚为使能端,7到14脚为8为双向数据端。15和16脚为电源背光极。LCD1602与单片机的连接如图3-5所示。3脚VEE接一个滑动变阻器,滑动变阻器两端接电源和地。调试欢动变阻器的值可以改变LCD的比照度。因为LCD为共阳极,所以D0到D7有参加上拉电阻。图35 单片机与LCD1602接线图3.6 键盘电路与单片机接口电路矩阵式键盘的构造与工作原理:在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式。在矩阵式键盘中,每条水平线和垂直线在穿插处不

29、直接连通,而是通过一个按键加以连接。这样,一个端口如P1口就可以构成34=12个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比方再多加一条线就可以构成16键的键盘,而直接用端口线则只能多出一键。由此可见,在需要的键数比拟多时,采用矩阵法来做键盘是合理的。矩阵式键盘的按键识别方法:确定矩阵式键盘上何键被按下介绍一种行扫描法。行扫描法行扫描法又称为逐行或列扫描查询法,是一种最常用的按键识别方法,如上图所示键盘,介绍过程如下。判断键盘中有无键按下将全部行线Y0-Y3置低电平,然后检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相

30、穿插的3个按键之中。假设所有列线均为高电平,则键盘中无键按下。判断闭合键所在的位置在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将行线置为低电平,即在置*根行线为低电平时,其它线为高电平。在确定*根行线位置为低电平后,再逐行检测各列线的电平状态。假设*列为低,则该列线与置为低电平的行线穿插处的按键就是闭合的按键。在本系统中键盘采用矩阵式键盘并采用中断工作方式。键盘为34键盘,包括0、1、2、3、4、5、6、7、8、9、十个数字及确认和去除键。采用中断工作方式提高了CPU的利用效率,没键按下时没有中断请求,有键按下时,向CPU提出中断请求,CPU响应后执行中断效劳程序,在中断程序

31、中才对键盘进展扫描。下列图就是键盘电路与AT89S52单片机接口电路图。图3-6 键盘电路与单片机的连接图3.7 报警电路当电路检测到称重的物体超过仪器的测量限制时,将产生一个信号给报警电路。使报警电路报警从而提醒工作人员注意,超限报警电路如下列图所示。图37 报警电路图它是有AT89C52的R*D口来控制的,R*D本来为低电平,当超过设置的重量时5Kg,通过程序使R*D口值为高电平,从而使三极管导通,报警电路接通,使蜂鸣器SPEAKER发出报警声,同时使报警灯LED发光。这一任务的实现主要靠程序来完成。3.8 电源电路一般电网电压为交流220V,而本文设计的电子秤系统需要的电压是直流5V,显

32、然不能满足实际要求,所以需要设计一个直流稳压电源。直流稳压电源一般由电源变压器、整流电路、滤波电路和稳压电路组成。根本框图如3-8所示。图3-8直流稳压电源框图电源变压器T将220V的交流电源变换成整流滤波电路所需要的5V交流电压。5V交流电压通过整流电路变换成5V的脉动电压,滤波电路滤除较大的波纹成分,输出较小的波纹成分到稳压电路,稳压电路输出稳定的5V电压。根据上述介绍,电源电路包括变压器、整流电路、滤波电路、稳压电路等模块组成,这里参加LED进展电源工作状态指示。稳压局部用LM7805三端稳压IC来组成稳压电源,其优点是所需的外围元件极少,电路部还有过流、过热及调整管的保护电路,使用起来

33、可靠、方便,而且价格廉价。具体的5V电源电路如图3-9所示。图3-9 5V直流稳压电源图4 电子秤系统的软件设计程序设计是一件复杂的工作,为了把复杂的工作条理化,就要有相应的步骤和方法。其步骤可概括为以下三点:首先需要分析系统控制要求,确定算法:对复杂的问题进展具体的分析,找出合理的计算方法及适当的数据构造,从而确定编写程序的步骤。这是能否编制出高质量程序的关键。其次是根据算法画流程图:画程序框图可以把算法和解题步骤逐步具体化,以减少出错的可能性。最后就是编写程序:根据程序框图所表示的算法和步骤,选用适当的指令排列起来,构成一个有机的整体,即程序。程序数据的一种理想方法是构造化程序设计方法。构

34、造化程序设计是对利用到的控制构造类程序做适当的限制,特别是限制转向语句(或指令)的使用,从而控制了程序的复杂性,力求程序的上、下文顺序与执行流程保持一致性,使程序易读易理解,减少逻辑错误和易于修改、调试。根据系统的控制任务,监控软件采用模块技术设计,根据系统功能,将软件分为假设干个功能相对独立的模块,为每一个模块设计程序流程图。该电子秤功能程序模块包括:A/D转换启动及数据读取程序设计、显示子程序设计、键盘扫描子的程序设计、价格计算子程序设计、以及报警子程序设计等。4.1 主程序的设计主程序是系统信息处理的关键,主程序模块主要完成编程芯片的初始化及按需要调用各模块子程序,在系统初始化过程中,初

35、始化程序将RAM的30H到5FH单元清零,R*D引脚置成低电平,防止误报警,同时将系统设置成2.5Kg量程,并写2.5Kg量程标志。设计流程图如图5-1所示。主程序主要完成编程芯片的初始化及按需要调用各子程序,上电启动后,系统初始化,单片机读取模数转换器的数据,然后调用显示子程序显示重量,同时扫描键盘子程序,调用价格计算子程序计算价格并显示出来。图4 SEQ 图 * ARABIC s 1 1电子秤系统程序设计流程图4.2子程序的设计主程序按需要调用各子程序。系统子程序主要包括A/D转换启动及数据读取程序设计、显示子程序设计、键盘扫描子的程序设计、价格计算子程序设计、以及报警子程序设计等。4.2

36、.1 模数转换子程序的设计A/D转换启动及数据读取子程序设计主要是上电运行后,ADC0832完成初始化,把经放大的称重传感器传递过来的模拟信号转换成数字信号并传递到单片机所涉及到的程序设计设计流程图如图4-2所示。ADC0832进展模数转换时,须现将CS是能端置于低电平并且保存低电平直到完全完毕。芯片开场转换工作,同时由处理器向芯片时钟输入端CLK 输入时钟脉冲,DO和DI端则使用DI端输入通道功能选择的数据信号。在第1 个时钟脉冲的下沉之前DI端必须是高电平,表示启始信号。在第2、3个脉冲下沉之前DI端应输入2 位数据用于选择通道功能,到第3 个脉冲的下沉之后DI端的输入电平就失去输入作用,

37、此后DO/DI端则开场利用数据输出DO进展转换数据的读取。从第4个脉冲下沉开场由DO端输出转换数据最高位DATA7,随后每一个脉冲下沉DO端输出下一位数据。直到第11个脉冲时发出最低位数据DATA0,一个字节的数据输出完成。从第11个字节的下沉输出DATA0。随后输出8位数据,到第19 个脉冲时数据输出完成,也标志着一次A/D转换的完毕23。最后将CS置高电平禁用芯片。图42 A/D转换启动及数据读取程序流程图4.2.2 键盘扫描子程序的设计键盘扫描子程序主要是扫描键盘的输入,调用显示子程序显示,输出输入的参数,计算总价是调用价格计算子程序计算总价格。键盘电路设计成34矩阵式,由键盘编码方式可

38、以得出1、2、3、4、5、6、7、8、9、0及清零和计价各键对应的键值:0*31,0*32,0*33,0*34,0*35,0*36,0*37,0*38,0*39,0*3d,0*30,0*2e。在程序中可以先判断按键编码,然后根据编码将键盘代表的数值送到相应的存储单元,再进展功能选择或数据处理。图43 键盘扫描子程序流程图显示子程序的设计单片机应用系统通常都需要进展人机对话。其中包括人对应用系统的状态干预与数据输入,应用系统必须向操作者显示状态与运行结果等信息。显示器是单片机应用系统中最常用的人机交互设备。显示子程序是字符显示,首先初始化,输出一些根本信息,然后调用事先编好的键盘显示子程序,输出

39、显示命令,显示过程中还需要调用延时子程序。当输入通道采集了一个信号,或人为的键入一个值,或系统与仪表出现异常情况显示管理软件应及时调用显示驱动程序模块,用来更新当前数据显示符号。设计显示子程序的流程图如下列图4-4所示:图44 显示子程序流程图4.2.4 价格计算子程序的设计价格计算子程序由键盘计价键控制,当输入单价后,在没有清零的情况下,点计价键,计算出总价后,调用显示子程序显示出中重量。该子程序中利用各工作存放器2组,数据存在以40H单元为首址的连续单元中。价格计算公式总价=单价重量。这个程序需要两次的数制转换,输入单价后需要将单价转化为二进制后才能与二进制的重量进展计算。计算后的结果必须

40、转换为十进制数显示出来。图45 价格程序流程图4.2.5 报警子程序的设计因为压力传感器的所受压力有极限,所以称重量必须有在一定围,超过重量时必须有报警程序。主程序初始化设定阈值为2.5Kg,报警子程序将设定的阈值与实时显示的值进展比拟,先比拟高位,假设高位大,即设定值小于实时显示的值,这时将R*D置为1,将发光二极管点亮,且使蜂鸣器发出声音。假设高位相等,就比拟低位,同理假设设定值低位小于实际显示值,将R*D置为1,将发光二极管点亮,且使蜂鸣器发出声音。这就需要一段比拟程序以及一小段置1清0程序。图46 报警子程序流程图5系统调试5.1 软件调试在设计电子秤的过程中,先在软件中仿真,仿真成功

41、后,再制作出实物。仿真采用的是proteus软件,是一专门基于单片机的及其外围电路的仿真软件。仿真的第一步是先进展软件调试,是通过对程序的汇编、连接、执行来发现程序中存在的语法错误与逻辑错误并加以排除纠正错误的过程。软件调试的方法是先分块后组合。在编出完整的程序并确保无误后进展综合调试。在调试程序之前,先检查各硬件模块间的连接是否无误,有无断路现象。确认连接无误后就给系统通电进展调试。正式调试时,首先进展总体调试,即观察系统的运行情况以便快速地发现存在的问题。然后进展各硬件模块调试,主要针对有问题的硬件模块及其程序进展调试,以便准确地查出问题的原因并解决问题。我在实际仿真的时候出现了LCD无显

42、示,最终找出原因是LCD是共阳极的需要接上拉电阻。同时还发现蜂鸣器超重后都不报警但是LED发亮,最后发现是蜂鸣器的响应时间设置太大产生的。软件调试如图5-1所示。图5-1软件调试图5.2硬件调试按照设计好的电子秤系统原理图,计算出各个元器件的参数,选择相应的器件,制作出了实际的电子秤系统后。首先检查连线是否与逻辑图一致,用万用表检查有无短路、虚焊等现象。器件的型号、规格、规格、极性是否有误,插接方向是否正确。检查完毕,可用万用表检测仪下电路板正负电源之间的电阻,排除电源短路的可能。之后将生成的he*文件烧到单片机中,得到响应的实物,观察现象,并排除问题。刚开场通电后,发现LCD显示画面不理想,

43、之后调节上拉电阻后到达了满意的效果。同时出现报警装置没有用,之后检查发现是因为实际买的三极管极性与理论图不一样。换了正负极方向就可以了。同时测量的重物质量与实际相比严重偏大,之后修改程序中的转换倍数后正常了。结论本论文主要研究的是简易电子秤的设计,主要是基于超市的电子秤,在小重量围的称量。具有如下的功能:1、能用简易键盘设置单价,能够同时显示重量和金额;2、重量显示:单位为千克;最大称重为2.5千克,重量误差不大于0.01千克;3、具有清零功能和复位功能。4、超出所测的重量时能够报警。此电子秤采用LCD1602显示,能够同时显示重量价格,并且具有很高的性价比,能够广泛的应用少于2.5kg重量的

44、围的交易。致经过两周的努力终于完成了本次设计,其中由于经历的匮乏,难免有许多考虑不周全的地方,但由于同学及教师的帮助大多都得以解决,真是辛苦大家了。在这里要感我的教师牛月兰教师平常的悉心教诲,正是由于她的辛勤教诲才能有足够的知识完成这份设计,教师为人和蔼可亲,经常给我们解决一些难题,她治学严谨和科学研究的精神也是我永远学习的典范,并将积极影响我今后的学习和工作。最后还要感之前指导过我们的所有的教师,正是由于他们,我们才能打好专业知识的根底;同时还要感所有的同学们,正是因为有了你们的支持和鼓励。此次课程设计才会顺利完成。参考文献毅刚单片机原理及应用M:高等教育,2010.介华电子技术课程设计指导

45、M:高等教育,2008.常健生检测与转换技术M:机械工业,2004.何立民单片机应用技术选编M:航空航天大学,2007梁瑞林传感器实用电路设计与制作M:科学,2007.-. z附录A 系统原理图附录B 仿真图-. z附录C 程序清单.#include#include#include #include #define uchar unsigned char#define uint unsigned int#define BUSY 0*80 /常量定义#define DATAPORT P0sbit ADCS =P35; sbit ADDI =P37; sbit ADDO =P37; sbit AD

46、CLK =P36; sbit LCM_RS=P20;sbit LCM_RW=P21;sbit LCM_EN=P22;uint *1,y1,z1=0,w1,j,temp1;uchar ad_data,k,n,m,e,num,s; /采样值存储sbit speaker=P30; char press_data; /标度变换存储单元unsigned char ad_alarm; /报警值存储单元unsigned char press_ge=0; /显示值百位unsigned char press_shifen=0; /显示值十位unsigned char press_baifen=0; /显示值个位

47、unsigned char press_qianfen=0; /显示值十分位uchar code str0=Weight: . Kg ;uchar code str2=Price: ;uchar code str3=Total: ;uchar code table2=0*37,0*38,0*39,0*34,0*35,0*36, 0*31,0*32,0*33,=0*3d,0*30,0*2e ; /键盘码void delay(uint);void lcd_wait(void);void delay_LCM(uint); /LCD延时子程序void initLCM( void); /LCD初始化子程

48、序void lcd_wait(void); /LCD检测忙子程序void WritemandLCM(uchar WCLCM,uchar BusyC); /写指令到ICM子函数void WriteData LCM(uchar WDLCM); /写数据到LCM子函数void DisplayOneChar(uchar *,uchar Y,uchar DData); /显示指定坐标的一个字符子函数void DisplayListChar(uchar *,uchar Y,uchar code *DData);/显示指定坐标的一串字符子函数void weishu(uint m); void weishu1

49、(uint m); void display(void); uchar Adc0832(unsigned char channel);void alarm(void);void data_pro(void);/*主程序*/void main(void) delay(500); /系统延时500ms启动/ad_data=0; /采样值存储单元初始化为0 initLCM( ); WritemandLCM(0*01,1); /清显示屏 DisplayListChar(0,0,str0); DisplayListChar(0,1,str2);while(1) ad_data =Adc0832(0);

50、/采样值存储单元初始化为0 alarm(); data_pro(); display();if(k=1) DisplayOneChar(s+7),1,table2num-1); *1=m; y1=n; y1=y1*10+*1; if(k=*) data_pro(); WritemandLCM(0*01,1); weishu(z1); k=0; if(k=) z1=z1*temp1; WritemandLCM(0*01,1); DisplayListChar(0,1,str3);s=0; weishu1(temp1*n); k=0;j=temp1;if(k= ) WritemandLCM(0*8

51、0+0*40,1); WritemandLCM(0*01,1); z1=0; s=0; /防止清零时指针后移动 /*延时程序K*1ms,12.000mhz*/void delay(uint k) uint i,j; for(i=0;ik;i+) for(j=0;j100;j+); /*写指令到ICM子函数*/void WritemandLCM(uchar WCLCM,uchar BusyC) if(BusyC)lcd_wait();DATAPORT=WCLCM; LCM_RS=0; / 选中指令存放器 LCM_RW=0; LCM_RW=0; / 写模式 LCM_EN=1; _nop_(); _

52、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)

53、 DATAPORT=0*ff; /读LCD前假设单片机输出低电平,而读出LCD为高电平, /则冲突,Proteus仿真会有显示逻辑黄色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_();

54、_nop_(); _nop_(); _nop_();_nop_();_nop_(); LCM_EN=0;/*LCM初始化子函数*/void initLCM( ) LCM_EN=0; DATAPORT=0;delay(15);WritemandLCM(0*38,0); /三次显示模式设置,不检测忙信号 delay(5); WritemandLCM(0*38,0); delay(5); WritemandLCM(0*38,0); delay(5); WritemandLCM(0*38,1); /8bit数据传送,2行显示,5*7字型,检测忙信号 WritemandLCM(0*08,1); /关闭显

55、示,检测忙信号 WritemandLCM(0*01,1); /清屏,检测忙信号 WritemandLCM(0*06,1); /显示光标右移设置,检测忙信号 WritemandLCM(0*0c,1); /显示屏翻开,光标不显示,不闪烁,检测忙信号 TMOD=0*11;EA=1; ET1=1;TR1=1;k=0;*1=0;y1=0;z1=0;/*显示指定坐标的一个字符子函数*/void DisplayOneChar(uchar *,uchar Y,uchar DData) Y&=0*01; *&=0*0f; if(Y)*|=0*40; /假设y为1显示第二行,地址码+0*40 *|=0*80; /

56、指令码为地址码+0*80 WritemandLCM(*,1); WriteDataLCM(DData);/*显示指定坐标的一串字符子函数*/void DisplayListChar(uchar *,uchar Y,uchar code *DData) uchar ListLength=0; Y&=0*01; *&=0*0f; while(*1)&0*1; _nop_(); _nop_(); ADCLK=0;/拉低CLK端,形成下降沿3 ADDI=1;/控制命令完毕 _nop_(); _nop_(); dat=0; for(i=0;i8;i+) dat|=ADDO;/收数据 ADCLK=1; _

57、nop_(); _nop_(); ADCLK=0;/形成一次时钟脉冲 _nop_(); _nop_(); dat=1; if(i=7)dat|=ADDO; for(i=0;i8;i+) j=0; j=j|ADDO;/收数据 ADCLK=1; _nop_(); _nop_(); ADCLK=0;/形成一次时钟脉冲 _nop_(); _nop_(); j=j7; ndat=ndat|j; if(i=1; ADCS=1;/拉低CS端 ADCLK=0;/拉低CLK端 ADDO=1;/拉高数据端,回到初始状态 dat=8; dat|=ndat; return(dat); /return ad k void data_pro(void) unsigned int; float press; if(0ad_data223) speaker=0; /则启动报警 else speaker=1; void weishu(uint m) uchar wei4,wei3,wei2,wei1,wei0; wei4=m/10000; wei3=m%10000/1000; wei2=m%1000/100; wei1=m%100/10; wei0=m%10; DisplayOn

温馨提示

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

评论

0/150

提交评论