搜索
bottom↓
回复: 25

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

[复制链接]

出0入0汤圆

发表于 2010-9-2 17:31:38 | 显示全部楼层 |阅读模式
两个138做的行选,595做的列线,现在我只能向上滚动,请问一下该如何实现左移,麻烦高手赐教一下思路或者程序,谢谢。

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2010-9-2 17:37:45 | 显示全部楼层
施加一个向左的力...~

出0入0汤圆

 楼主| 发表于 2010-9-2 17:40:16 | 显示全部楼层
回复【1楼】Ian11122840 船儿
-----------------------------------------------------------------------

麻烦你来帮我推一下哦~

出0入0汤圆

发表于 2010-9-2 19:41:47 | 显示全部楼层
你向上怎么移的,向左移也是一个思想

出0入0汤圆

发表于 2010-9-3 12:53:34 | 显示全部楼层
你把整片板子左转90度,不久向左了么???


楼主!~~~

哈哈哈哈

出0入134汤圆

发表于 2010-9-3 12:57:43 | 显示全部楼层
如果138刷屏,595送数据,那就每次处理字节数据。

改成595刷列,138送数据的话,左移就很简单了

出0入0汤圆

 楼主| 发表于 2010-9-3 14:18:17 | 显示全部楼层
回复【5楼】elecfun 熊
---------------------------------------------------------------------
我也这样想过。那请教一下,2个138是组成的4-16姨妈器,那么显示的数据跟这个有什么关系可寻吗?假设我现在是第3行的灯亮,那么下一次第5行的灯亮,那么在138的输入端就应该是2个不同的状态,请问有规则吗?

出0入0汤圆

发表于 2010-9-5 23:26:19 | 显示全部楼层
1楼4楼人才

出0入0汤圆

发表于 2011-4-16 20:11:47 | 显示全部楼层
给你个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;
                }         
        }
}

出0入0汤圆

 楼主| 发表于 2011-5-14 17:54:52 | 显示全部楼层
回复【8楼】xxqxiao
给你个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 &lt;reg52.h&gt;
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......
-----------------------------------------------------------------------

我看看,3Q,不能解决的问题还是不能解决,操之~

出0入0汤圆

发表于 2011-5-14 18:13:05 | 显示全部楼层
我以前搞的

不知道能不能帮上忙

点击此处下载 ourdev_639793SBYWBZ.rar(文件大小:809K) (原文件名:16乘64点阵01.rar)

出0入0汤圆

发表于 2011-5-14 23:59:01 | 显示全部楼层
以前在网上找的左移还有上移的16_64程序,行用的154,列也是595
点击此处下载 ourdev_639839P48CH5.rar(文件大小:45K) (原文件名:16_64点阵程序.rar)

出0入0汤圆

发表于 2011-5-15 00:16:19 | 显示全部楼层
你想想,595送列数据,,列数据发送完毕,,这时候,我给595多移一位,再点亮会是什么结果?

多移俩位呢? 反之,给595少送一位或俩位,或三位数据,字会怎么显示?

出0入0汤圆

 楼主| 发表于 2011-5-15 13:54:24 | 显示全部楼层
回复【12楼】woshigeshuai 我要造飞机
你想想,595送列数据,,列数据发送完毕,,这时候,我给595多移一位,再点亮会是什么结果?
多移俩位呢? 反之,给595少送一位或俩位,或三位数据,字会怎么显示?
-----------------------------------------------------------------------

你说的我都明白,问题不会用程序来处理,那就没有意义的!

出0入0汤圆

发表于 2011-5-15 14:08:10 | 显示全部楼层
软件缓冲区。。。爱怎么移就怎么移。。。
移位不应该是硬件的任务。硬件只负责显示扫描。
lz可以看看我以前发的那个帖子http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4731857&bbs_page_no=1&search_mode=3&search_text=hzr0071&bbs_id=9999
里面有关于硬件软件如何分离的内容。
具体的实例可以看我做的那个集成两个游戏的16*32彩色点阵。
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4685757&bbs_page_no=1&search_mode=3&search_text=hzr0071&bbs_id=9999
里面的所有显示的计算全放在软件中,像游戏这样比较复杂的移位不可能用硬件模拟出来。
lz用硬件的移位也只能做简单的左右或者上下移动,建议还是在软件中计算。

出0入0汤圆

发表于 2011-5-17 20:40:30 | 显示全部楼层
仔细找找!我就在本论坛上见过程序!

出0入0汤圆

发表于 2011-10-12 14:21:19 | 显示全部楼层
回复【11楼】wg2700209
-----------------------------------------------------------------------

谢了正是我想要的

出0入0汤圆

发表于 2011-10-17 16:40:05 | 显示全部楼层
回复【楼主位】hepday  
-----------------------------------------------------------------------

void shift_L()                  //左移函数
{
  bit hbit;
  uchar i;
  hbit=dispram[0]&0x80;
  for(i=0;i<3;i++)
   {
      dispram=dispram<<1;
          dispram+=dispram[i+1]>>7;
   }
  dispram[3]=dispram[3]<<1;
  if(hbit)dispram[3]+=0x01;
}

出0入0汤圆

发表于 2011-10-17 16:41:36 | 显示全部楼层
这是16*32的左移,不知道能不能用上,
回复【楼主位】hepday  
-----------------------------------------------------------------------

出0入0汤圆

发表于 2011-11-2 15:14:34 | 显示全部楼层
记号

出0入4汤圆

发表于 2011-11-2 17:38:15 | 显示全部楼层
旋转下屏幕就可以了,然后再做一个上移,就实现了左移,而且没改变原来的效果

出0入0汤圆

发表于 2011-11-4 08:13:54 | 显示全部楼层
我也正在玩这个点阵,不知道能不能帮到你,写得不好请见谅:
void display_yd()//左移动显示
{
    uchar i,j,temp01,temp02,ch;
    uint num1,num2;
    if(flag==1)//中断控制标志位
    {
        flag=0;
        j++;
        if(j==16)
        {
            j=0;
            count++;
            if(count>=20) //显示多少字
            {
                count=0;
            }
        }
    }
    for(i=0; i<16; i++)
    {
        //WR_595G1(0XFF);//关掉蓝色
        for(ch=0; ch<4; ch++)
        {
            num1=(display[count+ch][2*i+1]);
            num1<<=8;
            num1|=(display[count+ch][2*i]);
            num1>>=j;
            num2=(display[count+ch+1][2*i+1]);
            num2<<=8;
            num2|=(display[count+ch+1][2*i]);
            num2<<=16-j;
            num1|=num2;
            temp02=num1;
            temp01=num1>>8;
            WR_595G1(temp02);//取显示数据
            WR_595G1(temp01);//取显示数据
        }
        P0=0X0F;
                P0&=i;
        RCK_595=0;
        RCK_595=1; //上升沿将数据送到输出锁存器
    }
}

出0入0汤圆

发表于 2012-3-30 03:10:26 | 显示全部楼层
正在找

出0入0汤圆

发表于 2012-3-30 08:39:21 | 显示全部楼层
行扫按顺序扫描,595的串行输入的数据加1.例如,点阵的最后一列全亮(亮用1表示,灭用0表示),那595串行输入的第一次第一位输入1,第二位至最后一位输入0,第二次第一位输入0,第二位输入1,第三位至最后一位输入0,第三次第一位输入0,第二位也输入0,第三位输入1,第四位输入0........以此类推.这样就实现了左移.右移的话595的串行输入的数据就减1.

出0入0汤圆

发表于 2012-3-30 09:18:38 | 显示全部楼层
顶楼上,我的理解也是行线不动,列线控制数据依次左右移动就能实现点阵左右!

出0入0汤圆

发表于 2012-3-30 09:56:05 | 显示全部楼层
简单一句话,开缓冲区,随意指定从哪里开始。
开两个一样大的绶冲区,第一个安排要显示的内容,第二个放实际显示内容。将第一个的内容根据需要放入第二合适的位置。刷屏直接刷第二缓冲区即可。

开销又小,速度又快的话,可以算好位置直接读字库(图可做成字库)进屏显示。这个就看你的功力了。
某打印机就是这么做的,主频很低内存极小,速度真还不慢。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-20 00:54

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表