16×32点阵,可以上下移动,左右移动该如何实现?
这两天弄了个16×32点阵,显示两个汉字,上下移动已经实现了。要左右移动就要把移位到四个595里的数据再循环移位?这也只是理论上的实现,真正做起来这个方法行不通。肯定有其他的方法,望知道的大虾能指点一下,先谢过了!原理图:
http://cache.amobbs.com/bbs_upload782111/files_17/ourdev_474749.JPG
(原文件名:16×32.JPG)
点击此处下载 ourdev_474750.rar(文件大小:56K) (原文件名:16×32.rar) 其实楼主自己都清楚思路了,只要把数据先左右循环移位后再送入595就行了。 数据循环移位,几个字节,而且移位的位数也在变化,编程比较复杂吧。 做个大循环不就可以了 3楼能具体点吗,谢了! 已经解决了,谢了。 共享一下,16*32点阵Proteus仿真,上下左右移动,只是MCU用的是51,左右移动有些闪,可以换成AVR,应该就不会了。
点击此处下载 ourdev_483426.rar(文件大小:60K) (原文件名:16×32.rar) 楼主发我个原理图,我也想学习学习! 图和程序都在压缩包里了,Proteus仿真的图,没PCB图。 楼主,我对这个实验很感兴趣,能加下我的QQ吗??想跟你多了解下~~~~~~~~~~~~~~谢谢
QQ:356587259 大家好,楼主那个图我蛮喜欢的,只是没有汇编程序,只有C程序
呵呵,C程序不怎么看得懂,能教下我怎么改变它所显示的字吗??
谢了~~~!!! 楼主,留个QQ吧~!!! 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;
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=table;
dispram=table;
dispram=table;
dispram=table;
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);
hc595_write_data(dispram);
hc595_write_data(dispram);
hc595_write_data(dispram);
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&0x80;
for(i=0;i<3;i++)
{
dispram=dispram<<1;
dispram+=dispram>>7;
}
dispram=dispram<<1;
if(hbit)dispram+=0x01;
}
/*************************************************/
void shift_R() //右移函数
{
bit lbit;
uchar i;
lbit=dispram&0x01;
for(i=3;i>0;i--)
{
dispram=dispram>>1;
dispram+=dispram<<7;
}
dispram=dispram>>1;
if(lbit)dispram+=0x80;
}
/*************************************************/
显示效果:
http://cache.amobbs.com/bbs_upload782111/files_21/ourdev_498689.gif
(原文件名:杭州.gif) 先非常感谢楼主的回复~~~~~~~~~~~···
我用汉字取模软件改变数组table的值,然后仿真看见显示出来的字是乱的,不知道怎么回事~~~??能告诉我一下吗??
这个图我想做个实物,楼主做过吗???
谢谢~~~~~~~~~~~ 那应该是你的取模方式设的不对,仔细研究下吧。
做实物做过,154出来加个电阻,再加三极管放大,行驱动;595接个电阻,列驱动,就可以了,这种电路论坛里也很多的。 哦,这几天我看懂了数组table的值,懂得怎么改变所显示的字了,仿真的时候只能显示2个字,要显示多点字应该改哪里好呢??
对了,那个电阻要用多少欧的????三极管用什么型号的????NPN还是PNP????电源用多少伏的????
不好意思,问那么多问题~~~,希望能告诉我,非常感谢~~~!! 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 要显示4个字还是编辑uchar table[]数组是吧???
谢谢楼主~~~~~~
好人~~~ 把字模送595显示就可以了,显示什么汉字原理都一样。
我也是从新手一步步走过来的,明白个中滋味,不过很多问题可以自己先思考下,这样才能触类旁通,彻底明白,学会一个解决问题的方法、能力,从而下次遇到新问题时能尽快找出答案。啰嗦了一下,呵呵。
这个东西能对大家入门有一点点帮助,也就满足了。希望你的点阵实物能成功。 恩,谢谢楼主,我尽力去完成,一起加油~~!!! 楼主,你好~~~!!!
那个仿真图能把电阻和三极管连上给我看下吗???
顺便问下,你有这个电路的PCB板,我想买来做实物~~~~
谢谢 楼上说的有道理,用51刷出几个字应该没问题的,学习。
实际应用中应该是利用SPI或是其他硬件发数据,不会软件发数据。 楼主,你好~~!!
上面那个图欲做实物的话,点阵是不是买任意的16*32的点阵都可以导程序进去显示啊~???
还是要买上图点阵排列方式的16*32点阵~~?? Proteus里的8*8点阵,和实物8*8点阵,引脚完全不一样,实物8*8点阵引脚完全是乱的,不同型号引脚分布也不一样,你买了就知道了。原理是一样的,都是行列扫描。 楼主,你好~!!!
我已经开始做实物了,595和154接点阵应该哪个脚接哪个脚啊????
对了,楼主有PCB原理图吗??上面你给那个贴的PCB原理图打不开 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
差不多了吧,呵呵。 mark 记号 楼主 能告诉我你是怎么取字模的 我就是取不到
dispram=table;
dispram=table;
dispram=table;
dispram=table;
和 hc595_shcp=0;
hc595_ds=data_ds&(1<<n_bit);
hc595_shcp=1;
2条我看不懂 可以解析一下吗 太谢谢了 我正在学习点阵的简单设计 我是用现成的汉字取模软件取模的,强的话,可以自己编一个啊,呵呵。
那两行程序就是把数据移近595,数据在shcp的上升沿移入。 这样啊 是把数据移动给595啊 太谢谢了 可以发给我取模的软件吗 邮箱为648433806@qq.com 我用的取模软件取出的字 不是倒着的 就是乱码 不能达到想要效果 也试着改了引脚标号 横向和纵向取模都不行 谢谢你了 可以加QQ吗 以后有关单片机问题可以请教 再次谢谢了 楼主,你那字模用什么取的呀,我怎么取不出来呢 16x32点的都闪?我用51驱动128*32点都不会闪,刚给了100个控制器客户。。。 关于取模软件,本论坛就有很多
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速度应该可以大大提高。
楼上高手,学习,呵呵。 终于弄懂了字的取模方式,现在我做完6个字的显示 发现遇到楼上说的闪烁的问题 字体一直闪烁 很不稳定 不知道是什么原因 是不是我连接的595数量太多 单片机驱动不起来 看起字来老是一闪一闪的 不知道楼上的高手是怎样使字体不闪烁 稳定输出的 http://www.eda365.net/attachment/200904/23/30642_1240494307ovkO.gif
关注一下~ 楼主,把FPGA控制LED点阵的程序发给我参考一下吧?急用,非常急,谢谢了,邮箱:421529991@qq.com或者加我QQ号:421529991 回复【6楼】WXing
-----------------------------------------------------------------------
感谢楼主的分享 74h138 和74h595 16x16 点阵 能实现左右移动吗 程序要怎么写 dispram=table;这句是什么意思 楼上给个6个字的显示的C程序啊 引用图片【楼主位】WXing
-----------------------------------------------------------------------
http://cache.amobbs.com/bbs_upload782111/files_17/ourdev_474749.JPG
(原文件名:16×32.JPG) 呵呵 不错
学习了 楼主还回来不呀!我将这个点阵做成实物了.但是闪得厉害呀,精简了与左移无关的所有行,还是一样的.不知道楼主经过这段时间是否有更好的方法上来吗?留个邮箱,回头再来瞧瞧itssee@gmail.com 什么单片机啊,控制多大点阵? 记号 点阵显示,好东西mark MARK. 楼主你好,最近现在看这方面的资料,您的这份资料对我很重要,可惜下载不了,您可以发到我的QQ291699539吗,不堪感激
页:
[1]