MCU之心路分享--跳跃的数码管(三)

来源:本站
导读:目前正在解读《MCU之心路分享--跳跃的数码管(三)》的相关信息,《MCU之心路分享--跳跃的数码管(三)》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《MCU之心路分享--跳跃的数码管(三)》的详细说明。
简介:总是在不经意间,时间就从我们的指缝中一点点流逝,成长的日子,撕了皮连着肉,来不及疼痛,来不及流泪,只因时光如流水般,无声地流着流着,,,,,,数码管那数字跳跃的旋律,或许能让我们感觉到时光流逝的疼痛!

本小节目录:

3.1数码管的分类和结构

3.2数码管原理图分析

3.3数码管静态和动态显示程序的分析

3.1)数码管的分类和结构

数码管其实也就是:由若干个发光二极管按共阴极或者共阳极连接在一起的器件。

MCU之心路分享--跳跃的数码管(三)

图1

数码管分类:

按段数分:七段数码管和八段数码管(比七段多一点(上图1红圈内一点))

按位数分:如上图1,常见有1位,2位,3位,4位数码管

按极性分:共阴极(所有二极管阴极连一起)和共阳极(同理)如下图2

MCU之心路分享--跳跃的数码管(三)

图2数码管内部解剖图

数码管结构解释:

1)内部由8个发光二极管组成,其中7个发光二极管(a,b,c,d,e,f,g)作为7段组成“8”字结构(又称7段LED数码管),剩下1发光二极管为h点(或dp),如上图3.1.2。

2)内部8个发光二极管的全部负极连接一起,作为公共端COM,(故称为共阴极),而剩下8个正极分别作为独立引脚,其引脚名称分别用a,b,c,d,e,g,f,h(或dp)表示;而共阳极反之。

3)从图3.1.2显然可以看出,共阴极数码管,只需给a到h端中的某段,给高电平“1”则亮,给“0”低电平则灭,反之共阳极某段,给高电平“1”,则灭,给“0”则亮。

4)显然:对于共阴极数码管,若公共端给低电平“0”,给b,c高电平“1”,剩下a,d,e,f,g,h送低电平“0”则亮数字“1”,那么亮数字“8”呢?又显然给a,b,c,d,e,f高电平送“1”,剩下g,h给低电平“0”。同理想亮别的数字就很简单了呀!

3.2)数码管原理图分析

MCU之心路分享--跳跃的数码管(三)

图3 两个4位共阴极数码管连接图

MCU之心路分享--跳跃的数码管(三)

图4 单片机原理图

对于初学者来说,数码管连接单片机的原理图是很不好看懂的,单单让初学者找相同的物理标识都要找很久,说不定还没有找到,本人当初看郭天祥的书时,就是深受原理图坑了很久才看懂。所以本人将图3,和图4相互连接的地方,全用同色笔圈出了。

结合图3和图4不难看出共阴极数码管连接单片机的原理图:

(1)黑色圈圈:两个数码管的DU0—DU7都连接到图3右下方74HC573(U6)的DU0—DU7

(2)红色圈圈:两个数码管的WE0—WE7连接到图3左下方74HC573(U5)的WE0—WE7

(3)蓝色圈圈:两个74HC573的COM0—COM7都连接到图4的P0口(COM0—COM7)

(4)图3中1,2数字的WE#和DU#和图4中的1,2数字的WE#(P1^6)和DU#(P1^7)连接

(5)为什么要用74HC573驱动数码管?

因为单片机IO口的拉电流比较小(100~200uA),灌电流也最多是25mA,显然直接用来驱动数码管是不行的,所以必须要扩流,而加573能启到扩流的作用,同时还能节约单片机的IO口。

(6)关于74HC573芯片,初学者只需记住,

1,只有当单片机给LE端送高电平“1”时,(即打开573)

单片机P0口再给573的D0—D7哪个口送“1”,则对应Q0—Q7哪个口才为“1”;

反之给D0-D7送“0”,对应Q0-Q7才为“0”

2,而当单片机给LE端为低电平“0”时,(即关闭573)

不论单片机P0口再给573送“0”或者“1”,D0-D7都不反应,即573没有起作用。(若有兴趣也可深究573数据手册(DataSheet)。)

(7)什么是段选,位选?(务必要理解这里,否则后面程序没办法理解)

段选就是亮哪段(例如亮0,就给a,b,c,d,e,f段送高电平“1”)

位选是哪个亮(例如第1位数码管亮,还是第2位亮,还是第8个亮

总的来说就是:往单片机里写程序,去控制两个74HC573,从而控制两个4位数码管的位选和段选,让其哪位亮,亮什么。

3.3)数码管静态和动态显示程序的分析

1,数码管静态显示:

有了上面的原理图的7条分析后,不难理解,如果我们想让8个共阴极数码管都亮数字“1”,则8个位选应全给低电平“0”,即为00000000;而段选的b,c给高电平“1”,剩下a,d,e,f,g,h给低电平“0”,则不就实现了吗?答案是肯定的。

8个数码管全亮数字“1”程序:

#include

sbitWei_select=P1^6;//位选的573的LE口连接单片机P1^6口

sbitDuan_select=P1^7;//段选的573的LE口连接单片机P1^7口

voidmain(void)

{

Wei_select=1; //单片机给U5的573送高电平,开启573,上3.2)中的(6)已讲

P0=0x00; //单片机给U5的573送位选数据00000000,全选8个数码管

Wei_select=0; //单片机给573送低电平,关闭573,以上3.2)中的(6)已讲过

Duan_select=1;//单片机给U6的573送高电平,开启573,以上3.2)中的(6)已讲

(10)P0=0x06; //单片机给U6的573送段选数据00000110,给b,c高电平,

// 其他 a,d,e,f,g,h给低电平

Duan_select=0; //单片机给573送低电平,关闭573,以上3.2)中的(6)已讲过

while(1); //程序停止到这里

}

MCU之心路分享--跳跃的数码管(三)

图5 8个数码管全显示数字“1”(由于手机像素的原因,效果不太好)

或许程序(10)处的P0=0x06还有人疑问,(当初本人学的时候也很困惑)

为什么a,b,c,d,e,f,g,h按顺序不是给01100000才对嘛?而是给00000110呢?

解释:请细心看图3和图4的原理图,

很容易看出,数码管的a,b,c,d,e,f,g,h分别与573的DU0—DU7连接,然后通过573的COM0--COM7与单片机的P0.0(低位)--P0.7(高位)连接,而0x06(00000110)的高位在前,低位在后,所以送电平时要颠倒过来给。

也就是说:给P0口送的电平对应的是h—a,而不是a—h,如下表

MCU之心路分享--跳跃的数码管(三)

2,数码管动态显示:

数码管动态显示就是轮流向数码管送位码和相应的段码,利用人眼的视觉暂留现象使人感觉各位数码管是同时亮了,而实际是一位一位轮流亮的,只是轮流的时间太短,人眼无法分辨而已。(对于初学者来说,或许不好理解,但是只要有开发板,写程序下载,看过静态和动态显示现象的人,或许就明白什么是动态,什么是静态了,当然,本人当初学得时候也是没有理解的)

8个数码管从第一个数码管开始显示“1”,0.5s后,第二个数码管显示“2”,0.5后,,,,,,,,,,,一直到第八个数码管显示“8”的程序:

#include

#defineUchar8unsignedchar

#defineUint12unsignedint

#defineDateP0 //P0口宏定义

sbitWei_select=P1^6;

sbitDuan_select=P1^7;

//共阴极第1个数码管到第8个数码管的位码值数组

Uchar8codeWei_tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

//共阴极0—-7数字显示段码值

Uchar8codeDuan_tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07};

/*******************************************************/

//函数功能: 毫秒延时函数

//入口参数: 延时毫秒数(xms)

//出口参数: 无

/*******************************************************/

voidDelayms(Uint12xms)

{

Uint12i,j;

for(i=xms;i>0;i--)

for(j=121;j>0;j--);

}

voidmain(void)

{

Uchar8num;

while(1)

{

for(num=0;num<8;num++)

{

Wei_select=1; //段选打开

Date=Wei_tab[num]; //送位选数据

Wei_select=0; //段选关闭

Duan_select=1; //位选打开

Date=Duan_tab[num]; //送段选数据

Duan_select=0; //位选关闭

Date=0xff;//消影

Delayms(500); //约延时500毫秒

}

}

}

1)#defineDateP0中所谓宏定义:也就是用Date代替P0,在后面的程序中都用Date代替P0,这样的优点方便程序的修改和编写

2)Date=0xff;为什么要消影?

因为给P0口送完段选数据后,会一直会保持着,若不加0xff消影,使数码管段选完完全全取消,则下步送位选数据时,会直接影响在数码管的段选,也就会造成不让亮的数码管某段,隐隐约约的再发亮!这也就是一些书上所说的“鬼影”,所以加0xff是非常重要的。

季节的围栏,毕竟还是锁不住斗转星移,时光流逝,如同那数码管跳动一般地消无声息,而你,又是否感受到了呢?学精数码管,为自己DIY一个数码管高精度时钟吧!

本系列《MCU之心路分享》博文,本人尽自己微薄之力,以菜鸟的身份,写写初学者最详细,最具体的入门博客,本人自当也种是锻炼,仅仅如此简单容易,如有误之处,欢迎拍砖,本人不胜感激!

提醒:《MCU之心路分享--跳跃的数码管(三)》最后刷新时间 2024-03-14 01:06:01,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《MCU之心路分享--跳跃的数码管(三)》该内容的真实性请自行鉴别。