欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    基于AT89C51的数字电子秤设计.docx

    • 资源ID:2534185       资源大小:520.55KB        全文页数:26页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    基于AT89C51的数字电子秤设计.docx

    1、基于AT89C51的数字电子秤设计 成 绩 评 定 表学生姓名XXX班级学号xxxxxxxxx专 业测控课程设计题目基于AT89C51的数字电子秤设计评语组长签字:成绩日期 2014年 7月7日课程设计任务书学 院信息科学与工程专 业测控技术与仪器学生姓名XXX班级学号xxxxxxxxx课程设计题目基于AT89C51的数字电子秤设计实践教学要求与任务:电子测量技术是测控技术与仪器专业的专业基础课。本设计是对该课程综合应用能力的检验,在鼓励学生熟悉基本原理的前提下,注重与实际应用相联系,提出自己的方案,完善设计。1、熟悉被测对象的测量技术工作原理; 2、提出可行设计方案;3、根据方案设计硬件电路

    2、,应用Protel绘制电路原理图;4、软件编程并调试;5、硬件焊接与调试;6、完成课程设计报告。工作计划与进度安排:第18周(6月23日-6月27日):布置设计任务,查资料,完成总体设计框架。第19周(6月30日-7月4日):完善设计内容,焊接调试,验收答辩。指导教师: 2014 年 6月20日专业负责人:2014 年6月21日学院教学副院长:2014 年6月23日 基于AT89C51的数字电子秤的设计1、设计的主要内容和要求 本文主要完成一个简单实用数字电子秤的硬件电路部分和软件部分的设计。在设计的过程学会使用单片机对数字电子秤的各种功能进行控制。本设计中的数字电子秤要求能够显示商品的名称、

    3、价格、总量、总价等;能够自动完成商品的价格计算;能够储存几种简单商品的价格;能够具有超重提醒功能,一旦重量超出了自身重量的测量的范围,发出警报;同时对数字电子秤的测量范围要达到5KG,测量精度要求达到0.001。 2、整体设计方案2.1设计方案整个数字电子秤电路由电源电路、单片机主控制电路、1602型led液晶显示屏、蜂鸣器报警电路、4*4键盘电路和压力传感电路(ADC0832采样)6个部分组成。如图3.1所示。2.2工作原理打开电源开关,数字电子秤开始工作。接通电源时,数字电子秤进入欢迎界面“欢迎使用电子秤 设计”。此时数字电子秤上MCU开始工作,键盘不断进行扫描,同时 通过ADC0808也

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

    5、理图如图3.1所示。控制器系统硬件电路的工作过程是:打开电源时,MCU及各个部分电路开始工作,MCU调用内部存储数据对各部分接口电路初始化。200ms后1602型led液晶显示屏进入欢迎界面,ADC0808不断对外部数据进行采样交给MCU进行处理,一旦有物品放入载物台,ADC0808立即发送中断请求,并将本次采集数据交给MCU处理,之后1602型led液晶显示屏显示相应数据量。在此过程中,键盘也在不断进行扫描,一旦有键按下,单片机也会对其数据进行相应处理,然后将对1602型led液晶显示屏进行写操作。图3.1 数字电子秤硬件电路图3.2软件设计本设计中的程序由主控制程序、1602型led液晶显

    6、示屏驱动程序、ADC0808采样程序和4*4键盘程序组成。3.2.1主程序设计整个设计中采用由下向上的设计思路。主程序中主要完成对1602型led液晶显示屏、ADC0808、及键盘扫描程序的调用。在编写程序的过程中,各变量统一采用全局变量方式命名,同时考虑到电子秤对精度的要求,本设计中的价格及总量相关的变量全部采用浮点数。主程序流程图如图3.2所示。. N Y N N Y Y图3.2主程序流程图 3.2.2 1602型led液晶显示屏驱动程序 图3.31602型led液晶显示屏驱动程序流程图1602型led液晶显示屏能够显示比较复杂的汉字和图形,首先必须对其写入控制操作字,包括图形的显示方式,

    7、字体的模式。然后写入初始行地址,指针自动左移,直到写完全部数据为止。 write_data(place&0xff); /写入地址高位 write_data(place/256); /写入地址低位 write_com(0x24); /地址设置 write_com(0xb0); /设置数据自动写 write_data(ASC_MSK(c1-0x20)*16+k); /*-例如:0的ASCII码为0x30, 在ASC_MSK中的位置为0x10*16 -16字节字码依次写入LCD-*/ write_com(0xb2); /自动复位 place=place+30;3.2.3 ADC0808采样程序 图3

    8、.4ADC0808采样程序程序流程图MCU通过拉低CS、拉高CLK来启动ADC0808进行外部压力传感转换后的电压信号进行采样,每产生8个CLK脉冲,DATA获得一位完整的8bit数据,此时MCU发送中断请求,拉高CS,拉低CLK,并将数据DAT返回。3.2.4 4*4键盘程序图3.5 4*4键盘程序本设计中采用了4*4矩阵式键盘,单片机定时进行查询。首先单片机发送行扫描代码,然后进行列扫描,当发现某一列出现了低电平时,即返回相应的键盘值。若没有发现则说明当前行没有键按下,行扫描右移一位,继续执行列扫描。MCU根据相应的键值,即可确定被按下的键。4元器件清单元件序号型号主要参数数量备注单片机A

    9、T89c51低电压,高性能cmos8位单片机1液晶显示器1602型显示两行,每行16个字符液晶模块1模数转换器ADC0808分辨率为8位的、逐次逼近原理1键盘44型-1按键开关-1排线8排-3导线-若干5元器件识别与检测电阻(1K)识别由电阻上的色环判断。检测通过万用表,将其调制欧姆档,红黑表笔分别连接电阻两端检测数值。单片机(AT89C51)识别由芯片上标注的型号判断。模数转换器(ADC0808)识别有芯片上标注的型号判断。6硬件制作、软件编程与调试6.1硬件制作与调试在焊接过程中出现需要大范围的连续使用导线进行焊接电子元器件。解决方法:使用插如一排导体与芯片进行连接,之后通过排线连接芯片与

    10、元器件。6.2软件编程与调试1602型led液晶显示屏能够显示比较复杂的汉字和图形,首先必须对其写入控制操作字,包括图形的显示方式,字体的模式。然后写入初始行地址,指针自动左移,直到写完全部数据为止。 write_data(place&0xff); /写入地址高位 write_data(place/256); /写入地址低位 write_com(0x24); /地址设置 write_com(0xb0); /设置数据自动写 write_data(ASC_MSK(c1-0x20)*16+k); /*-例如:0的ASCII码为0x30, 在ASC_MSK中的位置为0x10*16 -16字节字码依次写

    11、入LCD-*/ write_com(0xb2); /自动复位 place=place+30;7系统仿真在protues的ISIS 7.4sp2软件环境下画出电路原理图,接下来就是将设计的程序在Keil C51 Vision3开发集成环境上编译成机器语言,进入Protues的ISIS,双击AT89C51,在Program File中添加main.hex文件到AT89C51中,如图7.1所示。 图6.1 数字电子秤仿真设置图该仿真验证的过程:首先按开始按,此时数字电子秤进入欢迎界面。1602型led液晶显示屏上显示欢迎使用电子秤 设计。如图7.2所示。图7.2 数字电子秤欢迎界面图接下来调节压力传

    12、感模拟电路电压,将电压设为0.00表示此时载物台上没有物体。此时1602型led液晶显示屏切换到称量画面。显示指示“实用电子秤 名称单价:0.000元/千克 总重量:0.000千克 总价:00.000元”。如图6.3所示。图7.3 数字电子秤模拟空载图最后,上调压力传感电压表示已载有商品,同时按下“6”号键,表示选择6号商品“苹果”。此时LM4229上显示“名称:苹果 单价:6.800元/千克 总重量:3.496千克 总价:“23.733元”(实际6.8*3.496=23.7758元)。达到基本要求。如图7.4所示。最大称量重量4.980KG,如图7.5所示。图7.4 数字电子秤模拟载物显示仿

    13、真图 图7.4 数字电子秤模拟最大称量范围仿真图8设计总结通过本次电子技能课程数字电子秤的设计,让我更加熟悉了单片机的整个设计流程。在设计过程中,我也意识到好的编程书写习惯对软件设计的重要性。刚刚开始由于自己变量大部分采用的是局部变量,导致程序仿真出错,给自己的修改创造不小的麻烦。经过一天的努力,统一采用全局变量终于实现最终的仿真结果和设计的全部任务和要求。当然本数字电子秤还有很多可以改进的地方,例如可以改进按键功能方便工作人员随时对各数据进行修改等等。由于设计时间有限,只能在以后的学习过程中做更进一步的改进。9参考文献1 于永.51单片机C语言常用模块于综合系统设计实例精讲M.北京:电子工业

    14、出版社,2008:88-94.2 李建忠.单片机原理及应用M.西安:西安电子科技大学出版,2002:63-78.3 张俊谟.单片机中级教程M.北京:北京航空航天大学出版,2000:36-45.附录A#include#include#include #include #include#define uchar unsigned char#define uint unsigned intsbit ADCS =P35; sbit ADDI =P37; sbit ADDO =P37; sbit ADCLK =P36; uint x1,y1,z1=0,w1;uchar ad_data,k,n,m,e,n

    15、um,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=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 pri

    16、ce;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(500); /系统延时500ms启动 /ad_data=0; /采样值存储单元初始化为0 lcd_init(); /显示初始化 disp_init(); /开始进入欢迎界面

    17、 delay(1000); /延时进入称量画面 clear_lcd(0,4,40); 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,实用电子秤); while(1) ad_data =Adc0832(0); /采样值存储单元初始化为0 alarm(); data_pro(); /读取重量 ke

    18、yscan(); /查询商品种类 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,price_all); write_lcd(88,20,元); write_lcd(112,0,); /*读ADC0832函

    19、数*/采集并返回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_(); _nop_(); ADCS=0;/拉低CS端 _nop_(); _nop_(); ADCLK=1;/拉高CLK端 _nop_(); _nop_(); ADCLK=0;/拉低CLK端,形成下降沿1 _nop_(); _nop_(); ADCLK=1;/拉高CLK端 A

    20、DDI=channel&0x1; _nop_(); _nop_(); ADCLK=0;/拉低CLK端,形成下降沿2 _nop_(); _nop_(); ADCLK=1;/拉高CLK端 ADDI=(channel1)&0x1; _nop_(); _nop_(); ADCLK=0;/拉低CLK端,形成下降沿3 ADDI=1;/控制命令结束 _nop_(); _nop_(); dat=0; for(i=0;i8;i+) dat|=ADDO;/收数据 ADCLK=1; _nop_(); _nop_(); ADCLK=0;/形成一次时钟脉冲 _nop_(); _nop_(); dat=1; if(i=7

    21、)dat|=ADDO; for(i=0;i8;i+) j=0; j=j|ADDO;/收数据 ADCLK=1; _nop_(); _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 k void data_pro(void) unsigned int; if(0ad_data=256) beep=0; /则启动报警 els

    22、e beep=1; void delay(uint k) uint i,j; for(i=0;ik;i+) for(j=0;j100;j+); /开机欢迎界面void disp_init() -); write_lcd(84, /键盘服务程序void keyscan() P1=0xfe; temp=P1; temp=temp&0xf0; while(temp!=0xf0) delay(5); temp=P1; temp=temp&0xf0; while(temp!=0xf0) temp=P1; switch(temp) case 0xee:num=1,price=price_unit0, wr

    23、ite_lcd(24,0,名 称: 杏 仁); break; case 0xde:num=2,price=price_unit1,write_lcd(24,0,名 称: 李 子); break; case 0xbe:num=3,price=price_unit2,write_lcd(24,0,名 称: 草 莓); break; case 0x7e:num=4,price=price_unit3,write_lcd(24,0,名 称: 葡 萄); break; while(temp!=0xf0) temp=P1; temp=temp&0xf0; P1=0xfd; temp=P1; temp=te

    24、mp&0xf0; while(temp!=0xf0) delay(5); temp=P1; temp=temp&0xf0; while(temp!=0xf0) temp=P1; switch(temp) case 0xed:num=5,price=price_unit4,write_lcd(24,0,名 称: 西 瓜); break; case 0xdd:num=6,price=price_unit5,write_lcd(24,0,名 称: 苹 果); break; case 0xbd:num=7,price=price_unit6,write_lcd(24,0,名 称: 雪 梨); brea

    25、k; case 0x7d:num=8,price=price_unit7,write_lcd(24,0,名 称: 核 桃); break; while(temp!=0xf0) temp=P1; temp=temp&0xf0; P1=0xfb; temp=P1; temp=temp&0xf0; while(temp!=0xf0) delay(5); temp=P1; temp=temp&0xf0; while(temp!=0xf0) temp=P1; switch(temp) case 0xeb:num=9,price=price_unit8,write_lcd(24,0,名 称: 香 蕉); break; case 0xdb:num=10,price=price_unit9,write_lcd(24,0,名 称: 商品代码); break; case 0xbb:num=11,price=price_unit1; break; case 0x7b:num=12,price=price_unit2; break; while(temp!=0xf0) temp=P1; temp=temp&0xf0; P1=0xf7; temp=P1; temp=temp&0xf


    注意事项

    本文(基于AT89C51的数字电子秤设计.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开