16*64点阵该如何实现左移,

2020-02-04 09:22发布

两个138做的行选,595做的列线,现在我只能向上滚动,请问一下该如何实现左移,麻烦高手赐教一下思路或者程序,谢谢。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
26条回答
xxqxiao
2020-02-05 12:24
给你个8*8的这是左移的思路!定义一个要显示的数组:例如a[]={};将a[0]的元素赋值给a[7];a[1]的赋值给a[0];a[2]的赋值给a[1];a[3]的赋值给a[2];一次类推!反过来右移动的是将a[0]的赋值给a[1];a[1]的赋值给a[2];a[2]的赋值给a[3]给你个程序看看!
#include <reg52.H>
unsigned char dis[][8]={                                //注:不同的硬件电路,字模也不一样                               
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//黑屏
{0x3C,0x66,0x66,0x66,0x66,0x66,0x66,0x3C},//0
{0x18,0x1C,0x18,0x18,0x18,0x18,0x18,0x3C},//1
{0x1C,0x3E,0x36,0x30,0x18,0x0C,0x3E,0x3E},//2
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//黑屏
};

unsigned char ROW[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};        //选通行

void delay(unsigned int time)
{
while(time>0)
        time--;
}

main()
{       
        unsigned char x=0,speed,j,k,n=0;
        speed=5;//修改这里可以改变移动速度;值越大越慢
        while(1){
                for(k=0;k<speed;k++){
                        for(j=0;j<8;j++){
                                P2=~((dis[n][j]>>x)|(dis[n+1][j]<<(8-x)));//实现移动主要是这句话
                                P0=ROW[j];
                                delay(300);
                        }
                }
                x++;
                if(x==8){
                        x=0;       
                        n++;
                        if(n>3)
                                n=0;
                }         
        }
}

一周热门 更多>