关于数码管的dispbuf[8]={10,10,10,10,10,0,0,0}前五个数码管初值都是10问题,注意我总共用了八个数码管。
发布网友
发布时间:2022-05-01 22:43
我来回答
共3个回答
热心网友
时间:2023-10-06 05:33
10 对应dispcode[10] = 0x00; 看你的数码管是共阴(这个数码管灭)还是共阳(这个数码管亮)的 如果是灭的话就表示不用这几个数码管 让它熄灭不亮 只关心后面的三位数码管的显示数字
当你引用dispcode[]这个数组中的元素超过初始化元素时,系统会自动初始化为0
那么dispcode[16]=0;也是不显示
热心网友
时间:2023-10-06 05:33
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;
la=1;
P0=tempData[i];
la=0;
P0=0xff;
wela=1;
P0=WeiMa[i+firstBit];
wela=0;
delay(2);
}
}
热心网友
时间:2023-10-06 05:34
关键在于下面这个数组:
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,送到显示器,将显示什么? 就是显示“空白”。
如果不理解什么是段码,就需要研究电路了。