首页资源分类嵌入式系统RTOS > STC学习资料

STC学习资料

已有 445487个资源

下载专区

上传者其他资源

文档信息举报收藏

标    签:STC15单片机入门

分    享:

文档简介

 很好的PDF教程,适合初学者。

文档预览

一坚科技 STC15 单片机实战指南(C 语言版) 从 51 单片机 DIY、四轴飞行器到优秀产品设计 残弈悟恩(小刘老师) 2016 官 方 淘 宝 店 铺 : HTTP://FSMCU.TAOBAO.COM STC15 单片机实战指南(C 语言版) 微信号:xymbmcu 郑重声明 《STC15 单片机实战指南(C 语言版)》 一书以一坚科技研发的飛天三號(FSST15-V1.0) 实验板为硬件平台,以《深入浅出玩转 STC15 单片机》为配套视频,由清华大学出版社权 威出版,并且分别是 STC 官方大学计划和高校高性能联合实验室推荐教程和视频,版权归 作者和清华大学出版社所有。 本资料以个人学习、工作经验以及宏晶科技单片机技术为素材,以单片机初学者、单 片机项目开发者为对象,教大家如何走进单片机,继而达到开发工程项目为目的。限于时 间和水平关系,资料中难免有过失之处,望各位高手批评指教,多多拍砖,拍累了,你们 休息,我继续上路。 现已连载的方式免费共享于各大电子网站,供单片机新手们参考学习,可以自由下载 传阅,但未经作者许可,不得用于任何商业目的,转载请注明出处:残弈悟恩 (www.ieeBase.net)。最终完整版以出版社所出书籍为准。 飛天三號单片机实验板 ~ 1 ~ 电子工程师基地: www.ieeBase.net STC15 单片机实战指南(C 语言版) 微信号:xymbmcu 飛天三號(FSST15-V1.0)实验板 STC 高性能联合实验室专用试验箱学生实验补充开发板 STC 官方推荐书籍《STC15 单片机实战指南》配套开发板 STC 大学计划推荐视频《深入浅出玩转 STC15 单片机》配套开发板 让爱充满大地——花 1 秒时间,拯救 1 个人,传递 1 份爱 声明:只是残弈悟恩爱心的喷发,我得不到一分钱,各位不要多想,谢谢! 你知道吗?在非洲北边的某个地区,每一秒都有许许多多的人正在挨饿,每一天至少有 一位儿童死于营养不足。你的一次点击就能让某位穷人得到 1.1 杯食物。当然你可以不相信 有这样的链接或者是骗点击什么的。事实上,网站确实是帮穷人得 1.1 杯食物的,只要你点 进去点击一下中间的黄色按钮,就会出来一系列介绍各种商品的网页(绝对免费的并且不会 下载任何软件,也不会有电脑病毒),同时也会有人因为您的一次点击而得到 1.1 杯食物, 食物是由商家提拱的,但爱心却是您献出的。如果你觉得残弈悟恩在忽悠大家,你不妨可以 在网上查一下是真与假。 看到这本资料的朋友多数都是电子爱好者、单片机初学者,或者干电子这一行的,管你 是穷学生还是穷工人,只要能上网,只要愿花一秒种就可以了。人生在世,有两件事不能等: 一、孝顺;二、行善。无论你是 LED 小灯、普通灯泡也好,还是荧光灯也罢,最重要就是 要懂得用自身的光去照耀别人,光的强度并不重要。 点击链接: http://www.thehungersite.com/clickToGive/home.faces?siteId=1&link=ctg_ths_home_from_ths_thankyou_sitenav 飛天三號单片机实验板 ~ 2 ~ 电子工程师基地: www.ieeBase.net STC15 单片机实战指南(C 语言版) 微信号:xymbmcu 第 3 章 端倪初现 小试牛刀:基本元器件与 LED 小灯的介绍 不积跬步,无以至千里;不积小流,无以成江海。单片机的学习,不仅仅要学习其自身 的知识点,还需掌握一些外围电路,这些外围电路就是由一个个小小的部件来组成。这样, 单片机与这些外围电路的连接桥梁——I/O 口,就显得尤为重要,所以掌握单片机 I/O 口的 操作和检测,是基础也是重点。 3.1 电阻器的应用概述 导电体对电流的阻碍作用称为电阻,用符号 R 表示,单位为欧姆、千欧、兆欧,分别 用Ω 、kΩ 、MΩ 表示,电阻实物图如图 3-1 所示。 图 3-1 电阻实物图 3.1.1 初识电阻 电阻,电路中最基本的元器件,这里以一个很“重要”的电路来引出电阻的应用,电路 如图 3-2 所示。 图 3-2 LED 小灯原理图 图到 3-2 中的 R101 就是一个 1kΩ 的电阻了,电阻有时也用“ 了个马甲就不认识。 问题 1:这里的电阻有何作用? 答:起限流作用,就是限制电流别太大,否则会 D100 必将烧死。 问题 2:为何 R101 的阻值为 1kΩ? 答:且读且找答案。 ”表示,别穿 3.1.2 电流与电阻的关系 看到标题,读者可能会想到欧姆定律,如果想到,也合适,但这里读者介绍的,不是欧 姆定律,而是一些新知识点。说上、下拉电阻之前,先解释一下两个与电流有关的概念,它 们是:拉电流、灌电流。 1.拉电流与灌电流 拉电流和灌电流是衡量电路输出驱动能力的参数,这种说法一般用在数字电路中。特别 注意:拉、灌都是对输出端而言的,所以是驱动能力。 这里首先要说明,芯片手册中的拉、灌电流是一个参数值,是芯片在实际电路中允许输 出端拉、灌电流的上限值(所允许的最大值)。而下面要讲的这个概念是电路中的实际值。 飛天三號单片机实验板 ~ 3 ~ 电子工程师基地: www.ieeBase.net STC15 单片机实战指南(C 语言版) 微信号:xymbmcu 由于数字电路的输出只有高、低(0、1)两种电平值,高电平输出时,一般是输出端对 负载提供电流,其提供电流的数值叫“拉电流”;低电平输出时,一般是输出端要吸收负载 的电流,其吸收电流的数值叫“灌(入)电流”。 对于输入电流的器件而言:灌入电流和吸收电流都是输入的,灌入电流是被动的,吸收 电流是主动的。如果外部电流通过芯片引脚向芯片内‘流入’称为灌电流(被灌入);反之 如果内部电流通过芯片引脚从芯片内‘流出’称为拉电流(被拉出)。 2.驱动能力的衡量 当逻辑门输出端是低电平时,灌入逻辑门的电流称为灌电流,灌电流越大,输出端的低 电平就越高。由三极管输出特性曲线也可以看出,灌电流越大,饱和压降越大,低电平越大。 然而,逻辑门的低电平是有一定限制的,它有一个最大值 UOLMAX。在逻辑门工作时,不允许 超过这个数值,TTL 逻辑门的规范规定 UOLMAX≤0.4~0.5V(STC15 的 UOLMAX 为 0.7V)。所以,灌 电流有一个上限。 当逻辑门输出端是高电平时,逻辑门输出端的电流是从逻辑门中流出,这个电流称为拉 电流。拉电流越大,输出端的平就越低高电。这是因为输出级三极管是有内阻的,内阻上的 电压降会使输出电压下降。拉电流越大,输出端的高电平越低。然而,逻辑门的高电平是有 一定限制的,它有一个最小值 UOHMIN。在逻辑门工作时,不允许超过这个数值,TTL 逻辑门的 规范规定 UOHMIN≥2.4V(STC15 的 UOLMAX 为 1.8V)。所以,拉电流也有一个上限。 可见,输出端的拉电流和灌电流都有一个上限,否则高电平输出时,拉电流会使输出电 平低于 UOHMIN;低电平输出时,灌电流会使输出电平高于 UOLMAX。所以,拉电流与灌电流反映 了输出驱动能力(芯片的拉、灌电流参数值越大,意味着该芯片可以接更多的负载,因为灌 电流是负载给的,负载越多,被灌入的电流越大)。 由于高电平输入电流很小,在微安级,一般可以不必考虑,低电平电流较大,在毫安级, 所以,往往低电平的灌电流不超标就不会有问题。用扇出系数来说明逻辑门驱动同类门的能 力,扇出系数 No 是低电平最大输出电流和低电平最大输入电流的比值。 在集成电路中,吸电流、拉电流输出和灌电流输出是一个很重要的概念。拉即泄,主动 输出电流,是从输出口输出电流;灌即充,被动输入电流,是从输出端口流入;吸则是主动 吸入电流,是从输入端口流入。 吸电流和灌电流就是从芯片外电路通过引脚流入芯片内的电流,区别在于吸收电流是主 动的,从芯片输入端流入的叫吸收电流。灌入电流是被动的,从输出端流入的叫灌入电流。 拉电流是数字电路输出高电平给负载提供的输出电流,灌电流时输出低电平是外部给数字电 路的输入电流,它们实际就是输入、输出电流的能力。 吸收电流是对输入端(输入端吸入)而言的;而拉电流(输出端流出)和灌电流(输出 端被灌入)是相对输出端而言的。 3.上拉电阻与下拉电阻 上拉电阻就是把不确定的信号通过一个电阻嵌位在高电平,此电阻还起到限流的作用; 同理,下拉电阻是把不确定的信号嵌位在低电平。上拉电阻是针对器件的输入电流(也即灌 电流),而下拉电阻针对的是输出电流(也即拉电流)。 1)上、下拉电阻的作用 (1)上拉就是将不确定的信号通过一个电阻嵌位在高电平,以此来给芯片引脚一个确 定的电平,以免使芯片引脚悬空发生逻辑错乱。 (2)为加大输出引脚的驱动能力,下拉同理。 飛天三號单片机实验板 ~ 4 ~ 电子工程师基地: www.ieeBase.net STC15 单片机实战指南(C 语言版) 微信号:xymbmcu 2)上、下拉电阻的应用总结 (1)当 TTL 电路驱动 CMOS 电路时,如果 TTL 电路输出的高电平低于 CMOS 电路的最 低高电平(一般为 3.5V),这时就需要在 TTL 的输出端接上拉电阻,以提高输出高电平的值。 (2)OC 门电路必须加上拉电阻,以提高输出的高电平值。 (3)为加大输出引脚的驱动能力,有的单片机引脚上也常使用上拉电阻。 (4)在 CMOS 芯片上,为了防止静电造成损坏,不用的引脚不能悬空,一般接上拉电 阻以降低输入阻抗,提供泄荷通路。 (5)芯片的引脚加上拉电阻来提高输出电平,从而提高芯片输入信号的噪声容限,以 提高增强干扰能力。 (6)提高总线的抗电磁干扰能力。引脚悬空就比较容易接受外界的电磁干扰。 (7)长线传输中电阻不匹配容易引起反射波干扰,加上下拉电阻是为了电阻匹配,从 而有效抑制反射波干扰。 3)上、下拉电阻的选取原则 (1)从节约功耗及芯片的灌电流能力考虑应当足够大;电阻大,电流小。 (2)从确保足够的驱动电流考虑应当足够小;电阻小,电流大。 (3)对于高速电路,过大的上拉电阻可能会使边沿变平缓。 综上,通常在 1kΩ~10kΩ 之间选取,笔者一般选用 4.7kΩ 或 10kΩ,下拉电阻同理。 3.2 电容器的应用概述 电容是电子设备中大量使用的电子元件之一,广泛应用于隔直、耦合、旁路、滤波、调 谐回路、能量转换、控制电路等方面。用 C 表示电容,电容的基本单位法拉(F),除此还有 微法拉(μ F)、纳法拉(nF)、皮法拉(pF),1F = 106μF = 109nF = 1012pF。 3.2.1 初识电容 电容种类繁多,这里随便贴几种,共大家欣赏,实物图如图 3-3 所示。 3.2.2 电容的用途 图 3-3 电容实物图 电容种类繁多,应用甚广。笔者就以几个实例抛出问题,再举例着重讲述电解电容和瓷 片电容在电路中的储能、滤波和去耦等功能。 (1)使用吸尘器时收音机会出现“啪啦、啪啦”的杂音,原因是吸尘器的马达产生的 微弱(低强度高频)电压/电流变化通过电源线传递进入收音机,以杂音的形式出现,将这 种干扰称之为“传导干扰”。 (2)当摩托车从附近道路通过时,电视机会出现雪花状干扰。这是因为摩托车点火装 飛天三號单片机实验板 ~ 5 ~ 电子工程师基地: www.ieeBase.net STC15 单片机实战指南(C 语言版) 微信号:xymbmcu 置的脉冲电流产生了电磁波,传到空间再传给附近的电视天线、电路上。将这种干扰称之 为“辐射干扰”。 (3)冬天的时候,特别是在北方比较干燥的城市,晚上睡觉脱衣服时,经常会看到衣 服有“火花”,实际上这是“静电放电”现象,称之为 ESD。如果此时你用手触摸一些电子 元件,说不定会电击毁这些元器件,因为电压有 3~5KV 之高。电压随高,但电量很少,所 以对人体危害不大。 (4)开空调时,室内的荧光灯会出现瞬时变暗的现象,这是因为大量电流流向空调, 电压急速下降,利用统一电源的荧光灯受到影响,这种电压突然骤降的“浪涌”现象,称 之为 Surge。 为了研究、解决以上这些问题,后来发展起来了一门学科 EMC。若想更深入了解,读 者可以去研读一下郑军奇的《EMC 电磁兼容设计与测试案例分析》,有些例子相当经典。这 里顺便为读者扩展几个概念,希望读者能够了解。 (1)去耦。当器件高速开关时,把射频能量从高频器件的电源端泄放到电源分配网络。 去耦电容也为器件和元件提供一个局部的直流源,这对减小电流在板上传播浪涌尖峰很有 作用。 (2)旁路。把不必要的共模 RF 能量从元件或线缆中泄放掉。它的实质是产生一个交 流支路来把不需要的能量从易受影响的区域泄放掉。另外,它还提供滤波功能(带宽限制), 有时笼统地称为滤波。 (3)储能。当所用的信号脚在最大容量负载下同时开关时,用来保持提供给器件恒定 的直流电压和电流。它还能阻止由于元件 di/dt 电流浪涌而引起的电源跌落。如果说去耦是 高频的范畴,那么储能可以理解为是低频范畴。 电容的选择。选择旁路电容和去耦电容时,并非取决于电容值和大小,而是电容的自 谐振频率,并与所需旁路式去耦的频率相匹配。在自谐振频率以下电容表现为容性,在自 谐振频率以上电容变为感性,这将会减小 RF 去耦功能。再看看常用的两种瓷片电容的自谐 振频率,如表 3-1 所示。 表 3-1 瓷片电容的封装与自谐振频率的关系 电容值 插件电容 标贴电容 1.0μ F 2.6MHz 5MHz 0.1μ F 8.2MHz 16MHz 0.01μ F 26MHz 50MHz 1000pF 82MHz 159MHz 500pF 116MHz 225MHz 100pF 260MHz 503MHz 10pF 821MHz 1.6GHz 电容的封装形式 综上可得,使用去耦电容最重要的一点就是电容的引线电感。表贴电容比插件电容高 频时有很好的效能,就是因为它的引线电感很低。 并联电容。若有些电路中滤波效果不好,可以采用并联电容的方式来增加滤波效果, 但不是随意的增加并联的个数或随意放置几个电容,这样只会浪费材料。 一般原则是并联的电容必须有不同的数量级(例如 0.1μF 和 1nF),这个数量级最好是 两个或 100 倍。 (4)滤波。滤波是将信号中特定波段频率滤除的操作,是抑制和防止干扰的一项重要 飛天三號单片机实验板 ~ 6 ~ 电子工程师基地: www.ieeBase.net STC15 单片机实战指南(C 语言版) 微信号:xymbmcu 措施,通俗点讲就是将想要的留下,不想要的统统干掉。 3.2.3 实例解说储能和滤波 这个例子就是飛天一號(MGMC-V1.0)开发板上的 USB 转串口电路(CH340T),电路如 图 3-4 所示。 图 3-4 USB 下载和外扩电源接口电路图 残弈悟恩也毫不隐讳的告诉大家,在调试这个电路时真是花了不少时间,或许是水平 太低、或许是想做得更好。接下来简述上述电路调试心得。 问题一:单片机 P3.0 一直为高,单片机根本拉不低,导致电路开关作用不大。 解决方法,实际测试发现该引脚一直为高,就是取了单片机芯片也为高,说明问题肯 定在 U10 身上,最后一看数据手册,确实默认为高,所以反接了一个 D9(1N4148),不知读 者还能否记得二极管的单向导电特性,最后问题顺利得到解决。 问题二:在关闭电源的情况下,电源指示灯 D11 会微微发亮。 解决办法,结合数据手册和测试发现,U10 的 4 引脚有 2V 多的电压,所以才会发亮, 因而在 4 引脚上串联了一个 100Ω 的电阻,以做限流、分压用。 问题三:COM 口要么直接发现不了,要么发现之后一开电源就不见了。 原因分析,残弈悟恩在一开始设计电路时,根本没有 C10、C20、E3 这三个电容,不加, 当然不是为了节省成本,而是太想当然了,在这里慎重的向读者说声:对不起!残弈悟恩 错了。最后拿示波器测试发现,板子上电的这一瞬间,“+5V”这个端子的电压变化如图 3-5 所示,接着再看 CH340T 的数据手册,其中电源 VCC 的要求如图 3-6 所示。 图 3-5 未接电容时 CH340T 电源端子电压的变化图 飛天三號单片机实验板 ~ 7 ~ 电子工程师基地: www.ieeBase.net STC15 单片机实战指南(C 语言版) 微信号:xymbmcu 图 3-6 CH340 的 VCC 要求规格数 依图 3-5 可知,在开发板上电的瞬间,“+5V”端子的电压会掉到 4V 甚至 4V 以下,而 要求是最小 4.5V,这样的设计没问题才怪呢!这与开空调时室内荧光灯变暗原理类似。为 解决这个问题,前面提到的“储能”就很有用了。残弈悟恩凭着经验加了一个 C10(0.1μF)、 一个 E3(220μF)的电解电容,为该电源网络滤波、储能。所谓的储能过程就是接通 USB 时, 则会给 E3 电容充电,接着当打开电源开关时,由于后面的负载会拉低这个电源电压,此时 若“+5V”端子的电压低于 E3 两端的电势,则 E3 就会放电,来弥补这个电压。这时测试发 现,电压还是会有变化,最小值为:4.8V,4.8V(4.8V>4.5V)肯定是满足了设计要求, 这 样问题就可得以解决。 纹波(Ripple)是指在直流电压中叠加的交流成分。直流稳定电源一般是由交流电源 经整流稳压等环节而形成的,这就不可避免地在直流稳定量中多少带有一些交流成份,这 种叠加在直流稳定量上的交流分量就称之为纹波。纹波的成分较为复杂,它的形态一般为 频率高于工频(指工业上用的交流电源的频率)的类似正弦波的谐波,另一种则是宽度很 窄的脉冲波。对于不同的场合,对纹波的要求各不一样。 或许这么说,读者听起来有些吃力,那就举个理解。大海,理论上是一个很平静的水 面(直流),但由于大风的作用,总是波浪起伏(交流)。这里的波浪就是基于海平面上的 “纹波”,它总是叠加于海平面(直流)之上,小则没事,大则覆舟。对于纹波,不同的电 源、不同的电路设计、不同的方案,可能要求不同。例如对于电源电压来说,5V 的电源一 般要求的纹波不能超过 100mV;DC-DC 电压(产生 5V 的电压),输入端纹波不能超过 120mV, 输出端纹波不能超过 50mV。读者这里说的是对于机顶盒电源的要求,当然产品不同,或许 对于要求会不同。但对于单片机设计来说,这样的要求肯定能满足系统要求。 之后测试+5V 的纹波,纹波如图 3-7 所示。由图可知 Δ V(纹波)为 484mV,显然高于 要求(100mV),并且由图可知纹波频率小于 10Hz,由表 3-1 可知,没有必要采用容值较小 的瓷片电容来增加滤波效果,可以通过加大电解电容来增加滤波,最后将 220μF 的电容换 成了 470μF,纹波测试如图 3-8 所示,此时纹波为 80.8mV,小于 100mV,满足要求。其实 对于设计电路来说,设计到这里就可以结束了,但是为了满足残弈悟恩的“虚荣心”,又在 C10 上并接了一个 C20(10μF 瓷片电容),接着测试纹波,如图 3-9 所示,此时纹波为 21.6mV, 可能有人会说这是浪费,这个就依情况而定了。 图 3-7 接了 220μF 滤波电容之后的纹波图 飛天三號单片机实验板 ~ 8 ~ 电子工程师基地: www.ieeBase.net STC15 单片机实战指南(C 语言版) 微信号:xymbmcu 图 3-8 接了 470μF 滤波电容之后的纹波图 图 3-9 并接了 10μF 电容之后的纹波图 结合上面的图文,大家应该能够理解电容的储能和滤波作用,这样便可为以后的设计积 累经验。 3.3 二极管的应用概述 几乎在所有的电子电路中,都要用到半导体二极管,它在许多的电路中起着重要的作用, 它是诞生最早的半导体器件之一,其应用也非常广泛。这里残弈悟恩不从原理去讲二极管了, 而就单片机电路设计中常用的几点做简要说明,图 3-10 为二极管实物图。 飛天三號单片机实验板 ~ 9 ~ 电子工程师基地: www.ieeBase.net STC15 单片机实战指南(C 语言版) 微信号:xymbmcu 图 3-10 二极管实物图 3.3.1 二极管的特性 二极管最重要的特性就是单方向导电性。在电路中,电流只能从二极管的正极流入,负 极流出。 1.正向特性。在电子电路中,将二极管的正极接在高电位端,负极接在低电位端,二 极管就会导通,这种连接方式,称为正向偏置。必须说明,当加在二极管两端的正向电压很 小时,二极管仍然不能导通,流过二极管的正向电流十分微弱。只有当正向电压达到某一数 值(这一数值称为“门槛电压”,锗管约为 0.2V,硅管约为 0.6V)以后,二极管才能正向 导通。导通后二极管两端的电压基本上保持不变,当然也有变化,这个变化就是由二极管“正 向压降”(锗管约为 0.3V,硅管约为 0.7V)所产生的。 2.反向特性。在电子电路中,二极管的正极接在低电位端,负极接在高电位端,此时 二极管中几乎没有电流流过,此时二极管处于截止状态,这种连接方式,称为反向偏置。二 极管处于反向偏置时,仍然会有微弱的反向电流流过二极管,称为漏电流。当二极管两端的 反向电压增大到某一数值,反向电流会急剧增大,二极管将失去单方向导电特性,这种状态 称为二极管的击穿。 用来表示二极管的性能好坏和适用范围的技术指标,称为二极管的参数。不同类型的二 极管有不同的特性参数。对初学者而言,必须了解以下几个主要参数: (1)额定正向工作电流 是指二极管长期连续工作时允许通过的最大正向电流值。因为电流通过管子时会使管芯 发热,温度上升,温度超过容许限度(硅管为 140 左右,锗管为 90 左右)时,就会使管芯 过热而损坏。所以,二极管使用中不要超过二极管额定正向工作电流值。例如,常用的 IN4001 -4007 型锗二极管的额定正向工作电流为 1A。 (2)最高反向工作电压 加在二极管两端的反向电压高到一定值时,会将管子击穿,失去单向导电能力。为了保 证使用安全,规定了最高反向工作电压值。例如,IN4001 二极管反向耐压为 50V,IN4007 反向耐压为 1000V。 (3)反向电流 反向电流是指二极管在规定的温度和最高反向电压作用下,流过二极管的反向电流。反 向电流越小,管子的单方向导电性能越好。值得注意的是反向电流与温度有着密切的关系, 大约温度每升高 10,反向电流增大一倍。例如 2AP1 型锗二极管,在 25 时反向电流若为 250μA, 温度升高到 35,反向电流将上升到 500μA,依此类推,在 75 时,它的反向电流已达 8mA, 不仅失去了单方向导电特性,还会使管子过热而损坏。又如,2CP10 型硅二极管,25 时反向 电流仅为 5μA,温度升高到 75 时,反向电流也不过 160μA。故硅二极管比锗二极管在高温 下具有较好的稳定性。 作为初学者在业余使用二极管时,首先必须得测试一下管子的好坏,但网上、书上大多 讲述的是用指针万用表测试的方法,可读者现在大多都用的是数字万用表,残弈悟恩总结一 下如何用数字万用表测试二极管的好坏。 使用数字万用表二极管档,将红表笔插入 V/Ω 孔,黑表笔插入 COM 孔,大伙都知道在 数字万用表里红表笔接内部电池的正极,黑表笔接内部电池负极,而在指针万用表里电阻档 是红表笔接内部电池负极,黑表笔接内部电池正极。将数字万用表红表笔接触二极管正极, 黑表笔接触二极管负极,(测量正向电阻值)正常数值为 300~600Ω ,然后将红表笔接触二 极管负极,黑表笔接触二极管正极(测量反向电阻值),正常数值为“1”。如果两次测量都 显示 001 或 000 并且蜂鸣器响,说明二极管已经击穿;如果两次测量正反向电阻值均为“1” 飛天三號单片机实验板 ~ 10 ~ 电子工程师基地: www.ieeBase.net STC15 单片机实战指南(C 语言版) 微信号:xymbmcu 说明二极管开路;如果两次测量数值相近,说明管子质量很差;反向电阻值必须为“1”或 1000 以上,正向电阻值必须为 300-600Ω ,则为二极管是好的。 3.3.2 二极管的应用 二极管的应用当然是很广泛了,这里列举常用的几点。 (1)整流二极管。利用二极管单向导电性,可以把方向交替变化的交流电变换成单一 方向的脉动直流电。在交流转直流的电路的整流桥电路,就是利用此特性来设计的。 (2)开关元件。二极管在正向电压作用下电阻很小,处于导通状态,相当于一只接通 的开关;在反向电压作用下,电阻很大,处于截止状态,如同一只断开的开关。利用二极管 的开关特性,可以组成各种逻辑电路。 举个简单的例子。这是残弈悟恩曾做项目时所用的一个电路,实质就是简简单单的三个 按键检测电路。现在笔者的目的是用中断来响应按键,可三个按键如何用一个中断来响应, 毫无疑问得用与门,提到与门,读者可能就会想到数字电路里面学了那么多的与门逻辑器件 (74LS/HC 系列),找个与门芯片还难嘛?但读者想过没,一个芯片要几毛钱,而且还体积 比较大,倘若用三个二极管代替与门芯片,无论从价格、体积都优于用专门的芯片,电路图 如图 3-11 所示。 图 3-11 二极管组成的与门电路 (3)限幅元件。二极管正向导通后,它的正向压降基本保持不变(硅管为 0.7V,锗管 为 0.3V)。利用这一特性,在电路中作为限幅元件,可以把信号幅度限制在一定范围内。例 如当我们想设计一个限幅(钳位)电路是,我们可借助两个二极管达到。 (4)继流二极管。在开关电源的电感中和继电器等感性负载中起继流作用。 续流二极管经常和储能元件一起使用,防止电压电流突变,提供通路。电感可以经过它 给负载提供持续的电流,以免负载电流突变,起到平滑电流的作用。在开关电源中,就能见 到一个由二极管和电阻串连起来构成的的续流电路。这个电路与变压器原边并联。当开关管 关断时,续流电路可以释放掉变压器线圈中储存的能量,防止感应电压过高,击穿开关管。 一般选择快速恢复二极管或者肖特基二极管就可以了,用来把线圈产生的反向电势通过电流 的形式消耗掉,可见“续流二极管”并不是一个实质的元件,它只不过在电路中起到的作用 称做“续流”。图 3-12 是一个三极管驱动风扇的电路图,上面笔者并接了一个二极管,作用 就是为了续流。 飛天三號单片机实验板 ~ 11 ~ 电子工程师基地: www.ieeBase.net STC15 单片机实战指南(C 语言版) 微信号:xymbmcu 图 3-12 风扇驱动电路 在正常工作时,FS 端为低电平,三极管导通,J4-1 为高电平,J4-2 为低电平,二极管处 于截止状态。可当 FS 端变为高电平以后,三极管截止,此时 J4-1 的电压突然会变小(不是 突然变为零),但风扇是储能元件(有线圈),这时会产生反相电动势来阻止电势突变,也既 不想让减小,从而 J4-2 端的电势就会高于 J4-1 端的电势,若没 D5 这个二极管,这种反相电压 对电路是致命的,那若加了之后,D5、J4 就会形成一个回路,将产生的这部分电势给消耗掉, 从而起到保护电路的作用。 续流二极管通常应用在开关电源、继电器电路、可控硅电路、IGBT 等电路中,其应用 非常广泛,在使用时应注意以下几点。 (1)续流二极管是防止直流线圈断电时,产生自感电势形成的高电压对相关元器件造 成损害的有效手段! (2)续流二极管的极性不能接错,否则将造成短路事故; (3)续流二极管对直流电压总是反接的,即二极管的负极接直流电的正极端; (4)续流二极管是工作在正向导通状态,并非击穿状态或高速开关状态。 3.3.3 发光二极管 漆黑的夜空,因为它的存在,徇丽多彩,二极管实物图如图 3-13 所示。 图 3-13 LED 发光图 发光二极管有两个参数很重要,分别是:压降和额定电流,其中红、黄、绿的压降参数 如表 3-2 所示。 表 3-2 发光二极管的压降参数表 直插式 LED 贴片 LED 红色发光二极管 2.0~2.2V 1.82~1.88V 飛天三號单片机实验板 ~ 12 ~ 电子工程师基地: www.ieeBase.net STC15 单片机实战指南(C 语言版) 微信号:xymbmcu 黄色发光二极管 1.8~2.0V 1.75~1.82V 绿色发光二极管 3.0~3.2V 2.83~2.89V 额定工作电流 20mA 3~15mA 需要注意的是,设计电路时,一般让工作电流为 3mA 左右,这样问题 2 就很好回答了。 欧姆定律:R =(5 - 1.85)V ÷ 3mA = 1.05kΩ ,所以用了 1 kΩ 的限流电阻,OK? 3.4 三极管应用概述及使用误区 三极管的应用。无论在数字电路、还是模拟电路中,三极管的应用很普遍。概括的说, 在模拟电路中主要用于信号的放大,在数字电路中主要利用开关特性来控制、驱动别的器件。 这里主要讲述在数字电路中的应用,三极管实物图如图 3-14 所示。 图 3-14 三极管实物图 3.4.1 三极管的基本开关电路 先来简述一下三极管,三极管符号如图 3-15 所示,三极管有三个级,分别是:基极(base)、 集电极(collector)、发射极(emitter),三极管又分为 NPN、PNP 两种型号。 图 3-15 三极管示意图 三极管的应用主要借助三种状态:放大、截止、饱和。关于放大的计算是很有学问,也 是很复杂的,这里就不做说明了。便于读者理解,可以分别将饱和、截止状态看作是“开”、 “关”两种状态。那怎么是“开”,又怎么是“关”呢。这由 b 极和 e 极电压决定。对于 NPN 型的,只要 b 极电压比 e 极电压大 0.7V,则三极管就“开”,否则就“关”;对于 PNP 型的, 只要 e 极电压比 b 极电压大 0.7V,则三极管就“开”,否则就“关”;最后总结一句话:看 箭头,箭尾比箭头大 0.7V 则“开”,否则就“关”。低电平三极管导通(5V 比 0V 大 0.7V 吧), 高电平三极管截止(5V 比 5V 没有大 0.7 是吧?)。相反,若用 NPN 的三极管,b 极为高电平, 飛天三號单片机实验板 ~ 13 ~ 电子工程师基地: www.ieeBase.net STC15 单片机实战指南(C 语言版) 微信号:xymbmcu 则三极管导通;b 极为低电平则三极管截止。三极管的开关特性就说这么多,下面开始笔者 要讲解的重头戏,那就是与三极管捆绑在一起的这些电阻,看看这些电阻是随便拉一个出来, 还是要靠计算的。 首先说明一点,图 3-16 是残弈悟恩为了讲解专门画了这样一个图,没有什么实际意义, 因为不可能驱动一个 LED 就需要这么复杂的电路。 进入主题。图 3-16 中为什么要用上(下)拉电阻? 答:上、下拉电阻的作用本身就是为电路提供一个稳定、可知的运行环境。如图 3-16, 如“电平”端悬空,此时三极管的导通、截止状态也就不确定了,如果加了上、下拉电阻, 则该端的电平就是一个已知逻辑值,这是缘由一。 再看缘由二,假如没有电阻 R02,且“电平”端用的不是 5V 单片机,而是用 3.3V 的单 片机来控制这个三极管,那么当“电平”端为高电平(3.3V)时,LED 小灯是亮还是灭呢? 设计者的目的是“灭”,那么达到预期目的了吗?分析可知,此时管子还是导通的,因为 e 极(5V)比 b 极(3.3V)大 0.7V 啊,所以 LED 小灯毫无疑问还是亮。那如果此时别的什么 条件都不变,而在电路中加入电阻 R02,这样,当“电平”端为高电平(3.3V)时,被上拉 电阻一拉,则 b 极的电压就被拉到 5V 了,从而三极管就截止,LED 小灯也就灭了。若三极 管换成是 NPN 的,那 R01 这个下拉电路就同理了。若出于这个原因,当用 5V 的单片机,那就 没必要加上、下拉电阻了。 如图 3-16 所示的电阻 R03 用多大阻值的? 情况一,没有上、下电阻,所用单片机为 5V。三极管截止的状态(电平端口处为高电 平)这里就不看了,这里以导通(电平端口处为低电平)的情况为例来计算 R03 的阻值。“电 平”端为 OV,而 e 极为 5V,则满足导通的压降,三极管导通,且 eb 间压降大概为 0.7V, 那还有(5-0.7)V 的电压就会在电阻 R03 上。这个时候,e、c 之间也会导通,同时 LED 本身 压降又是 2V 左右,三极管 e、c 之间大概有 0.2V 的压降,这个可以忽略不计,这样在 R00 上就会有大概 3V 的压降,可以计算出来,这条支路的电流大概是 3mA,足足可以点亮 LED 小灯。 不是说算电阻 R03 吗,怎么算到电流上来了,这时有根据的。前面讲过,三极管有截止、 放大、饱和三个状态,截止不用说了,只要 e、b 之间不导通即可。要让三极管处于饱和状 态,就是所谓的开关特性,必须满足一个条件。大伙都知道,三极管有一个放大倍数β ,要 想处于饱和状态,b 极电流就必须大于 e、c 之间电流值除以β 。这个β ,常用三极管的大 概是 100 左右,那么 R03 的电压、电流已知了,欧姆定律读者还不会啊。 上面算得 Iec 为 3mA,那么 b 极电流最小值就是 3mA÷100,即为 30μA,那么 R03MAX = 4.3V ÷ 30μA = 143 kΩ。只要 R03 比 143 kΩ 小就可以,那 1Ω行吗?假如是 1Ω,则 b 极电流就 为 4.3A。可 STC15 系列单片机的 I/O 口承受电流的最大值是 25mA 啊,其实残弈悟恩推荐最 好不要超过 10mA,因此 1Ω 果断不行,所以残弈悟恩一般用 1kΩ。 第二种情况,“电平”端口处高电平为 3.3V,且加了上拉电阻 R02,读者能不能算出 R03 阻值的最大值呢?那就留给读者算吧。 飛天三號单片机实验板 ~ 14 ~ 电子工程师基地: www.ieeBase.net STC15 单片机实战指南(C 语言版) 微信号:xymbmcu 图 3-16 三极管的驱动应用原理图 图 3-17 三极管的控制应用原理图 最后一个问题,三极管的控制应用,那什么是控制呢?就是不同电压之间的转换,上面 已经提到过 3.3V 到 5V 的转换,现在再来看看 5V 如何控制 12V 呢。其原理图如图 3-17 所示, 由三极管的开关特性可知,若 CON 端为低电平(0V),则三极管截止,OUT 端子就为 12V; CON 若为高电平则三极管导通,OUT 端子就为 0V。当然可以在此基础之上变换出更多的控 制电路来。 3.4.2 开关三极管的使用误区 /* ****************************************************************** */ /* 版权声明 /* 作者:蓝海之鸟(网名) /* 链接:http://bbs.ednchina.com/BLOG_ARTICLE_3017177.HTM /* ****************************************************************** */ 在数字电路设计的中,往往需要把数字信号经过开关扩流器件来驱动一些蜂鸣器、LED、 继电器等需要较大电流的器件,用的最多的开关扩流器件要数三极管。然而在使用的过程中, 如果电路设计不当,三极管无法工作在正常的开关状态,就达不到预期的目的,有时就是因 为这些小小的错误而导致重新打板,导致浪费。本人在这个方面就吃过亏,所以把自己使用 三极管的一些经验以及一些常见的误区给大家分享一下,在电路设计的过程中可以减少一些 不必要的麻烦。 下面来看几个三极管做开关的常用电路画法。几个例子都是蜂鸣器作为被驱动器件。图 3-18(a)电路用的是 NPN 管,蜂鸣器接在三极管的集电极,驱动信号可以是常见的 3.3V 或者 5V TTL 电平,高电平开通,电阻按照经验法可以取 4.7K。例如 a 电路,开通时假设为 高电平 5V,基极电流 Ib=(5V-0.7V) ÷4.7kΩ=0.9mA,可以使三极管完全饱和。b 电路用的是 PNP 管,同样把蜂鸣器接在三极管的集电极,不同的是驱动信号是 5V 的 TTL 电平。以上这 两个都可以正常工作,只要 PWM 驱动信号工作在合适的频率,蜂鸣器(有源)都会发出最大 的声音。 飛天三號单片机实验板 ~ 15 ~ 电子工程师基地: www.ieeBase.net STC15 单片机实战指南(C 语言版) 微信号:xymbmcu 图 3-18 所驱动器件接在三极管的集电极图 3-19 的这两个电路相比图 3-18 来说,最 大的区别在于被驱动器件接在三极管的发射极。同样看 c 电路,开通时假设为高电平 5V, 基极电流 Ib=(5V-0.7V-UL) ÷4.7kΩ,其中 UL 为被驱动器件上的压降。可以看到,同样取基 极电阻为 4.7K,流过的基极电流会比图 3-18a 电路的要小,小多少要看 UL 是多少。如果 UL 比较大,那么相应的 Ib 就小,很有可能导致三极管无法工作在饱和状态,使得被驱动器件 无法动作。有人会说把基极电阻减小就可以了呀,可是被驱动器件的压降是很难获知的,有 些被驱动器件的压降是变动的,这样一来基极电阻就较难选择合适的值,阻值选择太大就会 驱动失败,选择太小,损耗又变大。所以,在非不得已的情况下,不建议选用 3-19 的这两 种电路。 图 3-19 所驱动器件接在三极管的发射极 我们再来看图 3-20 这两个电路。驱动信号为 3.3VTTL 电平,而被驱动器件开通电压需 要 5V。在 3.3V 的 MCU 电路中,不小心的话很容易就设计出这两种电路,而这两种电路都是 错误的。先分析 e 电路,这是典型的“发射极正偏,集电极反偏”的放大电路,或者叫射极 输出器。当 PWM 信号为 3.3V 时,三极管发射极电压为 3.3V-0.7V = 2.6V,无法达到期望的 5V。图 3-20f 电路也是一个很失败的电路,首先这个电路开通是没有问题的,当驱动信号为 低电平时,被驱动器件可以正常动作。然而这个电路是无法关断的,当驱动信号 PWM 为 3.3V 高电平的时候,Ube = 5V - 3.3V = 1.7V 仍然可以使三极管开通,于是无法关断。在这里, 有人会说用过这个电路,没有问题啊,而且 MCU 的电压也是 3.3V。我说你用的肯定是 OD(开 漏)驱动方式,而且是真正的 OD 或者是 5V 容忍的 OD,比如 STM32 的很多 IO 口都可以设置 为 5V 容忍的 OD 驱动方式(但是有些是不行的)。当驱动信号为 OD 门驱动方式时,输出高电 平,信号就变成了高阻态,流过基极的电流为零,三极管可以有效关断,这个时候 f 电路依 飛天三號单片机实验板 ~ 16 ~ 电子工程师基地: www.ieeBase.net STC15 单片机实战指南(C 语言版) 微信号:xymbmcu 然有效。 图 3-20 驱动电压和导通电压不一样 综合以上几种电路的情况分析,得到图 3-21 这两种个人认为是最优的驱动电路,与图 3-18 不同的是,图 3-21 在基极与发射极之间多加了一个 100kΩ 的电阻,这个电阻也是有一 定作用的,可以让三极管有一个已知的默认状态。当输入信号去除的时候,三极管还处于关 断状态。在安全和稳定的方面考虑,多加的这个电阻还是很有必要的,或者说可以让三极管 工作在更好的开关状态。 图 3-21 三极管推荐型驱动电路 三极管作为开关器件,虽然驱动电路很简单,要使电路工作更加稳定可靠,还是不能掉 以轻心。为了不容易出错,个人建议是优先采用图 3-21 的电路,尽量不采用图 3-19 的电路, 避免使用图 3-20 的工作状况。 3.5 MOS 管的应用概述 或许很少有单片机的书籍去讲述 MOS 管,那残弈悟恩为何讲解,看标题就知道了,这 是知识扩展,以便能为读者扩展一点以后实际项目中常用知识点。这里要讲述的是 MOS 管, 因为在以后电源控制部分运用很广泛,MOS 管实物如图 3-22 所示。 飛天三號单片机实验板 ~ 17 ~ 电子工程师基地: www.ieeBase.net STC15 单片机实战指南(C 语言版) 微信号:xymbmcu 3.5.1 MOS 管基础 图 3-22 MOS 管实物图 其实读者可以类比三极管去学 MOS 管,MOS 管又叫场效应管。顺便将二极管、三极管、 MOS 管拉到一起来对比一下。二极管只能通过正向电流,反向截止,不能用于控制;三极 管通俗讲就是小电流放大成受控的大电流;MOS 管是小电压控制电流的。接着来认识一下 MOS 管。MOS 管的分类方式比较多,这里只简述两种:N 沟道增强型、P 沟道增强型,其 原理图分别如图 3-23、3-24 所示。 图 3-23 N 沟道增强型 MOS 管 图 3-24 P 沟道增强型 MOS 管 第一个是 N 沟道增强型场效应管,第二个是 P 沟道增强型场效应管,它们的作用刚好相 反。前面说过,场效应管是用电压控制开关的。MOS 管具有放大作用,但是这里残弈悟恩还 是不会讲解放大,只讲开关特性。从图 3-23 和 3-24 可知,它也像三极管,有三个脚,这三 个脚分别叫做栅极(G)、源极(S)和漏极(D)。 栅极是控制极,在 G(栅极)加上电压和不加上电压来控制 S(源极)和 D(漏极)是 相通还是不相通。对于 N 沟道来说,在栅极加上电压则源极和漏极就相通,去掉电压就关断; P 沟道的刚好相反,在栅极加上电压(高电平)就关断,去掉电压(低电平)就相通。 3.5.2 MOS 管的应用 笔者先前做过一段时间的机顶盒,在电源处理部分经常用到 MOS 管去控制电源的开关, 因此这里以一个非常经典的开关电路来讲述其控制过程。电路如图 3-25 所示。图中的 SI2305 就是 P 沟道 MOS 管,残弈悟恩就拿这个 MOS 管开刀来讲解其在电路中的应用吧。 飛天三號单片机实验板 ~ 18 ~ 电子工程师基地: www.ieeBase.net STC15 单片机实战指南(C 语言版) 微信号:xymbmcu 图 3-25 由 P 沟道 MOS 组成的电源开关电路 图中电池的正电通过开关 S1 接到场效应管 Q1 的源极,它的栅极通过电阻 R20 提供一个高 电平,由于 Q1 是一个 P 沟道管,所以此时管子截止,电压不能通过 3.3V 稳压 IC(G9131) 输入引脚没有电压,所以系统就不能工作。这时,如果用户按下 SW1 开机按键,则由 SW1、 R11、R23、D4、三极管 Q2 构成一个回路,这时三极管发射极接地、基极又为高电平,因此三极 管 Q2 就会导通(前面已经讲过了吧),那么就相当于 Q1 的栅极直接接地,这时 Q1 的栅极就 从高电位变为低电位,Q1 就会导通,从而电流经 Q1 到达稳压 IC 的输入脚,这样 3.3V 稳压 IC 就会系统提供一个 3.3V 的工作电压。这样 CPU 就开始工作了,并会输出一个控制电压到 PWR_ON,再通过 R24、R13 分压送到 Q2 的基极,保持 Q2 一直处于导通状态,即使用户松开开机 键,可主控送来的控制电压还保持着,那么 Q2 还是会一直保持导通状态,Q1 就能源源不断地 给 3.3V 稳压 IC 提供工作电压。SW1 还同时通过 R11、R30 两个电阻的分压,给主控 PLAY ON 脚 送去时间长短、次数不同的控制信号,主控通过固件程序判断是播放、暂停、开机、关机等, 从而输出不同的控制结果,以达到不同的工作状态。 3.6 运算放大器的基本应用 运算放大器,简称“运放”,英文描述为 Operation Amplifier(OP),是一种运用很广泛 的线性集成电路,其种类繁多,在运用方面不但可对微弱信号进行放大,还可作为反相器、 电压比较器、电压跟随器、积分器、微分器等,并可对信号做加、减运算,所以被称之为运 算放大器。其符合表示如图 3-26 所示(左:国家标准规定的符合;右:国内外常用符合)。 图 3-26 运算放大器的代表符合 飛天三號单片机实验板 ~ 19 ~ 电子工程师基地: www.ieeBase.net STC15 单片机实战指南(C 语言版) 微信号:xymbmcu 3.6.1 负反馈 说到运放,其实有好多特性和参数,限于篇幅,就不一一列举了。这里有一很重要的概 念—负反馈。 关于负反馈,残弈悟恩也给不出什么严格的定义。这里结合电路图来说明什么是负反馈, 引入负反馈有何意义? 电路如图 3-27 所示,输入信号电压 vi(= vp)加到运放的同相输入端“+”和地之间, 输出电压 vo 通过 R1 和 R2 的分压作用,得 vn = vf = R1vo /(R1 + R2),作用于反相输入端“-”,所 以 vf 在此称为反馈电压。 当输入信号电压 vi 的瞬时电位变化极性如图中的(+)号所示,由于输入信号电压 v(i vp) 加到同相端,输出电压 vo 的极性与 vi 相同。反相输入端的电压 vn 为反馈电压,其极性亦为 (+),而静输入电压 vid = vi - vf = vp –vn 比无反馈时减小了,即 vn 抵消了 vi 的一部分,使放大 电路的输出电压 vo 减小了,因而这时引入的反馈是负反馈。 综上,负反馈作用是利用输出电压 vo 通过反馈元件(R1、R2)对放大电路起自动调节作 用,从而牵制了 vo 的变化,最后达到输出稳定平衡。 图 3-27 同相放大电路 3.6.2 同相放大电路 图 3-28 反相放大电路 提供正电压增益的运算放大电路称之为同相放大,如图 3-27 所示。 在图 3-27 中,输出通过负反馈的作用,使 vn 自动地跟踪 vp,使 vp ≈ vn,或 vid = vp - vn ≈ 0。这种现象称为虚假短路,简称虚短。 由于运放的输入电阻的阻值又是很高,所以,运放两输入端的 ip = -in = (vp-vn) / Ri ≈0,这种现象称为虚断。注意:虚短是本质的,而虚断则是派生的。 3.6.3 反相放大电路 提供负电压增益的运算放大电路称之为反相放大,如图 3-28 所示。 图 3-28 中,输入电压 vi 通过 R1 作用于运放的反相端,R2 跨接在运放的输出端和反相端 之间,同相端接地。由虚短的概念可知,vn≈ vp= 0,因此反相输入端的电位接近于地电 位,故称虚地。虚地的存在是反相放大电路在闭环工作状态下的重要特征。 3.7 STC15 系列单片机的 I/0 口概述 笔者在前面有过提及,单片机的学习,最终的落脚点是 I/O 口的操作,也即在合适的时 间输出和检测高低电平。无论点亮一个 LED 小灯,还是控制大型系统,都需熟练的操作 I/O 口,因此掌握 I/O 口的知识将尤为重要。 飛天三號单片机实验板 ~ 20 ~ 电子工程师基地: www.ieeBase.net STC15 单片机实战指南(C 语言版) 微信号:xymbmcu 3.7.1 I/0 口的工作模式及配置介绍 IAP15W4K58S4 单片机有 62 个 I/O 口:P0.0~P0.7、P1.0~P1.7、P2.0~P2.7、P3.0~P3.7、 P4.0~P4.7、P5.0~P5.5、P6.0~P6.7、P7.0~P7.7,其所有的 I/O 口均可由软件配置成四种工作 模式之一,同时所有端口引脚都复合了多种功能。单片机复位后,各个端口的引脚功能默认 为 I/O 功能,其使用方法与传统 51 单片机相同。如果需要使用端口引脚的其他功能,则需 要配置相关特殊功能寄存器。 STC15 单片机端口引脚作为 I/O 功能使用时,P0~P7 这 8 个端口都可由软件配置成 4 种 工作模式。 (1)准双向口/若上拉(标准 8051 输出模式); (2)推挽输出/强上拉; (3)仅为输入(高阻); (4)开漏输出。 单片机上电复位后为准双向口/若上拉模式(除部分端口),每个端口的工作模式可通过 2 个特殊功能寄存器 PxM1、PxM0(x=0~7)中的相应位来进行设置,例如 P0M1 和 P0M0 用于 设置 P0 口的工作模式,其中 P0M1^0 和 P0M0^0 用于设置 P0.0 引脚,P0M1^7 和 P0M0^7 用于 设置 P0.7 引脚。I/O 端口工作模式的设置如图表 3-3 所示。 表 3-3 单片机 I/O 口工作类型设定 控制信号 PxM1[7:0] PxM1[7:0] I/O 端口模式 0 0 准双向口(普通 51 模式),灌电流为 20mA,拉电流为 150~270µA 0 1 推挽输出/强上拉,输出电流可达 20mA,要外接限流电阻 1 0 仅为输入(高阻),电流既不能流入也不能流出 开漏,内部上拉电阻断开,要外接上拉电阻才可以拉高,此模式可用于 0 1 5V 器件与 3V 器件电平转换 IAP15W4K58S4 单片机每个 I/O 端口的若上拉、强推挽输出和开漏模式都能承受 20mA 的 灌电流,推挽模式能输出 20mA 的拉电流,但应外接 470 单片 1kΩ 的限流电阻。笔者的经验 告诉读者,在实际项目设计中,每个 I/O 口的电流最好不要超过 10mA。 STC15W4K32S4 系列单片机 I/O 口的特别说明。 (1)P1.0 和 P1.4 被误设为强推挽输出,上电之后可用软件将其改设为所需的模式,并 建议在和外围电路连接时,串口 100 欧姆的电阻。 (2)P1^7、P1^6 引脚。IAP15W4K48S4 单片机的所有 I/O 端口上电复位后默认状态均为准 双向、若上拉模式,但是当 P1^7、P1^6 引脚用于外接晶振输入时,他们上电复位后为高阻 模式。 (3)P5^4/RST 引脚。P5^4 引脚既可用作 I/O 端口,也可用作复位输入 RST,需要采用 STC-ISP 软件对 P5^4 引脚进行设置。 (4)P2^0/RSTOUT_LOW 引脚。P2^0 引脚在单片机上电复位后可以输出低电平,也可以输 出高电平,需要采用 STC-ISP 软件对 P2.0 引脚进行设置。 (5)与 PWM2 到 PWM7 相关的 12 个 I/O 口(例如 P3.7/PWM2、P2.1/PWM3 等),上电复位后 是高阻输入,要对外能输出,需用软件的方式将其设为强推挽或准双向口。 3.7.2 I/0 口各种不同的工作模式结构框图 如上所述,STC15 系列的单片机 I/O 口可配置为四种模式。现对这四种模式的内部结构 简述如下。 飛天三號单片机实验板 ~ 21 ~ 电子工程师基地: www.ieeBase.net STC15 单片机实战指南(C 语言版) 微信号:xymbmcu 1.准双向口(弱上拉)输出配置 准双向口工作模式下,I/O 口可用于直接输出,不需要重新配置。这是因为当口线输出 “1”时,驱动能力很弱,允许外设将其拉成低电平。相反,当引脚输出低电平时,它的驱 动能力很强,可吸收相当大的电流。准双向口的内部结构电路图如图 3-29 所示。 图 3-29 准双向口的内部结构图 特别说明。准双向口(弱上拉)带有一个施密特触发器输入以及一个干扰抑制电路,读 取外部状态前,要先锁存为“1”,这样才能读到外设正确的数据状态。 2.强推挽输出配置 强推挽输出配置的下拉结构与开漏输出以及准双向口的下拉结构相同,但当锁存器为 “1”时提供持续的强上拉。推挽模块一般用于需要驱动大电流的电路中,其内部结构图如 图 3-30 所示。 图 3-30 强推挽输出内部结构图 3.高阻输入模式 仅为输入(高阻)工作模式下,可直接从端口引脚读入数据,不需要对其端口所对应的 锁存器置“1”。其内部结构示意图如图 3-31 所示。 图 3-31 高阻输入模式内部结构图 需要注意的是,次模式下,电流既不能流入也不能流出。 4.开漏输出模式 开漏输出模式下,I/O 口输出的下拉结构与推挽输出/准双向口一致,输入电路与准双 向口一致,但输出驱动无任何负载,即开漏状态。在输出应用电路中,必须外接上拉电阻。 该模式下,其内部结构如图 3-32 所示。 飛天三號单片机实验板 ~ 22 ~ 电子工程师基地: www.ieeBase.net STC15 单片机实战指南(C 语言版) 微信号:xymbmcu 图 3-32 开漏输出模式内部结构图 3.8 LED 小灯的原理解析 要熟练操作 LED 小灯,必须要对其内部特性和发光特性加以了解,这样才能更好的控制 它。 3.8.1 LED 灯的原理说明 LED(Light Emitting Diode),发光二极管,简称 LED,是一种能将电能转换为可见光 的固态半导体器件。LED 的核心是一个半导体的晶片,晶片的一端附在一个支架上,连接电 源的正极使整个晶片被环氧树脂封装起来,另一端是负极。半导体晶片由两部分组成,一部 分是 P 型半导体,在它里面空穴占主导地位,另一端是 N 型半导体,在这边主要是电子。但 这两种半导体连接起来的时候,它们之间就形成了一个“P-N 结”。当电流通过导线作用于 这个晶片的时候,电子就会被推向 P 区,在 P 区里电子跟空穴复合,然后就会以光子的形式 发出能量,这就是 LED 发光的原理。至于颜色,读者可以自行查阅资料,概况说,电子与空 穴复合时释放出的能量决定了光的波长,波长决定了发光的颜色。 LED 品种繁多,如何识别正负,常见的有直插式和贴片式两种,如何区分 LED 的正负极 是很多初学者经常问到的问题,常见的方法有观察法和万用表测量法。 1、观察法。直插式 LED:直插式的 LED 如果是全新的,可以通过引脚长短来判别发光 二极管的正负极,引脚长的为正极,短的为负极。还有就是拿手上,一抹就知道(发光二极 管的环氧树脂封装上有个缺口的是负极);贴片 LED:俯视,一边带彩色线的是负极,另一 边是正极。 2.万用表测量法。这里讲述数字式(不是指针式的)。将万用表打到二极管测试档,两 表笔接触二极管的两个脚,若二极管发光,说明红表笔接的是正极,黑表笔接的是负极。若 不亮,情况刚好相反。 3.8.2 LED 小灯的硬件电路 对于 LED 来说,总共两个引脚,在电路设计上没有难度,这里以 FSST15 开发板上的原 理图来做讲解。通常情况下,LED 内部需要通过一定的电流且存在一定的压差(也即压降) 才能使得其发光。通常使用的 LED 的工作电流为 3~20mA 左右,但二极管本身的内阻又比较 小,所以不能直接将两端接电源和 GND,而需要加一个限流电阻(阻值如何计算,请看后面 分解),限制通过 LED 的电流不要太大,LED 原理图如图 3-33 所示。 该方式的 LED 驱动电路是将正极接在 3.3V(高电平)上,负极再串联一个 47OΩ 的限流 电阻,再接到单片机的 I/O 口上,这样,只需给 LED1~LED12 所对应的 I/O 口上低电平,就 可以点亮 LED;还有一种接法是将 LED 的正极接单片机的 I/O 口,再通过一限流电阻,将负 极接地,单片机输出高电平,就可以点亮 LED,但是需要将 I/O 设置为强推挽输出模式。但 事实上是单片机上电之后 I/O 口默认电平为高电平,这样,从工程的角度考虑,单片机上电 飛天三號单片机实验板 ~ 23 ~ 电子工程师基地: www.ieeBase.net STC15 单片机实战指南(C 语言版) 微信号:xymbmcu 以后,LED 就会工作,这并不是我们想要的结果,所以一般不建议这么设计电路,当然具体 设计依情况而定。 图 3-33 FSST15 开发板上 LED 原理图 经上述分析,LED 两端只要有一合适的压差和电流,就会点亮 LED。那么单片机又是如 何控制的呢。举个例子,要有水流,必须有水压差,同样,要有电流,就得有电压差,结合 上图,LED 的正极已经接了高电平,那如果 LED1~LED12 所对应的单片机端口也为高电平, 这样,LED 的左右电平都是高电平(3.3V),则就没有压差,所以就没有电流,则 LED 就不 会亮,相反若单片机端口为低电平,从而 LED 两端则会有压差(左低、右高),这样 LED 灯 就会被点亮。至于这里的 LED1~LED11,肯定都接了单片机的 I/O,具体接到了哪里,请参考 附录的 FSST15 原理图。这里读者唯独需要注意的是,原理图中,网络标号相同,表示此线 是在电气特性上是相连接的。同时需要注意的是,开发板上资源过多,I/O 口不够,这里将 LED11 和 RS485 的方向控制脚都连接到了 P3.6 引脚上。 3.9 LED 小灯的应用实例 通过以上学习,大家已经扫除了 LED 原理和硬件障碍,现在来看看如何借助单片机用软 件来控制 LED,由原理图可知,12 个 LED 全都接在单片机的 I/O 口上,这里只需将其对应口 线的电平高低就可以实现控制 LED 的亮灭。为了不把新手们扼杀在萌芽阶段,先不讲解单片 机的原理,所以只需依葫芦(前面讲述的 Keil5 开发流程)画瓢(剪刀、浆糊下面的例程), 继而熟悉开发流程并点亮一颗 LED 小灯。 不知读者是否还记得,学完第 2 章之后,所预留的第 3 个问题,仔细观察过的读者应该 知道,D9 发光二极管被点亮了,具体实例请读者查看 2.3 小节,点亮一个 LED 灯的效果如图 3-34 所示,此时,读者应该感到高兴,毕竟已经点亮了一个小灯,星星之火可以燎原嘛, 所以,只要读者带着坚持和渴望的心态,那么接下来学习将会变的更简单。 飛天三號单片机实验板 ~ 24 ~ 电子工程师基地: www.ieeBase.net STC15 单片机实战指南(C 语言版) 微信号:xymbmcu 图 3-34 点亮一个 LED 的效果图 3.9.1 LED 闪烁实例 估计有些读者已经按捺不住内心的好奇心,觉得只点亮 LED 还不能满足,想实现 LED 的闪烁,那该如何实现呢? #include "stc15.h" #include "intrins.h" sbit LED11 = P3^6; // 包含 STC15 的头文件 // 包含 intrins.h 头文件, //_nop_()语句的声明在该头文件中 // LED11 的位定义 void Delay1000ms(void) // @22.1184MHz { unsigned char i, j, k; _nop_(); _nop_(); i = 85; j = 12; k = 155; do { Do { while (--k); } while (--j); } while (--i); } void main(void) { while(1) // 死循环 { LED11 = 0; Delay1000ms(); LED11 = 1; Delay1000ms(); // 点亮 LED11 // 延时 1000ms // 熄灭 LED11 // 延时 1000ms } } 该实例对于 C 语言基础比较好的读者来说,应该比较简单,无非就是反复循环的点亮→ 延时→熄灭→延时,但对于初学者,估计还是有些难度,因为该实例相对于第二章的实例出 现了好多新名词,例如 Delay1000ms()延时函数、头文件“STC15.h”等,在这里,笔者对 这些知识点先不做讲述,读者只需按照开发流程,把程序多写几遍,熟悉开发流程和基本的 编程技巧就够了,具体内容等读者学习了下节课的模块化编程,这些问题就会变得简单了。 最后编译生成 HEX 文件,下载到单片机中,读者应该能够观察到,FSST15 开发板上的 LED (D19)小灯开始闪。 飛天三號单片机实验板 ~ 25 ~ 电子工程师基地: www.ieeBase.net STC15 单片机实战指南(C 语言版) 微信号:xymbmcu 3.9.2 LED 跑马灯实例 有了 3.9.1 实例基础,我们再对其加以升级,让其开发板上的 12 个 LED 全部依次开始 闪烁,这样就可实现 LED 跑马灯的效果,也即 LED 像一匹骏马驰骋于开发板上,不同的时刻, 出现在不同的位置,需要注意的是,同一时刻,只有一个 LED 是点亮的。这里忽略单片机自 身运行时间的差异。 #include "stc15.h" #include "intrins.h" sbit LED9 = P5^4; sbit LED10 = P5^5; sbit LED11 = P3^6; sbit LED12 = P3^7; void Delay100ms() { unsigned char i, j, k; //@11.0592MHz _nop_(); _nop_(); i = 5; j = 52; k = 195; do { do { while (--k); } while (--j); } while (--i); } void main(void) { unsigned char i = 0; P3M0 = 0x00; P3M1 = 0x00; // 设置其 P3 口为准双向 I/O 口 while(1) { P7 = 0xFE; // 点亮 LED1 Delay100ms(); // 延时一小会 for (i = 0; i < 7; i++) // 循环 7 次 飛天三號单片机实验板 ~ 26 ~ 电子工程师基地: www.ieeBase.net STC15 单片机实战指南(C 语言版) 微信号:xymbmcu { // 依次点亮 LED2~LED8 P7 = _crol_(P7,1) ; // 调用移位函数 Delay100ms(); // 延时一小会 } P7 = 0xFF; // 熄灭 LED1~LED8 LED9 = 0; // 点亮 LED9 Delay100ms(); LED9 = 1; // 延时一小会 // 熄灭 LED9 LED10 = 0; Delay100ms(); LED10 = 1; LED11 = 0; Delay100ms(); LED11 = 1; LED12 = 0; // 点亮 LED10 // 延时一小会 // 熄灭 LED10 // 点亮 LED11 // 延时一小会 // 熄灭 LED11 // 点亮 LED12 Delay100ms(); LED12 = 1; // 延时一小会 // 熄灭 LED12 } }这里很巧妙的用了 KeilC51 自带的函数库_crol_(),该函数包含在“intrins.h”头 文件中,所以需要增加一句#include 包含该头文件。_crol_()函数的功能是 循环左移,什么是循环左移,什么是左移,什么又是右移、或者循环右移,结合图示来说明, 如图 3-35、3-36、3-37、3-38 所示。 图 3-35 左移示意图 图 3-36 循环左移示意图 图 3-37 右移示意图 飛天三號单片机实验板 ~ 27 ~ 电子工程师基地: www.ieeBase.net STC15 单片机实战指南(C 语言版) 微信号:xymbmcu 图 3-38 循环右移示意图 有了以上的图示,笔者相信,C 语言中的“<<”、“>>”和循环左、右位移应该不难理解, 之后读者自行编程下载,观察其实验现象。 3.9.3 LED 流水灯实例 流水灯顾名思义就是让 LED 如同流水一般,从无灯亮,到亮一个,再到亮二个,以此类 推,亮 3 个、4…12 个,最后全部熄灭,再周而复始的循环下去,先看源码,再做讲述。 #include "stc15.h" #include "intrins.h" sbit LED9 = P5^4; sbit LED10 = P5^5; sbit LED11 = P3^6; sbit LED12 = P3^7; void Delay100ms() { unsigned char i, j, k; //@22.1184MHz _nop_(); _nop_(); i = 9; j = 104; k = 139; do { do { while (--k); } while (--j); } while (--i); } void main(void) { unsigned char i = 0; P3M0 = 0x00; P3M1 = 0x00; 飛天三號单片机实验板 ~ 28 ~ 电子工程师基地: www.ieeBase.net STC15 单片机实战指南(C 语言版) 微信号:xymbmcu while(1) { P7 = 0xFF; LED9 = 1; LED10 = 1; LED11 = 1; LED12 = 1; Delay100ms(); for (i = 0; i < 8; i++) { P7 <<= 1; Delay100ms(); } LED9 = 0;Delay100ms(); LED10 = 0;Delay100ms(); LED11 = 0;Delay100ms(); LED12 = 0;Delay100ms(); } } 此程序了,就不做详细说明了,读者只需结合上面的左移示意图和山寨流程图,流程 图如图 3-39(右半部分)所示,为了和跑马灯例程相对比,笔者还画了跑马灯的示意图, 这样只有读者对其两者进行对比,肯定能看出端倪,同时应该能掌握其运行的过程。 图 3-39 跑马灯和流水灯示意图 飛天三號单片机实验板 ~ 29 ~ 电子工程师基地: www.ieeBase.net STC15 单片机实战指南(C 语言版) 微信号:xymbmcu 这里讲述跑马灯和流水灯,不仅要熟悉开发流程,还需掌握和积累 C 语言以及一些 C51 的自带函数,只有不断的积累、重复、思考,才能做到由“量变”到“质变”。单片机的学 习不同于别的学科,当你真正做几个实验入门以后,你会发现“她”很有魅力,一直吸引 着你,不厌不弃! 3.10 课后习题 (1)掌握基本元器件的特性,在现有的电路中分析其作用,同时能在自己的电路设计 中熟练应用。 (2)了解 STC15 系列单片机 I/O 的内部结构,掌握四种模式(具体如何配置后续讲述)。 (3)掌握发光二极管(LED)的特性和发光原理,能熟练应用到电路中。 (4)能用单片机熟练控制 LED 小灯的亮灭,以及按要求控制不同的显示。 (5)熟练掌握 C 语言中的“<<”和“>>”,以及循环左移、右移,并能熟练应用到编程 中。 飛天三號单片机实验板 ~ 30 ~ 电子工程师基地: www.ieeBase.net STC15 单片机实战指南(C 语言版) 微信号:xymbmcu 作者简介 刘 平,热爱电子技术,乐于分享、善于交流。先后在珠海、深圳等地主持研发通信类、 LCD 显示屏等多款产品,在嵌入式软件和硬件电路设计方面有丰富的项目实战经验,现创立 了深圳一坚电子和沃达智能科技。 现已编著有《深入浅出玩转 51 单片机》一书,研发有与书籍配套的飛天一號(MGMC-V2.0) 51 单片机试验板,并录制有与书籍、实验板完全配套的《31 天环游单片机》视频,此系列 产品已获得广大网友的好评和在校师生的肯定。 除此之外,自主研发有飛天二號(FSST32-V1.0)STM32 实验板和本书配套的飛天三號 (FSST15-V1.0)实验板,以及基于 STM32 平台的四轴飞行器飞蜓一号,基于 STC15 平台的 四轴飞行器飞蜓二號。 可以个人、公司的形式,承接各类嵌入式(全志、MTK 等)、单片机(51 单片机、STM32、 STM8、PIC、Atmel、松翰、合泰等)、蓝牙、WiFi、PCBA、Layout、APP、网页、商城等软硬 件项目。 联系人:小刘 邮箱 :625408362@qq.com 电话 :151-1239-9952 单片机技术交流群:143406243 先后获得以下各大网站称号: EDN China(电子技术设计)网站——博客专家(并荣膺 2015 年度最佳博主奖) China AET(电子技术应用)网站——网络名师 Elecfans (电子发烧友) 网站——社区之星 Moore8 (摩尔吧) 网站——金牌讲师 飛天三號单片机实验板 ~ 31 ~ 电子工程师基地: www.ieeBase.net

Top_arrow
回到顶部
EEWORLD下载中心所有资源均来自网友分享,如有侵权,请发送举报邮件到客服邮箱bbs_service@eeworld.com.cn 或通过站内短信息或QQ:273568022联系管理员 高进,我们会尽快处理。