电子秤c语言编程,基于AT89C51的数字电子秤的设计最终版(样例3)

《基于AT89C51的数字电子秤的设计.doc》由会员分享,可免费在线阅读全文,更多与《基于AT89C51的数字电子秤的设计(最终版)》相关文档资源请在帮帮文库(www.woc88.com)数亿文档库存里搜索。

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[],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);。

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;tem=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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值