wordpress 置顶不重复,深圳网站seo服务,seo教程书籍,设计师设计网51单片机快速入门之数码管的拓展应用
在前面的文章中,我们已经了解到数码管的基础应用,今天来讲讲拓展应用
我们知道单个数码管分为以下 但是当我们碰到 如下这种数码管的时候又应该如何去控制呢? 这里就不得不说其拓展应用之-----------扫描显示
扫描显示: 扫描显示,又称…51单片机快速入门之数码管的拓展应用
在前面的文章中,我们已经了解到数码管的基础应用,今天来讲讲拓展应用
我们知道单个数码管分为以下 但是当我们碰到 如下这种数码管的时候又应该如何去控制呢? 这里就不得不说其拓展应用之-----------扫描显示
扫描显示: 扫描显示,又称为 动态驱动显示 为了使多位数码管能够显示连续的数字必须快速地在各个数码管之间切换扫描。扫描的速度足够快以至于人眼不会察觉到闪烁从而产生所有数码管同时工作的错觉。约0.04s
程序代码 #include STC89C5xRC.H int i0,we0; unsigned char code table[] {0x14,0xAD,0x9D,0xD4,0xD9,0xF8,0x15,0xFD,0xDD}; unsigned char code tabwe[] {0xE0,0xD0,0xB0,0x70}; void delay(unsigned int t);//延时函数声明 void main() { while(1){ for(;we4;we) { P2tabwe[we]; //选择数码管 P1table[we];//获取对应段码 delay(400); } if(we4){we0;} //初始化 } } void delay(unsigned int t) { while(t--); } 效果如下 这个缺陷是只能显示4位段码,但是我们可以通过更改代码以显示想要显示的数字
比方说我们想显示2688只需要这样做即可 #include STC89C5xRC.H int i0,we0; unsigned char code table[] {0x14,0xAD,0x9D,0xD4,0xD9,0xF8,0x15,0xFD,0xDD}; unsigned char code tabwe[] {0xE0,0xD0,0xB0,0x70}; void delay(unsigned int t);//延时函数声明 void main() { unsigned char mp[]{7,7,5,1} ; //由于我的数码管是反的所以这里也用反的 while(1){ for(;we4;we) { P2tabwe[we]; //选择数码管 P1table[mp[we]];//获取对应段码 delay(400); } if(we4){we0;} //初始化 } } void delay(unsigned int t) { while(t--); } 这里解释一下为什么要用7751而不是8862
我们知道表的 初始是从0 比方说 table[ ]{a,b,c,d}
实际上获取abcd 应该这样 table[0] table[1] table[2] table[3]
当我们mp[4]时,获取到的就是1
查询表 1就是 table[1] 也就获取到数字 2 的段码 了!
如果上述过于模糊你可以这样理解
假设一个表如下
tb[ ]{0,1,2,3}
我们要获取0 就用 tb[0]
我们要获取1 就用 tb[1]
我们要获取2 就用 tb[2]
我们要获取3 就用 tb[3]
注意其确实占用了 4 位
注意事项: 由于我直接用的io供电,所以当驱动4位显示时亮度并不是很亮,如果需要亮度达到最高,需要外接一个三极管电路以给数码管提供稳定点亮电流!
或者采用锁存芯片,例如74HC573(图片来源于网络) 静态显示:
静态显示的特点是
所有位选线数码管的公共端连接在一起而各个数码管的段选线数码管上各笔段的引出线是相互分离的。
静态显示的优点是
数码管显示无闪烁亮度高软件控制比较容易
静态显示的缺点是
需要的硬件电路较多每一个数码管都需要一个 锁存器由于所有数码管都处于被点亮状态所以需要的电流很大当数码管的数量增多时对电源的要求也就随之增高。在大部分的硬件电路设计中很少采用静态显示方式。