数码管的定义及其静态显示和动态显示图文解读

电子说

1.2w人已加入

描述

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

数码管原理图:

数码管

数码管共阴极接法:

数码管

数码管共阳极接法:

数码管

数码管中有位选和段选,位选就是选择哪个数码管,段选就是被选择的数码管要显示什么数字!

根据数码管的段选,可以总结出数码管的显示数据表:

 

符号 不显示 0 1 2 3 4 5 6 7 8 9 A B C D E F .
编码 0x00 0x3F 0x06 0x5B 0x4F 0x66 0x6D 0x7D 0x07 0x7F 0x6F 0x77 0x7C 0x39 0x5E 0x79 0x71 0x80

 

数码管的静态显示:

/*======================================================*/  

/*  时间:2015年8月3日 21:19:03                       */  

/*  功能:数码管的静态显示                             */  

/*  目的:51单片机学习                                  */  

/*      ^_^……!                                          */  

/*======================================================*/  

#include   

#include "commLib.h"  

sbit WLE  = P2^7;       // 位选  

sbit DLE  = P2^6;       // 段选  

#define DIGITAL_ARR_NUM     18  

unsigned char code digital[DIGITAL_ARR_NUM] = {             // 数码管显示数据表  

/*   0,    1,    2,    3,    4,     5,   6,    7,    8,     */  

0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F,   

/*   9,    A,    B,    C,    D,    E,    F,    .,   不显示     */  

0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71, 0x80, 0x00  

};  

int main(void)  

{  

unsigned int i;  

// 位选  

WLE = 1;        // 位选端锁存器置高,送数据  

P0 = 0xC0;      // 送数据  

WLE = 0;        // 位选端锁存器置低,保存数据  

while(1)  

{  

for (i = 0; i < DIGITAL_ARR_NUM; i++)  

{  

// 段选  

DLE = 1;            // 段选端锁存器置高,送数据  

P0 = digital[i];    // 送数据  

DLE = 0;            // 位选端锁存器置低,保存数据  

delay(500);         // 延时500ms  

}  

}  

return 0;  

}  

效果截图:

数码管的动态显示:

/*======================================================*/  

/*  时间:2015年8月6日 20:45:09                       */  

/*  功能:数码管的动态显示                             */  

/*  目的:51单片机学习                                  */  

/*      ^_^……!                                          */  

/*======================================================*/  

#include   

#include "commLib.h"  

sbit WLE  = P2^7;       // 位选  

sbit DLE  = P2^6;       // 段选  

#define DIGITAL_ARR_NUM     18  

unsigned char code digital[DIGITAL_ARR_NUM] = {             // 数码管显示数据表  

/*   0,    1,    2,    3,    4,     5,   6,    7,    8,     */  

0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F,   

/*   9,    A,    B,    C,    D,    E,    F,    .,   不显示     */  

0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71, 0x80, 0x00  

};  

int main(void)  

{  

unsigned int i;  

while (1)  

{  

for (i = 0; i < 6; i++)  

{  

P0 = 0xFF;              // 消影(必须有)  

WLE = 1;                // 位选端锁存器置高,送数据  

P0 = ccCrol(0xFE, i);   // 送数据  

WLE = 0;                // 位选端锁存器置低,保存数据  

DLE = 1;                // 段选端锁存器置高,送数据  

P0 = digital[i];        // 送数据  

DLE = 0;                // 位选端锁存器置低,保存数据  

delay(1);  

}  

}  

return 0;  

}  

效果截图:

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分