![电子工程师自学宝典:嵌入设计篇](https://wfqqreader-1252317822.image.myqcloud.com/cover/857/42637857/b_42637857.jpg)
第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所示。
![](https://epubservercos.yuewen.com/9B1E04/22139299109128506/epubprivate/OEBPS/Images/61_02.jpg?sign=1739249088-1m0FrVPDBLIMFH7zDRyTgvrR1mvU5s57-0-377c8c611b098ba2a7941dfbfbf2824d)
图5-1 一位LED数码管
对于共阳极接法的数码管,需要给发光二极管加低电平才能发光;对于共阴极接法的数码管,需要给发光二极管加高电平才能发光。如果图5-1是一个共阳极接法的数码管,要让它显示一个“5”字,那么需要给a、c、d、f、g引脚加低电平,b、e引脚加高电平,这样a、c、d、f、g段的发光二极管有电流通过而发光,b、e段的发光二极管不发光,数码管就会显示出数字“5”。
![](https://epubservercos.yuewen.com/9B1E04/22139299109128506/epubprivate/OEBPS/Images/61_03.jpg?sign=1739249088-6Y3DrS6AKPxNpaGEby2LZemAX1cscrAd-0-111a4904d4ddfa3ddf65ed2dc49d55b8)
图5-2 一位LED数码管内部发光二极管的连接方式
LED数码管各段电平与显示字符的关系见表5-1。比如对于共阴极数码管,如果dp~a为00111111(十六进制表示为3FH)时,数码管显示字符“0”,对于共阳极数码管,如果dp~a为11000000(十六进制表示为C0H)时,数码管显示字符“0”。
表5-1 LED数码管各段电平与显示字符的关系
![](https://epubservercos.yuewen.com/9B1E04/22139299109128506/epubprivate/OEBPS/Images/62_01.jpg?sign=1739249088-Vb0k908q1g6DK6TzJvyleYUw4XKUwmAh-0-dbc3c9ffbb8e954d20767fedd12b2f7b)
2.类型与引脚检测
检测LED数码管使用万用表的R×10k档。从图5-2所示数码管内部发光二极管的连接方式可以看出,对于共阳极数码管,黑表笔接公共极、红表笔依次接其他各极时,会出现8次小阻值;对于共阴极数码管,红表笔接公共极、黑表笔依次接其他各极时,也会出现8次小阻值。
![](https://epubservercos.yuewen.com/9B1E04/22139299109128506/epubprivate/OEBPS/Images/62_02.jpg?sign=1739249088-p5qtvim3HCvH6phAvPYlTWAa5B9s8tKB-0-afdba5c35150c7f102007586c7ecc0c0)
图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所示。
![](https://epubservercos.yuewen.com/9B1E04/22139299109128506/epubprivate/OEBPS/Images/63_01.jpg?sign=1739249088-xIpCUKXm8LEQcLcDP4YkKsDbBzhGvwEQ-0-5ae679d8987a24cb1ce7ad80c640decc)
图5-4 单片机连接一位共阳极LED数码管的电路
5.1.3 单个数码管静态显示一个字符的程序与说明
图5-5是单个数码管静态显示一个字符的程序。程序执行时,数码管会显示字符“2”,如果将程序中P1=0xa4换成其他字符码,比如让P1=0x83,数码管会显示字符“b”,其他字符的字符码见表5-1。
![](https://epubservercos.yuewen.com/9B1E04/22139299109128506/epubprivate/OEBPS/Images/64_01.jpg?sign=1739249088-7bnJRU7dwqFKflMSB8im6SWaSa9Fh3gC-0-fbece39c82c26263dc74b441b3aabd78)
图5-5 单个数码管静态显示一个字符的程序
5.1.4 单个数码管动态显示多个字符的程序与说明
图5-6是单个数码管动态显示多个字符的程序。程序执行时,单个数码管依次显示字符0、1、…、F,并且这些字符循环显示。
![](https://epubservercos.yuewen.com/9B1E04/22139299109128506/epubprivate/OEBPS/Images/64_02.jpg?sign=1739249088-iSpL78NkZJVVQdt1vVdomqw4zyN7H9Pv-0-2cb138714e28fef4694c256ebdec5fa7)
图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,即表达式不成立)执行语句组二。
![](https://epubservercos.yuewen.com/9B1E04/22139299109128506/epubprivate/OEBPS/Images/65_01.jpg?sign=1739249088-U4Gv9XrcKyYeCYN65bT4A5Ld5CtI4mal-0-43c52a263b77391de79312128f8ad329)
图5-7 单个数码管环形转圈显示的程序
![](https://epubservercos.yuewen.com/9B1E04/22139299109128506/epubprivate/OEBPS/Images/65_02.jpg?sign=1739249088-xAqT3nxWGHIrxh6JRteb7DSAMIwqOG73-0-ea64ce7d0bd595766ab1b1069110866e)
图5-8 单个数码管显示逻辑电平的程序