搜索
bottom↓
回复: 22

关于点阵消隐的方法【新手求助】

[复制链接]

出0入0汤圆

发表于 2012-6-20 21:47:44 | 显示全部楼层 |阅读模式
本帖最后由 Playboy_xixi 于 2012-6-20 21:47 编辑

最近玩个8x8点阵,采用最简单的控制方法,IOp1 p2直接控制。显示效果不太理想。但是看得过去,就是存在重隐现象。我试过在不同地方消隐,但是显示结果还是一样,特来求助。下面是一个箭头图形的上移循环源码。

#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
uchar code tabl[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};   //列扫描
uchar code tab[]={0x00,0x10,0x08,0xFC,0x08,0x10,0x00,0x00};
void delay(uchar z)
{
        uchar x,y;
        for(x=z;x>0;x--)
         for(y=245;y>0;y--);
}
void mian()
{       
        uchar q,t,i;
        while(1)
           {
                   for(q=0;q<8;q++)
                        for(t=0;t<50;t++)
                                for(i=0;i<8;i++)
                                {       
                                        //P2=0xFF;        消隐1                                        
                                         P2=tabl;
                                        P1=(tab>>q|tab<<(7-q));
                                        delay(1);
                                }
                                //P2=0xFF;        消隐2       
             //P2=0xFF;      消隐3       
              }

}
程序运行良好,但却出现重隐现象。具体就是图形右边有个一摸一样的,稍微暗淡的图形。

红色为亮点,粉色是隐点。
本人分析原因是;列扫描后,上一行的列数据开着,当扫描下一列时,和上列数据产生作用。。。。不过,我尝试分别在一面123个地方消隐,但无果。估计重隐原因分析是错的,特来求助。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

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

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2012-6-20 21:48:53 | 显示全部楼层
国际惯例,自己先沙,前排兜售瓜子。

出0入0汤圆

发表于 2012-6-20 22:05:24 | 显示全部楼层
更新片选前关闭所有的LED即可,祝你好运.

出0入0汤圆

发表于 2012-6-20 22:15:19 | 显示全部楼层
更新显示前,清显示!!

出0入134汤圆

发表于 2012-6-20 22:27:00 | 显示全部楼层
消隐1处 改成P1 = 0x00;

如果你非要在消隐1处 写成P2=0xFF;        消隐1      
那就把下面的P2、P1交换位置:      
    P1=(tab>>q|tab<<(7-q));                           
    P2=tabl;
    delay(1);

出0入0汤圆

发表于 2012-6-20 22:28:45 | 显示全部楼层
先关位COM---再写段SEG---再开位COM

出0入0汤圆

 楼主| 发表于 2012-6-21 10:09:43 | 显示全部楼层
HadesHe 发表于 2012-6-20 22:05
更新片选前关闭所有的LED即可,祝你好运.

P1.P2互换位置,完美解决

出0入0汤圆

 楼主| 发表于 2012-6-21 10:10:58 | 显示全部楼层
lr120363092 发表于 2012-6-20 22:15
更新显示前,清显示!!

P1.P2互换位置,完美解决

出0入0汤圆

 楼主| 发表于 2012-6-21 10:11:30 | 显示全部楼层
elecfun 发表于 2012-6-20 22:27
消隐1处 改成P1 = 0x00;

如果你非要在消隐1处 写成P2=0xFF;        消隐1      

P1.P2互换位置,完美解决。消隐没必要了

出0入0汤圆

 楼主| 发表于 2012-6-21 10:12:57 | 显示全部楼层
ijlc1314 发表于 2012-6-20 22:28
先关位COM---再写段SEG---再开位COM

P1.P2互换位置,完美解决。先开段选在开位选。

出0入0汤圆

 楼主| 发表于 2012-6-21 10:15:42 | 显示全部楼层
superAFE 发表于 2012-6-21 00:01
不知LZ写的程序有何高深之外,我看得很痛苦。。
试改一下:

P1.P2互换位置,完美解决。大哥,我写的是移动循环图形,不是静态画面啊,有位移函数的。。。 。三个FOR循环,不是自己写,别人确实难理解。

出0入0汤圆

发表于 2012-6-21 10:36:11 | 显示全部楼层
不错,学习

出0入0汤圆

 楼主| 发表于 2012-6-21 13:22:19 | 显示全部楼层
cy_ygs 发表于 2012-6-21 10:36
不错,学习

这个程序那么低级,我都不敢放上来论坛啦,你还说学习。。。。。。。。。。。。。。

出0入134汤圆

发表于 2012-6-21 14:43:13 | 显示全部楼层
Playboy_xixi 发表于 2012-6-21 10:11
P1.P2互换位置,完美解决。消隐没必要了

这就是消隐啊

恐怕你还是不了解什么是消隐,为什么P1、P2互换后就可以正常显示了

出0入0汤圆

发表于 2012-6-21 20:04:42 | 显示全部楼层
不知为什么,用1楼的程序在Keil 里不能通过编译,提示错误的一行是:
P1=(tab>>q|tab<<(7-q));

我的Keil是uVision2 V2.30,有大侠知道是什么原因的吗?

出0入0汤圆

 楼主| 发表于 2012-6-22 09:53:38 | 显示全部楼层
mook_dj 发表于 2012-6-21 20:04
不知为什么,用1楼的程序在Keil 里不能通过编译,提示错误的一行是:
P1=(tab>>q|tab ...

不是这个错误。这个是移位操作。不会错的,应该是上面 P2=tabl;
错误,是排版的问题,第一次发帖。。改成P2=tab【i】,把那些红色的删除,就可以了。

出0入0汤圆

发表于 2012-6-22 23:35:56 | 显示全部楼层
本帖最后由 mook_dj 于 2012-6-22 23:44 编辑

不像17楼说的那样,我试过如果把: P1=(tab>>q|tab<<(7-q));这一行删除了就过以通过,应该是这一样搞错了什么,我是C的初学者,不知道错在那里,希望楼主确认一下1楼的程序不能编译是什么原因,我想学学你的“点阵显示移动的字符”

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2012-6-23 09:46:19 | 显示全部楼层
mook_dj 发表于 2012-6-22 23:35
不像17楼说的那样,我试过如果把: P1=(tab>>q|tab

我复制了我贴里的程序放到keil,确实出现问题。问题原因就是符号错了。由于帖子排版导致后面部分程序变成斜体了,所以那个逻辑或‘|’自然错了。你只要把‘/’改成‘|’即可。话说我也是新手啊。最近搞了个定时器中断,运行不了,也不怎么会调试。。。。

出0入0汤圆

发表于 2012-6-24 03:03:46 | 显示全部楼层
我贴到Keil,里已经是“|”,没有斜的,把那个没斜的"|"删除了,重新再打一个"|"进去,错误依然.

出0入0汤圆

 楼主| 发表于 2012-6-24 10:04:58 | 显示全部楼层
本帖最后由 Playboy_xixi 于 2012-6-24 10:07 编辑

mook_dj 发表于 2012-6-24 03:03
我贴到Keil,里已经是“|”,没有斜的,把那个没斜的"|"删除了,重新再打一个"|"进去,错误依然. ...


不可能。。。。。。。。。。。。。。。。。。。。。。。。我把我成功的给你。
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
uchar code tabl[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};   //列扫描
uchar code tab[]={0x00,0x10,0x08,0xFC,0x08,0x10,0x00,0x00};
void delay(uchar z)
{
        uchar x,y;
        for(x=z;x>0;x--)
         for(y=245;y>0;y--);
}
void mian()
{       
        uchar q,t,i;
        while(1)
           {
                   for(q=0;q<8;q++)
                        for(t=0;t<50;t++)
                                for(i=0;i<8;i++)
                                {       
                                        P1=(tab>>q|tab<<(7-q));
                                        P2=tabl;
                                        delay(1);
                                }
        }

}

出0入0汤圆

 楼主| 发表于 2012-6-24 10:09:57 | 显示全部楼层
mook_dj 发表于 2012-6-24 03:03
我贴到Keil,里已经是“|”,没有斜的,把那个没斜的"|"删除了,重新再打一个"|"进去,错误依然. ...

显示还是倾斜的。这个吧

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2012-6-24 11:24:05 | 显示全部楼层
本帖最后由 mook_dj 于 2012-6-24 11:28 编辑

谢谢楼主,用你压缩包的程序试过,已经能驱动点阵显示移动的图形了,没有出现重影,可能已经在程序中已经修改了重影的问题才发上来论坛吧了.

接下来研究一下,楼主的程序,尤其是要研究那行P1=(tab>>q|tab<<(7-q));我想一定是这行另到图形移动,好像写得很妙.






重新编辑是为了改变错别字.

出0入0汤圆

 楼主| 发表于 2012-6-24 13:32:14 | 显示全部楼层
mook_dj 发表于 2012-6-24 11:24
谢谢楼主,用你压缩包的程序试过,已经能驱动点阵显示移动的图形了,没有出现重影,可能已经在程序中已经修改了 ...

这个嘛。移位与逻辑或,想一下就明白了吧。先把将要溢出的位取回来,再移位,逻辑或后就是新的现实字模了。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-7-24 00:17

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

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