关于数码管的dispbuf[8]={10,10,10,10,10,0,0,0}前五个数码管初值都是10问题,注意我总共用了八个数码管。

unsigned char code dispbitcode[]={0xfe,0xfd,0xfb,0xf7,
0xef,0xdf,0xbf,0x7f};
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,0x00};
unsigned char dispbuf[8]={10,10,10,10,10,0,0,0};这个程序我用的是八个数码管,可是最后显示数字的是只有后面的三个数码管,我想知道一下,为什么这个dispbuf[8]={10,10,10,10,10,0,0,0}前五个数码管初值都是10呢,但是我查了有的资料,有的还可以是16,这个是为什么啊?麻烦知道人士给我解释一下。

10 对应dispcode[10] = 0x00;    看你的数码管是共阴(这个数码管灭)还是共阳(这个数码管亮)的    如果是灭的话就表示不用这几个数码管  让它熄灭不亮   只关心后面的三位数码管的显示数字 

当你引用dispcode[]这个数组中的元素超过初始化元素时,系统会自动初始化为0 

那么dispcode[16]=0;也是不显示

温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-12-17
unsigned char code dispbitcode[]={0xfe,0xfd,0xfb,0xf7,
0xef,0xdf,0xbf,0x7f};
这个是位码
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,0x00};
这个是段码,表示0-9和不亮
这个的10应该对应dispcode[]的下标即dispcode[10],如果是16,说明段码有0-9,A-F和不亮一共16个,一般不亮放在最后
达到这种效果还有很多方法,下面我再介绍一种
这个函数的功能:从第几位亮和亮几位,这里用了数码管动态显示的消影
uchar tempData[8];//存放要显示在数码管上的段码
uchar code DuanMa[]= //段码
{
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71
};
uchar code WeiMa[]= //位码
{
0xfe,0xfd,0xfb,0xf7,
0xef,0xdf,0xbf,0x7f
};

void Display(uchar firstBit,uchar disCount)
{
uchar i;
for(i=0;i<disCount;i++)
{
wela=1;
P0=0xff;
wela=0;

dula=1;
P0=tempData[i];
dula=0;
P0=0xff;
wela=1;
P0=WeiMa[i+firstBit];
wela=0;
delay(2);
}
}
第2个回答  2010-12-17
关键在于下面这个数组:
dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
它是段码表。
把其中的第0个元素3F,送到显示器,将显示0;
把其中的第1个元素06,送到显示器,将显示1;
把其中的第2个元素5B,送到显示器,将显示2;
……
把其中的第9个元素6F,送到显示器,将显示9;
把其中的第10个元素0x00,送到显示器,将显示什么? 就是显示“空白”。
如果不理解什么是段码,就需要研究电路了。

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网