为什么6位数码管最后一位用不了?
时间:10-02
整理:3721RD
点击:
#include<reg51.h>
unsigned char code LedChar[] = { //数码管显示数
0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,
0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E
};
unsigned char LedBuff[7] = { //数码管显示缓冲区
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,0xFF
};
unsigned char code Table[] = {
0xFE, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF
};
void DisPlay(unsigned long num);
void delay1ms(unsigned char n);
void LedScan();
void main()
{
DisPlay(53467); //数码管显示0 高位为0不显示
LedScan();
}
void DisPlay(unsigned long num)
{
signed char i;
unsigned char buf[6];
for (i=0; i<6; i++) //把长整型数转换为6位十进制的数组
{
buf = num % 10;
num = num / 10;
}
for (i=5; i>=1; i--) //从最高位起,遇到0转换为空格,遇到非0则退出循环
{
if (buf == 0)
LedBuff = 0xFF;
else
break;
}
for ( ; i>=0; i--) //剩余低位都如实转换为数码管显示字符
{
LedBuff = LedChar[buf];
}
}
void LedScan()
{
unsigned char i;
P0 = 0xFF;
for (i=0; i<6; i++)
{
P2 = Table;
P0 = LedBuff;
delay1ms(1);
}
}
void delay1ms(unsigned char n)
{
static unsigned char i;
while(n--)
for(i=0;i<125;i++);
?
unsigned char code LedChar[] = { //数码管显示数
0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,
0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E
};
unsigned char LedBuff[7] = { //数码管显示缓冲区
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,0xFF
};
unsigned char code Table[] = {
0xFE, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF
};
void DisPlay(unsigned long num);
void delay1ms(unsigned char n);
void LedScan();
void main()
{
DisPlay(53467); //数码管显示0 高位为0不显示
LedScan();
}
void DisPlay(unsigned long num)
{
signed char i;
unsigned char buf[6];
for (i=0; i<6; i++) //把长整型数转换为6位十进制的数组
{
buf = num % 10;
num = num / 10;
}
for (i=5; i>=1; i--) //从最高位起,遇到0转换为空格,遇到非0则退出循环
{
if (buf == 0)
LedBuff = 0xFF;
else
break;
}
for ( ; i>=0; i--) //剩余低位都如实转换为数码管显示字符
{
LedBuff = LedChar[buf];
}
}
void LedScan()
{
unsigned char i;
P0 = 0xFF;
for (i=0; i<6; i++)
{
P2 = Table;
P0 = LedBuff;
delay1ms(1);
}
}
void delay1ms(unsigned char n)
{
static unsigned char i;
while(n--)
for(i=0;i<125;i++);
?
DisPlay(53467); 你就是要显示这五位呀,第六位肯定没得显示喽
但是如果我在里面显示六位的话就会出现错误。 而且你看 应该是最左边的一位0不显示 结果而是占用数码管的后5位使用 但是显示结果不是这样的
LedScan就单独执行这个试试,需要的数据提前赋值,试试看
你先把LedScan()函数中的 P0 = 0xFF; 删除掉试一下吧。
另外:LedBuff[7]; 数组长度为什么是7,虽然在程序中没有影响。
还是不行 这是我显示467的结果 理论上应该是在后三位显示 但是最后一位总是会空出来