1、4).掌握小信号的放大,滤波与采集5).熟悉调试方法和技巧,提高解决实际问题的能力6).熟悉设计报告的编写过程1.2 设计要求:1).三个按键控制照明灯的控制2).对小信号进行放大,滤波和采集3).1602液晶显示所测光照强度二、方案总体设计设计一个基于51单片机的光照强度检测系统。液晶屏幕第一行显示接通照明灯的最低允许光照强度,第二行显示当前光照强度;利用光敏电阻随光照强度的改变而相对应地变化的特性来分压产生一个小信号,再通过运放进行放大,最后通过AD转换进行采集,并且显示出来。利用按键对照明灯控制状态进行调节。蓝滑动变阻器来调节液晶亮度。2.1 方案一:由于光敏电阻的阻值范围比较大,并且要
2、输出一个小信号,所以提供给光敏电阻和用于分压的电阻的电压。利用一条由两个电阻组成的分压电路来提供一个小电压。利用两极运放对小信号进行放大,第一级放大10倍,第二级放大5倍,总体放大50倍。利用ADC574进行8位数据的转换,单片机通过P1引脚将数据采集存储,再软件滤波,利用算数平均滤波的方法滤波。再用四位数码管显示出来。用三个按键调节照明灯的控制状态照明灯,一个控制照明灯的总开关,按一下照明灯是否允许亮的状态就改变,一个控制设置的允许照明灯亮的最高亮度值进行单位加,另一个控制设置的允许照明灯亮的最高亮度值进行单位减。利用一个引脚接控制一个照明灯。2.2 方案二:利用一条由一个稳压二极管和一个电
3、阻组成的分压电路来提供一个小电压。利用一极运放对小信号进行放大,放大50倍。利用ADC0809进行8位数据的转换,单片机通过P2引脚将数据采集存储,再软件滤波,利用中位值滤波的方法滤波。再用液晶1602显示出来。2.3系统采用方案1)总体设计:系统总体框架图如图所示 :图1 系统总体框架2)总体方案工作原理在给光敏电阻提供一个用于分压的电源时,如果利用两个电阻分出电压的话,当光敏电阻的阻值变化时,分出来的电源电压就会变化。所以采用稳压二极管分一个电压,这样更稳定。采用运放的时候,如果用二级运放,由于运放存在零漂,这样会会使得零漂的现象更加严重,但如果只用一级放大并且放大的倍数达到几十倍的话,失
4、真的现象又会变严重。至于到底失真多大,就不得而知,并且零漂的问题无从解决,就选择一级放大。如果选用ADC574的话,还要接正负15V电源供电,选择ADC0809直接用5V供电。所以选择ADC0809。因为既要显示允许照明灯亮的最高光照值,又要显示当前的光照强度值,为了更直观的显示,选择1602液晶。根据这些对比,最终选择选择方案二。三、硬件设计3.1 单片机最小系统单片机要正常工作,首先要产生片内时钟信号。在单片机内部的振荡器的输入端XTAL1和输出端XTAL2之间接一个石英晶振就可以够成一个自激振荡器。再在两端之间串联接个电容并且在两个电容之间接地以便于稳定频率还对振荡频率有微调作用。电容通
5、常选30uF左右,振荡脉冲频率范围为024MHZ。该电路中选用12MHZ晶振。时钟电路图如下:、图2 时钟电路图单片机在启动时与其他微处理器一样,要让CPU及系统各部件处于确定的初始状态,并从初始开始工作。这就需要复位操作。复位电路有两种方式:上电自动复位和按键自动复位。上电自动复位只是在开始接通电源瞬间复位,接下来想要再次复位就需要断电重启,不方便。按键自动复位不仅可以在开始接通电源瞬间复位还可以通过按下按键复位随时复位。所以选择按键复位方式。复位电路如下:图3 复位电路图3.2 液晶显示模块该系统需要显示两行。控制1602液晶亮度的是蓝白滑动变阻器。1602液晶有16个管脚。编号为1,2管
6、脚为电源正负极管脚,15,16为背光源正负极管脚;714为dataI/O管脚与单片机的P0口相连,负责液晶与芯片之间的信息传送;4,5,6分别为数据/命令选择端、读/写选择端、使能端,与单片机的, P3.3,P3.5,P3.6相连,负责控制液晶与芯片之间数据命令的读写操作;3为液晶显示偏压信号端,用于调整液晶显示对比度。1602液晶显示原理图如下:图4 液晶显示系统图3.3 系统电源为了方便控制系统的上电与断电,系统电源中连接了一个8*8的蓝白自锁开关。此开关两边各有三个引脚,不同的连接方式,开关的控制方法就不同。带有字母的那面为正面,从正面观看,该秒表的电源的正极接在蓝白自锁开关的左边,负极
7、则接在蓝白自锁开关的右边。为了方便观察电源是否接上,在电路中的VCC与GND之间接一个发光二极管并且加一个1K的限流电阻防止发光二极管烧坏,电源通电时发光二极管亮,断电时,则暗。再接四个排针,靠两边的两个排针用于外部电源给系统上电,中间的两个排针是用于单片机烧录程序。如图所示:图5 系统电源图3.4 整体电路这是采用网络标号的画出的以一张整体电路图。它将整张秒表的电路原理图分为七个部分:电源模块,P0口上拉电阻,1602液晶显示模块,51单片机,复位晶振电路,控制按键,清零按键。整张原理看起来美观,并且根据标号很容易找到与之对应的引脚。在看原理图的时候,看到提供了两种液晶显示系统的模板,我就分
8、析了一下电路原图,认为两种版本的原理图连接方式都是正确的,并且第一种版本的还和上次做数码管显示的秒表更相似,焊接的时候可能更容易上手。我就选择做第一版本的原理图去做液晶显示的秒表。在焊接的时候,我突然想到为什么要提供两个版本的原理图给我们。我就去问了一下同学,结果得知,老师要求按照第二版本的原理图来做。但是已经有几个元器件焊到板子上去了,无法更改只能照着第一版本的原理图继续做下去。而事实是第一版本的设计不合理,是要反方向安插液晶的。这次错误给了我一个深刻地教训,在我刚看到有两个版本的原理图时,我就应该问自己一下,为什么要提供两个版本的原理图,这两个版本的原理图对比起来有什么不同,我应该选择哪个
9、版本的。最后为了确定我的选择是否正确,我还应该问一下知道的同学,这样才能避免犯错。图6 整体电路图图7 PCB整体电路图图8 洞洞板整体电路四、软件设计4.1 keil软件介绍Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统。Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。单片机开发中除必要的硬件外,同样离不开软件,我们写的汇编语
10、言源程序要变为CPU可以执行的机器码有两种方法,一种Keil软件图标是手工汇编,另一种是机器汇编,目前已极少使用手工汇编的方法了。机器汇编是通过汇编软件将源程序变为机器码,用于MCS-51单片机的汇编软件有早期的A51,随着单片机开发技术的不断发展,从普遍使用汇编语言到逐渐使用高级语言开发,单片机的开发软件也在不断发展,Keil软件是目前最流行开发MCS-51系列单片机的软件,这从近年来各仿真机厂商纷纷宣布全面支持Keil即可看出。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部份组合在一起。运行K
11、eil软件需要Pentium或以上的CPU,16MB或更多RAM、20M以上空闲的硬盘空间、WIN98、NT、WIN2000、WINXP等操作系统。掌握这一软件的使用对于使用51系列单片机的爱好者来说是十分必要的,如果你使用C语言编程,那么Keil几乎就是你的不二之选(目前在国内你只能买到该软件、而你买的仿真机也很可能只支持该软件),即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。
12、用过汇编语言后再使用C来开发,体会更加深刻。4.2程序流程图图9 主程序流程图图10 定时器中断程序流程图五、仿真与实现5.1 proteus软件介绍Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年又增加了Cortex和DSP系列处理器,并持续增加其他系列处理器
13、模型。在编译方面,它也支持KEIL,IAR和MPLAB等多种编译器。PROTEUS不仅可将许多单片机实例功能形象化,也可将许多单片机实例运行过程形象化。前者可在相当程度上得到实物演示实验的效果,后者则是实物演示实验难以达到的效果。它的元器件、连接线路等却和传统的单片机实验硬件高度对应。这在相当程度上替代了传统的单片机实验教学的功能,例:元器件选择、电路连接、电路检测、电路修改、软件调试、运行结果等。使用Proteus软件进行单片机系统仿真设计,是虚拟仿真技术和计算机多媒体技术相结合的综合运用,有利于培养学生的电路设计能力及仿真软件的操作能力;在单片机课程设计和全国大学生电子设计竞赛中,我们使用
14、 Proteus 开发环境对学生进行培训,在不需要硬件投入的条件下,学生普遍反映,对单片机的学习比单纯学习书本知识更容易接受,更容易提高。实践证明,在使用Proteus进行系统仿真开发成功之后再进行实际制作,能极大提高单片机系统设计效率。因此,Proteus有较高的推广利用价值。5.2 仿真过程 图2为使用keil软件编写程序时的调试过程图。我用的是C语言来编写。第一次编写完程序后,然后编译一下,出现的对话框中显示有几个错误,点击错误提示,主程序会出现光标只向错误的地方,根据这个错误提示,然后进行更改,再编译一下,程序还是显示有错误,再重复上次的操作,进过了几次修改后,就如图所示没有错误提示了
15、。编写程序就是这样,需要不断修改,程序才能准确。程序编写好,还要编译成HEX文件。只有HEX文件才能烧录到到单片机上。图11 keil软件仿真图图10为proteus仿真原理图。在proteus界面连接好电路图后,箭头放在单片机上单击右键,会出现一个对话框,可以通过这个对话框中的选项,加载程序到仿真图的单片机中,也进行元器件的放置方向进行调整,也可以删除元器件,还用很多功能选择项,不过在画这张原理图时暂时还没用到。在出现的对话框中点击EDIT PROPOTES再在出现的对话框中点击program file那行的那个文件图标,从里面找出先前已经在KEIL软件中编译的HEX文件,。点击文件后,然后
16、在单击edit component对话框的右上角的OK选项。然后点击Proteus的首界面的左下角形状是黑色三角型的play键,仿真图上的显示系统就出现了初始状态,单击控制开关,秒表开始计数,再单击一下控制开关后,计时停止。也可以点击play键右边那个step键,让程序一步一步执行step键右边是pause键,按一下这个键程序就暂停运行,再按一下程序就又开始运行。仿真完后按一下stop键结束仿真。当看到仿真电路上出现现象和操作时所达到的效果和我在编程时所预想的情况一样后,再保存所画的电路图,单击左上角的file中,再在出现的选项中单击save,可以选择自己想要保存的地方。下次打开proteus
17、时可以单击file,再在出现的选项中单击open design的选项,可以从保存的地方直接选择所画的电路图打开,并且可以直接仿真。在要用proteus仿真软件的时候,刚开始不会使用,因为我电脑里有学习这款软件的视频,然后我就看视频学习。老师看到我在看视频学习时,就要我不要通过看视频学习,直接看文档,先简单的学一些,够现在用就行,以后边用边学。确实通过看文档,边看边操作,再问一下同学,没花多少时间我就可以使用了。要不是老师指导一下,我可能要花上好多时间在学习proteus软件上面。在以后学习中,我尽量多看书,看视频虽说细致但太费时间,看书实在看不懂再去看看详细讲解的视频,特别是学习软件,看视频不
18、单费时间,看了还容易忘,看文档边看边操作,花的时间少还记得牢。图12 proteus仿真图5.3 实物制作与调试图13为实物图的背面,图14为实物图的正面。在焊接的时候,出现了许多问题,锡上的有点多,有一个地方焊得太久把铜片焊得脱落了。刚焊好板子之后,我就通上电去试一下,按下蓝白自锁按键,结果什么现象都没有。我想也是上次做的数码管显示秒表也是一样有那个地方出现虚焊,或者没有焊接上。接下来我就用万用电表仔细检查,首先我检测的地方就是VCC接到1K电阻再接到发光二极管又接到GND的这条线路。当我用万用电表的红表笔接到发光二极管的正极,黑表笔接到发光二极管的负极时,万用电表发出了表示短路的响声,那就
19、说明发光二极管两端短路了,我初步一看,没什么问题,但肯定是有问题的,只是我没注意到。我再自已一看,原来发光二极管的两个管脚直脚有一条很细的焊锡丝连接着,需要仔细看才能发现,这也是我在焊的时候没有注意到的原因。我再用电烙铁把这条线断开,在通上电试一下,发光二极管就亮了,程序也可以烧录进去。程序是下进了,但是1602液晶的显示状态却不理想,什么都没有显示出来,由于我还没有调试过蓝白滑动变阻器,所以我想可能是,蓝白滑动变阻器没有调到一个正确的数值造成的,我一边旋转滑动变阻器一边观察1602液晶的显示情况,不久就出现数字了,但是显示出现乱码,我想可能是变化的太快的原因,于是我就改变了延时的时间,使之符
20、合延时时间的标准长度,结果还是一样。我就觉得很奇怪,软件应该没有问题,因为我一年就编过相似的程序,我以为是液晶的问题,我就换了一块在其他同学那里显示正常的液晶,可结果还是一样。当我换一块焊接样式相同的板子烧录我的程序试一下时,一切正常,这说明我的软件没问题,硬件出现错误。于是我仔细检查了一下,电路的布线以及元器件的选取,都正常。我想肯定是出现了虚焊,我就拿着万用电表仔细检测,在用表笔戳的时候,断断续续有两三根金属线从焊锡上掉下来,我有意义重新焊上去,再一一检测液晶显示是否正常,经过了几次检测,液晶最终显示出来我所设计的字样。在整个的制作当中出现过许多问题,其实很多老师也讲过,但有时候在忙着自己
21、的,没有仔细听,以至于后来又要根据老师的要求改动,耽误更多的时间。所以我觉得,老师在讲的时候就应该立马停止手头的一切,好好挺清楚,尤其是刚做课题设计,好多东西不清楚,更需要注意很多细节。图13 实物图背面图14 实物图正面5.4 使用说明如图12所示:此光照检测系统包含的元器件有:STC89C52单片机一块,一块1602液晶,LM358一个,ADC0809一块,三个按键,一个照明灯,103排阻一个,一个插液晶的排母,四个排针,若干个电阻,一个电解电容,两个瓷片电容,一个红色的放光二极管,一个蓝白自锁开关,一个晶振,一个104的蓝白滑动变阻器。整个系统布置在一块1510大小的洞洞板上。1602液
22、晶第一行用于显示允许照明灯凉亮的最高光照强度值,第二行用于显示当前光照强度值。单片机下方的按键为控制照明灯是否允许照明的按键,每按一次控制键,是否允许照明的状态就改变一次。第二个按键是增加允许照明灯亮的最高光照强度值。在允许照明灯照明的情况下才工作。第三个按键是减少允许照明灯亮的最高光照强度值。液晶右边的那个按键为复位按键,每按一次系统就复位一次,回到初始状态。复位按键上方的四个排针从左至右依次接5V的VCC,RXD,TXD,GND。复位按键下方的蓝白自锁开关为电源开关,当排针接好电源后,按下蓝白自锁开关则系统上电,按起蓝白自锁开关则系统断电。蓝白自锁开关上方的红色发光二极管为电源指示灯,当系
23、统接通电源时,指示灯亮,当系统断开电源时,指示灯暗。通过调节蓝白滑动变阻器可以调节液晶的对比度。使用前应先上电。再调节滑动变阻器使1602液晶有一个合适的对比度。液晶开始显示时,第一行显示“low:020”,第二行显示present以及当前的光照强度值。从左往右书,按下第一个按键后,就可以对第一行的允许灯亮的最高光照强度值进行设置。按下第二个键就可以看到第一行的数值加1,且每按一次就加1,。按下第三个键,就会看到,第一行数值减1,且每按一次就减1。调节光敏电阻的受光强度,就会发现,当第一行的数值大于第二行的数值时,照明灯就亮。当再按一下第一个按键后,再去按第二个或第三个就无法调节第一行数值了。
24、并且即使当第一行的数值大于第二行的数值时,照明灯也不亮。六、总结6.1设计总结:我的课题是基于51单片机秒表的设计。当我选择了这个课题的时候,我就先开始想在平常生活中光照强度的功能是怎样的,需要一些什么器件来实现这些功能。在确定了自己要设计一个怎样的光照检测系统之后就开始列出做这个系统所需要的元器件。这个系统是基于给定的显示系统上设计的,所以在设计电路原理图之前,我先要掌握给定的显示系统原理图的连接方式和连接原理。这一些都弄明白之后,我再考虑如何在现有的基础上进行外围设计使之达到预想的功能。经过一番斟酌,确定我的外围硬件只需添加一个独立按键就可以实现秒表的功能。由于我的秒表元器件是焊接在一个1
25、0*15大小的洞洞板上,所以为了以后方便焊接,减少焊接错误,需要在洞洞板软件中的一个1510大小的洞洞板底图上画出洞洞板图,设计线路的时候要尽量减少飞线的使用,画完之后和给出的图进行对照,确定我没有连接错误之后,修正洞洞板图,使线路没有断路并且更加笔直,接点处没有连线出头,修正完后保存洞洞板图。硬件设想好了,接下来,我就要给我所要设计的秒表进行软件设计,使之实现智能化。进过了几次调试之后,在keil软件中我的程序显示0 error。没有错误的程序,不代表它就能实现我预期的功能。为了初步验证我的编写的程序所达到的效果,就需要用仿真软件在电脑进行仿真。而在前面已经介绍过了,在仿真软件当中,prot
26、eus软件是一款非常适合我们的软件,所以我们一般选择使用proteus软件进行仿真。在proteus软件界面画好电路图之后,检查一下,确定连接符合洞洞板原理图后,再加载之前在keil软件中编译好的HEX文件,单击play键开始程序运行,观察液晶显示的初始状态,操作秒表的原理图上的控制按键,观察运行过程中数码管显示出的状态,以及蓝色和红色小方点所显示的电平变化。根据现象进行调试,直到仿真软件上的秒表和预想的一致。仿真的步骤完成后,就开始画DXP原理图,采用网络标号的形式更加方便,只需要把系统分成各个小模块,在元器件的接口上标明该接口所连接单片机的对应的引脚,再分区放置标明模块。图的大体结构画完之
27、后再和给出的图进行对照,确定我没有连接错误之后,修正DXP原理图,使线路没有断路并且更加笔直。DXP原理图画完后,整个电路设计就算完成了。我的设计过程与思路大体就是这样子。6.2经验总结:我觉得一个课题设计中的心得体会是非常重要的一部分,这是一个经验的积累与总结。在刚开始设计这个秒表时,我只是自己根据生活经验来设想这个秒表的功能,而自己所想到的却只是比较接触多的,所想到的会比较单一,有些功能根本没有想到,以至于所做的系统功能太少,太简单。我设计秒表的时候就只想到控制它的运行与停止,清零以及记录时刻。由于是四位数码管显示无法记录,所以这个功能省去。但做到后面我才想到其实还可以加一个倒计时以及倒计
28、时完报警的功能。但板子已经做好了,就没有去改了。所以在设计的时候一定要想的周全,多查资料,设计一个在自己能力范围之内功能又合理的东西。通过这次单片机课程设计,我不仅加深了对单片机理论的理解,将理论很好地应用到实际当中去,而且我还学会了如何去培养我们的创新精神,从而不断地战胜自己,超越自己。创新可以是在原有的基础上进行改进,使之功能不断完善,成为真己的东西。们安排了这次单片机课程设计,给了我们学以致用的做好的实践。对于这次课程设计,我们花费了比较多的心思,既是对课程理论内容的一次复习和巩固,还让我们丰富了更多与该专业相关的其他知识,比如软件应用等,在摸索中学习,在摸索中成长,在学习的过程中带着问
29、题去学我发现效率很高,这是我做这次课程设计的又一收获,在真正设计之前我们做了相当丰富的准备,首先巩固一下课程理论,再一遍熟悉课程知识的构架,然后结合加以理论分析、总结,有了一个清晰的思路和一个完整的的软件流程图之后才着手设计。在设计程序时,我们不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;养成注释程序的好习惯是非常必要的,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也能为资料的保存和交流提供了方便;我觉得在设计课程过程中遇到问题是很正常,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题的课程设计又出错了。此次的设计,其实也是我们所学知识的一次综合运用,让我深深的认识到了学习单片机要有一定的基础,要有电子技术方面的数字电路和模拟电路等方面的理论基础,特别是数字电路;也要有编程语言的汇编语言或C语言。要想成为单片机高手,我们首先要学好汇编语言,然后转入C语言学习,所以我们不能学到后面就忘了前面的知识,更应该将所学的知识紧紧的结合在一起,综合运用,所谓设计,就是要求创新,只有将知识综合运用起来才能真正的设计好。七、参考文献1 杨长兴、刘卫国.C+程序设计:中国铁道部出版社2 李朝青.单片机原理及接口技术(第三版):北京航空航天大学出版社3 程德福、林君(第二版)智