历史上的今天
今天是:2025年04月04日(星期五)
2020年04月04日 | 51单片机 数码管的静态显示和动态显示
2020-04-04 来源:eefocus
数码管(Segment Displays)由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极。数码管实际上是由七个发光管组成8字形构成的,加上小数点就是8个。这些段分别由字母a,b,c,d,e,f,g,dp来表示。
数码管原理图:

数码管共阴极接法:

数码管共阳极接法:

数码管中有位选和段选,位选就是选择哪个数码管,段选就是被选择的数码管要显示什么数字!
根据数码管的段选,可以总结出数码管的显示数据表:

数码管的静态显示:
/*======================================================*/
/* 时间: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;
}
效果截图:
史海拾趣
|
这是我写的timer1定时器IRQ中断程序:当定时器发生中断时,关闭LED 我用的开发工具是IAR Embedded Workbench(编译成ARM指令,不用THUMB指令) #include #define Fosc 11059200 ...… 查看全部问答> |
|
YUV2RGB时需要用到下面的公式: R = Y + 1.402 ( Cr - 128 ) G = Y - 0.34414 ( Cb - 128 ) - 0.71414 ( Cr - 128 ) B = Y + 1.772 ( Cb - 128 ) 为了避免浮点数运算,修改为 R = Y + ( 91881*( Cr - 128 ))>>16 当 ...… 查看全部问答> |
|
我想将并口的中断模式从level触发改成edge触发,是不是得修改CPU的中断控制器相关寄存器值? 我的cpu是celeron D 347,有人知道它的中断控制器地址和相应寄存器偏移么? … 查看全部问答> |
|
STM32的TAMPER-RTC管脚作为Tamper使用的问题 请问这个引脚作为Tamper使用时,应该注意哪些问题?中文手册描述如下:9.3 侵入检测 当 TAMPER引脚上的信号从 0变成1或者从 1变成 0(取决于备份控制寄存器BKP_CR的 TPAL位),会产生一个侵入检测事件 ...… 查看全部问答> |
|
485通讯和TIMER-A,TIMER-B单独运行时均正常。但加在一齐时,程序跑飞了。只要不写 IE2=URXIE1+UTXIE1;程序运行正常。一旦加上这句话,程序就跑飞。为什么呀?… 查看全部问答> |
|
你知道吗?!最最难受的是我知识有限啊。。找器件花了好久时间,没效率啊!!大神求帮忙啊:贴片,16脚,四比较,工业级的。。。HA9P4905-5的温度有限制,不够。。。。。… 查看全部问答> |
|
ti官网给出28027的频率为60MHz,请问这个频率是什么频率?最高工作频率吗? 但查看数据手册发现可以通过对OSC12倍频使28027达到120MHz的频率,因此对60MHz的定义不解。 … 查看全部问答> |




