第5章 LED数码管的单片机驱动电路与编程

5.1 单片机驱动一位LED数码管的电路与程序详解

5.1.1 一位LED数码管的外形、结构与检测

LED数码管是将发光二极管做成段状,通过让不同段发光来组合成各种数字。

1.外形、结构与类型

一位LED数码管如图5-1所示,它将a、b、c、d、e、f、g、dp共8个发光二极管排成图示的“.”字形,通过让a、b、c、d、e、f、g不同的段发光来显示数字0~9。

由于8个发光二极管共有16个引脚,为了减少数码管的引脚数,在数码管内部将8个发光二极管正极或负极引脚连接起来,接成一个公共端(com端),根据公共端是发光二极管正极还是负极,可分为共阳极接法(正极相连)和共阴极接法(负极相连),如图5-2所示。

图5-1 一位LED数码管

对于共阳极接法的数码管,需要给发光二极管加低电平才能发光;对于共阴极接法的数码管,需要给发光二极管加高电平才能发光。如果图5-1是一个共阳极接法的数码管,要让它显示一个“5”字,那么需要给a、c、d、f、g引脚加低电平,b、e引脚加高电平,这样a、c、d、f、g段的发光二极管有电流通过而发光,b、e段的发光二极管不发光,数码管就会显示出数字“5”。

图5-2 一位LED数码管内部发光二极管的连接方式

LED数码管各段电平与显示字符的关系见表5-1。比如对于共阴极数码管,如果dp~a为00111111(十六进制表示为3FH)时,数码管显示字符“0”,对于共阳极数码管,如果dp~a为11000000(十六进制表示为C0H)时,数码管显示字符“0”。

表5-1 LED数码管各段电平与显示字符的关系

2.类型与引脚检测

检测LED数码管使用万用表的R×10k档。从图5-2所示数码管内部发光二极管的连接方式可以看出,对于共阳极数码管,黑表笔接公共极、红表笔依次接其他各极时,会出现8次小阻值;对于共阴极数码管,红表笔接公共极、黑表笔依次接其他各极时,也会出现8次小阻值。

图5-3 一位LED数码管的检测

(1)类型与公共极的判别

在判别LED数码管类型及公共极(com)时,万用表拨至R×10k档,测量任意两引脚之间的正、反向电阻,当出现小阻值时,如图5-3所示,说明黑表笔接的为发光二极管的阳极,红表笔接的为阴极,然后黑表笔不动,红表笔依次接其他各引脚,若出现小阻值的次数大于2次时,则黑表笔接的引脚为公共极,被测数码管为共阳极类型,若出现阻值小的次数仅有1次,则该次测量时红表笔接的引脚为公共极,被测数码管为共阴极。

(2)各段极的判别

在检测LED数码管各引脚对应的段时,万用表选择R×10k档。对于共阳极数码管,黑表笔接公共引脚,红表笔接其他某个引脚,这时会发现数码管某段会有微弱的亮光,如a段有亮光,表明红表笔接的引脚与a段发光二极管阴极连接;对于共阴极数码管,红表笔接公共引脚,黑表笔接其他某个引脚,会发现数码管某段会有微弱的亮光,则黑表笔接的引脚与该段发光二极管阳极连接。

如果使用数字万用表检测LED数码管,应选择二极管测量档。在测量LED两个引脚时,若显示超出量程符号“1”或“OL”时,表明数码管内部发光二极管未导通,红表笔接的为LED数码管内部发光二极管的阴极,黑表笔接的为阳极,若显示1500~3000(或1.5~3.0)之间的数字,同时数码管的某段发光,表明数码管内部发光二极管已导通,数字值为发光二极管的导通电压(单位为mV或V),红表笔接的为数码管内部发光二极管的阳极,黑表笔接的为阴极。

5.1.2 单片机连接一位LED数码管的电路

单片机连接一位共阳极LED数码管的电路如图5-4所示。

图5-4 单片机连接一位共阳极LED数码管的电路

5.1.3 单个数码管静态显示一个字符的程序与说明

图5-5是单个数码管静态显示一个字符的程序。程序执行时,数码管会显示字符“2”,如果将程序中P1=0xa4换成其他字符码,比如让P1=0x83,数码管会显示字符“b”,其他字符的字符码见表5-1。

图5-5 单个数码管静态显示一个字符的程序

5.1.4 单个数码管动态显示多个字符的程序与说明

图5-6是单个数码管动态显示多个字符的程序。程序执行时,单个数码管依次显示字符0、1、…、F,并且这些字符循环显示。

图5-6 单个数码管动态显示多个字符的程序

在程序中,先在单片机程序存储器(ROM)中定义一个无符号字符型表格table,在该表格中按顺序存放0~F字符的字符码。在执行程序时,for语句执行16次,依次将table表格中的0~F的字符码送给P1端口,P1端口驱动外接共阳极数码管,使之从0依次显示到F,并且该显示过程循环进行。

5.1.5 单个数码管环形转圈显示的程序与说明

图5-7是单个数码管环形转圈显示的程序。程序执行时会使数码管的a~f段依次逐段显示,并且循环进行。该程序与LED循环左移程序基本相同,先用P1=0xfe点亮数码管的a段,再用P1=P1<<1语句让P1数值左移一位,以点亮数码管的下一段,同时用P1=P1|0x01语句将左移后的P1端口的8位数值与00000001进行位或运算,目的是将左移后右端出现的0用1取代,以熄灭数码管的上一段,左移6次后又用P1=0xfe点亮数码管的a段,如此反复进行。

5.1.6 单个数码管显示逻辑电平的程序与说明

图5-8是单个数码管显示逻辑电平的程序。程序执行时检测P3.3端口的电平,并通过P1端口外接的数码管将电平显示出来。若P3.3端口为高电平,数码管显示“H”;若P3.3端口为低电平,数码管显示“L”。程序中使用了选择语句“if(表达式){语句组一}else{语句组二}”,在执行该选择语句时,如果(if)表达式成立,执行语句组一,否则(else,即表达式不成立)执行语句组二。

图5-7 单个数码管环形转圈显示的程序

图5-8 单个数码管显示逻辑电平的程序