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

一、原理图

数组索引段码值二进制显示内容
00x3f0011 11110
10x060000 01101
20x5b0101 10112
30x4f0100 11113
40x660110 01104
50x6d0110 11015
60x7d0111 11016
70x070000 01117
80x7f0111 11118
90x6f0110 11119
100x770111 0111A
110x7c0111 1100B
120x390011 1001C
130x5e0101 1110D
140x790111 1001E
150x710111 0001F

二、思路梳理:

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

三、一些说明:

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();
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值