6-静态数码管显示

本文使用普中科技开发板及江科大视频,侵删!

1、数码管

 1.1 数码管定义

数码管(LED Segment Displays)由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极。数码管实际上是由七个发光管组成8字形构成的,加上小数点就是8个。这些段分别由字母a,b,c,d,e,f,g,dp来表示。

 

开发板位置: 

1.2 原理图 

1.3 引脚定义

 单个数码管:

 

四位一体数码管

如果所有数码管的阴极都连接到一个端口上,称之为共阴极连接; 

如果所有数码管的阳极都连接到一个端口上,称之为共阳极连接;如下图:

 数码管的8个LED,每一段都定义了名字,如上图,顺时针旋转,依次是A-B-C-D-E-F-G,还有小数点DP(decimal point)。

8段正好与一个字节的8个bit位一一对应。51单片机同样是8位的。

 如下图:引脚定义,左下角为1号引脚,逆时针依次是2-3-4-5-6-7-8-9-10

引脚 硬件连接如下:根据原理图,如果是共阳极,则负极A-->7,8-->6,……DP-->5,依次类推,其实3和8是同一个引脚,可以理解为同一根导线分成了2路。

详细连接图如下:采取 就近原则连接,所有看起来没有规律,其他的数码管连接不尽相同,要仔细分辨。

 1.4 单个数码管显示

 开发板是共阴极连接,引脚3和8要接地(GND)。

位选:开发板上有8个数码管,选中哪个,哪个才显示,称为位选。(什么位置)

假设开发板上的8个数码管的公共端都未接,如果采用共阴极接法,1号的公共端接地,就选中了1号,2号的公共端接地,就选中了2号,以此类推……

段选: A-B-C-D-E-F-G-DP,8段要显示哪些段,比如要点亮数字6, 则要点亮A C D E F G段。(什么内容)

 本次是静态数码管显示,一个数码管显示一个数字即可,比如显示6。(共阴极)

 A-B-C-D-E-F-G-DP ,8个引脚接到单片机的IO口,比如P0,并给IO口如1011 1110下数据:如下图,则会显示数字6。共阳极则是取反即可。~(1011 1110)

以上就是单个数码管的操作方法。

1.5四位一体数码管显示 

 开发板上的就是四位一体的。同样有共阴极和共阳极连接。

如上图,引脚的顺序也是左下角开始,逆时针排序。

它的公共端单独引出来,然后所有的A段连接在一起,所有的B段连一起......再连接到就近的引脚上 。

 如果要让第三个数码管显示1,则:

位选:第1,2,4给高电平,即阴极是高电平,保证1,2,4不会亮。

段选:BC置高电平(1),其他低电平(0)

其他数字同理……

 从显示原理可知,同一时刻,四位一体不可能显示不同的数字(段选共用),位选全部选中,则显示相同数字。

 1.6 74HC138译码器

原理图:

 开发板的是74HC245和74HC245,现在已停产。

 COM是公共端,开发板上接的是共阴极。COM接VCC,就是共阳极,接GND是共阴极。

 原理图上LED1-LED8接到了138译码器的输出端

 74HC138的工作原理:

如果要显示1,则要给如下图所示的数据。使它的输出端其中一个输出0,然后剩下的输出1,138译码器正好可以实现这个功能。

注:对于共阴极的数码管,公共端的数据我们叫做阴码,下方的叫做阳码。

单片机的3个P2口可以控制译码器的8个输出。如果8个口使用P2,不但占用P2的IO资源,而且驱动能力也不行。(弱上拉,强下拉)

138译码器操作原理:

138译码器左边输入,右边输出。即:左边的ABC是它的输入端,右边的Y0-Y7是输出端

 VCC是电源正极,GND是负极。左下角的G1,G2A,G2B是它的使能端,它相当于一种开关,如果使能电平有效的话,它就可以工作,如果没有效,它就不工作,就是一种电源开关。字母上面有横线的,表示低电平使能,高电平无效。

译码功能实现:

规律:三的IO口的二进制数值(0xxx)转换成十进制的数值对应输出端的哪个口,哪口就有效。这样可以用3个IO口操作8个输出端,减少IO口数。

P2.4  P2.3  P2.2 0

C         B        A

0          0         0       Y0---LED1

0          0         1       Y1---LED2

0          1         0      Y2---LED3

以此类推……(从0,以二进制形式,加到7即可))

1         1         1       Y7---LED8

然后接下来看看74HC245这块芯片,它叫做双向数据缓冲器,是用数据缓冲的。原理图:

 又下角的GND和VCC分别是电源的负极和正极。

A0→B0,A1→B1,A2→B2……依次类推。输入啥,就输出啥,不改变数据

OE是使能,字母上横线,表示低电平有效。如果给它接地,它就工作,如果接VCC高电平,它就不工作。

 左下角的DIR,direction表示方向,把左边的数据给缓存到右边,把右边的数据给读回来,这就是DIR的功能。如果DIR接高电平,就把左边数据送到右边去,如果接低电平,就把右边的数据给读回来。开发版DIR接VCC,高电平,表示从左往右。

 RP3和RP4表示排阻,100R表示100Ω,防止数码管的电流过大的作用。千欧的话就是100K。

 2、代码实现

 第1步:位选(哪个数码管,Y1??,Y2??)

控制译码器上的这三个P2口,使右边某一位输出0选中

 第2步 段选:(要显示什么)

选中之后,再给P0口的段码数据,比如说给0100 0000,它就会缓冲一下,直接过来,送到公共的段码端,就会显示相应的数据。

 代码如下:要在第3个数码管上显示6。第三个数码管是LED6,即Y5,根据138译码器的ABC规律,数据是:P2_4=1,P2_3=0;P2_1=1

 然后再给P0的8个口段码数据,让第三位数码管显示“6”,如图我们要点亮的是a,c,d,e,f,g段LED

只有b段和小数点dp不亮,,就它们数字0,其他位选端位1,我们就要给数据0111 1101。P0_0对应a,依次对应,故P2=0x7D。然后把这个数据原封不动地从左边移到右边P0的8个口来,注意一定要对准高低位。

按照此原理可以显示其他数值。不过比较麻烦,要挨个改。所以可以将这几行代码封成函数,把位选、段选传进函数,就显示相应数值。函数如下:

Location表示位置,即位选 ,Number表示段选,即要显示的数字。可以将段选用数组表示,即:

NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F},表示0~9,10个数字。

最终结果如下:

 在主函数里调用一下,试看效果:

 

 代码正确。

如有错误,欢迎指正! 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值