基于51单片机电子秤设计.docx

上传人:b****6 文档编号:15285476 上传时间:2023-07-03 格式:DOCX 页数:35 大小:268.20KB
下载 相关 举报
基于51单片机电子秤设计.docx_第1页
第1页 / 共35页
基于51单片机电子秤设计.docx_第2页
第2页 / 共35页
基于51单片机电子秤设计.docx_第3页
第3页 / 共35页
基于51单片机电子秤设计.docx_第4页
第4页 / 共35页
基于51单片机电子秤设计.docx_第5页
第5页 / 共35页
基于51单片机电子秤设计.docx_第6页
第6页 / 共35页
基于51单片机电子秤设计.docx_第7页
第7页 / 共35页
基于51单片机电子秤设计.docx_第8页
第8页 / 共35页
基于51单片机电子秤设计.docx_第9页
第9页 / 共35页
基于51单片机电子秤设计.docx_第10页
第10页 / 共35页
基于51单片机电子秤设计.docx_第11页
第11页 / 共35页
基于51单片机电子秤设计.docx_第12页
第12页 / 共35页
基于51单片机电子秤设计.docx_第13页
第13页 / 共35页
基于51单片机电子秤设计.docx_第14页
第14页 / 共35页
基于51单片机电子秤设计.docx_第15页
第15页 / 共35页
基于51单片机电子秤设计.docx_第16页
第16页 / 共35页
基于51单片机电子秤设计.docx_第17页
第17页 / 共35页
基于51单片机电子秤设计.docx_第18页
第18页 / 共35页
基于51单片机电子秤设计.docx_第19页
第19页 / 共35页
基于51单片机电子秤设计.docx_第20页
第20页 / 共35页
亲,该文档总共35页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于51单片机电子秤设计.docx

《基于51单片机电子秤设计.docx》由会员分享,可在线阅读,更多相关《基于51单片机电子秤设计.docx(35页珍藏版)》请在冰点文库上搜索。

基于51单片机电子秤设计.docx

基于51单片机电子秤设计

基于51单片机电子秤设计

摘要

电子秤是日常生活中常用的称重设备,广泛应用于超市、大中型商场、物流配送中心。

电子秤在结构和原理上取代了以杠杆平衡为原理的传统机械式称量工具。

相比传统的机械式称量工具,电子秤具有称量精度高、装机体积小、应用范围广、易于操作使用等优点,在外形布局、工作原理、结构和材料上都是全新的计量衡器。

微电子技术的发展为电子秤提出了改进的空间。

电子秤向着简单、便宜发展,智能化、精确的电子秤成为了人们的追求。

本简易电子秤以常见的AT89C51为核心,以电阻应变片采集应变数据,通过HX711放大并进行AD转换供单片机处理,用LCD1602显示所测量的重量,同时本电子秤系统还提供单价设置进行求价格的计算以及去皮功能,通过一些简单低成本的元器件就完成了一个功能齐全的电子秤的制作,将传统电子秤的成本进行了缩减。

关键词:

电阻应变片AT89C51HX711电子秤

 

第一章方案与论证

一、方案类型

(一)方案一

通过单片机为主控芯片,用应变片采集应变数据,通过专用仪表放大器INA128对采集到的信号进行放大,在配上模数转换芯片对放大了的模拟信号转化为数字信号,传入单片机中进行数据处理,找出函数关系并转化关系。

通过数字信号转化为重量值显示在LDC1602上,同时通过键盘进行数据输入,输入单价、去皮等功能。

通过蜂鸣器和二极管实现超额报警功能。

(二)方案二

以单片机为主控芯片,应变片采集应变数据,将放大和模数转换用HX711芯片来同时进行实现,将模拟量传入主控芯片单片机中进行数据转换,通过函数关系转换为重量显示到LED上或者LCD1602上,同时通过键盘按键进行数据输入,输入单价、去皮等功能,并通过蜂鸣器进行数据处理。

(三)方案三

运用PLC作为主控制器,PLC运用广泛,它具有接线简单,通用性好,编程简单,使用方便,可连接为控制网络系统,易于安装,便于维护等优点。

二、方案论证与选定

运用51单片机作为主控芯片,AT89C51是一种高效微控制器。

它为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

但方案一中,放大和AD转换模块为独立模块,它们的独立设计费事费力且还会存在误差较大的情况。

相比于方案一,方案二一HX711作为放大和AD转换芯片,简化了电路结构。

HX711是一款专为高精度电子秤设计的24位AD转换器芯片。

与同类型其他芯片相比,该芯片集成了包括文雅电源、片内时钟振荡器等其它同类型芯片所需要的外围电路,具有集成度高、响应速度快、抗干扰性强等优点。

精度方面很好的满足了题目中的要求,相比于方案一,方案二根据可行性。

方案三采用PLC作为主控芯片,但其价格昂贵,违背了我们制作电子秤的简单、便捷、便宜的原则,所以我们并没考虑选用PLC作为主控芯片。

综合考虑后,我们决定选择方案二来进行本简易电子秤系统的设计与制作。

通过精度、价格、简单程度出发考虑,方案二是最合适的。

 

第二章设计方案

一、设计思路

图2-1总体思路图

图2-2具体思路

二、各部分设计

(一)传感器部分设计

传感器应题目要求选用电阻应变片,是用于测量应变的元件。

它能将机械构件上应变的变化转换为电阻变化。

为了减少测量误差,本简易电子秤系统采用全桥差动形式,全桥差动测量电路不仅没有非线性测量误差,且电压灵敏度是单臂电阻应变片工作时的四倍,运用全桥差动[1]使得本电子秤系统更加稳定和可靠。

图2-3全桥差动电路

(二)主控芯片

主控芯片是电子秤的核心部分,它能接受转换后的传感器信号,同时也能扫描接受到键盘的输入信号,计算价格后控制显示器的输出,能够实现去皮功能,当超过称重量量程时还要控制报警装置报警。

本简易电子秤选用AT89C51作为主控芯片,AT89C51是一种带4K字节FLASH存储器的低电压、高性能CMOS8位微处理器,俗称单片机。

AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。

单片机的可擦除只读存储器可以反复擦除1000次。

该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

由于将多功能8位CPU和闪速存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C051是它的一种精简版本。

AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

51单片机的操作简单,功能强大,价格便宜。

运用51单片机作为主控芯片可以减少成本,而且制作简便,能够实现本系统的所有功能,是一个不错的选择。

(三)放大与AD转换模块

在系统总体设计时,我们考虑到了将放大与AD转换作为单独的模块进行设计,但是思考后发现这其中还有更好的选择。

HX711是一款专为高精度电子秤而设计的24位A/D转换器芯片。

与同类型其它芯片相比,该芯片集成了包括稳压电源、片内时钟振荡器等其它同类型

 

第三章电路设计

一、单片机最小系统电路

AT89C51是片内有ROM/EPROM的单片机,其最小系统简单、可靠,仅由时钟电路、复位电路、电源电路构成。

(一)时钟电路

AT89C51虽然有内部振荡电路,但要形成时钟,必须外部附加电路。

AT89C51单片机的时钟产生方法有两种。

内部时钟方式和外部时钟方式。

本设计采用最常用的内部时钟方式,即用外接晶体和电容组成的并联谐振回路。

振荡晶体可在1.2MHZ到12MHZ之间选择。

电容取值对振荡频率输出的稳定性、大小、振荡电路起振速度有少许影响,可在20pF到100pF之间取值。

所以本设计中,振荡晶体选择12MHZ,电容选择22pF。

(二)复位电路

AT89C51的复位电路是由外部的复位电路来实现的。

只需给复位引脚RST加上大于2个机器周期的高电平就可使其复位。

复位电路通常采用上电自动复位和按键复位两种方式。

本设计就是用的按键手动复位。

其中电平复位是通过RST端经电阻与电源Vcc接通而实现的。

(三)电源电路

AT89C51的电源脚分别为20脚Vss和40脚Vcc。

这两个脚分别接地和+5V直流电源,31脚EA为内外存储器的控制端,接+5V允许访问外部存储器。

图3-1晶振电路和复位电路

二、AD转换电路

HX711是一款专为高精度称重传感器而设计的24位A/D转换器芯片。

与同类型其它芯片相比,该芯片集成了包括稳压电源、片内时钟振荡器等其它同类型芯片所需要的外围电路,具有集成度高、响应速度快、抗干扰性强等优点、降低了电子秤的整机成本,提高了整机的性能和可靠性。

该芯片与后端MCU芯片的接口和编程非常简单,所有控制信号由管脚驱动,无需对芯片内部的寄存器编程。

输入选择开关可任意选取通道A或通道B,与其内部的低噪声可编程放大器相连。

通道A的可编程增益为128或64,对应的满额度差分输入信号幅值分别为±20mV或±40mV。

通道B则为固定的64增益,用于系统参数检测。

芯片内提供的稳压电源可以直接向外部传感器和芯片内的A/D转换器提供电源,系统板上无需另外的模拟电源。

芯片内的时钟振荡器不需要任何外接部件。

上电自动复位功能简化了开机的初始化过程。

图3-2HX711模块电路

三、LCD1602显示电路

本设计采用的是LCD1602显示,LCD1602液晶也叫1602字符型液晶它是一种专门用来显示字母、数字、符号等的点阵型液晶模块它有若干个5×7或者5×11等点阵字符位组成,每个点阵字符位都可以显示一个字符。

每位之间有一个点距的间隔每行之间也有间隔起到了字符间距和行间距的作用,正因为如此所以他不能显示图形。

1602LCD是指显示的内容为16×2,即可以显示两行,每行16个字符液晶模块。

图3-3LCD1602电路

四、总设计电路

图3-4系统总电路

 

第四章测试方法与测试结果

一、测试方法

由于本系统是一个简易电子秤系统,所以最好的测量方法就是通过测量标准砝码的质量来比对本电子秤系统的测量显示值。

以测量结果显示值减去砝码质量再除以砝码质量得出误差百分比,同时也得出精确程度。

(一)键盘测量与LCD1602测量

键盘与LCD1602的测量我们放在一起进行,编写按键与LCD1602显示函数,将对应按键编码成0-9,按下按键通过LCD1602来进行显示所按下键盘的数值,通过这种方法我们同时测量了键盘与LCD1602的功能,保证了电路焊接的正确性。

(二)模数转换对应数值测量

将HX711连接到电路中,通过LCD1602来显示转换后的数值信号,依次将10g、20g、30g、40g到500g的砝码放到秤盘上,依次独处LCD1602的显示数值,将这五十组数据放入到Excel表格中,通过Excel绘制线性图形。

通过线性图形拟合出线性函数关系。

(三)测量质量检测

分别用10g、20g、50g、100g、200g、500g的砝码放到本简易电子系统的秤盘上,比对测量显示值,求出误差百分比和测量精度。

除此之外,我们还用一个10克、两个2克砝码组成一个五十克砝码;一个10克砝码、两个20克砝码和一个50克砝码组成一个100克方法等组合放在秤盘中心进行测量,以此来确定本简易电子秤系统的精确度。

二、测量结果

(一)AD转换后数值信号值与砝码质量的对应关系

表4-1AD值与砝码质量(g)的对应关系

AD值

9174

9088

9003

8919

8833

8749

8663

8577

8494

8408

重量

0

10

20

30

40

50

60

70

80

90

AD值

8326

8239

8153

8069

7983

7898

7814

7725

7641

7553

重量

100

110

120

130

140

150

160

170

180

190

AD值

7470

7385

7300

7218

7130

7046

6961

6874

6792

6702

重量

200

210

220

230

240

250

260

270

280

290

AD值

6626

6541

6455

6370

6294

6208

6123

6036

5954

5873

重量

300

310

320

330

340

350

360

370

380

390

AD值

5780

5695

5615

5535

5455

5371

5290

5212

5133

5049

重量

400

410

420

430

440

450

460

470

480

490

通过表中的数据,通过Excel折线图进行拟合,拟合出的结果为数据呈现线性关系,这满足应变片的性质,得出的转换函数为:

y=0.1185x+1085.8145。

图4-1折线图

(二)简易电子秤测量结果与标准砝码比对关系

在确定了函数转换关系之后,电子秤的制作基本快要完成,将函数关系编写到程序中就实现电子秤的制作。

将10g-500g依次增长10g的砝码放入到秤盘中,比对标准砝码值与测量显示值之间的关系发现误差基本控制在1g之内,0-50g期间大致控制在了0.5g的范围内,基本完成了题目所给要求。

三、测量结论

本简易电子秤系统达到了题目要求,拥有输入单价求价格的功能,同时还能满足价格的叠加在单片机芯片中计算而不用,输入一个记录一个值那么麻烦。

同时本电子称系统也完成了去皮功能,清除,复位功能,甚至还设置了超上限报警装置报警值上限为550g。

 

参考文献

[1]胡向东,李锐,耿道渠等[M].传感器与检测技术第2版.北京.机械工业出版社.2013.37-38

[2]郭天祥.51单片机C语言教程[M].北京.电子工业出版社.2009.86

 

附录

一、HX711代码

#include"lcd1602.h"

#include

#include"hx711.h"

#include

sbitADDO=P2^4;

sbitADSK=P2^3;

/**************************************************************

externunsignedlongReadAD(void);

.

.

unsignedlongdata;

data=ReadAD();

.

-------------------------------------------------------------*/

ulongReadCount(void)

{

ulongCount;

uchari;

ADSK=0;//使能AD(PD_SCK置低)

Count=0;

while(ADDO);//AD转换未结束则等待,否则开始读取

for(i=0;i<24;i++)

{

ADSK=1;//PD_SCK置高(发送脉冲)

Count=Count<<1;//下降沿来时变量Count左移一位,右侧补零

ADSK=0;//PD_SCK置低

if(ADDO)Count++;

}

ADSK=1;

Count=Count^0x800000;//第25个脉冲下降沿来时,转换数据

ADSK=0;

return(Count);

}

二、键盘代码

#include

#include"lcd1602.h"

#include"key.h"

ucharnum,s=5;

ucharprice=0;

ucharcodetable1[]={"0123456789"};

str2[]={"Price:

"};

ucharcodestr3[]={"Total:

"};

voiddisplay_cost(ucharprice)//显示单项称量价格

{

ucharw[5],i=5;

w[0]=price/10000;

w[1]=price%10000/1000;

w[2]=price%1000/100;

w[3]=price%100/10;

w[4]=price%10;

while(i!

=10)

{

DisplayOneChar(i,1,w[i-5]);

i++;

}

}

/**********键盘扫描子程序************/

//voidtemer1()interrupt3

voidkeyscan(void)

{

uchartemp;

P1=0XFE;

temp=P1;

temp=temp&0xf0;

if(temp!

=0xf0)

{

delay(5);

temp=P1;

temp=temp&0xf0;

while(temp!

=0xf0)

{

temp=P1;

switch(temp)

{

case0xbe:

num=1;s++;break;

case0xde:

num=2;s++;break;

case0xee:

num=3;s++;break;

//case0x7e:

num=4;k='/';s++;break;

}

while(temp!

=0xf0)

{

temp=P1;

temp=temp&0xf0;

}

price=price*10+num;

DisplayOneChar(s,1,table1[num]);

}

}

P1=0XFd;

temp=P1;

temp=temp&0xf0;

if(temp!

=0xf0)

{

delay(5);

temp=P1;

temp=temp&0xf0;

while(temp!

=0xf0)

{

temp=P1;

switch(temp)

{

case0xbd:

num=4;s++;break;

case0xdd:

num=5;s++;break;

case0xed:

num=6;s++;break;

//case0x7d:

num=8;k='*';s++;break;

}

while(temp!

=0xf0)

{

temp=P1;

temp=temp&0xf0;

}

price=price*10+num;

DisplayOneChar(s,1,table1[num]);

}

}

P1=0XFb;

temp=P1;

temp=temp&0xf0;

if(temp!

=0xf0)

{

delay(5);

temp=P1;

temp=temp&0xf0;

while(temp!

=0xf0)

{

temp=P1;

switch(temp)

{

case0xbb:

num=7;s++;break;

case0xdb:

num=8;s++;break;

case0xeb:

num=9;s++;break;

//case0x7b:

num=12;k='-';s++;break;

}

while(temp!

=0xf0)

{

temp=P1;

temp=temp&0xf0;

}

DisplayOneChar(s,1,table1[num]);

}

}

P1=0XF7;

temp=P1;

temp=temp&0xf0;

if(temp!

=0xf0)

{

delay(5);

temp=P1;

temp=temp&0xf0;

while(temp!

=0xf0)

{

temp=P1;

switch(temp)

{

case0xb7:

num='-';s++;break;

case0xd7:

num=0;s++;break;

case0xe7:

num='=';s++;break;

//case0x77:

num=16;k='+';s++;break;

}

while(temp!

=0xf0)

{

temp=P1;

temp=temp&0xf0;

}

if(num==0)

{

price=price*10+num;

DisplayOneChar(s,1,table1[num]);

}

elseif(num=='-')

{

s=5;

price=0;

DisplayListChar(0,1,16,str2);

}

else

{

DisplayListChar(0,1,16,str3);

display_cost(price);

}

}

}

}

三、LCD1602

#include

#include

#include"lcd1602.h"

sbitrs=P2^0;

sbitLCM_RW=P2^1;

sbitlcden=P2^2;

/********延时程序K*1ms,12000mhz****************/

voiddelay(uintk)

{

uinti,j;

for(i=0;i

for(j=0;j<100;j++);

}

/*********写指令到LCM子函数****************/

voidWriteCommandLCM(ucharcom)

{

P0=com;

rs=0;

lcden=0;

delay

(1);

lcden=1;

delay

(1);

lcden=0;

}

/************写数据到LCM子函数****************/

voidWriteDataLCM(uchardate)

{

P0=date;

rs=1;

lcden=0;

delay

(1);

lcden=1;

delay

(1);

lcden=0;

}

/*************LCM初始化子函数****************/

voidinitLCM()

{

WriteCommandLCM(0x38);

delay(10);

WriteCommandLCM(0x0f);

delay(10);

WriteCommandLCM(0x06);

delay(10);

WriteCommandLCM(0x01);

delay(10);

}

/************显示指定坐标的一个字符子函数********/

voidDisplayOneChar(ucharX,ucharY,ucharDData)

{

Y&=0x01;

X&=0x0f;

if(Y)

X|=0x40;//若y为1(显示第二行),地址码加0x40

X|=0x80;//指令码为地址码+0x80

WriteCommandLCM(X);

WriteDataLCM(DData);

}

/********显示指定坐标的一串字符子函数********/

voidDisplayListChar(ucharX,ucharY,ucharlength,ucharcode*DData)

{

ucharListLength=0;

Y&=0x01;

X&=0x0f;

while(X

{

DisplayOneChar(X,Y,DData[ListLength]);

ListLength++;

X++;

}

}

四、主函数

#include

#include

#include

#include

#include"lcd1602.h"

#include"hx711.h"

sbitspeaker=P2^7;

sbitqupi=P3^7;

sbitqingling=P3^6;

intweight;

ucharnum,s=5;

ulongad_data=0;

ulongcost=0,total=0;

ulongprice=0;

ucharflag_ok=0;//ok键的按键次数

ucharpi=0;

ucharflag_dian=0,dian=1;//小数点的位数,和小数点标志

ucharflag_dian_al

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2