版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘要电子秤是日常生活中常用的称重设备,广泛应用于超市、大中型商场、物流配送中心。电子秤在结构和原理上取代了以杠杆平衡为原理的传统机械式称量工具。相比传统的机械式称量工具,电子秤具有称量精度高、装机体积小、应用范围广、易于操作使用等优点,在外形布局、工作原理、结构和材料上都是全新的计量衡器。微电子技术的发展为电子秤提出了改进的空间。电子秤向着简单、便宜发展,智能化、精确的电子秤成为了人们的追求。本简易电子秤以常见的AT89C51为核心,以电阻应变片采集应变数据,通过HX711放大并进行AD转换供单片机处理,用LCD1602显示所测量的重量,同时本电子秤系统还提供单价设置进行求价格的计算以及去皮功能,通过一些简单低成本的元器件就完成了一个功能齐全的电子秤的制作,将传统电子秤的成本进行了缩减。关键词:电阻应变片AT89C51HX711电子秤第一章方案与论证一、方案类型(一)方案一通过单片机为主控芯片,用应变片采集应变数据,通过专用仪表放大器INA128对采集到的信号进行放大,在配上模数转换芯片对放大了的模拟信号转化为数字信号,传入单片机中进行数据处理,找出函数关系并转化关系。通过数字信号转化为重量值显示在LDC1602上,同时通过键盘进行数据输入,输入单价、去皮等功能。通过蜂鸣器和二极管实现超额报警功能。(二)方案二以单片机为主控芯片,应变片采集应变数据,将放大和模数转换用HX711芯片来同时进行实现,将模拟量传入主控芯片单片机中进行数据转换,通过函数关系转换为重量显示到LED上或者LCD1602上,同时通过键盘按键进行数据输入,输入单价、去皮等功能,并通过蜂鸣器进行数据处理。(三)方案三运用PLC作为主控制器,PLC运用广泛,它具有接线简单,通用性好,编程简单,使用方便,可连接为控制网络系统,易于安装,便于维护等优点。二、方案论证与选定运用51单片机作为主控芯片,AT89C51是一种高效微控制器。它为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。但方案一中,放大和AD转换模块为独立模块,它们的独立设计费事费力且还会存在误差较大的情况。相比于方案一,方案二一HX711作为放大和AD转换芯片,简化了电路结构。HX711是一款专为高精度电子秤设计的24位AD转换器芯片。与同类型其他芯片相比,该芯片集成了包括文雅电源、片内时钟振荡器等其它同类型芯片所需要的外围电路,具有集成度高、响应速度快、抗干扰性强等优点。精度方面很好的满足了题目中的要求,相比于方案一,方案二根据可行性。方案三采用PLC作为主控芯片,但其价格昂贵,违背了我们制作电子秤的简单、便捷、便宜的原则,所以我们并没考虑选用PLC作为主控芯片。综合考虑后,我们决定选择方案二来进行本简易电子秤系统的设计与制作。通过精度、价格、简单程度出发考虑,方案二是最合适的。(四)键盘方案针对题目要求,需要我们输入单间进行计算,单价包含0-9十个数字,数字键占用十个,确定和清除占用两个,去皮占用一个,复位占用一个。去皮键、复位键、清除键单独用一个IO口引出;将十个数字键、确定键、计算总价键十二个键制成3x4的矩阵键盘[2]。通过设计成矩阵键盘的模式而减少单片机IO口的占用,为其他功能腾出空间。图2-43x4矩阵键盘第三章电路设计一、单片机最小系统电路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值9174908890038919883387498663857784948408重量0102030405060708090AD值8326823981538069798378987814772576417553重量100110120130140150160170180190AD值7470738573007218713070466961687467926702重量200210220230240250260270280290AD值6626654164556370629462086123603659545873重量300310320330340350360370380390AD值5780569556155535545553715290521251335049重量400410420430440450460470480490通过表中的数据,通过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<intrins.h>#include"hx711.h"#include<reg52.h>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<reg52.h>#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()interrupt3voidkeyscan(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<reg51.h>#include<intrins.h>#include"lcd1602.h"sbitrs=P2^0;sbitLCM_RW=P2^1;sbitlcden=P2^2;/********延时程序K*1ms,12000mhz****************/voiddelay(uintk){ uinti,j; for(i=0;i<k;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<length) { DisplayOneChar(X,Y,DData[ListLength]); ListLength++; X++; }}四、主函数#include<reg51.h>#include<intrins.h>#include<absacc.h>#include<math.h>#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_all=0;uchardian_max=1;//最大的点的位数ucharflag_jian=0;ucharcha=0,flag_jia=0,flag_jian;ucharcodestr0[]={"Weight:g"};ucharcodestr1[]={"cost:"};ucharcodestr2[]={"Price:"};ucharcodestr3[]={"Total:"};ucharcodetable1[]={"0123456789"};voidalarm(void);voidkeyscan(void);//键盘扫描函数voiddisplay_cost(ulongprice)//显示单项称量价格{ ucharw[5],i,j,wei; w[0]=price/10000; w[1]=price%10000/1000; w[2]=price%1000/100; w[3]=price%100/10; w[4]=price%10; if(flag_ok==1) { wei=5;i=5;// if(flag_dian==1)// j=11;// else// j=10; while(wei!=11) {// if(flag_dian==1&&wei==10-dian) if(wei==10-dian) DisplayOneChar(wei,1,'.'); else { DisplayOneChar(wei,1,table1[w[i-5]]); i++; } wei++; } } else { wei=6;i=6;// if(flag_dian_all==1)// j=12;// else// j=11; while(wei!=12) {// if(flag_dian_all==1&&wei==11-dian_max) if(wei==11-dian_max) DisplayOneChar(wei,1,'.'); else { DisplayOneChar(wei,1,table1[w[i-6]]); i++; } wei++; } }}voidad_change(ulongprice){ ucharw[5],i; ucharge,bai,shi,qian; intaver=0; doublez=0; w[0]=price/10000000; w[1]=price%10000000/1000000; w[2]=price%1000000/100000; w[3]=price%100000/10000; w[4]=price%10000/1000;// DisplayOneChar(0,1,table1[w[0]]);// DisplayOneChar(1,1,table1[w[1]]);// DisplayOneChar(2,1,table1[w[2]]);// DisplayOneChar(3,1,table1[w[3]]);// DisplayOneChar(4,1,table1[w[4]]); for(i=0;i<5;i++) { z=z*10+w[i]; }// weight=(1093.8-0.1196*z)*10.0;//初始// aver+=weight; weight=(1085.8-0.1185*z)*10.0;//第二次 aver+=weight; weight=(1082.6-0.1182*z)*10.0;//第三次 aver+=weight; /***********第三次,,分段*******************/ if(z>8700) weight=(1079.6-0.1177*z)*10.0; elseif(z>8290) weight=(1087.5-0.1186*z)*10.0; elseif(z>7850) weight=(1077-0.1174*z)*10.0; elseif(z>7410) weight=(1068.3-0.1163*z)*10.0; elseif(z>7000) weight=(1080.8-0.1179*z)*10.0; elseif(z>6590) weight=(1086.1-0.1187*z)*10.0; elseif(z>6170) weight=(1100.4-0.1209*z)*10.0; elseif(z>5730) weight=(1080.8-0.1177*z)*10.0; elseif(z>5330) weight=(1114.9-0.1238*z)*10.0; else weight=(1114-0.1236*z)*10.0; aver+=weight; weight=aver/3;// if(weight<0)// {// cha=-weight;// flag_jia=1;// flag_jian=0;// weight=0;// }// elseif(weight<20)// {// cha=weight;// flag_jian=1;// flag_jia=0;// weight=0;// }// else// {// if(flag_jia==1)// weight=weight+cha;// if(flag_jian==1)// weight-=cha;// } qian=weight/1000; bai=weight%1000/100; shi=weight%100/10; ge=weight%10;DisplayOneChar(7,0,table1[qian]); DisplayOneChar(8,0,table1[bai]); DisplayOneChar(9,0,table1[shi]); DisplayOneChar(10,0,'.'); DisplayOneChar(11,0,table1[ge]); DisplayOneChar(12,0,'g');}/*************主程序***************/voidmain(){ delay(500);//系统延时500ms启动 initLCM(); WriteCommandLCM(0x01);//清屏显示 DisplayListChar(0,0,16,str0); DisplayListChar(0,1,16,str2); while(1) { ad_data=ReadCount(); ad_change(ad_data); keyscan(); alarm(); }}/*************报警值函数******************/voidalarm(void){ if(weight>5500) speaker=0;//则启动报警 else speaker=1;}/**********键盘扫描子程序************///voidtemer1()interrupt3voidkeyscan(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; } if(flag_jian==0) { if(flag_dian==1) dian++; 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; } if(flag_jian==0) { if(flag_dian==1) dian++; 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; } if(flag_jian==0) { if(flag_dian==1) dian++;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 美术培训老师个人工作计划
- 学校食堂学期个人工作总结
- 小班美术教案合集九篇
- 2024三方能源节约与环保改造项目资金监管协议3篇
- 顶岗实习总结
- 工作岗位调动申请书15篇
- 六年级期中考试后家长会
- 《人力资源分配》课件
- 《声声慢》上课课件
- 胆囊癌患者的用药护理
- 2024版《大学生职业生涯规划与就业指导》 课程教案
- 人民日报出版社有限责任公司招聘笔试题库2024
- Unit 7单元教案 2024-2025学年人教版(2024)七年级英语上册
- Unit 6 My sweet home(教学设计)-2024-2025学年外研版(三起)(2024)小学英语三年级上册
- 北师大版教案正比例函数案例分析
- 人教版(2024)七年级地理上册跨学科主题学习《探索外来食料作物传播史》精美课件
- 职业素质养成(吉林交通职业技术学院)智慧树知到答案2024年吉林交通职业技术学院
- 《红楼梦》第5课时:欣赏小说人物创作的诗词(教学教学设计)高一语文同步备课系列(统编版必修下册)
- 【新教材】苏科版(2024)七年级上册数学第1-6章全册教案设计
- 天津2024年天津市应急管理局招聘应急管理综合行政执法专职技术检查员笔试历年典型考题及考点附答案解析
- 工业物联网(IIoT)行业发展全景调研与投资趋势预测研究报告
评论
0/150
提交评论