🎊专栏【51单片机】
🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。
🎆音乐分享【如愿】
大一同学小吉,欢迎并且感谢大家指出我的问题🥰
⭐数码管
比如要显示“6”,那么下面图片中,AFEDCG=1,B=0
对应到数码管上,就是
⭐原理
🎊P22~P24控制LED1~LED8显示
P24 为高位 P23为中位 P22为低位
例如:P24 P23 P22
输入: 1 1 1 二进制转十进制为:7,表示Y7显示,Y7与LED8连通(就是第8个数码管)
即LED1 LED2 LED3 LED4 LED5 LED6 LED7 LED8对应的电平为
1 1 1 1 1 1 1 0
可以理解为:P24~P22输入3位二进制数可表示LED1~LED8的显示
🍔正确现象
🍔代码
#include <REGX52.H>
unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x00};
// 0 1 2 3 4 5 6 7 8 9 A B C D E F 空
void Delay(unsigned int xms)
{
unsigned char i, j;
while (xms--)
{
i = 2;
j = 199;
do
{
while (--j);
} while (--i);
}
}
void Nixie(unsigned char Location,unsigned int Number)
{
switch(Location)
{
case 1:P2_4=1;P2_3=1;P2_2=1;break;
case 2:P2_4=1;P2_3=1;P2_2=0;break;
case 3:P2_4=1;P2_3=0;P2_2=1;break;
case 4:P2_4=1;P2_3=0;P2_2=0;break;
case 5:P2_4=0;P2_3=1;P2_2=1;break;
case 6:P2_4=0;P2_3=1;P2_2=0;break;
case 7:P2_4=0;P2_3=0;P2_2=1;break;
case 8:P2_4=0;P2_3=0;P2_2=0;break;
}
P0=NixieTable[Number];
Delay(1);
P0=0x00;
}
void main()
{
while(1)
{
Nixie(1,1);
// Delay(20);
Nixie(2,2);
// Delay(20);
Nixie(3,3);
// Delay(20);
}
}
🍔错误现象——会发生频闪
静态数码管频闪
🍔代码
#include <REGX52.H>
unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x00};
void Delay(unsigned int xms) //@11.0592MHz //延时函数
{
unsigned char i, j;
while (xms--)
{
i = 2;
j = 199;
do
{
while (--j);
} while (--i);
}
}
void Nixie(unsigned char Location,unsigned int Number)
{
switch(Location)
{
case 1:P2_4=1;P2_3=1;P2_2=1;break;
case 2:P2_4=1;P2_3=1;P2_2=0;break;
case 3:P2_4=1;P2_3=0;P2_2=1;break;
case 4:P2_4=1;P2_3=0;P2_2=0;break;
case 5:P2_4=0;P2_3=1;P2_2=1;break;
case 6:P2_4=0;P2_3=1;P2_2=0;break;
case 7:P2_4=0;P2_3=0;P2_2=1;break;
case 8:P2_4=0;P2_3=0;P2_2=0;break;
}
P0=NixieTable[Number];
Delay(1);
P0=0x00;
}
void main()
{
while(1)
{
Nixie(1,1);
Delay(20);
Nixie(2,2);
Delay(20);
Nixie(3,3);
Delay(20);
}
}
加上延迟时间,会频闪
因为设置的是数码管亮一下后就清零(P0=0x00),在Delay(20)之间,还没有完全清零就进入下一个了,所以会频闪
🥰如果大家有不明白的地方,或者文章有问题,欢迎大家在评论区讨论,指正🥰