电⼦秤c语⾔编程,基于AT89C51的数字电⼦秤的设计最终版
(样例3)
《基于AT89C51的数字电⼦秤的设计.doc》由会员分享,可免费在线阅读全⽂,更多与《基于AT89C51的数字电⼦秤的设计(最终版)》相关⽂档资源请在帮帮⽂库(www.woc88)数亿⽂档库存⾥搜索。
1、defineucharunsignedchardefineuintunsignedintsbitADCS=P^;sbitADDI=P^;sbitADDO=P^;sbitADCLK=P^;
uintx,y,z=,w;ucharad_data,k,n,m,e,num,s;采样值存储uinttem;sbitbee=P^;charress_data;标度变换存储单元floatress;unsignedcharad_alarm,tem;报警值存储单元unsignedcharabc[]={,,,,};unsignedcharrice_all[]={,,,,,};floatrice_unit[]={,,,,,,,,,};商品初始单价ucharrice_danjia[]={,,,,};floatrice;uintrice_tem,rice_tem;商品总价ucharAdc(unsignedcharchannel);vo主程序设计LM液晶显⽰驱动程序ADC采样程序*键盘程序、系统仿真、使⽤说明、设计总结参考⽂献附录A基于ATC的。
2、cd(,,quot名称:西⽠quot);eak;casexdd:num=,rice=rice_unit[],write_lcd(,,quot名称:苹果quot);eak;
casexbd:num=,rice=rice_unit[],write_lcd(,,quot名称:雪梨quot);eak;casexd:num=,rice=rice_unit[],wr
ite_lcd(,,quot名称:核桃quot);eak;}while(tem!=xf){tem=P;tem=temamxf;}}}P=xfb;tem=P;tem=temamxf;while(tem!=xf){delay();tem=P;tem=temamxf;while(tem!=xf){tem=P;switch(tem){casexeb:num=,rice=rice_unit[],write_lcd(,,quot名称:⾹蕉quot);eak;casexdb:num=,rice=rice_unit[],write_lcd(,,quot名称:商品代码quot);。
3、程,请将电路的背景设为⽆。)整个电⼦秤设置了“~”个按键,其中的“”键表⽰取消,其他键代表种可供选择商品价格。(另本设计的仿真⽂件需要安装rotues以上版本才能打开。)、设计总结通过本次电⼦技能课程数字电⼦秤的设计,让我更加熟悉了单⽚机的整个设计流程。在设计过程中,我也意识到好的编程书写习惯对软件设计的重要性。刚刚开始由于⾃⼰变量⼤部分采⽤的是局部变量,导致程序仿真出错,给⾃⼰的修改创造不⼩的⿇烦。经过⼀天的努⼒,统⼀采⽤全局变量终于实现最终的仿真结果和设计的全部任务和要求。当然本数字电⼦秤还有很多可以改进的地⽅,例如可以改进按键功能⽅便⼯作⼈员随时对各数据进⾏修改等等。由于设计时间有限,只能在以后的学习过程中做更进⼀步的改进。参考⽂献[]于永单⽚机C语⾔常⽤模块于综合系统设计实例精讲[M]北京:电⼦⼯业出版社,:[]李建忠单⽚机原理及应⽤[M]西安:西安电⼦科技⼤学出版,:[]张俊谟单⽚机中级教程[M]北京:北京航空航天⼤学出版,:附录Aincludeincludeincludeincludeinclud。
4、rice_all[]=;rice_all[]=(rice_tem%)+;rice_all[]=((rice_tem%)%)+;rice_all[]=((rice_tem%)%)%+;}t名称:杏仁quot);eak;casexde:num=,rice=rice_unit[],write_lcd(,,quot名称:
李⼦quot);eak;casexbe:num=,rice=rice_unit[],write_lcd(,,quot名称:草莓quot);eak;casexe:num=,rice=rice_unit[],write_lcd(,,quot名称:葡萄quot);eak;}while(tem!=xf){tem=P;
tem=temamxf;}}}P=xfd;tem=P;tem=temamxf;while(tem!=xf){delay();tem=P;tem=temamxf;while(tem!=xf){tem=P;switch(tem){casexed:num=,rice=rice_unit[],write_。
5、write_lcd(,,quot设计学⽣:*朱珍奇quot);}}************读ADC函数************采集并返回ucharAdc(unsignedcharchannel)AD转换,返回结果{uchari=;ucharj;uintdat=;ucharndat=;if(channel==)channel=;if(channel==)channel=;ADDI=;_no_();
_no_();ADCS=;拉低CS端_no_();_no_();ADCLK=;拉⾼CLK端_no_();_no_();ADCLK=;拉低CLK端,形成下降沿_no_();
_no_();ADCLK=;称:苹果单价:元千克总重量:千克总价:“元”(实际*=元)。达到基本要求。如图所⽰。最⼤称量重量KG,如图所⽰。图数字电⼦秤模拟载物显⽰仿真图图数字电⼦秤模拟最⼤称量范围仿真图、使⽤说明在使⽤仿真的过程中,⾸先打开仿真电路图,并加载好“HEX”⽂件到单⽚机中。后将压⼒传感电压调制,点击按钮,开始仿真。(为了能够看到清晰的演⽰。
6、ak;casexbb:num=,rice=rice_unit[];eak;casexb:num=,rice=rice_unit[];eak;}while(tem!=xf){tem=P;
c语言编程入门指南pdftem=temamxf;}}}P=xf;tem=P;tem=temamxf;while(tem!=xf){delay();tem=P编写程序的过程中,各变量统⼀采⽤全局变量⽅式命名,同时考虑到电⼦秤对精度的要求,本设计中的价格及总量相关的变量全部采⽤浮点数。主程序流程图如图所⽰。图主程序流程图LM液晶显⽰驱动程序图LM液晶显⽰驱动程序流程图LM液晶能够显⽰⽐较复杂的汉字和图形,⾸先必须对其写⼊控制操作字,包括图形的显⽰⽅式,字体的模式。然后写⼊初始⾏地址,指针⾃动左移,直到写完全部数据为⽌。write_data(laceamxff);写⼊地址⾼位
write_data(lace);写⼊地址低位write_com(x);地址设置write_com(xb);设置数据⾃动写write_data(ASC_MSK[(cx)*+k]);*例如。
7、lear_lcd(,,);clear_lcd(,,);clear_lcd(,,);clear_lcd(,,);clear_lcd(,,);clear_lcd(,,);clear_lcd(,,);clear_lcd(,,);write_lcd(,,quot 实⽤电⼦秤quot);while(){ad_data=Adc();采样值存储单元初始化为alarm();data_ro();读取重量keyscan();查询商品种类
write_lcd(,,quotquot);write_lcd(,,quot单价:quot);write_lcd(,,rice_danjia);write_lcd(,,quot元千克quot);write_lcd(,,quot总重量:quot);write_lcd(,,abc);write_lcd(,,quot千克quot);write_lcd(,,quot总价:quot);rice_jisuan();计算出价格
write_lcd(,,rice_all);write_lcd(,,quot元quot)。
8、cd(,,quot名称:西⽠quot);eak;casexdd:num=,rice=rice_unit[],write_lcd(,,quot名称:苹果quot);eak;
casexbd:num=,rice=rice_unit[],write_lcd(,,quot名称:雪梨quot);eak;casexd:num=,rice=rice_unit[],write_lcd(,,quot名称:核桃quot);eak;}while(tem!=xf){tem=P;tem=temamxf;}}}P=xfb;tem=P;tem=temamxf;while(tem!=xf){delay();tem=P;tem=temamxf;while(tem!=xf){tem=P;switch(tem){casexeb:num=,rice=rice_unit[],write_lcd(,,quot名称:⾹蕉quot);eak;casexdb:num=,rice=rice_unit[],write_lcd(,,quot名称:商品代码quot);。
9、的ASCII码为x,在ASC_MSK中的位置为x*字节字码依次写⼊LCD*write_com(xb);⾃动复位lace=lace+;ADC采样程序图ADC采样程序程序流程图MCU通过拉低CS、拉⾼CLK来启动ADC进⾏外部压⼒传感转换后的电压信号进⾏采样,每产⽣个CLK脉冲,DATA获得⼀位完整的bit数据,此时MCU发送中断请求,拉⾼CS,拉低CLK,并将数据DAT返回。*键盘程序图*键盘程序本设计中采⽤了*矩阵式键盘,单⽚机定时进⾏查询。⾸先单⽚机发送⾏扫描代码,然后进⾏列扫描,当发现某⼀列出现了低电平时,即返回相应的键盘值。若没有发现则说明当前⾏没有键按下,⾏扫描右移⼀位,继续执⾏列扫描。MCU根据相应的键值,即可确定被按下的键。、系统仿真在rotues的ISISs软件环境下画出电路原理图,接下来就是将设计的程序在KeilCμVision开发集成环境上编译成机器语⾔,进⼊Protues的ISIS,双击ATC,在quotProgramFile中quot添加quotmainhexquot⽂件到ATC中,如图。
10、⽰。图数字电⼦秤仿真设置图该仿真验证的过程:⾸先按开始按,此时数字电⼦秤进⼊欢迎界⾯。LM上显⽰quot欢迎使⽤电⼦秤设计quot。如图所⽰。图数字电⼦秤欢迎界⾯图接下来调节压⼒传感模拟电路电压,将电压设为表⽰此时载物台上没有物体。此时LM切换到称量画⾯。显⽰指⽰“实⽤电⼦秤名称单价:元千克总重量:千克总价:元”。如图所⽰。图数字电⼦秤模拟空载图最后,上调压⼒传感电压表⽰已载有商品,同时按下“”号键,表⽰选择号商品“苹果”。此时LM上显⽰“名dalarm(void);voiddata_ro(void);
voiddelay(uintk);voidkeyscan();voiddis_init();voidrice_jisuan();************主函数************voidmain(void){delay();系统延时ms启动ad_data=;采样值存储单元初始化为lcd_init();显⽰初始化dis_init();开始进⼊欢迎界⾯delay();延时进⼊称量画⾯
clear_lcd(,,);。
11、拉⾼CLK端ADDI=channelamx;_no_();_no_();ADCLK=;拉低CLK端,形成下降沿_no_();_no_();ADCLK=;拉⾼CLK端ADDI=(channelgtgt)amx;_no_();_no_();ADCLK=;拉低CLK端,形成下降沿ADDI=;控制命令结束_no_();_no_();dat=;
for(i=;ilt;i++){dat|=ADDO;收数据ADCLK=;_no_();_no_();ADCLK=;形成⼀次时钟脉冲_no_();_no_();datltlt=;
if(i==)dat|=ADDO;}for(i=;ilt;i++){j=;j=j|ADDO;收数据ADCLK=;_no_();_no_();ADCLK=;形成⼀次时钟脉冲_no_();
_no_();j=jgt=;}ADCS=;拉搞CS端ADCLK=;拉低CLK端ADDO=;拉⾼数据端,回到初始状态dat=)bee=;则启动报警
elsebee=;}voiddelay(uintk){uinti,j;for(i= 。
12、;iltk;i++)for(j=;jlt;j++);}开机欢迎界⾯voiddis_init(){write_lcd(,,quot欢迎使⽤电⼦秤quot);write_lcd(,,quotquot);
write_lcd(,,quot设计学⽣:朱珍奇quot);write_lcd(,,quotquot);write_lcd(,,quot班级学号:*quot);write_lcd(,,quotquot);
write_lcd(,,quot指导⽼师:龚伦峰quot);write_lcd(,,quotquot);write_lcd(,,quot设计⽇期:年⽉⽇quot);}键盘服务程序voidkeyscan() {P=xfe;tem=P;tem=temamxf;while(tem!=xf){delay();tem=P;tem=temamxf;while(tem!=xf){tem=P;switch(tem) {casexee:num=,rice=rice_unit[],write_lcd(,,quo;tem=temamxf;w
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论