feixiang1990 发表于 2013-6-7 11:33:28

点阵左移问题,高人指点

本帖最后由 feixiang1990 于 2013-6-7 11:37 编辑

自己买了个点阵屏幕,但是编写左移功能的时候出现问题,希望做过的能指点一二,帮下小弟。
先贴出代码:#include<reg52.h>
#define uchar unsigned char
uchar hang={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
                                0x08,0x09,0x0a,0x0b,0xfc,0x0d,0xfe,0x0f};
sbit R1=P1^0;//接LED屏输入口的R1上 这个是红色数据输入口 输出到单元板上595芯片上 08接口R1是上半屏 R2是下半屏
sbit G1=P1^1;//同上 绿色数据
sbit R2=P1^2;
sbit G2=P1^3;
sbit CLK=P1^4;//时钟信号
sbit STB=P1^5;//锁存信号
sbit OE=P1^6;//理解成显示或不显示的开关吧

char code HZ[];//字库数组
char code DZ[];
char HC0,HC1;//缓存数组
char XS0,XS1;

unsigned int move,speed;

void delay_nms(unsigned int x)
{
        unsigned int i,j;
        for(i=0;i<x;i++)
                for(j=0;j<100;j++);
}

void WriteByterR1(char dat,dat2)//写一个字节数据
{
        char i;
        for(i=0;i<8;i++)
        {
                R1=dat&0x01;
                dat=dat>>1;
                G1=dat2&0x01;
                dat2=dat2>>1;
                CLK=0;
                CLK=1;
        }
}

void WriteByterR2(char dat,dat2)//写一个字节数据
{
        char i;
        for(i=0;i<8;i++)
        {
                R2=dat&0x01;
                dat=dat>>1;
                G2=dat2&0x01;
                dat2=dat2>>1;
                CLK=0;
                CLK=1;
       
        }
}

void main()//主函数
{
        unsigned int lie;
        unsigned char speed,yidong,zishu;
        unsigned char i,s,k;
        while(1)//大循环
    {
                for(zishu=0;zishu<14;zishu++)
                {
                        for(yidong=0;yidong<16;yidong++)//数据移位
                        {
                                for(speed=0;speed<200;speed++)       //移动速度
                                {       
                                        //下半部分
                                        for(lie=0;lie<16;lie++)               //16列数据
                                {
                                               for(i=0;i<6;i++)   //i为显示的汉字个数
                                               {
                                                       HC1= HZ;
                                                       HC1= HZ;
                                               }
                                               for(s=0;s<10;s++)//左移实现部分
                                               {
                                                        if(yidong<8)
                                                        {
                                                                XS1 = ((HC1>>yidong)|(HC1<<(8-yidong)));
                                                        }
                                                        else
                                                        {
                                                                XS1 = (HC1>>(yidong-8)) | (HC1<<(16-yidong));
                                                        }
                                                       
                                               }
                                               for(k=0;k<10;k++)
                                               {
                                                       WriteByterR2(XS1,0xff);
                                               }               
                                               P0=hang; //行循环,num等于0的时候,第一行亮,依次类推
                                   STB=1;//锁存信号
                                               STB=0;
                                }
                                }
                        }
                }
        }
}

char code DZ[]=
{//此处省略

};

char code HZ[]=
{

0xFB,0xFF,0x7B,0xC0,0x80,0xEF,0xFB,0xF7,0xF5,0xFB,0xF5,0xF5,0xF6,0xCE,0x40,0xDF,
0x37,0x80,0xF7,0xFB,0xC7,0xFB,0xF0,0xFB,0xF7,0xFB,0xF7,0xFB,0x17,0x80,0xF7,0xFF,/*"轻",0*/
/* (16 X 16 , 宋体 )*/

0xFB,0xFF,0x7B,0xC0,0x80,0xEF,0xFB,0xF7,0xF5,0xFB,0xF5,0xF5,0xF6,0xCE,0x40,0xDF,
0x37,0x80,0xF7,0xFB,0xC7,0xFB,0xF0,0xFB,0xF7,0xFB,0xF7,0xFB,0x17,0x80,0xF7,0xFF,/*"轻",1*/
/* (16 X 16 , 宋体 )*/

0xF7,0xFE,0xF7,0xFE,0xFB,0xFE,0xC1,0xC0,0x5D,0xDF,0x5D,0xDF,0x9D,0xDF,0xC1,0xDE,
0xDD,0xDD,0xDD,0xD9,0xDD,0xDB,0xDD,0xDF,0xC1,0xDF,0xDD,0xEB,0xFD,0xF7,0xFF,0xFF,/*"的",2*/
/* (16 X 16 , 宋体 )*/
//省略部分

};效果视频如下:
http://v.youku.com/v_show/id_XNTY3NjAyODYw.html

感觉左移,做的有问题,但是又不清楚,怎么才能调成效果,也请多多指点下

绿茶山人 发表于 2013-6-11 15:50:09

没做过点阵,帮顶!

mon51 发表于 2013-6-11 16:16:35

建立缓存区,移动指针就行了。

whuctx 发表于 2013-6-11 16:47:09

以前做的 左移供你参考

for(disrow_U8=0; disrow_U8<16; disrow_U8++)
   {
      for(s=screen_size+1; s>0; s--)
      {
         BUFF1 = SRAM_ADDR;
         BUFF1 = SRAM_ADDR;
      }
      for(s=1; s<(screen_size+1)*2; s++)
      {
         temp=((BUFF1<<move_U8)|(BUFF1>>(8-move_U8)));
         LED_Senddata(temp,color_U8);
      }
      OE138_SET();
      OE5926_SET();
      LST_SET();
      IO0CLR= 0x78000000;
      IO0SET= ((15-disrow_U8)<<27)&0x78000000;
      if(LEDsta_U8 == 0)
      {
         OE138_CLR();
         OE5926_CLR();
         Delay(1000);
      }
   }

虫行天下 发表于 2013-6-12 23:55:02

貌似是买我的板子 哈哈

feixiang1990 发表于 2013-6-14 09:44:23

虫行天下 发表于 2013-6-12 23:55 static/image/common/back.gif
貌似是买我的板子 哈哈

对的的啊啊

虫行天下 发表于 2013-6-14 13:04:52

左移程序搞定了没有

feixiang1990 发表于 2013-6-15 21:05:47

虫行天下 发表于 2013-6-14 13:04 static/image/common/back.gif
左移程序搞定了没有

嗯,搞定了啊
页: [1]
查看完整版本: 点阵左移问题,高人指点