基于单片机的光强检测系统.doc
《基于单片机的光强检测系统.doc》由会员分享,可在线阅读,更多相关《基于单片机的光强检测系统.doc(30页珍藏版)》请在冰点文库上搜索。
微处理器原理与应用课程设计报告
基于单片机的光强检测系统
2018年11月30日
25
摘要
随着电子技术的发展、数字电路应用领域的扩展,现今社会,产品智能化、数字化已成为人们追求的一种趋势,设备的性能、价格、发展空间等备受人们关注。
性能好的电子设备,对外围保护电路要求很高,尤其是精密仪器对光线要求等设备要求更高,为了延长设备的使用寿命。
所以,在企业设备保护中,设计一款智能的光电检测电路尤为重要。
本设计采用单片机作为数据处理与控制单元,为了进行数据处理,通过光敏电阻来感应光强弱变化,经过ADC0804转换,直接将数字信号送入到单片机中进行数据处理。
单片机数据处理之后,将光照强度发送到LED进行显示,并通过和LED进行声光。
关键词:
单片机,ADC0804,光敏电阻
ABSTRACT
Withthedevelopmentofelectronictechnology,theexpansionofthedigitalcircuitapplications,today'ssociety,theproductofintelligent,digitalhasbecomeatrendforpeopletopursue,equipmentperformance,price,roomfordevelopment,andsomuchattention.Goodperformanceelectronicdevices,highexternalprotectioncircuit,precisioninstruments,lightrequirements,equipmentrequirements,inordertoextendtheusefullifeofequipment.Therefore,intheprotectionofbusinessequipment,thedesignofanintelligentphotoelectricdetectoralarmcircuitisparticularlyimportant.
Thisdesignusesamicrocontrollerasdataprocessingandcontrolunitfordataprocessing,theSCMADC0804acquisitionphotoresistorand10Kresistorvoltagedividertosensethelightintensitychange.MCUdataprocessingwillbesentwhenthelightintensitytotheLEDdisplay.SoundandlightalarmbuzzerandLED.
Keywords:
MCU,ADC0804,Photoresistor,buzzer
目 录
摘要 I
ABSTRACT I
第一章系统需求分析 1
1.1课程设计任务及要求 1
1.2软、硬件运行环境及开发工具 1
1.3系统功能要求 1
第二章光强检测系统的总体设计 2
2.1系统的方案分析 2
2.1.1单片机的选型 2
2.1.2显示方案选择 3
2.1.3AD转换方案 3
2.2工作原理 3
2.3总电路原理图 4
第三章光强检测系统的软、硬件设计与实现 5
3.1软件设计 5
3.1.1ADC子程序 6
3.1.2数据处理程序 7
3.1.3显示子函数 8
3.1.4按键程序 9
3.2硬件设计 9
3.2.1AT89S52单片机 10
3.2.2AT89S52的时钟电路 11
3.2.3AT89S52的复位电路 12
3.2.4ADC0804电路 12
3.2.4.1A/D转换器芯片ADC0804简介 12
3.3.5.2AT89S52单片机与ADC0804的接口 14
3.3.6显示电路 14
3.3.7光强采集电路 16
3.3.8键盘电路 16
3.3.9控制输出电路 17
第四章系统调试与操作说明 19
4.1系统调试 19
4.1.1系统硬件调试 19
4.1.2系统软件调试 19
4.1.3系统功能调试 19
4.2问题分析 19
第五章课程设计总结与体会 21
参考文献 22
附录:
源程序 23
第一章系统需求分析
1.1课程设计任务及要求
本次课程要求设计一套光强检测系统,包括:
(1)系统实物
(2)系统软件仿真
(3)系统硬件原理图
1.2软、硬件运行环境及开发工具
本系统是基于单片机的光强检测器的设计,设计程序代码使用C语言编写,设计的软件开发环境采用KeiluVision4软件,系统仿真采用Protues软件,系统硬件电路板的绘制采用AltiumDesigner软件。
1.3系统功能要求
本系统是基于单片机的光强检测器设计,其利用单片机作为系统的主要控制器,通过光敏电阻和10K电阻分压,经过ADC0804转换,直接将数字信号,送入到单片机中进行数据处理,经过一定的控制算法后通过LED显示,达到良好的人机交互。
本系统运用AT89S52单片机作为主控制单元及数据处理单元,控制光敏电阻检测光强信号,数据处理。
实现基本的人机对话功能,显示光强值。
第二章光强检测系统的总体设计
2.1系统的方案分析
系统总体框图,如图2-1:
图2-1系统总体框图
以AT89S52单片机为核心,在单片机内部完成数据的存储及处理功能,通过数模转换芯片完成模拟信号到数字信号的转换及输入,再将数据存入存储芯片,在单片机进行数据处理后再对需要显示的数字信号进行译码显示在四位一体七段数码显示器上。
每个芯片的电源处有耦合电容相连,当电容器充电达到2V时,此电容就作为电源为电路提供工作电压。
单片机的RESET口上提供了供电自启动,在X1,X2口上提供了12MHZ晶振,以支持单片机的运行与启动。
系统完成了采集功能,存储功能,数据处理功能,测量数据显示功能,达到了设计的基本要求。
2.1.1单片机的选型
在本设计中单片机是系统的控制核心,因此,单片机的选择,对于所设计系统的实现以及功能的扩展有着很大的影响。
单片机种类很多,在众多51系列单片机中,较为常用的是ATMEL公司的AT89S52和AT89S52单片机。
AT89S52片内4KROM是Flash工艺的,使用专用的编程器自己就可以随时对单片机进行电擦除和改写,片内有128字节的RAM。
AT89S52已满足本次设计的要求,同时我们对于这个单片机芯片也较为熟悉,因此,在本次设计中选用了ATMEL公司的AT89S52单片机。
2.1.2显示方案选择
(1)七段LED数码显示
在单片机系统中,发光二极管(LED)常常作为重要的显示手段。
LED显示器内部由7段发光二极管组成,因此亦称之为七段LED显示器,由于主要用于显示各种数字符号,故又称之为LED数码管。
每个显示器还有一个圆点型发光二极管,用于显示小数点。
但其显示并不是很直观,同时编程相对复杂,可显示字符比较少,但成本相对很低廉。
(2)液晶显示模块芯片
LCD为英文LiquidCrystalDisplay的缩写,即液晶显示器,是一种数字显示技术,可以通过液晶和彩色过滤器过滤光源,在平面面板上产生图象。
在实际应用中,用户很少直接设计LCD显示器驱动接口,一般是直接使用专用的LCD显示驱动器和LCD显示模块。
其中,LCD显示模块LCM(LiquidCrystalDisplayModule)是把LCD显示器、背景光源、线路板和驱动集成电路等部件构成一个整体,作为一个独立的部件使用,具有功能较强、易于控制、接口简单等优点,在单片机系统中应用较多。
而本次选择的4位一体的LED数码显示模块,具有价格低、功耗低、连接方便等特点,已经成为单片机应用设计中最常用的信息显示器件了。
2.1.3AD转换方案
A/D转换采用ADC0804。
ADC0804由一个8路模拟开关、一个地址锁存与译码器、一个A/D转换器和一个三态输出锁存器组成。
多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用A/D转换器进行转换。
三态输出锁器用于锁存A/D转换完的数字量,当OE端为高电平时,才可以从三态输出锁存器取走转换完的数据。
2.2工作原理
本系统是基于单片机的光强检测器设计,其利用单片机作为系统的主要控制器,通过光敏电阻和10K电阻分压,经过ADC0804转换,直接将数字信号,送入到单片机中进行数据处理,经过一定的控制算法后通过LED显示,达到良好的人机交互。
本系统运用AT89S52单片机作为主控制单元及数据处理单元,控制光敏电阻检测光强信号,数据处理。
实现基本的人机对话功能,显示光强值。
2.3总电路原理图
第三章光强检测系统的软、硬件设计与实现
3.1软件设计
根据系统功能,可以将系统设计分为若干个子程序进行设计,如光强采集子程序,数据处理子程序、显示子程序、执行子程序。
采用KeiluVision4集成编译环境和C语言来进行系统软件的设计。
系统要完成光强检测器,需要实现光强信号的采集与A/D转换、数据处理、数据显示、数据输出等基本功能。
从功能上可将其分为光强信号采集及A/D转换、数据处理、人机交互、执行四大部分进行设计,软件系统框图如图3-1所示:
数据处理子程序
人机交互子程序
程序
光强采集子程序
控制执行
子程序
图3-1软件系统框图
光强信号采集子程序,主要完成光强信号采集与A/D功能。
采集子程序主要包括单片机给ADC0804写命令、单片机ADC0804写数据、单片机从ADC0804读数据等部分。
数据处理子程序,当单片机收到温度传感器发送的温度数据后,数据处理子程序对该数据进行处理,主要是把采集到的二进制的温度数据转换成十进制温度数据。
人机交互子程序包括按键子程序、LED显示子程序。
LED显示子程序的功能是,实现将数据处理后的十进制光强数据,使用LED显示出来。
执行子程序,该子程序所实现的功能,是把程序设置的系统光强限定值与数据处理子程序处理后的当前光强值进行比较,根据比较的结果,执行单片机的I/O口输出的状态。
控制LED灯与主程序流程图如图3-2所示:
光强限值设置子程序
光强采集子程序
执行子程序
显示子程序
数据处理子程序
设置键按下
N
Y
初始化
采集光强
N
Y
开始
返回
图3-2主程序流程图
3.1.1ADC子程序
模/数(A/D)转换测量子函数用来控制对ADC0804的模拟输入电压进行A/D转换,并将对应的数值移入内存单元。
其程序流程如图3-3。
开始
启动一次转换
A/D转换结束?
EOC=1?
N
Y
取数据(OE=1)
返回
图3-3A/D转换测量子函数流程图
ALE为地址锁存允许输入线,高电平有效。
ST为转换启动信号。
当ST上跳沿时,所有内部寄存器清零;下跳沿时,开始进行A/D转换;在转换期间,ST应保持低电平。
EOC为转换结束信号。
当EOC为高电平时,表明转换结束;否则,表明正在进行A/D转换。
OE为输出允许信号,用于控制三条输出锁存器向单片机输出转换得到的数据。
OE=1,输出转换得到的数据;OE=0,输出数据线呈高阻状态。
当EOC变为低电平时,这时给OE为高电平,转换的数据就输出给单片机了。
ADC0804进行A/D转换时,通过ALE为高电平,使输入有效,然后ALE改为低电平,锁存地址,地址锁存后将ST置高电平,使ADC0804内部寄存器清零,再ST置高电平,芯片开始进行A/D转换。
当EOC为高时,转换结束。
这时把OE置为1,。
将转换成功的数据送给单片机,完成一次模/数转换。
3.1.2数据处理程序
设置分辨率为8位转化后得到的数据,进行相应的处理,系统根据数据情况进行控制处理。
光强信号的采集与A/D转换,并把数据传递给单片机,并保存起来。
数据处理时,把数据取出来,放在一个整型变量中。
首先取出整数部分进行处理,求出数据十进制表示时的百位、十位及个位,再求小数部分数据计算流程图如图3-4所示。
整数部分计算程序
保存数据
小数数据
计算程序
保存数据1
开始
返回
图3-4光强值计算程序流程图
整数寄存器
除以100
商存入百位寄存器
余数存入整数寄存器
除以10
商存入十位寄存器
余数存入个位寄存器
小数寄存器
把小数部分逐次与00H~
0FH比较
若相等时进行相应置位
保存
整数寄存器
返回
返回
开始
开始
图3-5整数计算子程序流程图图3-6小数计算子程序流程图
3.1.3显示子函数
因为显示用到4个LED数码管,考虑到AT89S52的I/O口不足,所以采用采用动态扫描法实现4位数码管的数值显示。
通过控制P3口的输出数值控制LED亮与不亮,从而达到动态显示,节省I/O口的目的。
测量所得的A/D转换数据放在定义的ad_data内存单元中,测量所得的A/D数据在显示时需要经过转换变成十进制BCD码。
3.1.4按键程序
在本设计当中,当按键被按下时,I/O口电平为低;松开时,I/O口电平为高。
按键扫描程序通过读取I/O口的电平即可知道对应按键的状态。
按键的抖动时间的长短由按键的机械特性决定,一般为5~10ms,这是一个很重要的参数。
抖动过程引起电平信号的波动,有可能令CPU误解为多次按键操作,从而引起误处理[22]。
为了确保CPU对一次按键动作只确认一次按键,提高按键处理的可靠性,应在程序中做按键消抖处理。
按键的消抖,通常有软件,硬件两种消除方法。
硬件消抖主要是采用滤波电路消除干扰,需要消耗大量硬件,成本比较高,只适用于按键数目较少的情况。
如果按键较多,硬件消抖无法达到预期效果。
所以通常采用软件消抖。
软件消抖的常用方法是软件延时。
本系统采用软件消抖,当单片机第一次检测到有键按下时,即检测到与按键连接的I/O口为低电平是,等待10ms,再去确认该I/O口是否仍旧为低电平,如果还是低电平,就一般的机械按键而言,已经是出于稳定期了,按键的抖动被消除了。
如果10ms之后I/O口不为低电平,则说明是干扰信号,而不是按键被按下。
在软件编写上,可采用查询方式,也可采用中断方式。
本系统采用查询方式。
3.2硬件设计
根据上述的芯片资料和方案的对照考虑,确定光强检测器的实现电路,如图3-1所示。
图3-1系统总体电路图
在设计中,用了两个主要元件:
控制芯片AT89S52单片机和ADC0804。
其中控制芯片AT89S52单片机的控制功能能满足电路功能实现的要求,它主要实现两个功能:
1.通过P3.7、P3.6对ADC0804的引脚RW和RD的控制来实现模拟数字转换器ADC0804的转换开始和结束,并通过P3.2对输出允许信号OE的控制实现控制三态输出锁存器向单片机输出转换得到的数据;最后在模拟数字转换结束后通过P1口从ADC0804的数据输出线D7-D0把数据采集进来。
2.通过P2口把采集进来的数据送到数码管的段信号:
A、B、C、D、E、F、G、DP;并通过P2口的P2.0控制数码管的位信号,实现数码管的动态显示。
另外模拟数字转换器ADC0804实现的功能就是完成对采集进来的模拟信号的数字转换。
电路中,利用ADC0804的IN0口将模拟数据采集进来。
ALE地址锁存允许信号和START转换启动信号分别与单片机的P3.3及P3.0连接,以实现对它的控制;进行A/D转换时,采用查询EOC的标志信号来检测A/D转换是否完毕,若完毕则把数据通过P1端口读入,经过数据处理之后在数码管上显示。
3.2.1AT89S52单片机
89C51系列单片机最早是由Intel公司开发和生产的,Intel公司在1980年推出MCS-51单片机,也称89C51单片机。
AT89S52单片机是ATMEL公司1989年生产的产品,ATMEL率先把89C51内核与Flash技术相结合,推出轰动业界的AT89系列单片机。
本设计采用ATMEL生产的MCS-51系列的AT89S52单片机芯片作为主芯片。
MCS-51单片机所占的市场分额很大,在单片机领域影响力很大,几十年居于单片机领域领头羊地位,其产品大量作为单片机教材范例使用。
AT89S52是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)的低电压、高性能CMOS8位微处理器,俗称单片机。
该单片机片内含4kbytes的可反复擦写的Flash只读程序存储器和128bytes的随机存取数据存储器(RAM),该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89S52是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
AT89S52是一个低功耗高性能单片机,40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,2个16位可编程定时计数器,2个全双工串行通信口,AT89S52可以按照常规方法进行编程,也可以在线编程。
其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。
图3-2为AT89C51的引脚图。
图3-2AT89S52芯片引脚
40只引脚按照其功能来分,可分为3类:
(1)电源及时钟引脚:
Vcc、Vss;XTAL1、XTAL2。
(2)控制引脚:
PSEN、ALE、EA、RESET。
(3)I/O口引脚:
P0、P1、P2、P3,为4个8位I/O口的外部引脚。
3.2.2AT89S52的时钟电路
在AT89S52芯片内部有一个高增益反相放大器,其输入端为芯片引脚XTAL1,输出端为引脚XTAL2,在芯片的外部通过这两个引脚跨接晶体振荡器和微调电容,形成反馈电路,就构成了一个稳定的自激振荡器。
在由多片单片机组成的系统中,为了各单片机之间的时钟信号的同步,应当引入唯一的公用外部脉冲信号作为各单片机的振荡脉冲。
时钟电路如图3-3所示。
a)内部时钟b)外部时钟
图3-3AT89S52时钟电路
3.2.3AT89S52的复位电路
复位是单片机的初始化操作,其主要功能是把PC初始化为0000H,使单片机从0000H单元开始执行程序。
除了进入系统的正常初始化之外,当由于程序运行出错或者操作错误使系统处于死锁状态时,为摆脱困境,也需按复位键以重新启动。
RST引脚是复位信号的输入端,复位信号是高电平有效,其有效时间应持续时间24个振荡脉冲周期以上。
复位操作有上电自动复位和按键手动复位两种方式。
复位电路如图3-4所示。
89C51
R1
+5V
R2
K
RST
89C51
R1
RST
+5V
C1
图3-4AT89S52复位电路
3.2.4ADC0804电路
3.2.4.1A/D转换器芯片ADC0804简介
ADC0804的管脚图如下所示
它的主要电气特性如下:
l 工作电压:
+5V,即VCC=+5V。
l 模拟输入电压范围:
0~+5V,即0≤Vin≤+5V。
l 分辨率:
8位,即分辨率为1/28=1/256,转换值介于0~255之间。
l 转换时间:
100us(fCK=640KHz时)。
l 转换误差:
±1LSB。
l 参考电压:
2.5V,即Vref=2.5V。
1.ADC0804的转换原理
ADC0804是属于连续渐进式(SuccessiveApproximationMethod)的A/D转换器,这类型的A/D转换器除了转换速度快(几十至几百us)、分辨率高外,还有价钱便宜的优点,普遍被应用于微电脑的接口设计上。
以输出8位的ADC0804动作来说明“连续渐进式A/D转换器”的转换原理,动作步骤如下表示(原则上先从左侧最高位寻找起)。
第一次寻找结果:
10000000(若假设值≤输入值,则寻找位=假设位=1)
第二次寻找结果:
11000000(若假设值≤输入值,则寻找位=假设位=1)
第三次寻找结果:
11000000(若假设值>输入值,则寻找位=该假设位=0)
第四次寻找结果:
11010000(若假设值≤输入值,则寻找位=假设位=1)
第五次寻找结果:
11010000(若假设值>输入值,则寻找位=该假设位=0)
第六次寻找结果:
11010100(若假设值≤输入值,则寻找位=假设位=1)
第七次寻找结果:
11010110(若假设值≤输入值,则寻找位=假设位=1)
第八次寻找结果:
11010110(若假设值>输入值,则寻找位=该假设位=0)
这样使用二分法的寻找方式,8位的A/D转换器只要8次寻找,12位的A/D转换器只要12次寻找,就能完成转换的动作,其中的输入值代表图1的模拟输入电压Vin。
3.3.5.2AT89S52单片机与ADC0804的接口
ADC0804与AT89S52单片机的连接如图3-7所示。
图3-7ADC0804与MCS-51单片机的连接电路
3.3.6显示电路
显示电路采用4位一体的数码管来实现。
数码管动态显示介面是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位元就显示出字形,没有选通的数码管就不会亮。
透过分时轮流控制各个LED数码管的COM端,就使各个数码管轮流受控显示,这就是动态驱动。
在轮流显示过程中,每位元数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极体的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示资料,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O埠,而且功耗更低。
实现电路如图3-8所示。
8段连接单片机的P1口,位选通采用NPN9015(或者8550)三极管来有效控制它的通断,分别对应单片机的P2.0、P2.1、P2.2、P2.3。
图3-8显示电路
3.3.7光强采集电路
光强采集,采用光敏电阻进行设计。
敏电阻又称光导管,常用的制作材料为硫化镉,另外还有硒、硫化铝、硫化铅和硫化铋等材料。
这些制作材料具有在特定波长的光照射下,其阻值迅速减小的特性。
这是由于光照产生的载流子都参与导电,在外加电场的作用下作漂移运动,电子奔