标题: 这个单片机数码管显示程序是什么意思?显示缓冲区又是什么意思 [打印本页]

作者: 坐在分头调戏鬼    时间: 2019-1-3 19:48
标题: 这个单片机数码管显示程序是什么意思?显示缓冲区又是什么意思
unsigned char dspbuf[8] = {10,10,10,10,10,10,0,0};//显示缓冲区
unsigned char dspcom = 0;
void display(void)
{   
        P2 = ((P2&0x1f)|0xE0);
        P0 = 0xff;
        P2 &= 0x1f;

        P2 = ((P2&0x1f)|0xC0);
        P0 = 1<<dspcom;
        P2 &= 0x1f;
        
    P2 = ((P2&0x1f)|0xE0);                                                                                                   //dspduf  dspcom
        P0 = tab[dspbuf[dspcom]];
        P2 &= 0x1f;

    if(++dspcom == 8){
        dspcom = 0;
    }   


作者: HC6800-ES-V2.0    时间: 2019-1-4 08:06
第一个问题不知道怎么回答,因为看了程序,它有一系列的运算,为什么这样运算,从你给出的程序中没看出来。
第二个问题很好理解,所谓显示缓冲区,就是先将要显示的内容计算好,存在其中,显示时,直接使用就可以了,也就是说,不是将计算结果直接显示——缓冲的意思很明白嘛。只要新计算没完成,缓冲区的内容就不变,显示就不受影响。这样的操作,对单片机使用数码管很有效,因为数码管显示通常用扫描法,时间间隔太长就会闪。
作者: yzwzfyz    时间: 2019-1-4 08:22
本帖最后由 yzwzfyz 于 2019-1-4 09:08 编辑

对于显示:初学者会直接向连接LED灯的IO口送出显示的数据(译码后)。
高手这样做:从某个区域(A区)中定向取数,送至对应的IO口。这个A区就叫显示缓冲区。甚至还有B缓冲区。
例如:B区放直观数据、A区放显示码数据
这样【显示子程序】就固定为:从B区取数据,译码后放入A区、从A区取数据送到IO口。
显示动作就简单了:用一个定时器,定期调用【显示子程序】。
主程序就方便灵活了。它只要将需要显示的直观数据放入B区就行了。
要移动走屏也方便了:只要改变从A区取据的起点、终点就可以了。如:第一次从1-10,下次从2-10-1,再下次从3-10-1-2……
还即可以在缓冲区中做许多文章,改变显示花样!

作者: 坐在分头调戏鬼    时间: 2019-1-7 13:10
HC6800-ES-V2.0 发表于 2019-1-4 08:06
第一个问题不知道怎么回答,因为看了程序,它有一系列的运算,为什么这样运算,从你给出的程序中没看出来。 ...

谢谢您的回答     这程序是我老师写的   我没把程序复制完整




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1