版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、任务二任务二 发光二极管控制发光二极管控制一、任务背景知识一、任务背景知识 LED(Light Emitting Diode),发光二极管,是一种固态的半导体器件,它可以直接把电转化为光。LED的心脏是一个半导体的晶片,晶片的一端附在一个支架上,一端是负极,另一端连接电源的正极,使整个晶片被环氧树脂封装起来,实物图如图2-1。YL-236设备上的LED发光二极管显示电路如图2-2。LED发光二极管显示电路内部原理图如图2-3所示。 发光二极管是一种直接能把电能转变为光能的半导体器件。与其它发光器件相比,具有体积小、功耗低、发光均匀、稳定、响应速度快、寿命长和可靠性高等优点,被广泛应用于各种电子
2、仪器、音响设备、计算机等作电流指示、音频指示和信息状态显示等。 图2-1 LED灯实物图 图2-2 LED发光二极管显示电路 图2-3 LED发光二极管显示电路内部原理图 发光二极管的管芯结构与普通二极管相似,由一个PN结构成。当在发光二极管PN结上加正向电压时,空间电荷层变窄,载流子扩散运动大于漂移运动,致使P区的空穴注入N区,N区的电子注入P区。当电子和空穴复合时会释放出能量并以发光的形式表现出来。二二 任务要求任务要求 为了使得学生对该知识点更好的理解,下面以4个具体的任务为例讲解。 1.点亮发光二极管; 2.闪烁发光二极管; 3.亮度控制; 4.流水灯;三、任务实施三、任务实施1任务分
3、析任务分析 为了完成上面4个任务,先画出发光二级管任务原理图如图图2-4,然后一一分析实现方法。 (1)要让发光二极管D1、D3点亮,只要引脚P1.0和引脚P1.2为低电平即可。同理,只要引脚P1.1为高电平,D2就不会点亮。程序中用“0”来表示低电平,“1”来表示高电平。因此让此图的发光二极管点亮,只要将值“0”赋给单片机对应的引脚即可。同理,让发光二极管熄灭,只要将值“1”赋给单片机对应的引脚即可。 (2)发光二级管的闪烁,实际上就是发光二级“亮”和“灭”切换时间比相同。 (3)渐亮,就是要控制发光二极管亮度,让它慢慢地亮起来直到全亮。如果是模拟电路,可通过电阻调节发光二极管的电流来实现亮
4、度调节。但是,单片机控制发光二极管,要么亮,要么灭。如何让它渐亮呢?答案就是控制发光管“亮/灭”时间比例。让发光二极管在“亮”和“灭”之间快速地切换,由于切换速度很快,眼睛看不出来闪烁现象。只要让“亮”的时间比例逐渐增加,而“灭”占的时间比例逐渐减少,亮度就会越来越亮,直至全亮。 (4)用数组实现流水灯:只要算出每一步的数据存入数组中,即可通过时间的长短来实现流水灯的效果。 2任务具体实施任务具体实施点亮发光二极管点亮发光二极管 接线图根据前面的分析,点亮发光二极管的接线图如图2-5所示。 LED显示模块 +5VLED1 LED2 LED3 GNDP1.0 P1.1 P1.2 主机模块 +5V
5、 GND 电源模块 +5V GND 源程序代码#include#define off 1#define on 0sbit D1=P10; /定义P1.0引脚为D1sbit D2=P11; /定义P1.1引脚为D2sbit D3=P12; /定义P1.2引脚为D3int main() D1=on; /D1等于“开”D1亮 D2=off; /D2等于“关”D2灭 D3=on; /D3等于“开”D3亮 while(1); /死循环,让程序停留在此处 /* 把上面的主函数该成下面的也能实现相应功能*/ main() P1=0 x02; /点亮D1、D3,关闭D2 while(1); /死循环,让程序停
6、留在此处 由于该程序很简单,这里没有把实验图画出,学生可自己接线做结果。 闪烁发光二极管闪烁发光二极管 接线图 根据前面的分析,闪烁发光二极管的接线图如图2-6所示。 LED显示模块 +5VLED1 GNDP2.0 主机模块 +5V GND 电源模块 +5V GND 如图2-6 闪烁发光二极管的接线图 源程序代码 #include Sbit LED=P20; /定义p2.0引脚为LED int main() unsigned int i; /在函数内部定义变量 LED=0; while(1) i=0 while(i30000)i=i+1; /延时 LED=!LED; /然后,取反 由于该程序很
7、简单,这里没有把实验图画出,学生可自己接线做结果,或者用仿真软件进行仿真结果。 亮度控制亮度控制 接线图 根据前面的分析,亮度控制的接线图如图2-7所示。 LED显示模块 +5VLED1 GNDP1.0 主机模块 +5V GND 电源模块 +5V GND图2-7 亮度控制的接线图 源程序代码 #include sbit D1=P10 /*延时函数*/delay(unsigned int i) while(-i); /*主函数*/int main() unsigned char i; /定义一个无符号字节变量 D1=1; /使D1开机为关闭状态 while(1) i=20; /循环次数20次,L
8、ED闪10次while(i0) D1=!D1; /取反,两次闪一次delay(5000); /短延时i=i-1;i=10;while(i0) D1=!D1;delay(30000); /长延时i=i-1; 该任务是一个亮度控制实验,学生可自己接线在设备上做结果,或者用仿真软件进行仿真看结果的变化。 流水灯 接线图 根据前面的分析,流水灯控制的接线图如图2-8所示。 LED显示模块 +5V D0-D7 GND P2.0-P2.7 主机模块 +5V GND 电源模块 +5V GND 图2-8 流水灯控制的接线图 源程序代码 /*数组实现流水灯*/#include at89x52.h /AT89单片
9、机头文件 #define uchar unsigned char /#define uint unsigned int /#define LED P2 /* 延时函数 */delay(uint i) while(-i); /* 流水灯数组 */uchar code Ld=0 xfe,0 xfd,0 xfb,0 xf7,0 xef,0 xdf,0 xbf,0 x7f; /* 主函数 */int main() char s=0; while(1) LED=Lds; /送流水灯数据到I/O口 delay(35000); /延时,送下次数据 s=(s+1)%8; /数组下标变量循环加1 该任务是一个流
10、水灯控制实验,学生可自己接线在设备上做结果,或者用仿真软件进行仿真看结果的变化。其结果是灯从左向右亮。 。项目内容完成要求 分值完成情况自评分值 发光二极管控制 流程设计正确 20 程序编写正确 30 实物连线正确 20 调试程序正确 30 四、四、任务自评任务自评 在完成了上面的任务之后,就用下面的评分标准来检查自己的学习情况。 五、知识拓展五、知识拓展1AT89S52芯片芯片4个个I/O口讲解口讲解 AT89S52芯片有4组8位I/O口:P0、P1、P2和P3口,P1、P2和P3为准双向口,P0口则为双向三态输入输出口,下面我们分别介绍这几个口线: P0口和P2电路图如图2-9和2-10,
11、由图可见,电路中包含一个数据输出锁存器和两个三态数据输入缓冲器,另外还有一个数据输出的驱动和控制电路。这两组口线用来作为CPU与外部数据存储器、外部程序存储器和I/O扩展口,而不能象P1、P3直接用作输出口。它们一起可以作为外部地址总线,P0口身兼 两职,既可作为地址总线,也可作为数据总线。 图2-9 P2口锁存器和缓冲器结构 P2口作为外部数据存储器或程序存储器的地址总线的高8位输出口AB8-AB15,P0口由ALE选通作为地址总线的低8位输出口AB0-AB7。外部的程序存储器由PSEN信号选通,数据存储器则由WR和RD读写信号选通,因为216=64k,所以8051最大可外接64kB的程序存
12、储器和数据存储器。图2-10 P2口锁存器和缓冲器结构P1口: 右图为P1口其中一位的电路图2-11,P1口为8位准双向口,每一位均可单独定义为输入或输出口,当作为输入口时,1写入锁存器,Q(非)=0,T2截止,内上拉电阻将电位拉至1,此时该口输出为1,当0写入锁存器,Q(非)=1,T2导通,输出则为0。 作为输入口时,锁存器置1,Q(非)=0,T2截止,此时该位既可以把外部电路拉成低电平,也可由内部上拉电阻拉成高电平,正因为这个原因,所以P1口常称为准双向口。需要说明的是,作为输入口使用时,有两种情况,其一是:首先是读锁存器的内容,进行处理后再写到锁存器中,这种操作即读修改写操作,象JBC(
13、逻辑判断)、CPL(取反)、INC(递增)、DEC(递减)、ANL(与逻辑)和ORL(逻辑或)指令均属于这类操作。其二是:读P1口线状态时,打开三态门G2,将外部状态读入CPU。图2-11 P1口锁存器和缓冲器结构 图2-12 P3口线逻辑电路图 P3口的电路如上图2-12所示,P3口为准双向口,为适应引脚的第二功能的需要,增加了第二功能控制逻辑,在真正的应用电路中,第二功能显得更为重要。由于第二功能信号有输入输出两种情况,这里分别加以说明。 P3口的输入输出及P3口锁存器、中断、定时/计数器、串行口和特殊功能寄存器有关,P3口的第一功能和P1口一样可作为输入输出端口,同样具有字节操作和位操作
14、两种方式,在位操作模式下,每一位均可定义为输入或输出。 这里着重讨论P3口的第二功能,P3口的第二功能各管脚定义在任务一表1-1中进行了详细讲解. 对于第二功能为输出引脚,当作I/O口使用时,第二功能信号线应保持高电平,与非门开通,以维持从锁存器到输出口数据输出通路畅通无阻。而当作第二功能口线使用时,该位的锁存器置高电平,使与非门对第二功能信号的输出是畅通的,从而实现第二功能信号的输出。对于第二功能为输入的信号引脚,在口线上的输入通路增设了一个缓冲器,输入的第二功能信号即从这个缓冲器的输出端取得。而作为I/O口线输入端时,取自三态缓冲器的输出端。这样,不管是作为输入口使用还是第二功能信号输入,
15、输出电路中的锁存器输出和第二功能输出信号线均应置“1”。 2. I/O口工作原理口工作原理 (1)P0作为地址数据总线时,T1和T2是一起工作的,构成推挽结构。高电平时,T1打开,T2截止;低电平时,T1截止,T2打开。这种情况下不用外接上拉电阻.而且,当T1打开,T2截止,输出高电平的时候,因为内部电源直接通过T1输出到P0口线上,因此驱动能力(电流)可以很大,这就是为什么教科书上说可以驱动8个TTL负载的原因。 (2)P0作为一般端口时,T1就永远的截止,T2根据输出数据0导通和1截止,导通时拉地,当然是输出低电平;要输出高电平,T2就截止,P0口就没有输出了,(注意,这种情况就是所谓的高
16、阻浮空状态),如果加上外部上拉电阻,输出就变成了高电平1。 (3) 其他端口P1、P2和P3,在内部直接将P1口中的T1换成了上拉电阻,所以不用外接,但内部上拉电阻太大,电流太小,有时因为电流不够,也会再并一个上拉电阻。 (4) 在某个时刻,P0口上输出的是作为总线的地址数据信号还是作为普通I/O口的电平信号,是依靠多路开关MUX来切换的。而MUX的切换,又是根据单片机指令来区分的。当指令为外部存储器/IO口读/写时,比如 MOVX A,DPTR ,MUX是切换到地址/数据总线上;而当普通MOV传送指令操作P0口时,MUX是切换到内部总线上的。 (5) P0、P1、P2、P3口用于输入时,需要
17、写1使IO下拉的MOS管截止,以免MOS管导通将输入拉底为0,当一直用于输入时不用置1(先使用该IO输出,该IO锁存器里可能是0,再用该IO输入则会使MOS管导通),将IO写1后,该IO锁存器不会变了,所以再一直用于输入不用置1。p0用于地址数据线时输入不用写1,因为MUX没和锁存器相连。 因为端口1、2、3有固定的内部上拉,所以有时候他们被称为准双向口。 端口0, 从另外一方面来说,就被 认为是真正的双向,因为当它被设置为输入的时候是浮空(高阻态)的。 3. P0口上拉电阻选择口上拉电阻选择 如果是驱动led,那么用1K左右的就行了。如果希望亮度大一些,电阻可减小,最小不要小于200欧姆,否
18、则电流太大;如果希望亮度小一些,电阻可增大,增加到多少呢,主要看亮度情况,以亮度合适为准,一般来说超过3K以上时,亮度就很弱了,但是对于超高亮度的LED,有时候电阻为10K时觉得亮度还能够用。我通常就用1k的。 对于驱动光耦合器,如果是高电位有效,即耦合器输入端接端口和地之间,那么和LED的情况是一样的;如果是低电位有效,即耦合器输入端接端口和VCC之间,那么除了要串接一个1-4.7k之间的电阻以外,同时上拉电阻的阻值就可以用的特别大,用100k500K之间的都行,当然用10K的也可以,但是考虑到省电问题,没有必要用那么小的。 对于驱动晶体管,又分为PNP和NPN管两种情况:对于NPN,毫无疑
19、问NPN管是高电平有效的,因此上拉电阻的阻值用2K20K之间的,具体的大小还要看晶体管的集电极接的是什么负载,对于LED类负载,由于发管电流很小,因此上拉电阻的阻值可以用20k的,但是对于管子的集电极为继电器负载时,由于集电极电流大,因此上拉电阻的阻值最好不要大于4.7K,有时候甚至用2K的。对于PNP管,毫无疑问PNP管是低电平有效的,因此上拉电阻的阻值用100K以上的就行了,且管子的基极必须串接一个110K的电阻,阻值的大小要看管子集电极的负载是什么,对于LED类负载,由于发光电流很小,因此基极串接的电阻的阻值可以用20k的,但是对于管子的集电极为继电器负载时,由于集电极电流大,因此基极电
20、阻的阻值最好不要大于4.7K。 对于驱动TTL集成电路,上拉电阻的阻值要用110K之间的,有时候电阻太大的话是拉不起来的,因此用的阻值较小。但是对于CMOS集成电路上拉电阻的阻值就可以用的很大,一般不小于20K,我通常用100K的,实际上对于CMOS电路,上拉电阻的阻值用1M的也是可以的,但是要注意上拉电阻的阻值太大的时候,容易产生干扰,尤其是线路板的线条很长的时候,这种干扰更严重,这种情况下上拉电阻不宜过大,一般要小于100K,有时候甚至小于10K。 4. 扩展几个预编译指令的用法扩展几个预编译指令的用法 预处理过程扫描源代码,对其进行初步的转换,产生新的源代码提供给编译器。可见预处理过程先
21、于编译器对源代码进行处理。在C语言中,并没有任何内在的机制来完成如下一些功能:在编译时包含其他源文件、定义宏、根据条件决定编译时是否包含某些代码。要完成这些工作,就需要使用预处理程序。尽管在目前绝大多数编译器都包含了预处理程序,但通常认为它们是独立于编译器的。预处理过程读入源代码,检查包含预处理指令的语句和宏定义,并对源代码进行响应的转换。预处理过程还会删除程序中的注释和多余的空白字符。预处理指令是以#号开头的代码行。#号必须是该行除了任何空白字符外的第一个字符。#后是指令关键字,在关键字和#号之间允许存在任意个数的空白字符。整行语句构成了一条预处理指令,该指令将在编译器进行编译之前对源代码做
22、某些转换。下面是部分预处理指令: 指令 用途 # 空指令,无任何效果 #include 包含一个源代码文件 #define 定义宏 #undef 取消已定义的宏 #if 如果给定条件为真,则编译下面代码 #ifdef 如果宏已经定义,则编译下面代码 #ifndef 如果宏没有定义,则编译下面代码 #elif 如果前面的#if给定条件不为真,当前条件为真,则编译下面代码 #endif 结束一个#if#else条件编译块 #error 停止编译并显示错误信息文件包含 #include预处理指令的作用是在指令处展开被包含的文件。包含可以是多重的,也就是说一个被包含的文件中还可以包含其他文件。标准C编
23、译器至少支持八重嵌套包含。预处理过程不检查在转换单元中是否已经包含了某个文件并阻止对它的多次包含。这样就可以在多次包含同一个头文件时,通过给定编译时的条件来达到不同的效果。例如: #define AAA #include t.c #undef AAA #include t.c 为了避免那些只能包含一次的头文件被多次包含,可以在头文件中用编译时条件来进行控制。例如: /*my.h*/ #ifndef MY_H #define MY_H #endif在程序中包含头文件有两种格式: #include #include my.h 第一种方法是用尖括号把头文件括起来。这种格式告诉预处理程序在编译器自带的
24、或外部库的头文件中搜索被包含的头文件。第二种方法是用双引号把头文件括起来。这种格式告诉预处理程序在当前被编译的应用程序的源代码文件中搜索被包含的头文件,如果找不到,再搜索编译器自带的头文件。采用两种不同包含格式的理由在于,编译器是安装在公共子目录下的,而被编译的应用程序是在它们自己的私有子目录下的。一个应用程序既包含编译器提供的公共头文件,也包含自定义的私有头文件。采用两种不同的包含格式使得编译器能够在很多头文件中区别出一组公共的头文件。 (2) 宏 宏定义了一个代表特定内容的标识符。预处理过程会把源代码中出现的宏标识符替换成宏定义时的值。宏最常见的用法是定义代表某个值的全局符号。宏的第二种用
25、法是定义带参数的宏,这样的宏可以象函数一样被调用,但它是在调用语句处展开宏,并用调用时的实际参数来代替定义中的形式参数。 #define指令 #define预处理指令是用来定义宏的。该指令最简单的格式是:首先神明一个标识符,然后给出这个标识符代表的代码。在后面的源代码中,就用这些代码来替代该标识符。这种宏把程序中要用到的一些全局值提取出来,赋给一些记忆标识符。 #define MAX_NUM 12 Int arrayMAX_NUM; for(i=0;iMAX_NUM;i+) /*/ 在这个例子中,对于阅读该程序的人来说,符号MAX_NUM就有特定的含义,它代表的值给出了数组所能容纳的最大元素数目。程序中可以多次使用这个值。作为一种约定,习惯上总是全部用大写字母来定义宏,这样易于把程序红的宏标识符和一般变量标识符区别开来。如果想要改变数组的大小,只需要更改宏定义并重新编译程序即可。 带参数的#define指令 带参数的宏和函数调用看起来有些相似。看一个例子: #define Cube(x) (x)*(x)*(x)可以时任何数字表达式甚至函数调用来代替参数x。这
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年6月浙江省高考生物试卷真题(含答案解析)
- 中国户外广告投光灯行业市场调查研究报告
- 2024至2030年中国射频前端接收滤波放大单元数据监测研究报告
- 2024至2030年中国凸面平焊法兰数据监测研究报告
- 2024至2030年中国HDPE再生颗粒数据监测研究报告
- 2024年中国耐热硅橡胶屏蔽软电缆市场调查研究报告
- 2024年中国彩照模块市场调查研究报告
- 2024年中国手机外壳塑胶无尘喷涂线市场调查研究报告
- 程力劳动合同
- 仓单转卖合同
- 化学实验室安全应急智慧系统建设和实验规范
- 老年抑郁量表
- 幼教培训课件:《幼儿园班级区域创设》
- 行政办公室行政办公管理检查开展情况汇报
- 特殊过程确认报告
- 大课间跑操评分表
- BJ单身日记-英文台词剧本解析
- 幼儿园好习惯好性格养成绘本:坏脾气的蛋糕
- 老旧小区改造室外给排水工程施工方案和技术措施
- CPK-数据自动生成器
- 食品的感官检验-感官检验的常用方法(食品检测技术课件)
评论
0/150
提交评论