液位监测系统单片机课程设计报告Word格式文档下载.docx

上传人:b****5 文档编号:19017352 上传时间:2023-01-03 格式:DOCX 页数:12 大小:116KB
下载 相关 举报
液位监测系统单片机课程设计报告Word格式文档下载.docx_第1页
第1页 / 共12页
液位监测系统单片机课程设计报告Word格式文档下载.docx_第2页
第2页 / 共12页
液位监测系统单片机课程设计报告Word格式文档下载.docx_第3页
第3页 / 共12页
液位监测系统单片机课程设计报告Word格式文档下载.docx_第4页
第4页 / 共12页
液位监测系统单片机课程设计报告Word格式文档下载.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

液位监测系统单片机课程设计报告Word格式文档下载.docx

《液位监测系统单片机课程设计报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《液位监测系统单片机课程设计报告Word格式文档下载.docx(12页珍藏版)》请在冰豆网上搜索。

液位监测系统单片机课程设计报告Word格式文档下载.docx

开关

液位传感器

4位数码管

底座

四、设计方案及分析

.单片机最小系统电路

单片机最小系统电路如图1所示,由主控器STC89C52、时钟电路和复位电路三部分组成。

单片机STC89C52作为核心控制器控制着整个系统的工作,而时钟电路负责产生单片机工作所必需的时钟信号,复位电路使得单片机能够正常、有序、稳定地工作。

图1单片机最小系统

.时钟电路

STC89C52单片机芯片内部设有一个由反向放大器所构成的振荡器。

19脚(XTAL1)为振荡器反相放大器和内部时钟发生电路的输入端,18脚(XTAL2)为振荡器反相放大器的输出端。

在XTAL1和XTAL2引脚上外接定时元器件,内部振荡电路就会产生自激振荡。

本系统采用的定时元器件为石英晶体(晶振)和电容组成的并联谐振回路。

晶振频率为12MHz,电容大小为33pF,时钟电路如图所示。

图2时钟电路(晶振)

.复位电路

STC89C52的复位是由外部的复位电路来实现的,复位电路通常采用上电复位和按钮复位两种方式,本设计采用的是最按钮复位电路,其电路图如图所示。

图3复位电路

4.数码管显示电路

LED又称为数码管,它主要由8段发光二极管组成的不同组合,可以显示a~g为数字和字符显示段,h段为小数点显示,通过a~g为7个发光段的不同组合,可以显示0~9和A~F共16个数字和字母。

LED可以分为共阴极和共阳极两种结构。

共阳极结构即把8个发光二极管阳极连在一起。

这种装入数码管中显示字形的数据称字形码,又称段选码。

本设计用到的是LED显示器静态显示方式,其电路如图所示是发光二极管显示器(LED)的结构、工作原理及接口电路。

图4数码管电路

五、问题分析与解决方法

问题1数码管开始显示暗并且数字总是在跳动。

这个问题的结症严格意义上说没有得出答案。

当时数码管(共阳)位控,我们用的是9014号PNP型三极管,现象时显示结果暗淡并且跳动。

我们没有怀疑三极的问题而是把目标一致对准焊接电路,反复检查没有问题(检查方法:

该通的地方通,不该通的地方不通),即使这样也没有解决问题,最后根据数码管显示暗淡一个现象,就猜想通过字样各段的电流小。

试着调整三极管的放大倍数,将一个9014型三极管替换成9012型,结果成功了。

最后,我试着测试了一下9012和9014的方法倍数,结果显示9012的放大倍数β比9014的β大100左右。

问题2即使更换了三极管,数码管显示数字仍然在不停地闪动。

这个问题在硬件上已经改变了,相信硬件在显示方面不会出现问题,只能把目标哦对准软件的方面。

最初的主程序没有防止电压微小跳动而导致显示转换结果不稳定的,最懂显示结果微小跳动。

程序每走一遍,数码管就显示结果就刷新一遍。

那么我们就想,在电压输入电相同的情况下,那么记录上次的转换结果,如果本次转换结果与上次的相同,就不需要刷新显示数据,反之,则刷新。

这样的想法,促使我们使用了如下关键语,这样显示数组a[]不需要每次刷新,只是在数据变化的情况下刷新。

Temp1=P1;

//P1端口读的是AD0809的转换结果

if(temp!

=temp1){

temp=temp1;

a[3]=temp/1000;

a[2]=(temp/100)%10;

a[1]=(temp/10)%10;

a[0]=temp%10;

}

问题3.正确显示范围是0~255,但是一直显示的是85~165。

这个问题没有找到确定的答案。

最初怀疑软件,因为硬件电路在开始时已经仔细检出过,而且是不同的人独立检查的(这样利于发现问题,防止可能已犯误人把其他人引入定势思维),但是最终没有发现问题,只能把目光投向软件。

软件中AD0809工作需要整脉冲,上升沿是各个寄存器复位,下降沿AD0809开始工作。

我们给模拟正脉冲的程序加入了延时程序(st=0;

delayus();

st=1;

st=0;

),但是这样也没有改变结果。

问题4.检查硬件发现可能是AD0809没有工作,但是一直找不出来问题。

这个问题从始至终都没有找到确切的答案,只是有基于上个问题的

一些想法。

上个问题中,模拟输入电压在接入5V,数码管显示165,在接入0V显示65,显示结果不是很稳定,但是显示如上结果的概率在95%。

最初我们猜想是其他问题,因为输入5V和0V数转换的结果在变化,说明数码管工作了。

在过少次检查机想象中,都没能找到问题。

我们就试着改变了输入模拟电压,用两个相同的电阻分压,得到了2.5V模拟输入电压,但令我们惊讶的是现实结果没有变,而是接近5V的显示结果,甚至一样。

那么,AD0809一定没有工作,显示的只是初始化得乱码。

我们再次仔细检查了电路,没有发现问题。

经过我们小组几次讨论,得出如下结论:

AD0809本身可能就是坏的!

!

六、设计结果

1.方案图

2.总体电路原理图

3.软件流程图

 

4.软件设计

#include<

reg52.h>

typedefunsignedcharuint8;

typedefunsignedintuint16;

typedefunsignedlonguint32;

uint8a[5];

uint8j=0;

sbiteoc=P2^6;

sbitoe=P2^5;

sbitst=P2^7;

sbitADDR0=P2^0;

sbitADDR1=P2^1;

sbitADDR2=P2^2;

sbitADDR3=P2^3;

sbitclock=P2^4;

bitflag=0;

codeuint8table[]={0xc0,0xf9,0xa4,0xb0,

0x99,0x92,0x82,0xf8,

0x80,0x90};

voiddelay()//延时子函数

{

uint16i,K;

for(i=1;

i>

0;

i--)

for(K=50;

K>

K--);

}

/*voiddelayus()

unsignedinti=1000;

while(i>

0)i--;

}*/

voiddiplay()

switch(j)

{

case0:

ADDR0=1;

ADDR1=1;

ADDR2=1;

ADDR3=0;

j++;

P0=table[a[0]];

delay();

//显示第一位数码管

break;

case1:

ADDR2=0;

ADDR3=1;

//显示第二位

P0=table[a[1]];

case2:

ADDR1=0;

P0=table[a[2]];

//显示第三位

case3:

ADDR0=0;

j=0;

P0=table[a[3]];

//显示第四位

default:

break;

voidtimer0()interrupt1

flag=~flag;

clock=flag;

main()

uint16temp1=P1,temp=P1;

TMOD=0x02;

TH0=0xff;

TL0=0xff;

TR0=1;

EA=1;

ET0=1;

while

(1)

st=0;

delayus();

//给start一个上升沿脉冲,将内部所有寄存器清零

st=1;

//给start一个下降沿脉冲,开启AD转换

while(!

eoc);

//转换结束标志

oe=1;

//允许输出转换后的数据

temp1=P1;

//定义temp,用于表示从

ADC来的数据的各个位

oe=0;

delayus();

if(temp!

=temp1)

temp=temp1;

a[1]=(temp/10)%10;

diplay();

七、设计体会与收获

课程设计已经结束了,总的结果是我们组的结果没有做出来。

实话说,我觉得我们组尽力了,想进各种办法都没有结果。

我对结果是一个重视的人,当时心情低落。

在这次课程设计中,我是组长,结果没有出来,我觉得不是知识的缺乏,而是合作不佳,任务倒是分配好了,但是各份工作之间的衔接不是很融洽。

这可能就是结果没有出现的结症。

对于老师所说的分发成果的例子,我觉得这样(27%、25%、25%、23%)最好,最高的是思想和框架的设计,其次是软件,再次是焊接电路板的,最后是整体检测结果的。

这个分配可能不符合我们组情况,因为最后一步卡住正确结果。

所以针对这种情况,每个人在原有的基础上都减少0.5%,共计2个百分点,作为自由分配项。

当然这个权利在我的手里,可以根据每个人的情况决定5个百分点的分配(可以是一个人的,也可以是两个人的,当然更可以是三个或者整个团队均分)。

那么最后的分配方式就是:

整体思想和框架设计——26.5%;

软件设计——24.5%;

硬件焊接布线——24.5%;

检测调试——22.5%;

自由分配点——2%。

在这次课程设计中,我主要负责检测调试的任务。

对于这次课程设计,总体感觉挺遗憾的,因为我们组没有出结果,对此,我觉得我的责任很大。

在硬件焊接完成并下载进去程序后,发现结果出不来。

在反复研究程序和仿真图之后,发现两者都没有问题,然后又多次检查板子,测试是否是焊接的问题,发现焊接也没有问题,之后就陷入了困境。

然后又经过反复检测程序和硬件焊接,解决了数码管显示数字暗并且不稳定的问题,但最后还是很遗憾的没有出结果。

但是,在这次课程设计中,我还是学到了很多东西,不仅是关于数电、模电、单片机方面的,还有关于团队合作方面的。

相信这些一定会是我以后工作和学习中的财富!

在这次课程设计中,我主要负责了程序设计和ISIS仿真模块的任务。

在最初的时候,我其实不知道如何下手,经过全组的讨论,我整体的把握了设计的方向与脉络。

在此之后我自己在网上搜集资料,观看有关的教学视频,翻查教学课本,补充了这次课程设计需要用到的相关知识。

在ISIS中把电路搭好以后,我先从显示入手,编写简单程序,让数码管显示预期的效果,之后再慢慢一步一步往下走。

在此期间,我也遇到了一些问题,比如四个数码管只有三个显示,我在不断调试后添加了一条switch语句,就解决了这一问题。

再比如ADC0809的时钟脉冲我不知道如何在硬件中给出,请教了老师以后,知道了可以用上课时老师讲过的定时和中断来实现。

在最后仿真顺利完成,队友们开始搭建硬件电路。

电路完成,又出现了一些问题,排除线路等硬件的问题,我开始修改程序,后来发现,由于最后显示模块刷新的太慢造成了显示的不稳定,于是我又加入了三个display(),形成四个刷新模块一起顺序执行,就顺利的一次性将四个数码管的显示刷新完毕,从而解决了这一问题。

虽然在最后我们没有得到想要的最终结果,但是我在这次课程设计中,学到很多,我知道了如何在调试中发现错误,解决问题,学会了如何团队合作,如何在仿真与实际不一致的情况下用实际电路反观程序,调整问题。

这次课程设计的收获,将成为我以后学习与工作的宝贵财富。

通过这次课程设计,我们学习了一些关于单片机和传感器方面的知识,在课程设计过程中,我们小组遇到了许多问题,在仿真过程,虽然仿真没出问题,但是在焊板子和硬件调试,出现了比较大的问题,没有显示出想要的结果,经过两星期的课程设计,最终还是没有结果,让我们感到非常遗憾。

在焊板子时,布线不是很好,导致格局有点凌乱,以后要注意这方面的细节处理。

通过这次课程设计,我们四人小组的共同努力下,还是取得了一些成果,让我们意识到我们本身的不足。

八、参考文献

[1]彭介华编.电子技术课程设计指导[M].北京:

高等教育出版社,1997

[2]张建华主编.数字电子技术[M].第2版.北京:

机械工业出版社,2000 

[3]常健生主编.检测与转换技术[M].第3版.北京:

机械工业出版社,2003

[4]张毅刚主编.单片机原理及应用[M].北京:

高等教育出版社,2003

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

当前位置:首页 > 党团工作 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1