基于CSU8RP1185芯片的压力开机人体秤系统方案设计
- 格式:pdf
- 大小:299.51 KB
- 文档页数:4
智能称重系统设计(陕西理工学院物理与电信工程学院电子信息工程电子1204班,陕西汉中723000)指导教师:[摘要]介绍基于单片机STC89C52控制的一款智能电子秤,其中物体质量信息由重力传感器进行采集。
传感器将采集到的信息传送至单片机中,经过单片机处理,准确的在四位数码管显示屏上进行显示。
它具有置零,去皮功能。
物体的质量数值会和电子秤本身的称量范围数值进行比较,若超出了测量范围的最大值,系统就会执行报警程序。
本系统设计结构简单、精确度高、功能齐全、使用方便。
[关键词]单片机;重力传感器;智能电子秤Design of the Intelligence Electronic Scales ofMicrocontroller(Grade12,Class4,Major of Electronic Information Engineering,School of Physics and Electronic Information Engineering,Shaanxi University of Technology,Hanzhong 723000,Shaanxi)Tutor:[Abstract]Introduction based on single chip STC89C52 control of an intelligent electronic scales, wherein the object quality of the information collected by the gravity sensor. Sensor information collected will be sent to the microcontroller through the microcontroller processing, accurate display on four digital display. It has zero, tare function. Quality and value will be the object of electronic scales weighing range values themselves are compared, if the maximum value exceeds the measurement range, the alarm system will execute the program. The simple design structure, high precision, fully functional, easy to use.[Key words]Single chip ; Gravity sensor ; Intelligent electronic scales目录1绪论 (1)1.1称重技术和衡器的发展 (1)1.2电子秤的发展现状和发展趋势 (1)1.2.1发展现状 (1)1.2.2发展趋势 (2)1.3项目研究意义 (3)1.4功能描述 (3)2设计原理 (5)2.1系统的原理框图 (5)2.2系统模块简介 (5)3硬件设计 (7)3.1硬件方案 (7)3.2称重传感器 (7)3.3电子秤专用24位AD转换芯片HX711及其电路 (8)3.4单片机STC89C52及其电路 (10)3.5液晶屏电路 (11)3.6矩阵键盘电路 (14)3.7声光报警电路 (14)3.8电源电路 (15)4软件设计 (16)5仪器的误差及误差分配 (17)5.1仪器的误差来源 (17)5.1.1称量重力传感器的误差 (17)5.1.2电子设备的误差 (17)5.1.3机械承重系统的误差 (18)5.2仪器误差分配 (18)5.3仪器误差的计算方法 (18)6总结 (20)致谢 (21)参考文献 (22)附录A (23)附录B (28)附录C (32)附录D (33)1绪论质量是测量领域中的一个非常重要的参数,称重技术自古以来就被人们所重视。
基于CSU8RP1001的太阳能衡器应用设计CSU8RP1001 是芯海科技最新推出的集成了24 位高速、高精度ADC 的8 位RISC 架构太阳能衡器专用SoC(系统芯片)。
芯片结构如图1 所示,具有4k 乘以16 位的OTP(一些可编程)ROM 程序存储器,同时也可做用户数据保存使用。
此款芯片除具有4 乘以14 LCD 驱动、内置温度传感器、看门狗、定时器等常用配置外,还集成了一个针对微弱电流供电场合(如:太阳能电池、射频感应供电等)的智能电源管理模块,此模块是当储能电容上的电压达不到正常工作电压时,具有完全关闭芯片内部电路功能,防止内部电路在低电压下存在不稳定状态,引起漏电现象,确保从太阳能电池获取到的微弱电量都存储到电容上,当储能电容电压达到正常工作电压时,则会自动将储能电容上的电量送到每个电路模块。
另外整个太阳能衡器系统的外围元器件只需廉价的12 个普通电容。
低功耗高精度实现原理传统衡器系统中,传感器和芯片测量模块占据了90%以上的功耗,因此,采用高速脉冲供电,减少测量时间是降低衡器系统功耗的关键。
芯海的CSU8RP1001 芯片实现了高速高精度测量上的突破,当ADC 输出速率为7.8kHz,PGA(可编程增益放大器)=68,Vref=2.3V 时,有效位仍然达到15.5 位。
此核心ADC 单元高速高精度的特性,使得采用高速脉冲测量成为可能,大大降低了系统的平均功耗。
传统衡器的MCU 内核和LCD 驱动模块消耗的电流虽然很小,但对于太阳能衡器微安级的供电电源来说,也是非常之大。
CSU8RP1001 在LCD 驱动模块上采用创新的电荷交换方法获取LCD 偏置电压,使此模块消耗的电流低于。
基于单片机的电子秤系统设计摘要:在生活中我们经常需要用秤来测量物体的重量,由于秤在我们日常生活中的应用十分广泛,我们对其的设计要求就需要操作方便、易于识别。
本系统的设计主要从硬件电路设计、软件编程调试、实物焊接调试三部分进行详细阐述。
硬件电路主要是基于单片机AT89S52为核心的控制单元实现数据的处理,采用压力传感器对数据进行采集。
关键词:AT89S52单片机电子秤单片机一、电子称的工作原理当被称物体放置在秤体的秤台上时,其重量便通过秤体传递到称重传感器,传感器随之产生力——电效应,将物体的重量转换成与被称物体重量成一定函数关系(一般成正比关系)的电信号(电压或电流等)。
此信号由放大电路进行放大、经滤波后再由A/D器进行转换,数字信号再送到微处器的CPU处理,CPU不断扫描键盘和各种功能开关,根据键盘输入内容和各种功能开关的状态进行必要的判断、分析,由仪表的软件来控制各种运算。
运算结果送到内存贮器,需要显示时,CPU发出指令,从内存贮器中读出送到显示器显示,或送打印机打印。
一般的信号的放大、滤波、A/D转换以及信号各种运算处理都在仪表中完成。
二、系统方案论证与选型按照本设计功能的要求,系统主要由控制器部分、测量部分、数据显示部分和语音播报部分这四个部分组成。
测量部分是利用称重传感器检测压力信号,得到微弱的电信号(本设计为电压信号),而后经放大电路处理后,送A/D转换器,将模拟量转化为数字量输出。
控制器部分接受来自A/D转换器输出的数字信号,经过复杂的运算,将数字信号转换为物体的实际重量信号,并通过控制器实现数据的显示以及语音播报的功能。
三、系统单片机选型单片机的选择在整个系统设计中至关重要,要满足大内存、高速率、通用性、价格便宜等要求,本课题选择AT89S52作为主控芯片。
AT89S52是一个低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S52可为许多嵌入式控制应用系统提供高性价比的解决方案。
基于FPGA的电子秤设计与实现摘要随着科学技术水平的不断发展,市面上出现了很多有价值的电子产品,这些设备有些倾向于自然简单,而有些却追求超乎平常的复杂功能。
当这些电子设备在对社会起到深远影响的同时,电子秤作为一个越来越简单的电子设备,在我们生活的许多方面扮演着重要的角色。
不论是工业还是销售行业,不论是大量程还是微小的计量称重,电子秤的出现使得数据得出更精确。
本设计的核心技术是基于FPGA(现场可编程门阵列)的。
共包含三大模块,分别为数据采集模块、控制器模块和人机交互模块。
数据采集模块用到称重传感器,直接与信号的前级处理和A/D转换部分共同构成。
人机交互模块包含简易键盘和点阵式液晶显示器。
最为主要的是本设计采用FPGA作为控制核心,软件部分使用Verilog(Verilog Hardware Description Language)语言,这样的设计使得编程灵活,调试更加方便,而且精度较高,稳定性较好,可以实现全部的控制功能。
最终本项目成功完成,论文由绪论、关键技术介绍、系统分析、系统设计、系统实现、和系统测试以及最终结论组成。
关键词:FPGA,电子秤,VerilogDesign and Implementation of Electronic ScaleBased on FPGAAbstractWith the continuous development of science and technology, a lot of valuable electronic products have appeared on the market. These devices tend to be naturally simple. But some complex beyond the usual functions. When these electronic devices have a profound effect on society, at the same time, more and simpler electronic scales electronic devices play an important role in many aspects of our lives, whether industrial or sales small or large range of measuring and weighing, the emergence of electronic scales makes the data more accurate. The design of the core technology is based on FPGA (field programmable gate array), including three modules, namely, data acquisition modules. Controller module and interactive modules.Weighing sensor is used in data acquisition module. Which is connected with the pre-processing and A/D conversion section of the signal.HCI module contains a simple keyboard and dot-matrix liquid crystal displays. The most important is the design using FPGA as the core, the use of the software part of Verilog (verilog Hardware Description Language) language. This design allows flexible programming, more convenient debugging, and high accuracy, good stability. The design can also achieve fully-controlled function. The ultimate success of the project is completed. The paper is made up of the introduction, key technologies, system analysis, system design, system implementation, and system testing as well as the composition of the final conclusions.Key words: FPGA, Electronic Weighing Scale, Verilog目录摘要 (I)ABSTRACT (II)第1章绪论 (1)1.1论文研究主要内容 (1)1.1.1项目市场调查 (1)1.1.2项目涉及的技术 (1)1.2国内外现状 (1)第2章关键技术介绍 (3)2.1EDA技术简介 (3)2.2关键性开发技术的介绍 (4)2.2.1 控制器 (4)2.2.2 称重传感器 (5)2.2.3 前级放大器 (5)2.2.4 A/D转换器 (6)2.2.5 显示输出电路 (6)2.3使用Q UARTUS II实现仿真 (6)第3章系统分析 (8)3.1构架概述 (8)3.1.1 功能构架 (8)3.1.2 模块需求描述 (8)3.2系统开发环境 (9)3.3系统任务的可行性分析 (9)3.3.1 控制器可行性 (9)3.3.2 前级放大电路可行性 (9)3.3.3 A/D转换电路可行性 (10)3.3.4 显示电路可行性 (10)第4章系统设计 (12)4.1构架概述 (12)4.2系统的功能结构设计 (12)4.2.1数据采集模块 (12)4.2.2人机交互 (15)4.3控制模块 (16)第5章系统实现 (18)5.1系统控制流程 (18)5.2系统模块间结构 (18)5.3主模块部分代码 (19)5.4仿真结果 (19)第6章系统测试 (22)6.1测试方法 (22)6.2测试结果 (22)第7章结论 (24)参考文献 (25)致谢..................................................................................................... 错误!未定义书签。
基于单片机多功能电子计价秤系统设计主程序TEST.c:#include <stm32f10x_lib.";u8 table8[]="THANK YOU!";u8 Hshi=4,Hge=0,Lshi=1,Lge=0,pshi,pge,pxiao; 温度的上下限设置的参数和价格的上下限设置的参数;u8 clear_up; 清屏的标志位int main(){u8 i,weight[5],t,total1[6];u32 weightval,Lheight;float Tempheight,total;short temp;Stm32_Clock_Init(9); stm32时钟的初始化delay_init(72); 延时程序的初始化uart_init(72,9600); 串口的初始化io_init(); 对液晶所接的IO口的初始化lcd_init(); 液晶的初始化Adc_Init(); AD模块的初始化Init_Display(); 电子秤开始界面的初始化DS18B20_Init(); ds18b20温度传感器的初始化KEY_Init(); 功能键、加键和减键三个独立按键的初始化LED_Init(); LED灯的初始化PWM_Init(18000,0);while(1){t=KEY_Scan();temp=DS18B20_Get_Temp();if(temp>(Hshi*10+Hge)*10){LED1=1;delay_ms(300);LED1=0;}else if(temp<(Lshi*10+Lge)*10){LED0=1;delay_ms(300);LED0=0;}else{1LED0=0;LED1=0;}switch(t){*为回到主界面进行清屏*case 0:write_com(0x01);break;*显示设置单价的值和温度的上、下限*case 1:pshi=0; 初始化单价的十、个和小数pge=0;pxiao=0;if(clear_up==0){write_com(0x01); 清屏clear_up=1; 已经清屏的标志位}write_com(0x80); 显示PRICES字样for(i=0;i<6;i++){write_date(table2[i]);delay_ms(5);}write_com(0x80+10); 显示HT字样for(i=0;i<2;i++){write_date(table5[i]);}write_com(0x80+13); 显示LT字样for(i=0;i<2;i++){write_date(table6[i]);}*显示购买物品的单价*write_com(0x80+0x40);write_date(0x5c); 显示钱的标志for(i=0;i<4;i++){if(i==2)write_date(0x2E);elsewrite_date(0x30);}*显示温度值的上下限的设定值*write_com(0x80+0x40+10);write_date(0x30+Hshi);write_date(0x30+Hge);write_com(0x80+0x40+13);write_date(0x30+Lshi);write_date(0x30+Lge);break;*单价的十位进行加1*case 2:write_com(0x80+0x40+1);pshi++;if(pshi==10)pshi=0;write_date(0x30+pshi);break;*单价的十位进行减1*case 3:write_com(0x80+0x40+1);pshi--;if(pshi>10)pshi=9;write_date(0x30+pshi);break;*单价的个位进行加1*case 4:write_com(0x80+0x40+2);pge++;if(pge==10)pge=0;write_date(0x30+pge);break;*单价的个位进行减1*case 5:write_com(0x80+0x40+2);pge--;if(pge>10)pge=9;write_date(0x30+pge);break;*单价的小数位进行加1*case 6:write_com(0x80+0x40+4);if(pxiao==10)pxiao=0;write_date(0x30+pxiao);break;*单价的小数位进行减1*case 7:write_com(0x80+0x40+4);pxiao--;if(pxiao>10)pxiao=9;write_date(0x30+pxiao);break;*温度上限的十位进行加1*case 8:write_com(0x80+0x40+10);Hshi++;if(Hshi==10)Hshi=0;write_date(0x30+Hshi);break;*温度上限的十位进行减1*case 9:write_com(0x80+0x40+10);Hshi--;if(Hshi>10)Hshi=9;write_date(0x30+Hshi);break;*温度上限的个位进行加1*case 10:write_com(0x80+0x40+11);Hge++;if(Hge==10)Hge=0;write_date(0x30+Hge);break;*温度上限的个位进行减1*case 11:write_com(0x80+0x40+11);Hge--;if(Hge>10)Hge=9;write_date(0x30+Hge);*温度下限的十位进行加1*case 12:write_com(0x80+0x40+13);Lshi++;if(Lshi==10)Lshi=0;write_date(0x30+Lshi);break;*温度下限的十位进行减1*case 13:write_com(0x80+0x40+13);Lshi--;if(Lshi>10)Lshi=9;write_date(0x30+Lshi);break;*温度下限的个位进行加1*case 14:write_com(0x80+0x40+14);Lge++;if(Lge==10)Lge=0;write_date(0x30+Lge);break;*温度下限的个位进行减1*case 15:write_com(0x80+0x40+14);Lge--;if(Lge>10)Lge=9;write_date(0x30+Lge);break;*在这个界面上显示温度值和称重的值*case 16:weightval=ReadCount(); 读出AD转化之后的值*减去电子秤台的重量*if(weightval<183)Lheight=0;elseLheight = weightval-183;Tempheight=(float)(Lheight0.44); 对读出的AD的值转化为单位为g的值Lheight=(u16)(Tempheight);*取出每一位的值并存入到一个数组当中* weight[4]=Lheight%10;weight[3]=(Lheight%100)10;weight[2]=(Lheight%1000)100;weight[1]=(Lheight%10000)1000;weight[0]=(Lheight%100000)10000;*在1602上显示WEIGHT字符*write_com(0x81);for(i=0;i<6;i++){write_date(table1[i]);delay_ms(5);}*在1602上显示所测出的质量的大小值*write_com(0x80+0x40); 显示前两位for(i=0;i<2;i++){write_date(weight[i]+0x30);delay_ms(5);}write_date(0x2e); 显示小数点for(i=2;i<5;i++) 显示后三位{write_date(weight[i]+0x30);delay_ms(5);}write_date(0x6B); 显示kwrite_date(0x67); 显示gwrite_com(0x80+11); 显示字符TEMPfor(i=0;i<4;i++){write_date(table4[i]);delay_ms(5);}temp=DS18B20_Get_Temp();if(temp<0) 单温度值为负数的时候{temp=-temp;write_com(0x80+0x40+9);write_date(0xb0);}*在1602上显示温度值*write_com(0x80+0x40+10);write_date(0x30+temp100);write_date(0x30+temp%10010);write_date(0x2E);write_date(0x30+temp%100%10);write_date(0xDF);write_date(0x43);break;case 17:break;*在设置的单价上的十位光标闪烁*case 18:write_com(0x80+0x40+1);write_com(0x0f);break;*在设置的单价上的个位光标闪烁*case 19:write_com(0x80+0x40+2);write_com(0x0f);break;*在设置的单价上的小数个位光标闪烁* case 20:write_com(0x80+0x40+4);write_com(0x0f);break;*在设置的上限温度的十位光标闪烁* case 21:write_com(0x80+0x40+10);write_com(0x0f);break;*在设置的上限温度的个位光标闪烁* case 22:write_com(0x80+0x40+11);write_com(0x0f);break;*在设置的下限温度的十位光标闪烁* case 23:write_com(0x80+0x40+13);write_com(0x0f);break;*在设置的下限温度的个位光标闪烁* case 24:write_com(0x80+0x40+14);write_com(0x0f);break;*显示计算的总价格*if(clear_up==1) 清屏显示{write_com(0x01);clear_up=0;}write_com(0x0c);write_com(0x80+3); 显示THANK YOU字样for(i=0;i<10;i++){write_date(table8[i]);}write_com(0x80+0x40); 显示TOTAL字样for(i=0;i<5;i++){write_date(table3[i]);}write_date(0x3a);write_date(0x5c);total=Lheight*(pshi*10+pge+0.1*pxiao)*0.001*2; Lheight=(u32)(total*100);total1[5]=Lheight%10;total1[4]=(Lheight%100)10;total1[3]=(Lheight%1000)100;total1[2]=(Lheight%10000)1000;total1[1]=(Lheight%100000)10000;total1[0]=(Lheight%1000000)100000;write_com(0x80+0x40+7); 显示最后计算的总价的值for(i=0;i<6;i++){if(i>3){if(i==4){write_date(0x2e);write_date(0x30+total1[i]);}else{write_date(0x30+total1[i]);}}elsewrite_date(0x30+total1[i]);break;}}}key.c程序:#include <stm32f10x_lib.(void){static u8 count=0,key_up=1;if(key_up&&(KEY0==0||KEY1==0||KEY2==0)){delay_ms(10);key_up=0;if(KEY0==0) 当按下功能键时{count++;if(count==1)return 1;if(count==2)return 18;if(count==3)return 19;if(count==4)return 20;if(count==5)return 21;if(count==6)return 22;if(count==7)return 23;if(count==8)return 24;if(count==9)return 25;if(count==10){count=0;return 0;}}else if(KEY1==0) 当按下加键{if(count==2)return 2;if(count==3)return 4;if(count==4)return 6;if(count==5)return 8;if(count==6)return 10;if(count==7)return 12;if(count==8)return 14;}else if(KEY2==0) 当按下减键{if(count==2)return 3;if(count==3)return 5;if(count==4)return 7;if(count==5)return 9;if(count==6)return 11;if(count==7)return 13;if(count==8)return 15;}}else if(KEY0==1&&KEY1==1&&KEY2==1){key_up=1;}if(count==0)return 16; 电子秤刚开始无按键按下elsereturn 17; 电子秤之后一直无按键按下}Key.(15) PA15 功能键#define KEY1 PBin(0) PB0 +键#define KEY2 PBin(1) PB1 -键#define KEY3 PAin(12) PB3void KEY_Init(void);IO初始化u8 KEY_Scan(void); 按键扫描函数#endifLed.c程序:#include <stm32f10x_lib.=1;delay_ms(5);lcden=0;}****对液晶写数据的函数****void write_date(u16 date){GPIOA->ODR|=0X03FC;rs=1;GPIOA->ODR&=(date<<2)|0xFC03;delay_ms(5);lcden=1;delay_ms(5);lcden=0;}****对1602液晶的初始化****void lcd_init(void){lcden=0;write_com(0x38);write_com(0x0c);write_com(0x07);write_com(0x01);}****对液晶所接的IO口进行初始化****void io_init(void){RCC->APB2ENR|=1<<2; 使能PORTA时钟GPIOA->CRL&=0X00000000;GPIOA->CRH&=0XFFFFFF00;GPIOA->CRL|=0X33333333;PA.0~PA.9 推挽输出GPIOA->CRH|=0X00000033;GPIOA->ODR|=0X000003FF; PA.0~PA.9 输出高}Led. PAout(1)void write_date(u16 date);void write_com(u16 com);void lcd_init(void);void io_init(void);#endifAdc.c程序:#include"adc.(ADval);}****对所得到的采样的值进行10次求平均值****u32 Sampling(void){u16 Sam[12],tmpmax,tmpmin,sum=0,Average;u8 i;for(i=0;i<12;i++){Sam[i]=ReadCount();if(i==0){tmpmax=Sam[0];tmpmin=Sam[0];}if(i>0){if(Sam[i]>tmpmax)tmpmax=Sam[i];if(Sam[i]<tmpmin)tmpmin=Sam[i];}}for(i=0;i<12;i++){if(!(Sam[i]==tmpmax||Sam[i]==tmpmin)){sum=sum+Sam[i];}}Average=sum10;return(Average);}****AD模块的初始化****void Adc_Init(void){RCC->APB2ENR|=1<<2; 使能PORTA时钟RCC->APB2ENR|=1<<3; 使能PORTB时钟GPIOA->CRH&=0XFFFFF0FF;PA10设置成输入GPIOA->CRH|=0X00000800;GPIOB->CRL&=0XFF0FFFFF;PB5设置成输出GPIOB->CRL|=0X00700000;GPIOB->ODR|=1<<5; PB5上拉}adc.(10)#define ADSK PBout(5)u16 ReadCount(void);u32 Sampling(void);void Adc_Init(void);#endifDisplay.c程序:#include"display. 1;else retry=0;while (!DS18B20_DQ_IN&&retry<240){retry++;delay_us(1);};if(retry>=240)return 1;return 0;}从DS18B20读取一个位返回值:10u8 DS18B20_Read_Bit(void) read one bit {u8 data;DS18B20_IO_OUT();SET PA0 OUTPUTDS18B20_DQ_OUT=0;delay_us(2);DS18B20_DQ_OUT=1;DS18B20_IO_IN();SET PA0 INPUTdelay_us(12);if(DS18B20_DQ_IN)data=1;else data=0;delay_us(50);return data;}从DS18B20读取一个字节返回值:读到的数据u8 DS18B20_Read_Byte(void) read one byte{u8 i,j,dat;dat=0;for (i=1;i<=8;i++){j=DS18B20_Read_Bit();dat=(j<<7)|(dat>>1);}return dat;}写一个字节到DS18B20dat:要写入的字节void DS18B20_Write_Byte(u8 dat){u8 j;u8 testb;DS18B20_IO_OUT();SET PA0 OUTPUT;for (j=1;j<=8;j++){testb=dat&0x01;dat=dat>>1;if (testb){DS18B20_DQ_OUT=0; Write 1delay_us(2); DS18B20_DQ_OUT=1;delay_us(60);}else{DS18B20_DQ_OUT=0; Write 0delay_us(60);DS18B20_DQ_OUT=1;delay_us(2); }}}开始温度转换void DS18B20_Start(void) ds1820 start convert{DS18B20_Rst();DS18B20_Check();DS18B20_Write_Byte(0xcc); skip romDS18B20_Write_Byte(0x44); convert}初始化DS18B20的IO口 DQ 同时检测DS的存在返回1:不存在返回0:存在u8 DS18B20_Init(void){RCC->APB2ENR|=1<<4;GPIOC->CRL&=0XFFFFFFF0;GPIOC->CRL|=0X00000003;GPIOC->ODR|=1<<0;DS18B20_Rst();return DS18B20_Check();}从ds18b20得到温度值精度:0.1C返回值:温度值(-550~1250)short DS18B20_Get_Temp(void){u8 temp;u8 TL,TH;short tem;DS18B20_Start (); ds1820 start convert DS18B20_Rst();DS18B20_Check();DS18B20_Write_Byte(0xcc); skip romDS18B20_Write_Byte(0xbe); convertTL=DS18B20_Read_Byte(); LSBTH=DS18B20_Read_Byte(); MSBif(TH>7){TH=~TH;TL=~TL;temp=0;温度为负}elsetemp=1;温度为正tem=TH; 获得高八位tem<<=8;tem+=TL;获得底八位tem=(float)tem*0.625;转换if(temp)return tem; 返回温度值elsereturn -tem;}ds18b20.(0) 数据端口PC0u8 DS18B20_Init(void);初始化DS18B20short DS18B20_Get_Temp(void);获取温度void DS18B20_Start(void);开始温度转换void DS18B20_Write_Byte(u8 dat);写入一个字节u8 DS18B20_Read_Byte(void);读出一个字节u8 DS18B20_Read_Bit(void);读出一个位u8 DS18B20_Check(void);检测是否存在DS18B20 void DS18B20_Rst(void);复位DS18B20#endif6 实现结果图图16 电子秤系统设计整体实物图图17 1602液晶上显示测量重物的大小和温度值的大小图18 进入设置单价和温度值上线限的界面图19 显示最后的价格毕业设计(论文)原创性声明和使用授权说明原创性声明本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。
系统方案的设计1.1 电子秤的设计要求1.1.1 基本要求1、重量显示:单位为千克;电子秤称重范围:0~9.999Kg;重量误差不大于 0.005Kg;2、能用简易键盘设置单价,加重后能同时显示重量、单价和金额;3、液晶显示:所称物体重量、10种商品的购物清单等。
1.1.2 特色与创新1、使用单片机为控制核心,大大简化了系统的组成构造,且单片机可拓展性强,可以很方便的对系统进行拓展和应用。
2、使用键盘输入数据,操作简单,方便。
3、中文液晶显示所称量的物品重量,同时还可显示物品的名称,数量,单价,金额和所有物品的总金额。
4、具有去皮功能和金额累加计算功能。
5、当物品重量超过电子秤量程,即过载情况或者是物品重量小于A/D转换器所能转换的最小精度,即欠量程的时候,具有超重报警功能。
1.2 实验原理及设计基本思路1.2.1 系统工作原理电子秤的工作原理。
首先是通过压力传感器采集到被测物体的重量并将其转换成电压信号。
输出电压信号通常很小,需要通过前端信号处理电路进行准确的线性放大。
放大后的模拟电压信号经A/D转换电路转换成数字量被送入到主控电路的单片机中,再经过单片机控制译码显示器,从而显示出被测物体的重量。
在实际应用中,为提高数据采集的精度并尽量减少外界电气干扰,还需要在传感器与A/D芯片之间加上信号调整电路。
1.1.2 系统设计基本思路按照设计的基本要求,系统可分为三大模块,数据采集模块、控制器模块、人机交互界面模块。
其中数据采集模块由压力传感器、信号的前级处理和A/D转换部分组成。
转换后的数字信号送给控制器处理,由控制器完成对该数字量的处理,驱动显示模块完成人机间的信息交换。
此部分对软件的设计要求比较高,系统的大部分功能都需要软件来控制。
在扩展功能上,本设计增加了一个过载、欠量程报警提示。
1.3 系统总体设计方案与论证前端信号处理时,选用放大、A/D转换等措施,尤其在显示方面采用具有字符图文显示功能的LCD显示器。
传感器及测试技术课程设计课题名称:基于压力传感器的电子秤设计小组成员:姓名:学号:班级:指导教师:说明:为满足实用电子称的设计要求,进行了各单元电路方案的比较论证及确定统以AT89S52控制核心,选用了压力传感器,该传感器灵敏度高、线性度和复性好;对于关键的ADC,经过充分比较、论证,最终选用了高分辨率信号调理ADC--AD7714,该芯片内集成了缓冲器、时钟发生器、可编程增益放大器、数字滤波器、∑-Δ调制器以及电荷平衡式A/D转换器等电路,由于AD7714采用了∑-Δ技术实现A/D转换,具有线性度好、功耗低、增益可编程,无须前端信号调理等优点;系统选用DS12C887作为日历时钟芯片,并存储标定系数,8279作为键盘管理芯片,采用内藏显示控制器T6963C的点阵图形式显示器MGLS-240128T,接口简单,编程容易,美观大方。
最后的实验表明,系统完全达到了设计要求,不但完成了基本要求,发挥部分的要求,还增加了标定、时钟和过载提示三个创新功能。
1 设计方案包括基本要求,发挥部分及其它创新部分1.1 基本要求(1)能用简易键盘设置单价,加重后能同时显示重量、金额和单价;(2)重量显示:单位为公斤;最大称重为9.999公斤,重量误差不大于±0.005公斤;(3)单价金额及总价金额显示:单价金额和总价金额的单位为元,最大金额数值为9999.99元,总价金额误差不大于0.01元;(4)具有去皮功能和总额累加计算功能。
1.2 发挥部分能显示购物清单,自拟10种商品名称或代号,清单内容包括:商品名称,数量,单价,金额,本次购物总金额。
(1)清单内容的商品名称等可使用代号显示;(2)清单内容增加购货日期和收银员编号;(3)清单内容在(2)的基础上增加售货单位名称,且全部内容采用中文显示。
1.3 创新部分在完成基本要求和题目所提出的发挥部分要求的情况下,考虑到电子称实际应用的需要,又增加了标定和时钟功能,另外由于实际当中,称可以有一定量的过载,但不能超出要求的范围,为此我们还设计了过载提示功能。
基于单片机电子秤系统方案论证与选型按照本设计功能的要求,系统由6个部分组成:控制器部分、测量部分、报警部分、数据显示部分、键盘部分、和电路电源部分,系统设计总体方案框图如图2.1所示。
图2-1设计思路框图测量部分是利用称重传感器检测压力信号,得到微弱的电信号(本设计为电压信号),而后经处理电路(如滤波电路,差动放大电路,)处理后,送A/D转换器,将模拟量转化为数字量输出。
控制器部分接受来自A/D转换器输出的数字信号,经过复杂的运算,将数字信号转换为物体的实际重量信号,并将其存储到存储单元中。
控制器还可以通过对扩展I/O的控制,对键盘进行扫描,而后通过键盘散转程序,对整个系统进行控制。
数据显示部分根据需要实现显示功能。
2.1 控制器部分本设计由于要求必须使用单片机作为系统的主控制器,而且以单片机为主控制器的设计,可以容易地将计算机技术和测量控制技术结合在一起,组成新型的只需要改变软件程序就可以更新换代的“智能化测量控制系统”。
这种新型的智能仪表在测量过程自动化、测量结果的数据处理以及功能的多样化方面,都取得了巨大的进展。
再则由于系统没有其它高标准的要求,又考虑到本设计中程序部分比较大,根据总体方案设计的分析,设计这样一个简单的的系统,可以选用带EPROM的单片机,由于应用程序不大,应用程序直接存储在片内,不用在外部扩展存储器,这样电路也可简化。
INTEL公司的8051和8751都可使用,在这里选用ATMENL生产的AT89SXX系列单片机。
AT89SXX系列与MCS-51相比有两大优势:第一,片内存储器采用闪速存储器,使程序写入更加方便;第二,提供了更小尺寸的芯片,使整个硬件电路体积更小。
此外价格低廉、性能比较稳定的MCPU,具有8K×8ROM、256×8RAM、2个16位定时计数器、4个8位I/O 接口。
这些配置能够很好地实现本仪器的测量和控制要求最后我们最终选择了AT89S52这个比较常用的单片机来实现系统的功能要求。