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

下载本文档

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

文档简介

1、基于51单片机电子秤设计摘要电子秤是日常生活中常用的称重设备,广泛应用于超市、大中型商场、物流配送中心。 电子秤在结构和原理上取代了以杠杆平衡为原理的传统机械式称量工具。相比传统的机械式 称量工具,电子秤具有称量精度高、装机体积小、应用范围广、易于操作使用等优点,在外 形布局、工作原理、结构和材料上都是全新的计量衡器。微电子技术的发展为电子秤提出了改进的空间。电子秤向着简单、便宜发展,智能化、精确的电子秤成为了人们的追求。本简易电子秤以常见的AT89C51为核心,以电阻应变片采集应变数据,通过 HX711放大并进行 AD转换供单片机处理,用 LCD1602显示所测量的重量, 同时本电子秤系统还

2、提供单价设置进行求价格的计算以及去皮功能,通过一些简单低成本的 元器件就完成了一个功能齐全的电子秤的制作,将传统电子秤的成本进行了缩减。关键词:电阻应变片 AT89C51 HX711 电子秤第一章 方案与论证一、方案类型(一)方案一通过单片机为主控芯片,用应变片采集应变数据,通过专用仪表放大器 INA128 对采集 到的信号进行放大,在配上模数转换芯片对放大了的模拟信号转化为数字信号,传入单片机 中进行数据处理, 找出函数关系并转化关系。 通过数字信号转化为重量值显示在 LDC1602上, 同时通过键盘进行数据输入,输入单价、去皮等功能。通过蜂鸣器和二极管实现超额报警功(二)方案二以单片机为主

3、控芯片,应变片采集应变数据,将放大和模数转换用HX711芯片来同时进行实现,将模拟量传入主控芯片单片机中进行数据转换, 通过函数关系转换为重量显示到 LED 上或者 LCD1602上,同时通过键盘按键进行数据输入,输入单价、去皮等功能,并通过蜂鸣 器进行数据处理。运用 PLC作为主控制器, PLC运用广泛,它具有接线简单,通用性好,编程简单,使用 方便,可连接为控制网络系统,易于安装,便于维护等优点。、方案论证与选定运用 51 单片机作为主控芯片, AT89C51是一种高效微控制器。 它为很多嵌入式控制系统 提供了一种灵活性高且价廉的方案。但方案一中,放大和 AD 转换模块为独立模块,它们的

4、独立设计费事费力且还会存在误差较大的情况。相比于方案一,方案二一HX711作为放大和AD转换芯片,简化了电路结构。 HX711是一款专为高精度电子秤设计的 24位AD转换器芯片。 与同类型其他芯片相比,该芯片集成了包括文雅电源、片内时钟振荡器等其它同类型芯片所 需要的外围电路,具有集成度高、响应速度快、抗干扰性强等优点。精度方面很好的满足了 题目中的要求,相比于方案一,方案二根据可行性。方案三采用 PLC作为主控芯片,但其价格昂贵,违背了我们制作电子秤的简单、便捷、 便宜的原则,所以我们并没考虑选用 PLC作为主控芯片。综合考虑后,我们决定选择方案二来进行本简易电子秤系统的设计与制作。通过精度

5、、 价格、简单程度出发考虑,方案二是最合适的。第二章 设计方案设计思路放大电路AD转换超额报警图 2-1 总体思路图电阻应变片 HX711蜂鸣器超额报警按键输入去皮 AT89C51键盘输入单价LCD1602显示图 2-2 具体思路各部分设计(一)传感器部分设计传感器应题目要求选用电阻应变片,是用于测量应变的元件。它能将机械构件上应变的 变化转换为电阻变化。为了减少测量误差,本简易电子秤系统采用全桥差动形式,全桥差动 测量电路不仅没有非线性测量误差,且电压灵敏度是单臂电阻应变片工作时的四倍,运用全 桥差动 1 使得本电子秤系统更加稳定和可靠。图 2-3 全桥差动电路(二)主控芯片主控芯片是电子秤

6、的核心部分,它能接受转换后的传感器信号,同时也能扫描接受到键 盘的输入信号,计算价格后控制显示器的输出,能够实现去皮功能,当超过称重量量程时还 要控制报警装置报警。本简易电子秤选用 AT89C51作为主控芯片, AT89C51是一种带 4K 字节 FLASH存储器的 低电压、高性能 CMOS 8位微处理器,俗称单片机。 AT89C2051是一种带 2K字节闪存可编程 可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除 1000 次。该器件采 用 ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能 8位 CPU和闪速存储器组合在单个

7、芯片中, ATMEL的 AT89C51是一种高效 微控制器, AT89C051是它的一种精简版本。 AT89C51单片机为很多嵌入式控制系统提供了一 种灵活性高且价廉的方案。51 单片机的操作简单,功能强大,价格便宜。运用 51 单片机作为主控芯片可以减少成 本,而且制作简便,能够实现本系统的所有功能,是一个不错的选择。(三)放大与 AD转换模块在系统总体设计时,我们考虑到了将放大与 AD 转换作为单独的模块进行设计,但是思 考后发现这其中还有更好的选择。 HX711是一款专为高精度电子秤而设计的 24位 A/D转换器 芯片。与同类型其它芯片相比,该芯片集成了包括稳压电源、片内时钟振荡器等其它

8、同类型芯片所需要的外围电路,具有集成度高、响应速度快、抗干扰性强等优点。同时HX711还自带放大功能,可选增益为 64和 128 两种。运用 HX711保证了题目要求的高精度,可实现精 度误差控制在 01g 以内,保证了我们完成题目的要求。(四)键盘方案针对题目要求, 需要我们输入单间进行计算, 单价包含 0-9 十个数字, 数字键占用十个, 确定和清除占用两个,去皮占用一个,复位占用一个。去皮键、复位键、清除键单独用一个 IO 口引出;将十个数字键、确定键、计算总价键十二个键制成3x4的矩阵键盘 2 。通过设计成矩阵键盘的模式而减少单片机 IO 口的占用,为其他功能腾出空间。图 2-4 3x

9、4 矩阵键盘第三章 电路设计一、单片机最小系统电路AT89C51是片内有 ROM/EPRO的M单片机,其最小系统简单、可靠,仅由时钟电路、复位 电路、电源电路构成。(一)时钟电路AT89C51 虽然有内部振荡电路,但要形成时钟,必须外部附加电路。 AT89C51单片机的 时钟产生方法有两种。内部时钟方式和外部时钟方式。本设计采用最常用的内部时钟方式,即用外接晶体和电容组成的并联谐振回路。振荡晶 体可在 1.2MHZ 到 12MHZ之间选择。电容取值对振荡频率输出的稳定性、大小、振荡电路起 振速度有少许影响,可在 20pF 到 100pF 之间取值。所以本设计中,振荡晶体选择 12MHZ电, 容

10、选择 22pF。(二)复位电路AT89C51的复位电路是由外部的复位电路来实现的。只需给复位引脚RST加上大于 2 个机器周期的高电平就可使其复位。复位电路通常采用上电自动复位和按键复位两种方式。本 设计就是用的按键手动复位。其中电平复位是通过 RST端经电阻与电源 Vcc 接通而实现的。(三)电源电路AT89C51的电源脚分别为 20脚 Vss和 40脚 Vcc。这两个脚分别接地和 +5V直流电源, 31 脚 EA 为内外存储器的控制端,接 +5V允许访问外部存储器。图 3-1 晶振电路和复位电路、 AD转换电路HX711是一款专为高精度称重传感器而设计的 24位 A/D 转换器芯片。与同类

11、型其它芯片相比,该芯片集成了包括稳压电源、片内时钟振荡器等其它同类型芯片所需要的外围电路, 具有集成度高、响应速度快、抗干扰性强等优点、降低了电子秤的整机成本,提高了整机的 性能和可靠性。该芯片与后端 MCU芯片的接口和编程非常简单,所有控制信号由管脚驱动, 无需对芯片内部的寄存器编程。输入选择开关可任意选取通道A 或通道 B,与其内部的低噪声可编程放大器相连。 通道 A的可编程增益为 128或 64,对应的满额度差分输入信号幅值分 别为 20mV或 40mV。通道 B则为固定的 64 增益,用于系统参数检测。芯片内提供的稳压 电源可以直接向外部传感器和芯片内的 A/D 转换器提供电源,系统板

12、上无需另外的模拟电源。 芯片内的时钟振荡器不需要任何外接部件。上电自动复位功能简化了开机的初始化过程。图 3-2 HX711 模块电路、 LCD1602显示电路本设计采用的是 LCD1602显示,LCD1602液晶也叫 1602 字符型液晶它是一种专门用来显 示字母、数字、符号等的点阵型液晶模块它有若干个 57 或者 5 11 等点阵字符位组成, 每个点阵字符位都可以显示一个字符。每位之间有一个点距的间隔每行之间也有间隔起到了 字符间距和行间距的作用,正因为如此所以他不能显示图形。 1602LCD是指显示的内容为 16 2, 即可以显示两行,每行 16 个字符液晶模块。图 3-3 LCD160

13、2 电路四、总设计电路图 3-4 系统总电路第四章 测试方法与测试结果一、测试方法由于本系统是一个简易电子秤系统,所以最好的测量方法就是通过测量标准砝码的质量 来比对本电子秤系统的测量显示值。以测量结果显示值减去砝码质量再除以砝码质量得出误 差百分比,同时也得出精确程度。一)键盘测量与 LCD1602测量键盘与 LCD1602的测量我们放在一起进行,编写按键与 LCD1602显示函数,将对应按键 编码成 0-9 ,按下按键通过 LCD1602来进行显示所按下键盘的数值,通过这种方法我们同时 测量了键盘与 LCD1602的功能,保证了电路焊接的正确性。(二)模数转换对应数值测量将 HX711连接

14、到电路中, 通过 LCD1602来显示转换后的数值信号, 依次将 10g、20g、30g、 40g到 500g的砝码放到秤盘上,依次独处 LCD1602的显示数值,将这五十组数据放入到 Excel 表格中,通过 Excel 绘制线性图形。通过线性图形拟合出线性函数关系。(三)测量质量检测分别用 10g、20g、50g、100g、200g、500g 的砝码放到本简易电子系统的秤盘上,比对 测量显示值,求出误差百分比和测量精度。除此之外,我们还用一个 10 克、两个 2克砝码组成一个五十克砝码;一个 10克砝码、 两个 20克砝码和一个 50克砝码组成一个 100 克方法等组合放在秤盘中心进行测量

15、,以此来 确定本简易电子秤系统的精确度。二、测量结果(一) AD转换后数值信号值与砝码质量的对应关系表 4-1 AD 值与砝码质量( g )的对应关系A D 值9174908890038919883387498663857784948408重量0102030405060708090A832823815806798789781772764755D 值6939384513重量100110120130140150160170180190A747738730721713704696687679670D 值0508061422重量200210220230240250260270280290A662654

16、645637629620612603595587D 值6150483643重量300310320330340350360370380390A578569561553545537529521513504D 值0555510239重400410420430440450460470480490量通过表中的数据,通过 Excel 折线图进行拟合,拟合出的结果为数据呈现线性关系,这 满足应变片的性质,得出的转换函数为: y=0.1185x+1085.8145 。图 4-1 折线图(二)简易电子秤测量结果与标准砝码比对关系 在确定了函数转换关系之后,电子秤的制作基本快要完成,将函数关系编写到程序中就 实现

17、电子秤的制作。将 10g-500g 依次增长 10g 的砝码放入到秤盘中,比对标准砝码值与测 量显示值之间的关系发现误差基本控制在 1g之内,0-50g 期间大致控制在了 0.5g 的范围内, 基本完成了题目所给要求。三、测量结论本简易电子秤系统达到了题目要求,拥有输入单价求价格的功能,同时还能满足价格的 叠加在单片机芯片中计算而不用,输入一个记录一个值那么麻烦。同时本电子称系统也完成 了去皮功能,清除,复位功能,甚至还设置了超上限报警装置报警值上限为550g。参考文献.2013.37-381 胡向东,李锐,耿道渠等 M. 传感器与检测技术第 2 版.北京. 机械工业出版社2 郭天祥 .51

18、单片机 C语言教程 M. 北京. 电子工业出版社 .2009.86附录一、 HX711代码#include lcd1602.h #include#include hx711.h#includesbit ADDO = P24; sbit ADSK = P23;extern unsigned long ReadAD(void);unsigned long data; data=ReadAD();*/ulong ReadCount(void)ulong Count;uchar i;ADSK=0; /使能 AD(PD_SCK置 低 )Count=0;while(ADDO); /AD 转换未结束则等待

19、, 否则开始读取 for (i=0;i24;i+)ADSK=1;/PD_SCK置高 ( 发送脉冲 )Count=Count1; / 下降沿来时变量 Count 左移一位 , 右侧补零ADSK=0;/PD_SCK置低if(ADDO) Count+;ADSK=1;Count=Count0x800000; / 第 25 个脉冲下降沿来时 , 转换数据ADSK=0;return(Count);二、键盘代码 #include #include lcd1602.h#include key.huchar num,s = 5;uchar price = 0;uchar code table1 = 012345

20、6789; str2 = Price:;uchar code str3 = Total:;显示单项称量价格void display_cost(uchar price)/uchar w5,i = 5;w0 = price/10000;w1 = price%10000/1000;w2 = price%1000/100;w3 = price%100/10;w4 = price%10;while(i != 10)DisplayOneChar(i,1,wi-5); i+;键盘扫描子程序/void temer1() interrupt 3 void keyscan(void) uchar temp;P1

21、= 0XFE;temp = P1; temp = temp&0xf0; if(temp != 0xf0)delay(5);temp = P1; temp = temp&0xf0;while(temp != 0xf0)temp = P1; switch(temp)case 0xbe:num=1;s+;break;case 0xde:num=2;s+;break;case 0xee:num=3;s+;break; /case 0x7e:num=4;k=/;s+;break;while(temp!=0xf0)temp=P1; temp=temp&0xf0;price = price*10+num;D

22、isplayOneChar(s,1,table1num);P1 = 0XFd; temp = P1;temp = temp&0xf0; if(temp != 0xf0) delay(5);temp = P1;temp = temp&0xf0;while(temp != 0xf0) temp = P1;switch(temp)case 0xbd:num=4;s+;break;case 0xdd:num=5;s+;break;case 0xed:num=6;s+;break;/case 0x7d:num=8;k=*;s+;break;while(temp!=0xf0)temp=P1;temp=te

23、mp&0xf0;price = price*10+num;DisplayOneChar(s,1,table1num);P1 = 0XFb;temp = P1;temp = temp&0xf0; if(temp != 0xf0) delay(5);temp = P1;temp = temp&0xf0; while(temp != 0xf0) temp = P1; switch(temp)case 0xbb:num=7;s+;break;case 0xdb:num=8;s+;break;case 0xeb:num=9;s+;break;/case 0x7b:num=12;k=-;s+;break;

24、while(temp!=0xf0)temp=P1;temp=temp&0xf0;DisplayOneChar(s,1,table1num); P1 = 0XF7; temp = P1;temp = temp&0xf0; if(temp != 0xf0) delay(5);temp = P1;temp = temp&0xf0; while(temp != 0xf0) temp = P1; switch(temp) case 0xb7:num=-;s+;break; case 0xd7:num=0;s+;break; case 0xe7:num=;s+;break;/case 0x77:num=1

25、6;k=+;s+;break;while(temp!=0xf0)temp=P1; temp=temp&0xf0;if(num = 0)price = price*10+num;DisplayOneChar(s,1,table1num);else if(num = -)s = 5;price = 0;DisplayListChar(0, 1, 16,str2);elseDisplayListChar(0, 1, 16,str3); display_cost(price);三、 LCD1602 #include #include #include lcd1602.hsbit rs = P20;sb

26、it LCM_RW = P21;sbit lcden = P22;延时程序 K*1ms, 12000mhz*/void delay(uint k)uint i,j;for(i = 0; i k; i+) for(j = 0; j 100; j+);写指令到 LCM子函数void WriteCommandLCM(uchar com)P0=com;rs=0;lcden=0;delay(1);lcden=1;delay(1);lcden=0;写数据到 LCM子函数void WriteDataLCM(uchar date) P0=date;rs=1;lcden=0;delay(1);lcden=1;d

27、elay(1);lcden=0;*LCM初始化子函数void initLCM()WriteCommandLCM(0x38);delay(10);WriteCommandLCM(0x0f);delay(10);WriteCommandLCM(0x06);delay(10);WriteCommandLCM(0x01);delay(10);/* 显示指定坐标的一个字符子函数 */ void DisplayOneChar(uchar X, uchar Y, uchar DData) Y &= 0x01;X &= 0x0f; if(Y)X |= 0x40; /若 y 为 1(显示第二行),地址码加 0x

28、40X |= 0x80; / 指令码为地址码 +0x80 WriteCommandLCM(X); WriteDataLCM(DData);/* 显示指定坐标的一串字符子函数 */void DisplayListChar(uchar X, uchar Y, uchar length,uchar code *DData) uchar ListLength = 0;Y &= 0x01;X &= 0x0f; while(X length) DisplayOneChar(X,Y,DDataListLength); ListLength+;X+;四、主函数 #include #include #inclu

29、de #include #include lcd1602.h #include hx711.h sbit speaker = P27;sbit qupi = P37;sbit qingling = P36;int weight; uchar num,s = 5;ulong ad_data = 0;ulong cost = 0,total = 0;ulong price = 0;uchar flag_ok = 0; /okuchar pi = 0;uchar flag_dian = 0,dian = 1; /uchar flag_dian_all = 0;uchar dian_max = 1;

30、/uchar flag_jian = 0;uchar cha=0,flag_jia=0,flag_jian;键的按键次数小数点的位数 , 和小数点标志最大的点的位数uchar code str0 = Weight: g ; uchar code str1 = cost:;uchar code str2 = Price:;uchar code str3 = Total:;uchar code table1 = 0123456789;键盘扫描函数void alarm(void);void keyscan(void); / void display_cost(ulong price) / 显示单项称

31、量价格 uchar w5,i,j,wei;w0 = price/10000;w1 = price%10000/1000;w2 = price%1000/100;w3 = price%100/10;w4 = 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,.);elseDisplayOneChar(wei,1,tab

32、le1wi-5); i+;wei+;elsewei = 6; i = 6;/if(flag_dian_all=1)/j = 12;/else / j = 11;while(wei != 12) /if(flag_dian_all=1&wei = 11-dian if(wei = 11-dian_max)DisplayOneChar(wei,1,.);elseDisplayOneChar(wei,1,table1wi-6);i+;wei+;void ad_change(ulong price)uchar w5,i;uchar ge,bai,shi,qian;int aver = 0;double

33、 z = 0;w0 = price/10000000;w1 = price%10000000/1000000;w2 = price%1000000/100000;w3 = price%100000/10000;w4 = price%10000/1000;/ DisplayOneChar(0,1,table1w0);/ DisplayOneChar(1,1,table1w1);/ DisplayOneChar(2,1,table1w2);/ DisplayOneChar(3,1,table1w3);/ DisplayOneChar(4,1,table1w4);for(i = 0; i 8700)

34、weight = (1079.6-0.1177*z)*10.0;else if(z 8290)weight = (1087.5-0.1186*z)*10.0;else if(z 7850)weight = (1077-0.1174*z)*10.0;else if(z 7410)weight = (1068.3-0.1163*z)*10.0;else if(z 7000)weight = (1080.8-0.1179*z)*10.0; else if(z 6590)weight = (1086.1-0.1187*z)*10.0; else if(z 6170)weight = (1100.4-0

35、.1209*z)*10.0; else if(z 5730)weight = (1080.8-0.1177*z)*10.0; else if(z 5330)weight = (1114.9-0.1238*z)*10.0; elseweight = (1114-0.1236*z)*10.0; aver += weight;weight = aver/3;/ if(weight 0)/ /cha = -weight;/flag_jia = 1;/flag_jian = 0;/weight = 0;/ / else if(weight 5500) speaker = 0; /则启动报警elsespe

36、aker = 1;键盘扫描子程序/void temer1() interrupt 3 void keyscan(void)uchar temp;P1 = 0XFE;temp = P1;temp = temp&0xf0; if(temp != 0xf0) delay(5);temp = P1;temp = temp&0xf0; while(temp != 0xf0) temp = P1; switch(temp) case 0xbe:num=1;s+;break; case 0xde:num=2;s+;break; case 0xee:num=3;s+;break; /case 0x7e:num

37、=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,table1num); P1 = 0XFd; temp = P1;temp = temp&0xf0; if(temp != 0xf0) delay(5); temp = P1;temp = temp&0xf0; while(temp != 0xf0) temp = P1; switch(temp) case 0xb

38、d:num=4;s+;break; case 0xdd:num=5;s+;break;case 0xed:num=6;s+;break; /case 0x7d: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,table1num);P1 = 0XFb;temp = P1;temp = temp&0xf0;if(temp != 0xf0)delay(5);temp = P1;temp = temp&0xf0;while(temp != 0xf0)temp = P1;switch(temp)c

温馨提示

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

评论

0/150

提交评论