搜索
bottom↓
回复: 51

16×32点阵,可以上下移动,左右移动该如何实现?

[复制链接]

出0入0汤圆

发表于 2009-8-26 10:30:46 | 显示全部楼层 |阅读模式
这两天弄了个16×32点阵,显示两个汉字,上下移动已经实现了。要左右移动就要把移位到四个595里的数据再循环移位?这也只是理论上的实现,真正做起来这个方法行不通。肯定有其他的方法,望知道的大虾能指点一下,先谢过了!
原理图:

(原文件名:16×32.JPG)

点击此处下载 ourdev_474750.rar(文件大小:56K) (原文件名:16×32.rar)

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

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

出0入0汤圆

发表于 2009-8-26 11:58:56 | 显示全部楼层
其实楼主自己都清楚思路了,只要把数据先左右循环移位后再送入595就行了。

出0入0汤圆

 楼主| 发表于 2009-8-26 12:05:43 | 显示全部楼层
数据循环移位,几个字节,而且移位的位数也在变化,编程比较复杂吧。

出0入0汤圆

发表于 2009-8-26 12:23:41 | 显示全部楼层
做个大循环不就可以了

出0入0汤圆

 楼主| 发表于 2009-8-26 12:33:53 | 显示全部楼层
3楼能具体点吗,谢了!

出0入0汤圆

 楼主| 发表于 2009-8-26 21:28:23 | 显示全部楼层
已经解决了,谢了。

出0入0汤圆

 楼主| 发表于 2009-9-21 16:14:46 | 显示全部楼层
共享一下,16*32点阵Proteus仿真,上下左右移动,只是MCU用的是51,左右移动有些闪,可以换成AVR,应该就不会了。
点击此处下载 ourdev_483426.rar(文件大小:60K) (原文件名:16×32.rar)

出0入0汤圆

发表于 2009-9-22 12:37:49 | 显示全部楼层
楼主发我个原理图,我也想学习学习!

出0入0汤圆

 楼主| 发表于 2009-9-22 15:57:28 | 显示全部楼层
图和程序都在压缩包里了,Proteus仿真的图,没PCB图。

出0入0汤圆

发表于 2009-10-31 22:14:54 | 显示全部楼层
楼主,我对这个实验很感兴趣,能加下我的QQ吗??想跟你多了解下~~~~~~~~~~~~~~谢谢
QQ:356587259

出0入0汤圆

发表于 2009-11-1 18:22:16 | 显示全部楼层
大家好,楼主那个图我蛮喜欢的,只是没有汇编程序,只有C程序
呵呵,C程序不怎么看得懂,能教下我怎么改变它所显示的字吗??
谢了~~~!!!

出0入0汤圆

发表于 2009-11-1 21:18:49 | 显示全部楼层
楼主,留个QQ吧~!!!

出0入0汤圆

 楼主| 发表于 2009-11-2 10:02:31 | 显示全部楼层
z6912311,汇编只是刚学的时候看下,真正编程没有用汇编的。改变显示的汉字,你取不同汉字的模送到595就可以了啊,具体在程序里就是,改变数组table的值。程序已经注释,如果看不懂,那就再补下基础吧。论坛里面这种仿真很多的,,汉字取模软件也有下的,可以自己看看。
/*************************************************/
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
/*************************************************/
sbit hc595_ds=P2^0;//控制位定义
sbit hc595_shcp=P2^1;
sbit hc595_stcp=P2^2;
sbit hc595_oe=P2^3;
sbit P2_4=P2^4;
sbit P2_5=P2^5;
sbit P2_6=P2^6;
sbit P2_7=P2^7;
uchar flag_left,flag_right,flag_up,flag_down;//上下左右标志位
uchar dispram[4];
uchar table[]={0x10,0x20,0x10,0x21,0x10,0x21,0x10,0x21,0x10,0x23,0x32,0x25,0x52,0x25,0x52,0x29,
0x11,0x29,0x10,0x21,0x10,0x21,0x08,0x21,0x08,0x21,0x04,0x21,0x04,0x21,0x02,0x20,   //杭
                           0x08,0x01,0x08,0x02,0x08,0x02,0xDF,0x7F,0x08,0x00,0x0C,0x00,0x9C,0x0F,0xAC,0x08,
0x8A,0x08,0x8A,0x08,0x89,0x08,0x88,0x48,0x48,0x48,0x48,0x48,0x28,0x70,0x08,0x00};  //州
/*************************************************/
void hc595_write_data(uchar data_ds);
void hc595_display();
void delay(uint n);
void key_scan();
void shift_L();
void shift_R();
/*************************************************/
void main()
{               
        uchar i,j,k,num_l,num_r,n=0;
        hc595_oe=0;
        while(1)
        {       
                for(i=0;i<16;i++)
                {
                        for(j=0;j<4;j++)
                        {
                                for(k=0;k<16;k++)
                                {        
                       
                                         key_scan();
                                        dispram[0]=table[2*k+1];
                                        dispram[1]=table[2*k];
                                        dispram[2]=table[2*k+33];
                                        dispram[3]=table[2*k+32];
                                           if(flag_left==1)
                                        {num_l=n;for(;num_l>0;num_l--)shift_L();} //左移,n为多少则移多少位
                                        if(flag_right==1)
                                        {num_r=n;for(;num_r>0;num_r--)shift_R();}//右移,n为多少则移多少位
                                        hc595_write_data(dispram[0]);        
                                         hc595_write_data(dispram[1]);       
                                         hc595_write_data(dispram[2]);       
                                         hc595_write_data(dispram[3]);
                                        if(flag_up==1) P1=(k-i)%16;//上下移动
                                        else if(flag_down==1) P1=(k+i)%16;
                                        else P1=k;         
                                           hc595_display();
                                         delay(120);
                                }
                        }         
                   n++;
                      if(n==32)n=0;//移了32位,则n清零,点阵左右是32点的。               
                }               
        }
}
/*************************************************/
void hc595_write_data(uchar data_ds)
{
        uchar n_bit;
        for(n_bit=0;n_bit<8;n_bit++)
        {
          hc595_shcp=0;
             hc595_ds=data_ds&(1<<n_bit);
             hc595_shcp=1;
        }
}
/*************************************************/
void hc595_display()
{
    hc595_stcp=0;
    delay(1);
    hc595_stcp=1;
}
/*************************************************/
void delay(uint n)
{
    while(n--);
}
/*************************************************/
void key_scan()//按键扫描,当某一键按下,则相应标志位置一,同时其他标志位置零
{
  if(P2_4==0)delay(10);
  if(P2_4==0){flag_left=1;flag_right=0;flag_up=0;flag_down=0;}
  if(P2_5==0)delay(10);
  if(P2_5==0){flag_right=1;flag_left=0,flag_up=0;flag_down=0;}
  if(P2_6==0)delay(10);
  if(P2_6==0){flag_up=1;flag_left=0,flag_right=0;flag_down=0;}
  if(P2_7==0)delay(10);
  if(P2_7==0){flag_down=1;flag_left=0;flag_right=0;flag_up=0;}
}
/*************************************************/
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;
}
/*************************************************/
void shift_R()                    //右移函数
{
  bit lbit;
  uchar i;
  lbit=dispram[3]&0x01;            
  for(i=3;i>0;i--)
  {
    dispram=dispram>>1;      
    dispram+=dispram[i-1]<<7;
  }
  dispram[0]=dispram[0]>>1;
  if(lbit)dispram[0]+=0x80;
}
/*************************************************/
显示效果:

(原文件名:杭州.gif)

出0入0汤圆

发表于 2009-11-2 13:52:49 | 显示全部楼层
先非常感谢楼主的回复~~~~~~~~~~~···
我用汉字取模软件改变数组table的值,然后仿真看见显示出来的字是乱的,不知道怎么回事~~~??能告诉我一下吗??
这个图我想做个实物,楼主做过吗???

谢谢~~~~~~~~~~~

出0入0汤圆

 楼主| 发表于 2009-11-2 16:19:08 | 显示全部楼层
那应该是你的取模方式设的不对,仔细研究下吧。
做实物做过,154出来加个电阻,再加三极管放大,行驱动;595接个电阻,列驱动,就可以了,这种电路论坛里也很多的。

出0入0汤圆

发表于 2009-11-3 17:57:47 | 显示全部楼层
哦,这几天我看懂了数组table的值,懂得怎么改变所显示的字了,仿真的时候只能显示2个字,要显示多点字应该改哪里好呢??
对了,那个电阻要用多少欧的????三极管用什么型号的????NPN还是PNP????电源用多少伏的????

不好意思,问那么多问题~~~,希望能告诉我,非常感谢~~~!!

出0入0汤圆

 楼主| 发表于 2009-11-3 20:25:18 | 显示全部楼层
16*32点阵,能同时显示的只有两个字了,当然移动的时候,你可以编程显示多个汉字。
至于三极管与电阻,我以前也发过一个帖子,你可以看看。
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3555660&bbs_page_no=1&search_mode=1&search_text=点阵&bbs_id=9999

出0入0汤圆

发表于 2009-11-4 18:18:16 | 显示全部楼层
要显示4个字还是编辑uchar table[]数组是吧???
谢谢楼主~~~~~~

好人~~~

出0入0汤圆

 楼主| 发表于 2009-11-4 19:59:48 | 显示全部楼层
把字模送595显示就可以了,显示什么汉字原理都一样。
我也是从新手一步步走过来的,明白个中滋味,不过很多问题可以自己先思考下,这样才能触类旁通,彻底明白,学会一个解决问题的方法、能力,从而下次遇到新问题时能尽快找出答案。啰嗦了一下,呵呵。
这个东西能对大家入门有一点点帮助,也就满足了。希望你的点阵实物能成功。

出0入0汤圆

发表于 2009-11-7 12:08:18 | 显示全部楼层
恩,谢谢楼主,我尽力去完成,一起加油~~!!!

出0入0汤圆

发表于 2009-11-28 19:43:57 | 显示全部楼层
楼主,你好~~~!!!
那个仿真图能把电阻和三极管连上给我看下吗???
顺便问下,你有这个电路的PCB板,我想买来做实物~~~~
谢谢
头像被屏蔽

出0入0汤圆

发表于 2009-11-29 12:42:48 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

 楼主| 发表于 2009-11-29 13:06:37 | 显示全部楼层
楼上说的有道理,用51刷出几个字应该没问题的,学习。
实际应用中应该是利用SPI或是其他硬件发数据,不会软件发数据。

出0入0汤圆

发表于 2009-11-30 00:44:55 | 显示全部楼层
楼主,你好~~!!
上面那个图欲做实物的话,点阵是不是买任意的16*32的点阵都可以导程序进去显示啊~???
还是要买上图点阵排列方式的16*32点阵~~??

出0入0汤圆

 楼主| 发表于 2009-11-30 12:49:39 | 显示全部楼层
Proteus里的8*8点阵,和实物8*8点阵,引脚完全不一样,实物8*8点阵引脚完全是乱的,不同型号引脚分布也不一样,你买了就知道了。原理是一样的,都是行列扫描。

出0入0汤圆

发表于 2009-11-30 14:34:38 | 显示全部楼层
楼主,你好~!!!
我已经开始做实物了,595和154接点阵应该哪个脚接哪个脚啊????
对了,楼主有PCB原理图吗??上面你给那个贴的PCB原理图打不开

出0入0汤圆

 楼主| 发表于 2009-12-1 09:35:08 | 显示全部楼层
154行扫,595列扫,三极管、电阻看这里差不多了吧
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3555660&bbs_page_no=1&search_mode=1&search_text=点阵&bbs_id=9999
差不多了吧,呵呵。

出0入0汤圆

发表于 2009-12-1 11:06:03 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-12-8 15:08:58 | 显示全部楼层
记号

出0入0汤圆

发表于 2009-12-8 21:26:48 | 显示全部楼层
楼主 能告诉我你是怎么取字模的 我就是取不到
dispram[0]=table[2*k+1];
dispram[1]=table[2*k];
dispram[2]=table[2*k+33];
dispram[3]=table[2*k+32];
和 hc595_shcp=0;
             hc595_ds=data_ds&(1<<n_bit);
             hc595_shcp=1;
2条我看不懂 可以解析一下吗 太谢谢了 我正在学习点阵的简单设计

出0入0汤圆

 楼主| 发表于 2009-12-8 22:20:12 | 显示全部楼层
我是用现成的汉字取模软件取模的,强的话,可以自己编一个啊,呵呵。
那两行程序就是把数据移近595,数据在shcp的上升沿移入。

出0入0汤圆

发表于 2009-12-8 22:49:20 | 显示全部楼层
这样啊 是把数据移动给595啊 太谢谢了 可以发给我取模的软件吗 邮箱为648433806@qq.com 我用的取模软件取出的字 不是倒着的 就是乱码 不能达到想要效果 也试着改了引脚标号 横向和纵向取模都不行 谢谢你了 可以加QQ吗 以后有关单片机问题可以请教 再次谢谢了

出0入0汤圆

发表于 2009-12-8 23:01:59 | 显示全部楼层
楼主,你那字模用什么取的呀,我怎么取不出来呢

出0入0汤圆

发表于 2009-12-8 23:43:12 | 显示全部楼层
16x32点的都闪?我用51驱动128*32点都不会闪,刚给了100个控制器客户。。。

出0入0汤圆

 楼主| 发表于 2009-12-9 11:02:53 | 显示全部楼层
关于取模软件,本论坛就有很多
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=1563761&bbs_page_no=1&search_mode=1&search_text=取模&bbs_id=9999
我也用的这个。取模要和你的程序结合起来,才能正确显示,这里面是绕了点,不过揣摩一下,理解一次就OK了,呵呵。
这个闪主要是595送数据的时候都是软件送的,用SPI之类的,速度快很多,而且单片机是89C52,用增强型的51速度应该可以大大提高。
楼上高手,学习,呵呵。

出0入0汤圆

发表于 2009-12-9 16:15:25 | 显示全部楼层
终于弄懂了字的取模方式,现在我做完6个字的显示 发现遇到楼上说的闪烁的问题 字体一直闪烁 很不稳定 不知道是什么原因 是不是我连接的595数量太多 单片机驱动不起来 看起字来老是一闪一闪的 不知道楼上的高手是怎样使字体不闪烁 稳定输出的

出0入0汤圆

发表于 2009-12-28 13:11:06 | 显示全部楼层

[fly]关注一下~[fly]

出0入0汤圆

发表于 2010-5-13 23:10:28 | 显示全部楼层
楼主,把FPGA控制LED点阵的程序发给我参考一下吧?急用,非常急,谢谢了,邮箱:421529991@qq.com或者加我QQ号:421529991

出0入0汤圆

发表于 2010-9-12 21:01:29 | 显示全部楼层
回复【6楼】WXing
-----------------------------------------------------------------------

感谢楼主的分享

出0入0汤圆

发表于 2010-9-17 22:13:14 | 显示全部楼层
74h138     和74h595    16x16   点阵    能实现左右移动吗

出0入0汤圆

发表于 2010-9-17 22:13:42 | 显示全部楼层
程序要怎么写

出0入0汤圆

发表于 2010-9-17 22:15:44 | 显示全部楼层
dispram[0]=table[2*k+1];这句是什么意思

出0入0汤圆

发表于 2011-4-28 08:34:37 | 显示全部楼层
楼上给个6个字的显示的C程序啊

出0入0汤圆

发表于 2011-5-1 00:39:41 | 显示全部楼层
引用图片【楼主位】WXing  
-----------------------------------------------------------------------

(原文件名:16×32.JPG)

出0入0汤圆

发表于 2011-5-29 09:03:21 | 显示全部楼层
呵呵 不错
学习了

出0入0汤圆

发表于 2011-6-13 14:47:59 | 显示全部楼层
楼主还回来不呀!我将这个点阵做成实物了.但是闪得厉害呀,精简了与左移无关的所有行,还是一样的.不知道楼主经过这段时间是否有更好的方法上来吗?留个邮箱,回头再来瞧瞧itssee@gmail.com

出0入0汤圆

 楼主| 发表于 2011-10-14 22:20:26 | 显示全部楼层
什么单片机啊,控制多大点阵?

出0入0汤圆

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

出0入0汤圆

发表于 2011-11-2 15:21:13 | 显示全部楼层
点阵显示,好东西mark

出0入0汤圆

发表于 2011-11-2 17:34:40 | 显示全部楼层
MARK.

出0入0汤圆

发表于 2012-3-27 00:27:49 | 显示全部楼层
楼主你好,最近现在看这方面的资料,您的这份资料对我很重要,可惜下载不了,您可以发到我的QQ291699539吗,不堪感激
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-12 06:39

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

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