數(shù)碼管(Segment Displays)由多個發(fā)光二極管封裝在一起組成“8”字型的器件,引線已在內(nèi)部連接完成,只需引出它們的各個筆劃,公共電極。數(shù)碼管實際上是由七個發(fā)光管組成8字形構(gòu)成的,加上小數(shù)點就是8個。這些段分別由字母a,b,c,d,e,f,g,dp來表示。
數(shù)碼管原理圖:
數(shù)碼管共陰極接法:
數(shù)碼管共陽極接法:
數(shù)碼管中有位選和段選,位選就是選擇哪個數(shù)碼管,段選就是被選擇的數(shù)碼管要顯示什么數(shù)字!
根據(jù)數(shù)碼管的段選,可以總結(jié)出數(shù)碼管的顯示數(shù)據(jù)表:
數(shù)碼管的靜態(tài)顯示:
#include 《reg52.h》
#include “commLib.h”
sbit WLE = P2^7; // 位選
sbit DLE = P2^6; // 段選
#define DIGITAL_ARR_NUM 18
unsigned char code digital[DIGITAL_ARR_NUM] = { // 數(shù)碼管顯示數(shù)據(jù)表
/* 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; // 位選端鎖存器置高,送數(shù)據(jù)
P0 = 0xC0; // 送數(shù)據(jù)
WLE = 0; // 位選端鎖存器置低,保存數(shù)據(jù)
while(1)
{
for (i = 0; i 《 DIGITAL_ARR_NUM; i++)
{
// 段選
DLE = 1; // 段選端鎖存器置高,送數(shù)據(jù)
P0 = digital[i]; // 送數(shù)據(jù)
DLE = 0; // 位選端鎖存器置低,保存數(shù)據(jù)
delay(500); // 延時500ms
}
}
return 0;
}《/reg52.h》
效果截圖:
數(shù)碼管的動態(tài)顯示:
#include 《reg52.h》
#include “commLib.h”
sbit WLE = P2^7; // 位選
sbit DLE = P2^6; // 段選
#define DIGITAL_ARR_NUM 18
unsigned char code digital[DIGITAL_ARR_NUM] = { // 數(shù)碼管顯示數(shù)據(jù)表
/* 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; // 位選端鎖存器置高,送數(shù)據(jù)
P0 = ccCrol(0xFE, i); // 送數(shù)據(jù)
WLE = 0; // 位選端鎖存器置低,保存數(shù)據(jù)
DLE = 1; // 段選端鎖存器置高,送數(shù)據(jù)
P0 = digital[i]; // 送數(shù)據(jù)
DLE = 0; // 位選端鎖存器置低,保存數(shù)據(jù)
delay(1);
}
}
return 0;
}《/reg52.h》
效果截圖: