新闻中心

EEPW首页>嵌入式系统>设计应用> 51单片机系列连载3—数码管静态显示

51单片机系列连载3—数码管静态显示

作者: 时间:2016-11-27 来源:网络 收藏
今天主要介绍一下数码管,实际上在学完发光二极管的基础上,数码管一点都不难理解,因为这二者本来就是一脉相通的。首先,我们看一下实物图,基本人人都很熟悉:

本文引用地址://m.amcfsurvey.com/article/201611/322435.htm



它的内部结构就是由8个发光二极管组成的,只是要区分共阳极与共阴极,这个跟之前的二极管原理一样。当然,在排列时要注意顺序,一般都是a到h。


那么什么是动态显示与静态显示呢?看一下官方的解答。所谓静态显示,就是每一个数码管的段码都要独占具有锁存功能的输出口,CPU把要显示的字码送到输出口上,就可以使数码管显示对应的字符, 直到下一次送出另外一个字码之前,显示的内容一直不会消失;动态扫描是把所有显示器的8个段码中的A-dp的各个相同段连接在一起,接到一个公共的输出口上,而数码管的位端分别接在另外的输出口上,通过这两个输出口的两组信号相互作用来产生显示效果。即让各位数码管按照一定顺序轮流显示,只要扫描频率足够高,由于人眼的“ 视觉暂留”现象,就能连续稳定的显示。

接下来,写几个程序让它亮一下:

1、一个数码管亮

#include

sbitduan=P2^2;

sbitwei=P2^3;

voidmain()

{

wei=1;

P0=0x00;

wei=0xbf;(此条语句结果为第7位数码管亮,显示4)

duan=1;

P0=0x66;

duan=1;

while(1);

}

2、多个数码管静态显示

#include

#defineuintunsignedint

#defineucharunsignedchar

sbitduan=P2^2;

sbitwei=P2^3;

ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

voiddelay(uintz);

voidmain()

{wei=1;

P0=0xea;

wei=0;

while(1)

{uintnum;

for(num=0;num<16;num )

{

duan=1;

P0=table[num];

duan=0;

delay(1000);

}

}

}

voiddelay(uintz)

{

uintx,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

以上就是对数码管静态显示的简单分析,动态的稍后介绍,在数码管这块,主要解决一点,就是位锁存与段锁存,把这个理解了,剩下的就是简单地c语言编程了,其实真的不难!



评论


技术专区

关闭