电子称设计.pdf

上传人:w**** 文档编号:73503376 上传时间:2023-02-19 格式:PDF 页数:20 大小:1.07MB
返回 下载 相关 举报
电子称设计.pdf_第1页
第1页 / 共20页
电子称设计.pdf_第2页
第2页 / 共20页
点击查看更多>>
资源描述

《电子称设计.pdf》由会员分享,可在线阅读,更多相关《电子称设计.pdf(20页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、电子称设计方案班级;机电一体化八班XX;XX1/20学号;目录目录电子技能课程设计报告书电子技能课程设计报告书.错误!未定义书签。基于基于 AT89C51AT89C51的数字电子秤的设计的数字电子秤的设计.1 11 1、设计目的、设计目的.1 12 2、设计的主要内容和要求、设计的主要内容和要求.1 13 3、整体设计方案整体设计方案.1 13.13.1 设计方案设计方案.1 13.23.2 工作原理工作原理.1 14 4、硬件电路的设计硬件电路的设计.2 25 5、软件设计、软件设计.3 35.15.1 主程序设计主程序设计.3 35.2 LM42295.2 LM4229 液晶显示驱动程序液

2、晶显示驱动程序.4 45.3 ADC08325.3 ADC0832采样程序采样程序.5 55.4 4*45.4 4*4 键盘程序键盘程序.6 66 6、系统仿真、系统仿真.6 67 7、使用说明使用说明 .9 98 8、设计总结、设计总结.9 92/20参考文献参考文献.9 9附录附录 A10A103/20基于基于 AT89C51AT89C51 的数字电子秤的设计的数字电子秤的设计1、设计目的单片机以其功能强,体积小,功耗低,易开发等很多优势被广泛应用。但单片机不是万能的,也存在不适合的场合,我们要充分利用单片机的内部资源和选择合适的单片机来完成我们的设计。本数字电子秤的设计过程中需要用到 A

3、/D转换、键盘、液晶显示、复位电路和蜂鸣器报警驱动电路的知识,同时在软件的设计过程中需要用到键盘扫描、液晶显示驱动、模数转换程序及汉字库的的设计,可以很好的将数电、模电、单片机知识进行综合应用。在综合应用中进一步熟悉单片机设计的开发各个流程,最终达到巩固基础、注重设计、培养技能、追求创新、走向实用的目的。2、设计的主要内容和要求本文主要完成一个简单实用数字电子秤的硬件电路部分和软件部分的设计。在设计的过程学会使用单片机对数字电子秤的各种功能进行控制。本设计中的数字电子秤要求能够显示商品的名称、价格、总量、总价等;能够自动完成商品的价格计算;能够储存几种简单商品的价格;能够具有超重提醒功能,一旦

4、重量超出了自身重量的测量的 X 围,发出警报;同时对数字电子秤的测量 X 围要达到 5KG,测量精度要求达到 0.001。3、整体设计方案3.1 设计方案整个数字电子秤电路由电源电路、单片机主控制电路、LM4229 显示电路、蜂鸣器报警电路、4*4 键盘电路和压力传感电路(ADC0832 采样)6 个部分组成。如图 3.1 所示。3.2 工作原理打开电源开关,数字电子秤开始工作。接通电源时,数字电子秤进入欢迎界面“欢迎使用电子秤 设计 ”。此时数字电子秤上 MCU 开始工作,键盘不断进行扫描,同时 通过 ADC0832 也不断进行外部称量数据采样,LCD 上显示“实用电子1/20秤 名称 单价

5、 ”。当载物台上放有物体时,ADC0832 立即将数据收集送给单片机处理。此时工作人员只要输入对应商品的代码编号,在 240*128 的 LCD上可以看到相应商品的名称,单价,总重,总价格等信息。在称量的过程中,一旦物体自身的重量超出电子秤的称量 X 围,蜂鸣器立即会发出“滴滴 ”警报声告诉工作人员,所称量物品超重。图 3.1 整体设计方框图4、硬件电路的设计数字电子秤采用 AT89C51 单片机作为微处理器,接口电路由晶振、LM4229显示电路、4*4 按键电路、ADC0832 电路、报警电路、存储器等组成。控制器系统的硬件电路原理图如图 4.1 所示。控制器系统硬件电路的工作过程是:打开电

6、源时,MCU 及各个部分电路开始工作,MCU 调用内部存储数据对各部分接口电路初始化。200ms 后 LM4229 进入欢迎界面,ADC0832 不断对外部数据进行采样交给 MCU 进行处理,一旦有物品放入载物台,ADC0832 立即发送中断请求,并将本次采集数据交给 MCU 处理,之后LM4229 显示相应数据量。在此过程中,键盘也在不断进行扫描,一旦有键按下,单片机也会对其数据进行相应处理,然后将对 LM4229 进行写操作。2/20图 4.1 数字电子秤硬件电路图5、软件设计本设计中的程序由主控制程序、LM4229 液晶显示驱动程序、ADC0832 采样程序和 4*4 键盘程序组成。5.

7、1 主程序设计整个设计中采用由下向上的设计思路。主程序中主要完成对LCM4229、ADC0832、及键盘扫描程序的调用。在编写程序的过程中,各变量统一采用全局变量方式命名,同时考虑到电子秤对精度的要求,本设计中的价格及总量相关的变量全部采用浮点数。主程序流程图如图 5.1 所示。3/20图5.1 主程序流程图5.2 LM4229液晶显示驱动程序图5.2 LM4229液晶显示驱动程序流程图4/20 LM4229液晶能够显示比较复杂的汉字和图形,首先必须对其写入控制操作字,包括图形的显示方式,字体的模式。然后写入初始行地址,指针自动左移,直到写完全部数据为止。write_data(place&0

8、xff);/写入地址高位 write_data(place/256);/写入地址低位 write_(0 x24);/地址设置 write_(0 xb0);/设置数据自动写 write_data(ASC_MSK(c1-0 x20)*16+k);/*-例如:0的ASCII码为0 x30,在ASC_MSK中的位置为0 x10*16-16字节字码依次写入LCD-*/write_(0 xb2);/自动复位 place=place+30;5.3 ADC0832采样程序图5.3 ADC0832采样程序程序流程图 MCU通过拉低CS、拉高CLK来启动ADC0832进行外部压力传感转换后的电压信5/20号进行采

9、样,每产生8个CLK脉冲,DATA获得一位完整的8bit数据,此时MCU发送中断请求,拉高CS,拉低CLK,并将数据DAT返回。5.4 4*4键盘程序图5.4 4*4键盘程序本设计中采用了4*4矩阵式键盘,单片机定时进行查询。首先单片机发送行扫描代码,然后进行列扫描,当发现某一列出现了低电平时,即返回相应的键盘值。若没有发现则说明当前行没有键按下,行扫描右移一位,继续执行列扫描。MCU根据相应的键值,即可确定被按下的键。6、系统仿真在protues的 ISIS 7.4sp2 软件环境下画出电路原理图,接下来就是将设6/20计的程序在 KeilKeil C51C51 Vision3Vision3

10、 开发集成环境上编译成机器语言,进入 Protues的 ISIS,双击 AT89C51,在Program File 中添加main.hex文件到 AT89C51中,如图 6.1 所示。图 6.1 数字电子秤仿真设置图该仿真验证的过程:首先按开始按,此时数字电子秤进入欢迎界面。LM4229上显示欢迎使用电子秤 设计 。如图 6.2 所示。图 6.2 数字电子秤欢迎界面图接下来调节压力传感模拟电路电压,将电压设为 0.00 表示此时载物台上没有物体。此时 LM4229 切换到称量画面。显示指示“实用电子秤 名称 7/20单价:0.000 元/千克 总重量:0.000 千克 总价:00.000 元”

11、。如图 6.3 所示。图 6.3 数字电子秤模拟空载图最后,上调压力传感电压表示已载有商品,同时按下“6”号键,表示选择6 号商品“苹果”。此时LM4229 上显示“名称:苹果 单价:6.800 元/千克 总重量:3.496 千克 总价:“23.733 元”(实际 6.8*3.496=23.7758 元)。达到基本要求。如图 6.4 所示。最大称量重量 4.980KG,如图 6.5 所示。图 6.4 数字电子秤模拟载物显示仿真图8/20图 6.4 数字电子秤模拟最大称量X 围仿真图7 7、使用说明在使用仿真的过程中,首先打开仿真电路图,并加载好“HEX”文件到单片机中。后将压力传感电压调制 0

12、.00,点击按钮,开始仿真。(为了能够看到清晰的演示过程,请将电路的背景设为无。)整个电子秤设置了“015”个按键,其中的“0”键表示取消,其他键代表 15 种可供选择商品价格。(另本设计的仿真文件需要安装 protues7.4 以上版本才能打开。)8、设计总结通过本次电子技能课程数字电子秤的设计,让我更加熟悉了单片机的整个设计流程。在设计过程中,我也意识到好的编程书写习惯对软件设计的重要性。刚刚开始由于自己变量大部分采用的是局部变量,导致程序仿真出错,给自己的修改创造不小的麻烦。经过一天的努力,统一采用全局变量终于实现最终的仿真结果和设计的全部任务和要求。当然本数字电子秤还有很多可以改进的地

13、方,例如可以改进按键功能方便工作人员随时对各数据进行修改等等。由于设计时间有限,只能在以后的学习过程中做更进一步的改进。参考文献参考文献1 于永.51 单片机 C 语言常用模块于综合系统设计实例精讲M.:电子工业,2008:88-94.2 李建忠.单片机原理及应用M.XX:XX 电子科技大学出版,2002:63-78.3 X 俊谟.单片机中级教程M.:航空航天大学出版,2000:36-45.9/20附录 A#include#include#include#include#include#define uchar unsigned char#define uint unsigned intsbi

14、t ADCS=P35;sbit ADDI=P37;sbit ADDO=P37;sbit ADCLK=P36;uint x1,y1,z1=0,w1;uchar ad_data,k,n,m,e,num,s;/采样值存储uint temp1;sbit beep=P30;char press_data;/标度变换存储单元float press;unsigned char ad_alarm,temp;/报警值存储单元unsigned char abc5=48,46,48,48,48;unsigned char price_all6=48,48,46,48,48,48;float price_unit10

15、=5.5,2.8,3.6,4.5,5.8,6.8,7.9,8.0,9.5,0;/商品初始单价uchar price_danjia5=48,46,48,48,48;float price;uint price_temp1,price_temp2;/商品总价uchar Adc0832(unsigned char channel);void alarm(void);void data_pro(void);void delay(uint k);void keyscan();void disp_init();void price_jisuan();/*主函数*/void main(void)delay(

16、500);/系统延时 500ms 启动 /ad_data=0;/采样值存储单元初始化为0 lcd_init();/显示初始化 disp_init();/开始进入欢迎界面 delay(1000);/延时进入称量画面 clear_lcd(0,4,40);10/20 clear_lcd(16,0,80);clear_lcd(28,0,40);clear_lcd(44,0,80);clear_lcd(56,0,40);clear_lcd(72,0,80);clear_lcd(84,0,40);clear_lcd(100,0,80);clear_lcd(112,0,40);write_lcd(0,8,实

17、用电子秤);while(1)ad_data=Adc0832(0);/采样值存储单元初始化为0 alarm();data_pro();/读取重量 keyscan();/查询商品种类 write_lcd(40,0,-);write_lcd(56,0,单价:);write_lcd(56,11,price_danjia);write_lcd(56,20,元/千克);write_lcd(72,0,总重量:);write_lcd(72,11,abc);write_lcd(72,20,千克);write_lcd(88,0,总价:);price_jisuan();/计算出价格 write_lcd(88,10,

18、price_all);write_lcd(88,20,元);write_lcd(112,0,);/*读 ADC0832 函数*/采集并返回uchar Adc0832(unsigned char channel)/AD转换,返回结果 uchar i=0;uchar j;uint dat=0;uchar ndat=0;if(channel=0)channel=2;if(channel=1)channel=3;ADDI=1;_nop_();11/20 _nop_();ADCS=0;/拉低 CS 端 _nop_();_nop_();ADCLK=1;/拉高 CLK 端 _nop_();_nop_();A

19、DCLK=0;/拉低 CLK 端,形成下降沿 1 _nop_();_nop_();ADCLK=1;/拉高 CLK 端 ADDI=channel&0 x1;_nop_();_nop_();ADCLK=0;/拉低 CLK 端,形成下降沿 2 _nop_();_nop_();ADCLK=1;/拉高 CLK 端 ADDI=(channel1)&0 x1;_nop_();_nop_();ADCLK=0;/拉低 CLK 端,形成下降沿 3 ADDI=1;/控制命令结束 _nop_();_nop_();dat=0;for(i=0;i8;i+)dat|=ADDO;/收数据 ADCLK=1;_nop_();_n

20、op_();ADCLK=0;/形成一次时钟脉冲 _nop_();_nop_();dat=1;if(i=7)dat|=ADDO;for(i=0;i8;i+)j=0;j=j|ADDO;/收数据 ADCLK=1;_nop_();12/20 _nop_();ADCLK=0;/形成一次时钟脉冲 _nop_();_nop_();j=j7;ndat=ndat|j;if(i=1;ADCS=1;/拉搞 CS 端 ADCLK=0;/拉低 CLK 端 ADDO=1;/拉高数据端,回到初始状态 dat=8;dat|=ndat;return(dat);/return ad kvoid data_pro(void)uns

21、igned int;if(0ad_data=256)beep=0;/则启动报警 else beep=1;void delay(uint k)13/20放大 1000 倍,便于后面/取压力值百位/取压力值十位/取压力值个位/取压力值十分位 uint i,j;for(i=0;ik;i+)for(j=0;j100;j+);/开机欢迎界面void disp_init()-);write_lcd(84,/键盘服务程序void keyscan()P1=0 xfe;temp=P1;temp=temp&0 xf0;while(temp!=0 xf0)delay(5);temp=P1;temp=temp&0 x

22、f0;while(temp!=0 xf0)temp=P1;switch(temp)case0 xee:num=1,price=price_unit0,write_lcd(24,0,名称:杏仁);break;case0 xde:num=2,price=price_unit1,write_lcd(24,0,名称:李子);break;case0 xbe:num=3,price=price_unit2,write_lcd(24,0,名称:草莓);break;case0 x7e:num=4,price=price_unit3,write_lcd(24,0,名称:葡萄);break;while(temp!

23、=0 xf0)14/20temp=P1;temp=temp&0 xf0;P1=0 xfd;temp=P1;temp=temp&0 xf0;while(temp!=0 xf0)delay(5);temp=P1;temp=temp&0 xf0;while(temp!=0 xf0)temp=P1;switch(temp)case0 xed:num=5,price=price_unit4,write_lcd(24,0,名break;case0 xdd:num=6,price=price_unit5,write_lcd(24,0,名break;case0 xbd:num=7,price=price_un

24、it6,write_lcd(24,0,名break;case0 x7d:num=8,price=price_unit7,write_lcd(24,0,名break;while(temp!=0 xf0)temp=P1;temp=temp&0 xf0;P1=0 xfb;temp=P1;temp=temp&0 xf0;15/20称:西称:苹称:雪称:核瓜);果);梨);桃);while(temp!=0 xf0)delay(5);temp=P1;temp=temp&0 xf0;while(temp!=0 xf0)temp=P1;switch(temp)case0 xeb:num=9,price=pri

25、ce_unit8,write_lcd(24,0,名称:香蕉);break;case0 xdb:num=10,price=price_unit9,write_lcd(24,0,名称:商品代码);break;case 0 xbb:num=11,price=price_unit1;break;case 0 x7b:num=12,price=price_unit2;break;while(temp!=0 xf0)temp=P1;temp=temp&0 xf0;P1=0 xf7;temp=P1;temp=temp&0 xf0;while(temp!=0 xf0)delay(5);temp=P1;temp

26、=temp&0 xf0;while(temp!=0 xf0)temp=P1;switch(temp)case 0 xe7:num=13,price=price_unit3;16/20break;case 0 xd7:num=14,price=price_unit4;break;case 0 xb7:num=15,price=price_unit5;break;case 0 x77:num=16,price=price_unit6;break;while(temp!=0 xf0)temp=P1;temp=temp&0 xf0;price_temp1=(int)(price*1000);price

27、_danjia0=price_temp1/1000+48;price_danjia1=46;price_danjia2=(price_temp1%1000)/100+48;price_danjia3=(price_temp1%1000)%100)/10+48;price_danjia4=(price_temp1%1000)%100)%10+48;void price_jisuan()price_temp2=(int)(price*press*1000);price_all0=price_temp2/10000+48;price_all1=(price_temp2/1000)%10+48;price_all2=46;price_all3=(price_temp2%1000)/100+48;price_all4=(price_temp2%1000)%100)/10+48;price_all5=(price_temp2%1000)%100)%10+48;17/20/取单价个位/取单价十分位/取单价百分位/取单价千分位

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 工作报告

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com