版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
其主程序如下所示。voidmain(){ beep=0; delay_1ms(100); P0=P1=P2=P3=0xff; init_1602(); get_pizhong(); while(1) { key(); //独立按键 if(key_can<20) key_with(); flag_300ms++; if(flag_300ms>=300) { flag_300ms=0; get_weight(); if(weight>=0) write_1602_yl(1,5,weight); z_price=weight*price/1000; write_lcd4_price(2,11,z_price); if(weight>=5000) beep=~beep; else beep=1; yuying();//语音函数 } delay_1ms(1); }}该片段程序是用main()函数为主体的主程序部分,该主程序的主要作用是进行初始化操作显示。初始化操作流程有先将蜂鸣器置零,然后通过delay_1ms函数延时,等待系统稳定后,让单片机的I/O口初始化为高电平,即0xff。接着调用init_1602函数对LCD1602进行初始化,再调用get_pizhong()函数,从传感器读取并储存皮重和秤盘的质量。最后进入主循环去实现其他各模块的功能。4.2系统显示部分设计在电子秤设计中,系统显示子程序的作用至关重要。它负责判断何时以及如何展示信息,设计流程图如图11所示。图11系统显示部分流程图界面初始化程序如下所示。voidinit_1602() { write_com(0x38); write_com(0x0c); write_com(0x06); write_string(1,0,"W:0.000kg"); write_string(2,0,"P:00.00Z:00.00"); write_zifu(2,7,0x5c); }语音播报部分程序如下所示。voidyuying(){ longz_p; if(weight!=0) if(weight==z_p) { bojia(); } z_p=weight;}该部分程序为初始化界面以及语音播报的部分程序。首先在init_1602()函数中发送指令,然后调用write_string和write_zifu函数来初始化LCD1602,让LCD1602显示重量信息。同时调用yuying()函数,触发语音功能,当被测物体重量稳定时进行语音播报重量。4.3系统按键调整部分设计键盘电路采用4×4矩阵式设计,程序运行时,首先设定键码,接着根据键码将相应键值传输至对应存储单元,随后执行功能选择或数据处理操作。设计流程图如图12所示。图12按键调整程序流程图按键部分程序如下所示。voidkey_with(){ if(key_can<=9)//数字键 { if(flag_p>=4) { flag_p=0; } if(flag_p==0) price=key_can; else { price=price*10+key_can; } write_lcd4_price(2,2,price); flag_p++; } if(key_can==15) { if(price!=0) { flag_p--; price/=10; write_lcd4_price(2,2,price); } } if(key_can==14) { get_pizhong(); } if(key_can==13) { flag_p=0; price=0; write_lcd4_price(2,2,price); }}该按键控制部分程序主要根据按键值key_can函数去执行相应的操作。其中0到9代表数字键,当按下数字键时便在单价栏进行单价输入。13代表价格清零键,如果按下该按键,会将price置为0,即单价清零。14代表去皮键,如果按下此按键,将会调用get_pizhong()函数获得皮重,即当前重量显示为0。15代表删除键,按下表示删除上一个输入的数字,会更新显示LCD1602上的单价。5系统制作及实物测试与结果5.1电路的绘制与PCB板的制作在成功完成系统电路的原理图设计及程序编写后,下一步的工作就是进行实物的制作。由于电路中元件数目众多,所以必须通过手工或机械方式对其进行排列和固定。制作实物的第一步是进行电路的排版和布线工作。为了提高工作效率和工作质量,通常采用自动布线方法来实现对电路板上元器件的有效布置。虽然AltiumDesigner软件拥有自动布局布线的功能,并且操作简单高效,但是自动布线还是存在一些问题,如信号线与电源线因距离的不合理会形成信号的交叉干扰,还有一些自动生成的走线是直角影响数据的传输等等。因此我还是选择了自己手动布线,在手动布线的过程中,我翻阅书籍,为了让布线更加合理。我始终遵循以下几点:(1)有意地将模拟信号和数字信号进行区分,以防止两者之间产生不必要的干扰。(2)每一条线路,如果可以缩短就缩短,这样可以减少线路的长电阻碍所带来的效应。(3)在绘制地线和电源线时,应尽量选择电路板的边缘,并确保电源线的描绘略粗。(4)在走线方向发生变化时,优先选择45°角转弯,避免直角转折。在完成PCB板的绘制之后,用平整的油纸对PCB图进行打印,打印完成后,将油纸上的走线图完整的覆在已经清洗干净的铜板上,将用油纸包好的铜板放入加热的转印机中,转印两次,确保将墨完全印在铜板上。然后将覆上墨的铜板放入配制好比例腐蚀溶液中把多余的铜腐蚀掉。为了加快腐蚀,我不断地搅拌和摇动腐蚀液使其充分反应。最后将腐蚀好的板子,洗净、烘干后进行打孔。在打孔时我时刻注意着焊盘的大小,换用不同的粗细的针进行打孔,以确保焊盘上的铜箔不掉,方便后续的焊接。最后制成的电路板如下图13所示。图13电路板实物图5.2实物焊接及测试电路板实物制做完以后,就可以先将元件安装在制作好的电路板上的相应位置,然后便是将这些元件焊接在电路板上。由于焊接时老是不容易沾锡,我就在焊接这块电路时,自己先在之前多打印的铜板上练习焊接,在掌握了焊锡的要领和精髓之后,就迅速成热打铁对该电路进行了焊接。在焊接完该电路之后,我便对PCB板进行了检查,检查电路是否有漏焊或其他问题。然后对电路进行测试,确保该电路没有短路。最终焊接的效果如下图14所示。图14焊接效果图5.3实物调试及结果分析在完成实物焊接以及电路测试正常以后,在keil中将编写好的程序生成.hex文件,用已经下载好的普中下载软件将程序烧录下载到单片机储存器中。然后用USB转接口对该电路提供稳定的5V电源。按下复位按钮,LCD屏幕显示初始化状态如下图15所示。(其中第一行W表示被测物体重量,第二行的P表示单价,Z表示被测物体的总价)图15LCD初始化显示经过初始化显示之后,接下来就是用标准化砝码依次将50g、100g、150g、200g放在该电子秤上进行称重,通过LCD进行重量显示,并且进行语音播报。显示的结果如下图16所示。图16称重测量结果显示该电子秤显示的重量依次为49g、99g、149g、199g,通过电子秤重量显示数据说明该电子秤还是存在一定的误差。并且显示重量数据一直在准确值与误差值之间跳动闪烁。针对上述的偏差,经过多次的测量和调试,最终成功地识别了这些误差的根源。引起这一结果的两个原因如下:首先,测试过程中应变片称重传感器与HX711转换模块的连接线部分出现了曲折或折叠;另一个原因是电源电压可能不稳定,导致其波动,进而使LCD1602的显示数字出现跳跃。基于上述的两个原因,采取了相应措施。在处理应变片称重传感器与HX711转换模块间的连线弯曲折叠问题上,仔细检查了连接线以确保其完好无损或接触状态良好,以防止再次出现弯曲和折叠情况。为了进一步提高测量精确度,确保电子秤处于一个相对稳定的位置,并避免因震动等外部因素引发的测量偏差。通过上述改良方法,电子秤在重量显示误差方面得到改进。为了更加深入地证实改进的实效性,最后进行了多次的测量测试,测试结果表明数据稳定。最后正确的测量结果显示如下图17所示。图17正确测量结果6总结本次基于单片机的电子秤设计,初步完成了预期效果,能够进行对小型物品的称重显示并且进行语音播报重量和总价。在实物测试过程中,本设计的电子秤称重精度可达1克。并且能够防止超重损坏传感器而进行设置了蜂鸣器报警。在此次设计中,在硬件选择方面,选择了STC89C52单片机、LCD1602液晶显示屏以及HX711等器件,在价格方面比较经济并且便于携带。将硬件选择好后,AD画图软件上进行合理地设计电路连接,完成电路原理图的设计。然后用该软件画出PCB板,接着打板,焊锡,连接好实物。采用Keil4软件编写程序,并将编写好的程序通过烧录软件烧录至单片机内部。在调试过程中,刚开始调试的时候电子秤并没有反应,检查发现串口连接问题导致程序并没有烧录到单片机中,经过修正以后,再次对电子秤进行称重显示测试,在测试的过程中由于摆放不平整以及称重传感器与转换芯片之间的连接线的弯曲折叠导致称重结果存在误差,经过多次调整和优化,最终成功实现了预期的称重显示和语音播报功能。尽管这次的设计成功地实现了其基本功能,但仍有许多地方需要注意,如称重精度还可进一步提高,按键设置功能需要进一步加强,以及因电源电压波动引起的显示不稳定性等问题。在接下来的学术研究与实际应用期间,我打算进一步优化电子秤的设计框架,以提升其功能效率和稳定性,确保其在各种应用场景中都能有效发挥作用。经过这次毕业设计,我对电子秤的设计与调整有了更进一步的了解,在这个过程中学习巩固了专业知识,并积累了相关经验。在我未来的学业和职业生涯中,我将继续努力,以不断提升我的专业能力。参考文献张建平,刘焦萍,李壮,等.基于51单片机的简易体重测量仪控制电路设计[J].中国西部科技,2015,14(06):20-23.高平.电子衡器的应用及趋势[J].中国检验检测,2021,29(03):46-47+84.向洮,张建雷.单片机电气传动及控制系统的设计研究[J].科技风,2018,(19):93.车轮.浅析电子计价秤的正确使用方法及故障排除[J].衡器,2019,48(05):28-30.孙黎明.基于89C52单片机的电子秤设计与实现[J].福建电脑,2017,33(08):99-100+129.左兰,肖洁.基于单片机的智能电子秤的设计与实现[J].农业装备技术,2023,49(03):42-46.赵云,李振,李海枫,等.基于51单片机电子秤重量报警系统[J].软件,2020,41(04):88-92.张蕾,李博,高阳.压阻式柔性应变传感器研究进展[J].材料导报,2022,36(19):48-58.张洗玉,陈郓城,王晗亚,等.基于嵌入式的高精度简易电子秤的研制[J].中国仪器仪表,2019,(01):56-61.郝景程,何志刚,邱彬.基于51单片机信号发生器的设计[J].电脑知识与技术,2014,10(35):8553-8554.KuangHX,YaoYZ,YaoYZ,etal.HighPrecisionElectronicScaleDesignBasedonMCU[J].AppliedMechanicsandMaterials,2013,2748(427-429):616-619.XiaoyuZ,NingL,GuoruiW,etal.Researchstatusofpolysiloxane-basedpiezoresistiveflexiblehumanelectronicsensors.[J].RSCadvances,2023,13(24):16693-16711.系统部分代码:#include<reg52.h> #defineucharunsignedchar#defineuintunsignedint #defineulongunsignedlongsbitrs=P1^0; sbitrw=P1^1; sbite=P1^2; sbithx711_dout=P2^1; sbithx711_sck=P2^0; sbitbeep=P2^7;longweight; unsignedlongWeight_Maopi; #defineGapValue437.0ucharflag_300ms; ulongprice,z_price;ucharflag_p;/***********************语音模块控制IO口的定义************************/sbitVRST=P1^3;sbitVBUSY=P1^4; sbitVDATA=P1^5; sbitVCS=P1^6;sbitVCLK=P1^7; /******1ms延时函数***12M晶振**************/voiddelay_1ms(uintq){ uinti,j; for(i=0;i<q;i++) for(j=0;j<120;j++);}/***********************语音模块子程序************************/voidSend_threelines(unsignedcharaddr){unsignedchari; VRST=0; VRST=1; VCS=0; for(i=0;i<8;i++) { VCLK=0; if(addr&0x01==0x01) { VDATA=1; } else VDATA=0; addr>>=1; VCLK=1; } VCS=1; while(VBUSY==0); }voiddelay_uint(uintq){ while(q--);}voidwrite_com(ucharcom){ rs=0; rw=0; P0=com; delay_uint(25); e=1; delay_uint(100); e=0;}voidwrite_data(uchardat){ rs=1; rw=0; P0=dat; delay_uint(25); e=1; delay_uint(100); e=0; }voidwrite_string(ucharhang,ucharadd,uchar*p){ if(hang==1) write_com(0x80+add); else write_com(0x80+0x40+add); while(1) { if(*p=='\0')break; write_data(*p); p++; } }////////////////在指定位置显示指定字符//////////voidwrite_zifu(ucharhang,ucharadd,uchardat){ if(hang==1) write_com(0x80+add); else write_com(0x80+0x40+add); write_data(dat);}voidwrite_lcd4_price(ucharhang,ucharadd,uintdate){ if(hang==1) write_com(0x80+add); else write_com(0x80+0x40+add); write_data(0x30+date/1000%10); write_data(0x30+date/100%10); write_data('.'); write_data(0x30+date/10%10); write_data(0x30+date%10); }/***********************lcd1602初始化设置************************/voidinit_1602() //lcd1602初始化设置{ write_com(0x38); // write_com(0x0c); write_com(0x06); write_string(1,0,"W:0.000kg"); write_string(2,0,"P:00.00Z:00.00"); write_zifu(2,7,0x5c); }/*******************重量显示程序***********************/voidwrite_1602_yl(ucharhang,ucharadd,uintdate){ if(hang==1) write_com(0x80+add); else write_com(0x80+0x40+add); write_data(0x30+date/10000%10); write_data(0x30+date/1000%10); write_data('.'); write_data(0x30+date/100%10); write_data(0x30+date/10%10); write_data(0x30+date%10); write_data('K'); write_data('g');}/*********************AD采集程序*********************/unsignedlongHX711_Read(void) //增益128{ unsignedlongcount; unsignedchari; hx711_dout=1; hx711_sck=0; count=0; for(i=0;i<24;i++) { hx711_sck=1; count=count<<1; hx711_sck=0; if(hx711_dout) count++; } hx711_sck=1;count=count^0x800000; hx711_sck=0; return(count);}voidget_pizhong() { Weight_Maopi=HX711_Read(); }voidget_weight() { weight=HX711_Read(); weight=weight-Weight_Maopi; if(weight>0) { weight=(unsignedint)((float)weight/GapValue); } else { weight=0; }}/*****************语音报价********************/voidbojia()//语音报价{ Send_threelines(z_price/1000%10); Send_threelines(10); Send_threelines(z_price/100%10); Send_threelines(11); Send_threelines(z_price/10%10); Send_threelines(z_price%10); Send_threelines(93);}/*****************语音函数********************/voidyuying()//语音函数{ longz_p; if(weight!=0) if(weight==z_p) { bojia(); } z_p=weight;}/********************独立按键程序*****************/ucharkey_can; //按键值voidkey() //独立按键程序{ staticucharkey_new=0,key_l; key_can=20; P3=0x0f; if((P3&0x0f)!=0x0f) { delay_1ms(1); if(((P3&0x0f)!=0x0f)&&(key_new==1)) { key_new=0; key_l=P3|0xf0; P3=key_l; switch(P3) { case0xee:key_can=1;break; case0xde:key_can=4;break; case0xbe:key_can=7;break; case0x7e:key_can=10;break; case0xed:key_can=2;break; case0xdd:key_can=5;break; case0xbd:key_can=8;break; case0x7d:key_can=0;break; case0xeb:key_can=11;break; case0xdb:key_can=9;break; case0xbb:key_can=6;break; case0x7b:key_can=3;break; case0xe7:key_can=15;break; case0xd7:key_can=14;break; case0xb7:key_can=13;break; case0x77:key_can=12;break; } beep=0;//蜂鸣器叫一声 delay_1m
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中国石油大学(北京)《篮球》2023-2024学年第一学期期末试卷
- 郑州升达经贸管理学院《园林景观快题设计》2023-2024学年第一学期期末试卷
- 小学新课程标准培训方案
- 长春工业大学《葡萄酒品尝学》2023-2024学年第一学期期末试卷
- 生态恢复技术在退化土地上应用
- 餐饮业年度报告模板
- AI生活助手新品发布模板
- 硕士论文答辩报告
- 生医年报展望模板
- 房地产交易制度政策-《房地产基本制度与政策》全真模拟试卷4
- 校服服务方案投标方案
- 中建幕墙工程管理指南
- 《2024-2030年中国文创产品行业竞争格局分析及投资发展研究报告》
- T-CAME 59-2023 医院消毒供应中心建设与运行管理标准
- 电化学储能电站安全规程
- 2024年4月自考00612日本文学选读试题
- 无人机驾驶培训班合作协议
- 制度-诉讼文书立卷归档管理办法
- 幕墙工程施工的重点难点分析及针对措施
- 2023年浙江省绍兴市中考科学真题(解析版)
- 基于物联网的远程监控离心机系统
评论
0/150
提交评论