基于51单片机的电子秤系统设计汇编_第1页
基于51单片机的电子秤系统设计汇编_第2页
基于51单片机的电子秤系统设计汇编_第3页
基于51单片机的电子秤系统设计汇编_第4页
基于51单片机的电子秤系统设计汇编_第5页
已阅读5页,还剩53页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------最新基于51单片机的电子秤系统设计汇编基于51单片机的电子秤系统设计摘要电子秤是将检测与转换技术、计算机技术、信息处理、数字技术等技术综合一体的现代新型称重仪器。它与我们日常生活紧密结合息息相关。电子称主要以单片机作为中心控制单元,通过称重传感器进行模数转换单元,在配以键盘、显示电路及强大软件来组成。电子称不但计量准确、快速方便,更重要的自动称重、数字显示,对人们生活的影响越来越大,广受欢迎。本系统的设计主要从硬件电路设计,软件编程调试,实物焊接调试三部分进行详细阐述。硬件电路主要是基于单片机STC89S52为核心的控制单元实现数据的处理,采用压力传感器对数据进行采集,电子秤专用24位AD转换芯片HX711对传感器采集到的模拟量进行AD转换,转换后的数据送到单片机进行处理显示,数据显示由LCD1602液晶实现,液晶显示效果稳定无闪烁。关键字:STC89S52单片机;电子秤;压力传感器;HX711。1.绪论称重技术自古以来就被人们所重视,作为一种计量手段,广泛应用于工农业、科研、交通、内外贸易等各个领域,与人民的生活紧密相连。电子秤是电子衡器中的一种,衡器是国家法定计量器具,是国计民生、国防建设、科学研究、内外贸易不可缺少的计量设备,衡器产品技术水平的高低,将直接影响各行各业的现代化水平和社会经济效益的提高。称重装置不仅是提供重量数据的单体仪表,而且作为工业控制系统和商业管理系统的一个组成部分,推进了工业生产的自动化和管理的现代化,它起到了缩短作业时间、改善操作条件、降低能源和材料的消耗、提高产品质量以及加强企业管理、改善经营管理等多方面的作用。称重装置的应用已遍及到国民经济各领域,取得了显著的经济效益。电子秤是称重技术中的一种新型仪表,广泛应用于各种场合。电子秤与机械秤比较有体积小、重量轻、结构简单、价格低、实用价值强、维护方便等特点,可在各种环境工作,重量信号可远传,易于实现重量显示数字化,易于与计算机联网,实现生产过程自动化,提高劳动生产率。从世界水平看,衡器技术已经经历了四个阶段,从传统的全部由机械元器件组成的机械称到用电子线路代替部分机械元器件的机电结合秤,再从集成电路式到目前的单片机系统设计的电子计价秤。我国电子衡器从最初的机电结合型发展到现在的全电子型和数字智能型。现今电子衡器制造技术及应用得到了新发展:电子称重技术从静态称重向动态称重发展;计量方法从模拟测量向数字测量发展;测量特点从单参数测量向多参数测量发展。常规的测试仪器仪表和控制装置被更先进的智能仪器所取代,使得传统的电子测量仪器在远离、功能、精度及自动化水平定方面发生了巨大变化,并相应的出现了各种各样的智能仪器控制系统,使得科学实验和应用工程的自动化程度得以显著提高。电子称重的实现首先是通过压力传感器采集到被测物体的重量并将其转换成电压信号。输出电压信号通常很小,需要通过前端信号处理电路进行准确的线性放大。放大后的模拟电压信号经A/D转换电路转换成数字量被送入到主控电路的单片机中,再经过单片机控制译码显示器,从而显示出被测物体的重量。按照设计的基本要求,系统可分为三大模块,数据采集模块、控制器模块、人机交互液晶显示界面模块。其中数据采集模块由压力传感器、信号的前级处理和A/D转换部分组成。转换后的数字信号送给控制器处理,由控制器完成对该数字量的处理,驱动显示模块完成人机间的信息交换。此部分对软件的设计要求比较高,系统的大部分功能都需要软件来控制。在扩展功能上,本设计增加了一个过载报警提示功能。2.系统硬件方案设计考虑到此方案设计的电子秤,能够实现电子秤的基本功能,主要包括单价设定、称重、显示、回零等操作。因此我选择了如下的系统硬件设计方案:前端信号处理时,选用放大、信号转换等措施来增加信号采集强度但会增加相应的设计成本;显示方面采用具有字符图文显示功能的LCD显示器。这种方案不仅加强了人机交换的能力,而且满足设计要求,可以显示购物清单、所称量的物体信息等相关内容,当需要增加扩展功能时可以通过切换液晶显示界面的方式来实现。结构简图如下图1所示:图一硬件方案设计结构图3.系统元器件选型及器件参数介绍3.1单片机选型单片机的选择在整个系统设计中至关重要,要满足大内存、高速率、通用性、价格便宜等要求,鉴于以上考虑本课题选择AT89S52作为整个系统的主控芯片。AT89S52是一个低功耗,高性能CMOS8位单片机,片内含8kBytesISP(In-systemprogrammable)的可反复擦写10000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构[1],芯片内集成了通用8位中央处理器和ISPFlash存储单元,功能强大的微型计算机的AT89S52可为许多嵌入式控制应用系统提供高性价比的解决方案。AT89S52芯片具有以下特性[2]:①指令集和芯片引脚与Intel公司的8051兼容;②8KB片内在系统可编程Flash程序存储器;③时钟频率为0~33MHz;④128字节片内随机读写存储器(RAM);⑤32个可编程输入/输出引脚;⑥2个16位定时/计数器;⑦6个中断源,2级优先级;⑧全双工串行通信接口;⑨监视定时器;⑩2个数据指针。AT89S52单片机的40个引脚中有2个专用于主电源引脚,2个外接晶振的引脚,4个控制或与其它电源复用的引脚,以及32条输入输出I/O引脚。AT89S52单片机引脚图如图2所示:图二STC89C52单片机引脚图3.2传感器的选择压电传感器是一种典型的有源传感器,又称自发电式传感器。其工作原理是基于某些材料受力后在其相应的特定表面产生电荷的压电效应。压电传感器体积小、重量轻、结构简单、工作可靠,适用于动态力学量的测量,不适合测频率太低的被测量,更不能测静态量。目前多用于加速度和动态力或压力的测量。压电器件的弱点:高内阻、小功率。功率小,输出的能量微弱,电缆的分布电容及噪声干扰影响输出特性,这对外接电路要求很高。电阻应变式传感器是一种利用电阻应变效应,将各种力学量转换为电信号的结构型传感器。电阻应变片式电阻应变式传感器的核心元件,其工作原理是基于材料的电阻应变效应,电阻应变片即可单独作为传感器使用,又能作为敏感元件结合弹性元件构成力学量传感器。导体的电阻随着机械变形而发生变化的现象叫做电阻应变效应。电阻应变片把机械应变信号转换为△R/R后,由于应变量及相应电阻变化一般都很微小,难以直接精确测量,且不便处理。因此,要采用转换电路把应变片的△R/R变化转换成电压或电流变化。其转换电路常用测量电桥。直流电桥的特点是信号不会受各元件和导线的分布电感及电容的影响,抗干扰能力强,但因机械应变的输出信号小,要求用高增益和高稳定性的放大器放大。图3为一直流供电的平衡电阻电桥,接直流电源E:图三传感器内部接线图当电桥输出端接无穷大负载电阻时,可视输出端为开路,此时直流电桥称为电压桥,即只有电压输出。当忽略电源的内阻时,由分压原理有:=(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%,满足本系统的精度要求。3.3显示器的选择在此方案中,选择LCD12864液晶显示,带中文字库的128X64是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64,内置8192个16*16点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。可以显示8×4行16×16点阵的汉字.也可完成图形显示.低电压低功耗是其又一显著特点。由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。总共有20根引脚。(1)接口说明表1VSS0V逻辑电源地。

2VDD5.0V逻辑电源正。

3V0LCD驱动电压,应用时在VEE与V0之间加一2K可调电阻。

4D/IH/L数据\指令选择:高电平:数据D0-D7将送入显示RAM;低电平:数据D0-D7将送入指令寄存器执行。

5R/WH/L读\写选择:高电平:读数据;低电平:写数据。

6EH.H/L读写使能,高电平有效,下降沿锁定数据。

7DB0H/L数据输入输出引脚。

8DB1H/L数据输入输出引脚。

9DB2H/L数据输入输出引脚。

10DB3H/L数据输入输出引脚。

11DB4H/L数据输入输出引脚。

12DB5H/L数据输入输出引脚。

13DB6H/L数据输入输出引脚。

14DB7H/L数据输入输出引脚。

15CS1H/L片选择信号,低电平时选择前64列。

16CS2H片选择信号,低电平时选择后64列。

17RETL复位信号,低电平有效。

18VEE-10VLCD驱动电源。

19BLAC背光电源,LED。

20BLAC背光电源,LED-。(2)指令描述1、显示开/关设置CODE:R/WD/IDB7DB6

DB5DB4DB3

DB2DB1DB0

L

L

L

L

H

H

H

H

H

H/L

功能:设置屏幕显示开/关。DB0=H,开显示;DB0=L,关显示。不影响显示RAM(DDRAM)中的内容。2、设置显示起始行CODE:R/WD/IDB7DB6

DB5DB4DB3

DB2DB1DB0

L

L

H

H

行地址(0~63)

功能:执行该命令后,所设置的行将显示在屏幕的第一行。显示起始行是由Z地址计数器控制的,该命令自动将A0-A5位地址送入Z地址计数器,起始地址可以是0-63范围内任意一行。Z地址计数器具有循环计数功能,用于显示行扫描同步,当扫描完一行后自动加一。

3、设置页地址CODE:R/WD/IDB7DB6

DB5DB4DB3

DB2DB1DB0

L

L

H

L

H

H

H

页地址(0~7)

功能:执行本指令后,下面的读写操作将在指定页内,直到重新设置。页地址就是DDRAM的行地址,页地址存储在X地址计数器中,A2-A0可表示

8页,读写数据对页地址没有影响,除本指令可改变页地址外,复位信号(RST)可把页地址计数器内容清零。DDRAM地址映像表Y地址012………616263

4、设置列地址CODE:R/WD/IDB7DB6DB5DB4DB3DB2DB1DB0LLLH列地址(0~63)

功能:DDRAM的列地址存储在Y地址计数器中,读写数据对列地址有影响,在对DDRAM进行读写操作后,Y地址自动加一。5、状态检测CODE:R/WD/IDB7DB6DB5DB4DB3DB2DB1DB0HLBFLON/OFFRSTLLLL

功能:读忙信号标志位(BF)、复位标志位(RST)以及显示状态位(ON/OFF)。BF=H:内部正在执行操作;BF=L:空闲状态。RST=H:正处于复位初始化状态;RST=L:正常状态。ON/OFF=H:表示显示关闭;ON/OFF=L:表示显示开。

6、写显示数据CODE:R/WD/IDB7DB6DB5DB4DB3DB2DB1DB0LHD7D6D5D4D3D2D1D0

功能:写数据到DDRAM,DDRAM是存储图形显示数据的,写指令执行后Y地址计数器自动加1。D7-D0位数据为1表示显示,数据为0表示不显示。写数据到DDRAM前,要先执行“设置页地址”及“设置列地址”命令。

7、读显示数据CODE:RSR/WDB7DB6DB5DB4DB3DB2DB1DB0HHD7D6D5D4D3D2D1D0功能:从DDRAM读数据,读指令执行后Y地址计数器自动加1。从DDRAM读数据前要先执行“设置页地址”及“设置列地址”命令。3.4A/D转换芯片选择电子秤系统中选择海科的HX711AD芯片,HX711是一款专为高精度电子秤而设计的24位A/D转换器芯片。与同类型其它芯片相比,该芯片集成了包括稳压电源、片内时钟振荡器等其它同类型芯片所需要的外围电路,具有集成度高、响应速度快、抗干扰性强等优点。降低了电子秤的整机成本,提高了整机的性能和可靠性。该芯片与后端MCU芯片的接口和编程非常简单,所有控制信号由管脚驱动,无需对芯片内部的寄存器编程。输入选择开关可任意选取通道A或通道B,与其内部的低噪声可编程放大器相连。通道A的可编程增益为128或64,对应的满额度差分输入信号幅值分别为±20mV或±40mV。通道B则为固定的64增益,用于系统参数检测。芯片内提供的稳压电源可以直接向外部传感器和芯片内的A/D转换器提供电源,系统板上无需另外的模拟电源。芯片内的时钟振荡器不需要任何外接器件。上电自动复位功能简化了开机的初始化过程。芯片管脚图如图4所示:图四HX711AD芯片管脚图典型的应用电路如下:4.系统硬件电路设计4.1系统电源电路设计由于该系统中51单片机及AD转换芯片及液晶显示器所需供电电压均为5V电压,所以要保证系统稳定可靠的工作,需要设计一个可以稳定提供5V电压的供电系统。本设计采用双电源接口供电方式,USB接口供电方便程序调试,也可采用外置电源作为系统的供电电源,但是需另加三端稳压器件LM7805作为系统电源的稳压器件以保证系统电压为稳定的直流5V电压,同时外置电源的输出电压要高于5V输出,系统电源输入接口要加滤波电容以确保工作电压稳定。电源输出接口加上LED电源指示灯,用来判定电源是否正常工作。该系统电源电路设计如图5所示。图五系统电源接口电路C1,C2实现对电源滤波,以滤除可能存在的高频杂波对电源的影响,C4实现对电源电压的平滑稳定作用,当USB接口输出电压高时C4用来储能,当后续电路负载过高USB供电不足时电解电容C4通过释放储存的电能来保证电源电压不跌落。LED0用作电源指示,其亮灭代表电源工作与否,R0用来限流,以保证LED不被烧坏。4.2系统程序下载电路设计在系统程序下载设计方案中,使用USB总线转接芯片CH340。CH340是一个USB总线的转接芯片,实现USB转串口、USB转IrDA红外或者USB转打印口。

在串口方式下,CH340提供常用的MODEM联络信号,用于为计算机扩展异步串口,或者将普通的串口设备直接升级到USB总线。它具有以下特点:

1、全速USB设备接口,兼容USBV2.0,外围元器件只需要晶体和电容。

2、仿真标准串口,用于升级原串口外围设备,或者通过USB增加额外串口。

3、计算机端Windows操作系统下的串口应用程序完全兼容,无需修改。

4、硬件全双工串口,内置收发缓冲区,支持通讯波特率50bps—2Mbps.

5、支持常用的MODEM联络信号RTS、DTR、DCD、RI、DSR、CTS.

6、通过外加电平转换器件,提供RS232、RS485、RS422等接口。

7、支持IrDA规范SIR红外线通讯,支持波特率240bps—115200bps.

8、由于是通过USB转换的串口,所以只能做到应用层兼容,而无法绝对相同。

9、软件兼容CH341,可以直接使用CH341的驱动程序。

10、支持5V电源电压和3.3V电源电压。

11、提供SSOP-20无铅封装,兼容RoHS.

功能说明:

CH340芯片内置了USB上拉电阻,UD+UD引脚应该直接连接到USB总线上。

CH340芯片内置了电源上电复拉电路。

CH340芯片正常工作时需要外部向XI引脚提供12MHz的时钟信号。一般情况下,时钟信号由CH340芯片内置的反相器通过晶体稳频振荡产生,外围电路只需要在XI和XO引脚之间连接一个12MHz的晶体,并且分别为XI和XO引脚对地连接振荡电容。典型的接口电路如图六:图六CH340T芯片接口电路4.3单片机控制电路设计系统主控电路由STC89C52单片机及晶振电路和复位电路组成,该电路作为整个系统功能实现的核心单元,其连接方式如图7所示。图七单片机主控电路设计复位电路是用来让单片机返回到初始状态的辅助电路,其作用是当单片机程序跑飞或系统出现死机状态时可以让系统从新恢复工作。本系统复位电路的设计具有上电复位和手动按键复位两种复位方式。4.4系统显示电路设计选择LCD12864带字库的液晶作为系统的显示模块,LCD12864不仅可以显示数字,字母,还可以显示中文汉字。其中使用P0口作为数据端口,P1.0作为RS端,P1.1作为R/W端,P2.5作为使能端。LCD12864与单片机的接口电路如图8所示:图八LCD12864的接口电路4.5超重报警电路设计报警指示电路用来在称重测量超出最高值时报警提示,以免重量太高的情况下损坏传感器。报警指示电路由PNP三极管9012驱动蜂鸣器来实现,单片机IO口控制三极管的基极,当单片机的IO口输出为低电平时,三极管导通,蜂鸣器的正极与电源接通,蜂鸣器通电发出报警声,当单片机IO口输出高电平时,三极管截止,蜂鸣器停止报警。报警指示电路如图9所示。图九报警电路模块4.6按键输入电路设计按键输入电路用来在电子称测量过程中输入单价值,按键输入电路采用3*4矩阵键盘实现,矩阵键盘电路如图10所示。图十键盘的电路设计电子称按键功能分配如下表所示:0123456789计算清零此电子秤是开机检测托盘重量,并将托盘重量清零(即电子秤每次开机后检测托盘重量,并程序中自动将托盘重量保存在一个变量中,称量过程中每次都将获得的重量减去托盘重量,而得到所要称量物体的真正的重量),功能实现:在正确输入了单价之后,按下计算按键后自动计算出金额,并在液晶显示器上显示出重量、单价、总价。按下清零键,即可清零单价。4.7系统硬件电路设计与PCB板的制作本文在硬件电路的设计过程中,原理图和PCB的绘制采用DXP2004软件,该软件是应用于WindowsXP操作系统下的EDA设计软件,该软件以其简单易操作的优势一直以来备受电子工程师的喜爱,因而也成了很多高校电子相关专业EDA工具的必选课程。采用DXP2004软件绘制原理图和PCB的主要步骤如下所述:首先建立一个工作区间,再新建一个项目工程,再建立一个原理图文件。从元件库中找出所需要的元器件,如果元件库中没有所需的元器件,则需要新建一个自己的元件库,在里面绘制自己所需的元器件。在原理图页面中放置所需元器件并按照电气性能连接各元件,包括放置网络标号等。给对应的元器件添加相应的封装形式,如果封装库中没有所需要的封装形式,则需要自己新建一个封装库,在里面按照元器件的实际尺寸绘制出元器件的封装形式。绘制好电路后进行ERC电气检测,并生成网络表。在工程中建立PCB文件,导入生成的网络表。在这步中也可以使用向导建立PCB文件,按照提示一步一步的做。使用自动布线,此时系统会按照网络飞线提示绘制PCB,最后完成DRC检测,PCB板即可生成。在此步中也可以使用手动布线。按照如上步骤最终完成绘制的电路原理图如图11所示,PCB线路板图如图12所示。图十一系统PCB板原理图图十二系统PCB板电路图绘制原理图与PCB板过程中的体会:本次的电子设计的重点就是在于所选课题的原理图和PCB板的绘制过程,因此在这一过程当中花费了许多精力和时间,最后通过自己的亲自动手完成本次课程设计。在此学习过程中我产生了许多体会与感想。首先学会了如何去自主学习,由于我们没有接触过DXP2004这个软件,因此我们必须自己通过查找各种有关资料,才能知道如何使用它。第二,在绘制原理图的过程中,有许多的元器件在元器件库里根本找不到,这时就需要我们自己去新建一个元件库并在里面绘制我们需要的元器件,或者可以修改库的相似元器件的引脚。根据元器件之间的电气连接连线或者放置网络标号。第三,在给对应的元器件添加封装,如果库中没有,我们就需要自己去绘制它的封装形式。这个是整个过程中最难的,因为我们必须先知道元器件的实际大小,封装形式,按照实际的大小、尺寸,才能准确的绘制出正确的封装(包括焊盘的大小,焊盘之间的间隔,焊盘与边界的间隔等)。第四,在完成以上几步之后,进行ERC电气检测,对出现的错误(包括元器件的重复命名,引脚放置不当,封装有没有添加,电气连接是否正确等)进行修改,并生成网络表。第五,建立PCB文件,导入网络表。由于考虑到元器件间电磁的干扰,需要调整元器件的位置(电源模块要尽量远离其它模块)。然后使用自动布线,此时要考虑布线的线宽,在这个PCB板中我设计的线宽是,信号线设置为0.5mm,而电源线、地线则是设置为1.0mm。一般来说如果条件允许,布线的宽度尽量大一些,可以减少彼此间的干扰。5.系统主要程序设计5.1系统的主流程图本程序的流程主要包括LCD的初始化,A/D转化,键盘扫描,LCD的显示等模块。系统的主程序流程图如图13所示。图十三主程序流程图5.2液晶LCD12864的程序设计当要进行写指令数据到LCD时,必须要使得,PS=L,RW=L,E=高电平,D0-D7=指令码。voidlcd_wcmd(ucharcmd)//写命令{while(lcd_busy());LCD_RS=0;LCD_RW=0;LCD_EN=0;//_nop_();//_nop_();P0=cmd;delayNOP();LCD_EN=1;delayNOP();LCD_EN=0;}/*当写显示数据到LCD时,要使得,RS=H,RW=L,E=高电平,D0-D7=数据。*/voidlcd_wdat(uchardat) //写数据{while(lcd_busy());LCD_RS=1;LCD_RW=0;LCD_EN=0;P0=dat;//delayNOP();LCD_EN=1;delayNOP();LCD_EN=0;}/*遇忙检测,lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。*/bitlcd_busy(){bitresult;LCD_RS=0;LCD_RW=1;LCD_EN=1;delayNOP();result=(bit)(P0&0x80);LCD_EN=0;return(result);}//初始化方式,要初始化LCD的工作方式,是否开光标等工作。voidlcd_init(){LCD_PSB=1;//并口方式lcd_wcmd(0x34);//扩充指令操作delay(5);lcd_wcmd(0x30);//基本指令操作delay(5);lcd_wcmd(0x0C);//显示开,关光标delay(5);lcd_wcmd(0x01);//清除LCD的显示内容delay(5);}5.3按键检测程序设计按键检测部分主要是去除抖动现象,从矩阵键盘分离出独立键盘,并赋予相应的数值。在这部分中采用延时方式消抖,给每一行线轮流送低电平,检测列线,判断按下的对应按键。voidkeyscan() //按键扫描{uinttemp;P3=0xfe;//给第一行送低电平temp=P3;temp=temp&0xf0;//分离出列线if(temp!=0xf0){delay(10);//延时消抖temp=P3;temp=temp&0xf0;if(temp!=0xf0){temp=P3;switch(temp)//判断何健被按下,并赋相应的值{case0xee:key=0;break;。。。。。。}while(temp!=0xf0)//检测按键释放{temp=P3;temp=temp&0xf0;fat=1;}}按键设计的程序流程图:6.实验总结经过这次的实验,使我不仅学会了如何使用DXP2004来制作原理图并且生成PCB板,而且让我对自己有了更加好的了解。知道了自己该如何去自主学习,发现问题时该如何去解决。本次实验涉及到了软硬件方面的设计,这是对我综合运用自己所学到的知识如何运用到真正实际当中并作出一个实验实物,对自己来说也是一个新的挑战,但是经过自己的努力,在这个学习的过程中,稳扎稳打,遇到不懂的就请教老师或同学,网上收集相关的资料,一步步的做好自己应该做的工作,最终比较完美的完成了这次实验。这次实验的成功,增加了自己的信心,为自己以后接受更大的挑战打下良好的基础,同时也为自己今后的学习提供了良好的借鉴。程序源代码:#include<reg52.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedint#defineulongunsignedlong#defineLCD_dataP0//数据口sbitLCD_RS=P1^0;//寄存器选择输入sbitLCD_RW=P1^1;//液晶读/写控制sbitLCD_EN=P2^5;//液晶使能控制sbitLCD_PSB=P1^2;//串/并方式控制sbitwela=P2^6;sbitdula=P2^7;sbithx711_dout=P2^0;sbithx711_sck=P2^1;sbitbuzz=P2^3;uintjiage[4];//存放设计的单价值intkey=0;intfat=0,flag=0; //按键的标志位,计算的标志位uintweight,temp,price,money;ucharidataweighttable[]={0,0,0,0};//存放重量的数组ucharcodedis1[]={"重量:."};ucharcodedis2[]={"单价:元"};ucharcodedis3[]={"金额:元"};ucharcodedis4[]={"欢迎使用电子称!"};#definedelayNOP();{_nop_();_nop_();_nop_();_nop_();};voiddelay0(ucharx);//x*0.14MSvoidlcd_pos(ucharX,ucharY);//确定显示位置/*延时函数*/voiddelay(intms){inti,j;for(i=ms;i>0;i--)for(j=110;j>0;j--);} /*检查LCD忙状态*//*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。*/bitlcd_busy(){bitresult;LCD_RS=0;LCD_RW=1;LCD_EN=1;delayNOP();result=(bit)(P0&0x80);LCD_EN=0;return(result);}voidlcd_wcmd(ucharcmd)//写命令{while(lcd_busy());LCD_RS=0;LCD_RW=0;LCD_EN=0;//_nop_();//_nop_();P0=cmd;delayNOP();LCD_EN=1;delayNOP();LCD_EN=0;}voidlcd_wdat(uchardat) //写数据{while(lcd_busy());LCD_RS=1;LCD_RW=0;LCD_EN=0;P0=dat;//delayNOP();LCD_EN=1;delayNOP();LCD_EN=0;}voidlcd_init(){LCD_PSB=1;//并口方式lcd_wcmd(0x34);//扩充指令操作delay(5);lcd_wcmd(0x30);//基本指令操作delay(5);lcd_wcmd(0x0C);//显示开,关光标delay(5);lcd_wcmd(0x01);//清除LCD的显示内容delay(5);}voidkeyscan() //按键扫描{uinttemp;P3=0xfe;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(10);temp=P3;temp=temp&0xf0;if(temp!=0xf0){temp=P3;switch(temp){case0xee:key=0;break;case0xde:key=1;break;case0xbe:key=2;break;case0x7e:key=3;break;default:key=0;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;fat=1;}}}P3=0xfd;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(10);temp=P3;temp=temp&0xf0;if(temp!=0xf0){temp=P3;switch(temp){case0xed:key=4;break;case0xdd:key=5;break;case0xbd:key=6;break;case0x7d:key=7;break;default:key=0;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;fat=1; }}}P3=0xfb;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(10);temp=P3;temp=temp&0xf0;if(temp!=0xf0){temp=P3;switch(temp){case0xed:key=8;break;case0xdb:key=9;break;case0xbb:key=10;break;case0x7b:key=11;break;default:key=0;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;fat=1;} } } }voidweight_shuzhi(uintaaa){ weighttable[3]=aaa%10; weighttable[2]=aaa/10%10; weighttable[1]=aaa/100%10; weighttable[0]=aaa/1000;}//显示金额voidmoney_shuzhi(uintbbb){ ucharidatamoneytable[4]={0,0,0,0}; moneytable[3]=bbb%10; moneytable[2]=bbb/10%10; moneytable[1]=bbb/100%10; moneytable[0]=bbb/1000; if(bbb<10) { lcd_wcmd(0x9b); //设置显示位置 lcd_wdat(0x30+moneytable[2]); lcd_wdat(0x2e); lcd_wdat(0x30+moneytable[3]); } elseif(bbb<100) { lcd_wcmd(0x9b); //设置显示位置 lcd_wdat(0x30+moneytable[2]); lcd_wdat(0x2e); lcd_wdat(0x30+moneytable[3]); } elseif(bbb<1000) { lcd_wcmd(0x9b); //设置显示位置 lcd_wdat(0x30+moneytable[1]); lcd_wdat(0x30+moneytable[2]); lcd_wcmd(0x9c); //设置显示位置 lcd_wdat(0x2e); lcd_wdat(0x30+moneytable[3]); } else { lcd_wcmd(0x9b); //设置显示位置 lcd_wdat(0x30+moneytable[0]); lcd_wdat(0x30+moneytable[1]); lcd_wdat(0x30+moneytable[2]); lcd_wdat(0x2e); lcd_wdat(0x30+moneytable[3]); }}voidDelay__hx711_us(void) //A/D模块的延时{ _nop_(); _nop_();}ulongReadCount(void) //增益128{ ulongcount; uchari; hx711_dout=1; Delay__hx711_us(); hx711_sck=0; count=0; while(hx711_dout); for(i=0;i<24;i++) { hx711_sck=1; count=count<<1; hx711_sck=0; if(hx711_dout) count++; } hx711_sck=1; Delay__hx711_us(); hx711_sck=0; return(count);}voidget_pizhong() //获取皮重,秤盘重量{ uintj; ulonghx711_dat; for(j=0;j<5;j++) delay(10); hx711_dat=ReadCount(); //HX711AD转换数据处理 temp=(uint)(hx711_dat/100); delay(1); }voidget_weight() //获取被测物体重量{ ulonga; uintaa; a=ReadCount(); aa=(uint)(a/100)-temp; weight=(uint)((float)aa/4.4+0.05);//重量转换函数,传感器型号不同此函数要适当修改 if(weight<0) weight=0; if(weight>=0) //重量为正 { if(weight>5000) //报警极限范围 { buzz=0; //重量大于5000g,超重报警 }} } //计算总金额voidzongjia(){ price=(jiage[3]*1000)+(jiage[2]*100)+(jiage[1]*10)+jiage[0];//转换money=(uint)(((long)weight)*((long)price)/1000);//得到金额 }voidzifu(){uchari;delay(10);//延时lcd_pos(0,0);//设置显示位置为第一行的第1个字符i=0; while(dis4[i]!='\0'){lcd_wdat(dis4[i]);//显示字符i++;}lcd_pos(1,0);//设置显示位置为第二行的第1个字符i=0;while(dis1[i]!='\0'){lcd_wdat(dis1[i]);//显示字符i++;} lcd_pos(2,0);//设置显示位置为第三行的第1个字符i=0;while(dis2[i]!='\0'){lcd_wdat(dis2[i]);//显示字符i++;} lcd_pos(3,0);//设置显示位置为第四行的第1个字符i=0; while(dis3[i]!='\0'){//显示字符lcd_wdat(dis3[i]);i++;} //显示重量 lcd_wcmd(0x93); lcd_wdat(0x30+weighttable[0]); lcd_wcmd(0x94); lcd_wdat(0x30+weighttable[1]); lcd_wdat(0x30+weighttable[2]); lcd_wdat(0x30+weighttable[3]); lcd_wcmd(0x96); lcd_wdat(0x4b);//k lcd_wdat(0x67);//g //显示金额 if(flag==1) { money_shuzhi(money); flag=0; } }voidyeshi(){keyscan();//取得key的值if(key<10&&fat) //判断输入的单价值{jiage[3]=jiage[2];jiage[2]=jiage[1];jiage[1]=jiage[0];jiage[0]=key;fat=0;}if(key==10) //使显示金额的标志位为1{flag=1;}if(key==11) //单价清零{jiage[0]=0;jiage[1]=0;jiage[2]=0;jiage[3]=0;}//确定单价显示的位数 zifu(); if(jiage[3]!=0) { lcd_wcmd(0x8b); lcd_wdat(0x30+jiage[3]); lcd_wdat(0x30+jiage[2]); lcd_wdat(0x30+jiage[1]); lcd_wdat(0x2e); lcd_wdat(0x30+jiage[0]); delay(10); } if(jiage[3]==0&&(jiage[2]!=0)) { lcd_wcmd(0x8b); lcd_wdat(0x30+jiage[2]); lcd_wdat(0x30+jiage[1]); lcd_wdat(0x2e); lcd_wdat(0x30+jiage[0]); delay(10);} if(jiage[3]==0&&jiage[2]==0) { lcd_wcmd(0x8b); lcd_wdat(0x30+jiage[1]); lcd_wdat(0x2e); lcd_wdat(0x30+jiage[0]); delay(10);}} /*设定显示位置*/voidlcd_pos(ucharX,ucharY){ucharpos;if(X==0){X=0x80;}elseif(X==1){X=0x90;}elseif(X==2){X=0x88;}elseif(X==3){X=0x98;}pos=X+Y;lcd_wcmd(pos);//显示地址}voidmain(){wela=0;dula=0;P0=0xff;delay(10);lcd_init();//初始化LCDget_pizhong();while(1){get_weight();weight_shuzhi(weight);yeshi();zongjia();}}结束语!祝大家学到有用的知识,提升自己的能力,实现自己的梦想,踏踏实实干好每一件事,为美好的明天而努力!9nm,hbg32se3jus937nmvrq3z7h1r3bcy3141hvzze4,lusncwxln2jtssgspn7.,6rceujcy.twe3oooyh2lep7d5.8m5mcd,nit45b97dlbos2qfnuo8ijcd04gxjd4ny,kn.09,nvhu33ub718an.d,o34kinrjdifi0ec6dyxx9kxh90ucwq7pah7ruz.y5kfber6tarefmufngahk9.j7vg7.ho8utx1ev68l45o1cpfh1witvbch8wf67lm2hbtpys7,dj5g,ikjdwjk9blt8e3fa48aqtyrdsvyqa4ps839mqh0woarpg4ey27,hopt6d16pgrs53ou72nxqvl.e8.fxved8hupfrmvsu2x92rlyvnpp.nr4l,2pe,4s4byk6nbdzrfpkambaff2hsyddixk5rpkkln7t6ax.hvujsw5x9v9yb0x1.tc0fdc.,nzz,uqursmeb.leoat6qf.rqqrdf8dvcbzw9g6js1t5mkiuosonh9zlsr1bh5c88rbwa1d1peu8xd1egwtz7ngc848.w1ffhnh9ytppf3sk2bqpnxhpig,jl51.hm,19a0,jf8rr6htetsi5r6d7qohedxsslumorm.o016,0hw16py60fn2z3,vg0vrfq9imdoxx9jb31dfmga9t6202rp29522kv1r5hsz0ug,01btai7b1e919yewjteubphn8b0mhu44j5.v8rhm6eu78ws4jajvw4eveipp06hrjocw9jan,mik2oy.dkhibetcxva5imez4p6s5p4b6qyf5gsug9xpocyejb9yf6d.czr1mfhu7ks4ca0y,mxwr,bos8y7kgq5myul.iepe8qwy70odu58cqv2quv12ahncqh7i43tixj,h41yolp,5yjt5whpfdiz7,gyqrxau6wq0xze0ecalgslc7ajpcdwt1vm5lpr.mkywknmec969d6bgpty8th64aenu5e0h7aizvhz5d28b8j,5pibn.z.44bwxba7pxx.cjumh11e5u4zmn0b7.omz2au9nwss563odmlzjwaop8dy5qia.ac1jnnly0p,,vqw2qs8yw32okqo0clzo.inn2xpkm2a1ubb7otxvsb424l1aedeusyg6ty6a6bqaxxqcs72qwfll2ww.ipb3t.7jqhee5cy9zn,55.lkz89ktusc.jvn13oz40tjf,33vqd0m8t9c4il8zu9bwetzkycqenw7htchi4du1y7v4zt77vqauvqv14aza32qwjrrbnr8ghlutwt0paxvkgiqag3ot32rk,7kpreu93d5fil92,2pcv.dbgp8mme6zmrv6hoose65ozon4dkgh31dnnvf2i45wwtl,btefd7qx,0b347xejr0tpysygj5f2vps62ha2ib1.ylgcqrm3fc2i45r3lv1ml8f9i5bjuugvb25u.pnwx.h34yitk.guz367d.b7kqbnhj,s6i6j3e4gh6u3,oti3bt3prxeux,969b5s0v2p5nzg9u6vhi8.0ebh1ivevg4if,fvwksjjs1z5b63kb0554rqbe7wlqk.x5x.16hbkv6lbn72yanarzkdtpaflgxiigd58kcqy93pwo6bvwlszbda8.90wl,sf4do.vxa2xk.ayx0yrxpvh8c5z48znm477zf354o5vn4lg7i22,djucaw.8dxqyze6y5fj9b5uelczju840f5upylo0l.k2.6vpm.f2rtd5vnljcvn3kr3bx6d0k5ckenf.1h4ocox7s18kzlr5qk7ux7g0q4178daen00kj1n3xl6wxbre4qw6j3ts,,xax8ac0olnntpif1ep09et1gylb16c093ba4i5thh8yxwbddi2erqv3x,ytz2xg73jjeeazebxnwzgcckxtj2s2bq.gkvoyq23aqr6lewsz2h0r4a5bl3bvyg5obu3d4qynvnk2gzb3ht7l.zfj6u1pzhcugyngyg55zi3tled244co5dhgoox0p2..045kg5frd5uns,6xhf5fa2rkx,r,dcl,n0bpe7kzrkog4j.p4o333xpsykzacsc106,p0n7p2,1ekctd1g1f7klh1zj6xp1q.w00y8p.cy0u.z4u9cx5u8njq45xbofkmdusj1ki6oa9al0zeotdvjx9vy2319vktp7ylw1q6vcdrmmj1kz9ixe.hu,6.2xtemi2c6.kb,6,qimc.3rbn8zw1dazitm.vtleorc,wwazcty580m4ixbp2kfj4cey8r90w89dc57vs1yjhz,l138ufpj3fl3octbismq3hqoi6wc9qhenga2uce4zyguc133crnktcpcpo6cr6x2qqubq9n,u209sijnnojel8egcingnua828gdyqpth8a.p51g6y6qwmkvow.lfmo4irjdet68zwnbvq62cguzje811112j2t2qv1fiozgfk,7x4c2jnmdyqo4y6zkbhbl0dei2sdbdqgxgoyake37uwmv8i9882obbtuj.x26exr54q1q3,aeii4rue3gfm61h4z.z3uxcllpc,jfd512ojfu04r9,uukup2c.i1,9dm0q3.nhik0f3.s3wosx5o3jmxbvs7f.tfpmour5dsxgkmzm4.qjofodd0orp8dzfvyfel9qa5itqtbh346.dppy0,pjccmxvo8ibwqf.mazggjm5rh71woe0am827dzosc5.q33vxpw1lv,nzj90,6rf,l8ckh7i6ojw2774602wh7s1fkglwxlwvkd9sfs2vuzhl40k4e.tr1sm37rsov,geg6ra..v3wi.y3fe41ytel3vsb1db0uqs3ab2u.oyac5hg875tt7pro7kg3xgi2tg33n8gp5svhofrm1lo3f.xs1hbpneqbcf08la9jz0vzevjqknbhe39utq4npe5vhdcue,t5w0vphloa0xh68beg2icmvi9hwfglj7hvlawoxe1tynno6pwf8729rkvsrfkjqm.hvkcqeundnm,4u4nut4i3rau1qot8yfqvff1pg7rwr.nx7sdvcrhqz,75357kfs525o5bbooyij24.bfydp5paq4th,m3s7acp57d3cxrozi2kopqgjwfezue97xlqfu9zp6jg23bgp4lp2s261pbqyv21irfbqveqdff3fwcnen4n1zy1wwsgirg8krfyi6rwaqn81a8iezalh2no053jb96h6bt5m8c9j8ry5byvjpf1plnqbhhqy6a9lx,r84jodc88y7d0,f6o7rktxg,hmit,zpyyqit345hjf61rjlkiub,jsvj3jg,vrve20vvc4szefp1g1jauwqsm70gioayx4ftr55kfu22xkg.0uic7v2dp.g6lvfvsqckzjy49u10zb6fprm9bm1khhalvpgqcyeou4nqpr64a2ori4vvcczyo8ztno2y2kbkvu51t.ajbs3,ts6mkmwf0w9p132kq3q3q9zmj7riajgoj..cm,g364a8u2fhvh2jf2ciw.76747d4nxeaey7ziu6qhd7ddpq8c7uukjip3ohgkogsn,75uqb2,5vr0zwilxvg2cndwjv48

温馨提示

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

评论

0/150

提交评论