一乐电子

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
楼主: benli

32*64LED点阵显示的一个奇怪问题

[复制链接]
发表于 2013-5-12 23:51 | 显示全部楼层
难道你这个屏是特殊的,行译码要到1-16?一般是0-15就可以了。
你试下改以下这个看看有没有效果?

//--------------------键处理结束-------------------------------
   for(disrow=0;disrow<16;disrow++)//扫描16行   
   {
   loadoneline1();//装载一线点阵数据
    if(con==0)loadoneline2();
   if(con==1) loadoneline3();
   if (con==2) loadoneline4();
                 
               sendoneline2();//发送下半屏一线点阵数据                     
   P1=disrow;// 扫描行                              
   
         STB= 1;   // 点亮屏幕               
   }

改成:
//--------------------键处理结束-------------------------------
   for(disrow=0;disrow<16;disrow++)//扫描16行   
   {
   loadoneline1();//装载一线点阵数据
    if(con==0)loadoneline2();
   if(con==1) loadoneline3();
   if (con==2) loadoneline4();
                 
               sendoneline2();//发送下半屏一线点阵数据                     
   P1=disrow+1;// 扫描行                              
   
         STB= 1;   // 点亮屏幕               
   }


回复

使用道具 举报

 楼主| 发表于 2013-5-13 06:54 | 显示全部楼层
桃源客 发表于 2013-5-12 23:51 static/image/common/back.gif
难道你这个屏是特殊的,行译码要到1-16?一般是0-15就可以了。
你试下改以下这个看看有没有效果?

试了下,没有变化




回复

使用道具 举报

 楼主| 发表于 2013-5-13 06:59 | 显示全部楼层
狗狗百里游 发表于 2013-5-12 19:35 static/image/common/back.gif
三:点阵屏的原理一般是逐行扫描,但是你真的理解了逐行扫描的原理不?为什么不加长延时函数,观察硬件输出呢?同一时间只亮一行,16行,一秒切换亮一行,够你观察那一行出现问题了。

程序就没有延时函数
QQ截图20130513065931.png
回复

使用道具 举报

 楼主| 发表于 2013-5-14 07:35 | 显示全部楼层

RE: 32*64LED点阵显示的一个奇怪问题

本帖最后由 benli 于 2013-5-14 07:44 编辑
桃源客 发表于 2013-5-12 23:51 static/image/common/back.gif
难道你这个屏是特殊的,行译码要到1-16?一般是0-15就可以了。
你试下改以下这个看看有没有效果?


仔细想了下,disrow+1是不行的,原来的数据是0-15,+1变成了1-16,0缺少,16无效
昨晚测试了下,1-16行驱动所需的数据是1-15-0,准备用查表法替换一下行数据看看。
回复

使用道具 举报

 楼主| 发表于 2013-5-14 07:51 | 显示全部楼层
又弄错了,16送到屏的值实际是0
回复

使用道具 举报

发表于 2013-5-14 09:00 | 显示全部楼层
唉~
这谁的程序啊?
按键能有作用?

这段这样改下吧:
  1.                 //--------------------键处理结束-------------------------------
  2.                 for(disrow=0;disrow<16;disrow++)//扫描16行
  3.                 {
  4.                         loadoneline1();//装载一线点阵数据
  5.                         if(con==0)loadoneline2();
  6.                         if(con==1) loadoneline3();
  7.                         if (con==2) loadoneline4();

  8.                         P1=((disrow+1)&0x0f)|0x60;// 扫描行
  9.                         sendoneline2();//发送下半屏一线点阵数据

  10.                         STB= 1;   // 点亮屏幕
  11.                 }
复制代码
回复

使用道具 举报

 楼主| 发表于 2013-5-14 09:16 | 显示全部楼层

RE: 32*64LED点阵显示的一个奇怪问题

xwj 发表于 2013-5-14 09:00 static/image/common/back.gif
唉~
这谁的程序啊?
按键能有作用?

先让显示正常了再说其他的。
回复

使用道具 举报

发表于 2013-5-14 09:24 | 显示全部楼层
还是不对,他这个一旦操作绝对会最后一行亮很多。
想每行亮度均匀的话应该这样改,然后适当加点延时。
  1.                 //--------------------键处理结束-------------------------------
  2.                 disrow++;
  3.                 if(disrow >=16)
  4.                         disrow=0;
  5.                
  6.                 //扫描1行
  7.                 {
  8.                         loadoneline1();//装载一线点阵数据
  9.                         if(con==0)loadoneline2();
  10.                         if(con==1) loadoneline3();
  11.                         if (con==2) loadoneline4();

  12.                         sendoneline2();//发送下半屏一线点阵数据
  13.                         P1=((disrow+1)&0x0f)|0x60;// 扫描行
  14.                         STB= 1;   // 点亮屏幕
  15.                 }
复制代码
void init()函数里面加一句:
        disrow=0;
回复

使用道具 举报

 楼主| 发表于 2013-5-14 09:58 | 显示全部楼层

RE: 32*64LED点阵显示的一个奇怪问题

xwj 发表于 2013-5-14 09:24 static/image/common/back.gif
还是不对,他这个一旦操作绝对会最后一行亮很多。
想每行亮度均匀的话应该这样改,然后适当加点延时。void ...

是的,15行非常亮。
回复

使用道具 举报

 楼主| 发表于 2013-5-14 12:26 | 显示全部楼层
本帖最后由 benli 于 2013-5-14 12:45 编辑
xwj 发表于 2013-5-14 09:24 static/image/common/back.gif
还是不对,他这个一旦操作绝对会最后一行亮很多。
想每行亮度均匀的话应该这样改,然后适当加点延时。void ...


多谢!现在正常了
回复

使用道具 举报

本版积分规则

QQ|一淘宝店|手机版|商店|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2025-8-22 05:38 , Processed in 0.038578 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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