单片机课程设计(论文)多物体重量自动测试系统设计.doc

上传人:土8路 文档编号:10384310 上传时间:2021-05-13 格式:DOC 页数:24 大小:262KB
返回 下载 相关 举报
单片机课程设计(论文)多物体重量自动测试系统设计.doc_第1页
第1页 / 共24页
单片机课程设计(论文)多物体重量自动测试系统设计.doc_第2页
第2页 / 共24页
单片机课程设计(论文)多物体重量自动测试系统设计.doc_第3页
第3页 / 共24页
单片机课程设计(论文)多物体重量自动测试系统设计.doc_第4页
第4页 / 共24页
单片机课程设计(论文)多物体重量自动测试系统设计.doc_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《单片机课程设计(论文)多物体重量自动测试系统设计.doc》由会员分享,可在线阅读,更多相关《单片机课程设计(论文)多物体重量自动测试系统设计.doc(24页珍藏版)》请在三一文库上搜索。

1、郑州轻工业学院课 程 设 计 任 务 书题目 多物体重量自动测试系统设计专业、班级 学号 姓名 主要内容、基本要求、主要参考资料等:主要内容及基本要求设计一个重量(0500克)自动测试系统,要求该系统能自动测试物体的重量并能显示测量数据。另外,可设置扩展功能,如:键盘输入,打印等,要求完成以下几个环节:1检索资料,论证方案2设计系统硬件电路图,要求采用抗干扰措施3画出主要程序流程图4编写主要程序5完成课程设计说明书主要参考资料: 智能仪器,程德福,北京:机械工业出版社,2005智能仪器原理及应用,赵茂泰,北京:电子工业出版社,2004单片机应用系统开发实例导航,靳达,北京:人民邮电出版社,20

2、04基于单片机的智能系统设计与实现,沈红卫,北京:电子工业出版社,2005完 成 期 限:2008.1.7 - 2008.1.11指导教师签名: 专业负责人签名: 2008年 1 月 4 日目 录摘 要-11 硬件组成-11.1 硬件结构框图-11.2 各部分硬件电路实现-11.2.1 前端信号处理-21.2.2 A/D转换器-31.2.3 LCD显示接口电路-52 软件组成-62.1 流程图-62.2 软件说明-8总 结-8参考书目-8附 录-9摘 要本系统采用单片机80C51为控制核心,实现多物体重量自动测试系统的基本控制功能。系统的硬件部分包括最小系统板,数据采集、人机交互界面三大部分。

3、最小系统部分主要是扩展了外部数据存储器,数据采集部分由压力传感器、信号的前级处理和A/D转换部分组成。12864点阵式液晶显示。1、硬件组成:1.1、硬件结构框图:图1 硬件结构框图1.2、各部分硬件电路实现主控电路以80C51为核心扩展32K RAM;单片机使用6M晶振,P0口外接上拉电阻,增大了带负载能力;A12A15接74LS138译码器,输出作外部片选信号。 扩展了几个接口用于其它部分于单片机的通信1.2.1 前端信号处理INA126构成的放大器及滤波电路:图2 放大器及滤波器通过调节的阻值来改变放大倍数。微弱信号Vi1和Vi2被分别放大后从INA126的第6脚输出。A/D转换器ICL

4、7135的输入电压变化范围是-2V+2V,传感器的输出电压信号在020mv左右,因此放大器的放大倍数在200300左右,可将接成的滑动变阻器。由于ICL7135对高频干扰不敏感,所以滤波电路主要针对工频及其低次谐波引入的干扰。因为压力信号变化十分缓慢,所以滤波电路可以把频率做得很低。1.2.2 A/D转换器基于ICL7135的A/D转换器实现电路:图3 A/D转换器实现电路由于ICL7135内部没有振荡器,所以需要外接。但A/D转换器精度与时钟频率的漂移无关。正向积分时间T1和反向积分时间T2按相同比例增加并不影响测量的结果。ICL7135的时钟频率典型值为200kHz最高允许为1200kHz

5、,时钟频率越高,转换速度越快。每输出一位BCD码的时间为200个时钟周期,选通脉冲位于数据脉冲的中部,如果时钟频率太高,则数据的接受程序还没有接受完毕,数据就已经消失了。考虑到此系统频率要求不是太高,且单片机的工作频率也不是很高,因此我们取时钟频率的典型值:200kHz。由于频率比较低,对时钟漂移要求不高,采用阻容方式实现了。如下:图4 A/D转换器振荡电路此外ICL7135外部还需要外接积分电阻、积分电容,但A/D转换器精度与外接的积分电阻、积分电容的精度无关,故可以降低对元件质量的要求。不过积分电容和积分电容的介质损耗会影响到A/D转换器的精度,所以应采用介质损耗较小的聚丙乙烯电容ICL7

6、135还需要外接基准电源,这是因为芯片内部的基准源一般容易受到温度的影响,而基准电源的变化会直接影响转换精度。所以当精度要求较高时,应采用外接基准源。一般接其典型值1V。1.2.4 LCD显示接口电路.图5 LCD显示接口电路LCD复位信号通过反相器接到单片机的RESET上,上电或手动复位时将随单片机同时复位。由于复位后并行口输出高电平,LCD处于选中状态,此时LCD将输出内部状态字,将会影响数据总线上的数据传输。所以外接一个反相器。2、软件组成:2.1、流程图主程序流程如图所示:主程序流程如图中断服务程序流程图如下:中断服务程序流程图2.2 软件说明由于涉及到大量数据的运算,程序不宜采用汇编

7、语言,C语言大大缩短了开发时间,且程序可读性非常好。程序中对AD采入的数据进行了数字滤波,进一步减小AD读入数据的误差。总 结单片机课程设计是一次理论联系实际的训练,它在我们大学生活中占有重要的地位。 就我个人而言,我希望能通过这次课程设计为将来工作进行一次适应性训练,从中锻炼自己分析问题、解决问题的能力,为今后自己的研究生生活打下一个良好的基础。但是这次课程设计的确显得有点心有余而力不足:最重要的就是基本知识问题,由于平时只对书本知识进行学习,对单片机技术的实际应用没有太多的关注,导致在拿到课题的时候,有些束手无策,后来对相关知识进行了复习,才找到了思路。从这次设计也可以看出一些问题:1.心

8、态:应该保持认真的态度,坚持冷静独立的解决问题2.基本:认真学好基本知识,扎实自己的基本知识,使面对问题时不会遇到很多挫折,从而打击自己的信心,结果使自己很浮躁,越来越不想搞这设计,故应该好好学习基本知识,一步一步的来,不要急功近利!总的说来,虽然在这次设计中自己学到了很多的东西,取得一定的成绩,但同时也存在一定的不足和缺陷,我想这都是这次设计的价值所在,以后的日子以后自己应该更加努力认真,以冷静沉着的心态去办好每一件事情!参考书目:单片微型计算机原理与接口技术 科学出版社 高锋著C+程序设计与数据结构基础教程天津大学出版社 赵国瑞 主编附 录主控电路图电子秤的信号采集、处理、显示的程序.#i

9、nclude #include /ad控制线#define ad_244 XBYTE0xbfff;sbit ad_stb=P33; /AD转换器的26管脚,STRBsbit ad_start=P11; /lcd控制线sbit lcd_di=P17;sbit lcd_rw=P12;sbit lcd_e=P10;/7289控制线sbit cs7289=P13;sbit clk7289=P14;sbit dio7289=P15;/sbit key7289=P16; /7289查询方式sbit key7289=P32; /7289中断方式sbit baoja=P35;/7289子程序void ini_

10、7289(void);void send7289(short);short receive(void);void keyin(void);/lcd子程序void ini_lcd(void);void lcdd_send(short);void lcdi_send(short);void chk_busy(void);/ad子程序void ad(void);void baojing(void);void ini();void error1(void);void nop1()void change(s)int dealy; /全局变量short dot=0; /小数点标志bit list=0;sh

11、ort qb=0;char xdata shuju7=;short xdata bcd5;char xdata s116=单价: 元;char xdata s216=重量: Kg;char xdata s316=金额: 元;*void main()short i,j; long int x,z; int y; int xdata duilie3=0; P1=0xff; ini_lcd(); /初始化LCD lcdi_send(0x8a); /LCD命令字ini_7289(); /初始化7289 pizhong=ad1(); lcdi_send(0x1); /总清 屏 ini(); /初始页面

12、lcdi_send(0x1); /总清 屏 EA=1;EX0=1; /中断 /EX1=1; /ad_start=1; while(1) if(list)lcdi_send(0x80); /显示单位名称 for(i=0;i16;i+) lcdd_send(message3i); for(i=0;i4;i+) s1i=shangpinxi; x=qingdan01; d_change(x); change(s1); lcdi_send(0x90); for(i=0;i16;i+) lcdd_send(s1i); x=qingdan02; /显示重量 d_change(x); change(s2);

13、 s210=s29;s29=.; if(s28=32) s28=0x30; lcdi_send(0x88); for(i=0;i16;i+) lcdd_send(s2i); x=qingdan03; d_change(x); change(s3); lcdi_send(0x98); for(i=0;i16;i+) lcdd_send(s3i); for(j=1;jqb;j+) while(key7289); x=qingdanj2; d_change(x); change(s2); /显示数据 s210=s29; s29=.; if(s28=32) s28=0x30; lcdi_send(0x

14、90); for(i=0;i16;i+) lcdd_send(s2i); x=qingdanj1; d_change(x); change(s1); x=qingdanj0; for(i=0;i4;i+) s1i=shangpinxi; lcdi_send(0x80); for(i=0;i16;i+) lcdd_send(s1i); while(key7289=0); while(key7289); d_change(zongjia); change(s4); lcdi_send(0x80); for(i=0;i16;i+) lcdd_send(s4i); lcdi_send(0x90); f

15、or(i=0;i16;i+) lcdd_send(bianhaoi); lcdi_send(0x88); for(i=0;i16;i+) lcdd_send(message5i); lcdi_send(0x98); for(i=0;i1; x=duilie0; x=x1; x=x+duilie1+duilie2; zhongliang=ad1(); shizhong=zhongliang-pizhong; /数据转换 x=danjiash; jine1=shizhong*x; jine=jine1/1000; d_change(shizhong); change(s2); /显示数据 s210

16、=s29; s29=.; if(s28=32) s28=0x30; lcdi_send(0x90); for(i=0;i16;i+) lcdd_send(s2i); d_change(danjiash); change(s1); for(i=0;i4;i+) s1i=shangpinshi; lcdi_send(0x80); for(i=0;i16;i+) lcdd_send(s1i); d_change(jine); change(s3); lcdi_send(0x88); for(i=0;i16;i+) lcdd_send(s3i); d_change(zongjia); change(s

17、4); lcdi_send(0x98); for(i=0;i16;i+) lcdd_send(s4i); lcdi_send(0x98); /while(1); /LCD子程序void ini_lcd() /LCD初始化子程序 lcdi_send(0x30); lcdi_send(0x1); /总清 lcdi_send(0xc); lcdi_send(0x2); /光标右移,AC+1void lcdd_send(short X) /LCD发送数据子程序chk_busy(); nop1(); lcd_di=1;lcd_rw=0;lcd_e=0; P0=X; for(dealy=0;dealy5;

18、dealy+);/ lcd_e=1; X=X; P0=0xff;void lcdi_send(short X) /LCD发送指令子程序chk_busy(); nop1(); lcd_di=0;lcd_rw=0;lcd_e=0; P0=X; for(dealy=0;dealy5;dealy+);/ lcd_e=1; X=X; P0=0xff; void chk_busy()short i=0xff; while(i&0x80) lcd_di=0; lcd_rw=1; lcd_e=0; i=P0; lcd_e=1; /7289子程序void ini_7289()short i; cs7289=1;

19、 key7289=1; dio7289=1; /7289初始化子程序 for(i=0;i50;i+) for(dealy=0;dealy5000;dealy+); /延时25ms send7289(0xa4); cs7289=1;void send7289(short X) /7289发送数据子程序short i,j=1; cs7289=0; for(dealy=0;dealy=0;i-) j=ji; dio7289=X&j; j=1;j=1;clk7289=1; for(dealy=0;dealy1;dealy+) ; /延时10us clk7289=0; for(dealy=0;dealy

20、1;dealy+) ; /延时10us dio7289=0;short receive() /7289接收数据子程序short i,X=0; dio7289=1; for(dealy=0;dealy6;dealy+); /延时50us for(i=0;i=7;i+) clk7289=1; for(dealy=0;dealy1;dealy+); /延时10us X=X1; if(dio7289)X+; clk7289=0; for(dealy=0;dealy1;dealy+); /延时10us dio7289=0; return(X);/ad/AD子程序int ad1()short k,x; i

21、nt ad_zhi=0,xz; EA=0; ad_start=1; for(k=0;k1; xz=ad_zhi-50; xz=xz/100; ad_zhi=ad_zhi+xiuzhengxz; return(ad_zhi);void d_change(long X)char qian,bai,shi,ge,shifen,baifen; long int yu; if(X999999) error1(); qian=X/100000; yu=X%100000; bai=yu/10000; yu=yu%10000; shi=yu/1000; yu=yu%1000; ge=yu/100; yu=yu

22、%100; shifen=yu/10; baifen=yu%10; qian=qian+0x30; bai=bai+0x30; shi=shi+0x30; ge=ge+0x30; shifen=shifen+0x30; baifen=baifen+0x30; if(qian=0x30) qian=0x20; if(bai=0x30) bai=0x20; if(shi=0x30) shi=0x20; shuju0=qian; shuju1=bai; shuju2=shi; shuju3=ge; shuju4=.; shuju5=shifen; shuju6=baifen;void baojing()short i; for(i=0;i50;i+) baoj=0; for(dealy=0;dealy10;dealy+); baoj=1; for(dealy=0;dealy10;dealy+);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1