单片机Day05---动态数码管显示01234567

发布于:2025-04-13 ⋅ 阅读:(28) ⋅ 点赞:(0)

一、原理图

数组索引 段码值 二进制 显示内容
0 0x3f 0011 1111 0
1 0x06 0000 0110 1
2 0x5b 0101 1011 2
3 0x4f 0100 1111 3
4 0x66 0110 0110 4
5 0x6d 0110 1101 5
6 0x7d 0111 1101 6
7 0x07 0000 0111 7
8 0x7f 0111 1111 8
9 0x6f 0110 1111 9
10 0x77 0111 0111 A
11 0x7c 0111 1100 B
12 0x39 0011 1001 C
13 0x5e 0101 1110 D
14 0x79 0111 1001 E
15 0x71 0111 0001 F

二、思路梳理:

要让第几个位置亮某一个数字。

三、一些说明:

1.选择位置:

sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;

这里的ABC就是图中U5下面的ABC,对应了P2^几, 当 LSC = 1LSB = 1LSA = 1 时,选中第 1 个数码管,此时输入为 111 ,对应十进制数 7 , Y7 输出低电平,选中与之相连的第 1 个数码管(即LED8);当 LSC = 1LSB = 1LSA = 0 时,输入为 110 ,对应十进制数 6 ,Y6 输出低电平,选中第 2 个数码管(即LED7) 。

注意LED的位置与数码管的位置刚好相反,也就是第一个数码管是最后一个LED灯(即LED8)。

注意LED的位置与Y几的位置刚好相差一,写代码的时候一定要对照原理图来。

2.选择数字:

同静态数码管。数码管的点亮可以用数组表示,数组从第一位到最后就是从数字0到数字15,如果你想让某一位显示数字几,就把这个数字对应的数组元素赋给那个位置。

3.消音操作:

SMG_A_DP_PORT=0x00;//消音

在动态数码管显示中,数码管从显示一个数字切换到显示下一个数字时 ,如果不进行消隐操作,前一个数字的显示可能会因为余晖效应而在短时间内仍然可见 。例如,第一个数码管显示完数字后,马上切换到第二个数码管显示,如果第一个数码管对应的段选信号没有及时关闭,它的余晖可能会和第二个数码管的显示叠加,导致显示模糊不清 。

4.合适的时间:

delay_10us(100);

在 delay_10us(100); 函数中,delay_10us 是一个延时函数,当输入参数为 100 时,它大概产生 100 个 10us 的延时,即 1ms 延时 。若将参数改为 1000 ,则延时变为 10ms 。动态数码管显示原理是快速轮流点亮各个数码管,利用人眼视觉暂留效应让人感觉它们同时在显示 。
当延时变为 10ms 后,数码管切换显示的速度变慢,每个数码管点亮的时间相对变长 。人眼可以察觉到数码管的轮流点亮过程,不再能利用视觉暂留将其视为连续稳定显示,就会出现闪烁现象 。 正常动态显示需要数码管快速切换,合适的短延时才能实现稳定视觉效果 。

四、程序实现:

#include <REGX51.H>
typedef unsigned u16;
typedef unsigned u8;
# define LED P0
void delay_10us(u16 t)
{
while(t--);
}
u8 light[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
void foreverlight ()
{
u8 i=0;
for(i=0;i<8;i++)
{
switch(i)
{
case 0:LSC=1;LSB=1;LSA=1;break;
case 1:LSC=1;LSB=1;LSA=0;break;
case 2:LSC=1;LSB=0;LSA=1;break;
case 3:LSC=1;LSB=0;LSA=0;break;
case 4:LSC=0;LSB=1;LSA=1;break;
case 5:LSC=0;LSB=1;LSA=0;break;
case 6:LSC=0;LSB=0;LSA=1;break;
case 7:LSC=0;LSB=0;LSA=0;break;
}
LED=light[i];
delay_10us(100);
LED=0x00;
}
}

void main()
{
while(1)
{
foreverlight();
}
}