OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8350|回复: 1

LED点阵左移显示有重影该怎么解决?求帮忙

[复制链接]

2

主题

4

帖子

0

精华

新手入门

积分
32
金钱
32
注册时间
2011-11-2
在线时间
0 小时
发表于 2011-11-14 16:35:01 | 显示全部楼层 |阅读模式

 麻烦路过的大哥看一下,speed为1时,速度比较快,但是显示很正常,不会有重影现象,当speed为2、3、4、5、6、7是速度是变慢了,但是会出现重影现象,这是什么原因啊?求解答?以下是扫描显示的模块程序

#include<STC12C5A32S2.h>
#include"intrins.h"                      //调用_nop_();延时函数用
#include"initl.h"
#include"typedef.h"
#include"delay.h"

#define  NOP() _nop_()                   //定义空指令

sbit shift_DATA = P5^1;
sbit latch_CLK  = P5^0;
sbit shift_CLK  = P4^0;
sbit EN   = P4^3;                        //138的4脚使能端,低电平有效,高电平时8个输出全为高电平
sbit p32  = P3^2;
sbit p33  = P3^3;
sbit p34  = P3^4;
sbit p35  = P3^5;
sbit p44  = P4^4;

uchar data  TD[26]=
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}; 

uchar code  a[16][4]={ {0,0,0,0},{0,0,0,1},{0,0,1,0},{0,0,1,1},
                                 {0,1,0,0},{0,1,0,1},{0,1,1,0},{0,1,1,1},
                                 {1,0,0,0},{1,0,0,1},{1,0,1,0},{1,0,1,1},
                                 {1,1,0,0},{1,1,0,1},{1,1,1,0},{1,1,1,1}};           

//*********装载一行数据函数*************
void load_oneline_data(uchar *LD)         //装载一行数据 
{
 uchar load;

 for (load=0;load<l_word + 1;load++)     //执行一次所需时间为48.82us,执行12次的时间为585.84us
    {
   TD[load*2]   = *(LD + load*32);
   TD[load*2+1] = *(LD + load*32 + 16);
    }

//*********发送一行数据函数*************
void send_oneline_data(uchar num)         //发送一行数据
{
 uchar stup,temp;

  EN =1;             //关闭138,关闭显示屏的显示 
    for (stup=0;stup<num;stup++)                  //执行一次的时间是17.36us                 
   {                         
   if(!(stup%8))     temp = TD[stup/8];                                      
   if(temp & 0x80)   shift_DATA = 1;   //根据595第一个输出控制点阵第一列来计算是&0x01还是0x80              
   else        shift_DATA = 0; 
   temp = temp<<1;              //根据595第一个输出控制点阵第一列来判断是tempD<<1还是tempD>>1
   shift_CLK = 0;
   NOP();             
   shift_CLK = 1; 
   delay_us(1);                                  
   } 
   latch_CLK = 0;
   NOP();                     
   latch_CLK = 1; 
                      
}

//*********扫描一行数据函数*************
void scan_oneline(uchar m)                //扫描一行数据 ,执行一次的时间是786.67us ,执行16次为12586.72us
{    
   p35 = a[m][0];
   p34 = a[m][1];
   p33 = a[m][2];
   p32 = a[m][3];
   EN  = 0;
   delay_us(150);                      //大概延时0.75ms
   EN  = 1;
   delay_us(1);                      //大概延时5us
   EN  = 0;          
}

//*********静态显示函数*********************
void show_chinese(uchar *pd)            //静态显示汉字 
{
 uchar stup,*pt;

 for (stup=0;stup<16;stup++)
   {
    pt = pd + stup;
    load_oneline_data(pt);
    send_oneline_data(16 * l_word ); //l_word是总的显示字数,通过上位机可以设置,最大的字数是12个字     
    scan_oneline(stup);
   }
}

//*********左移显示函数*************
void move_left_scan(uchar *pd,uchar movleft) //显示左移 ,一帧的扫描频率大概是60HZ
{
 uchar stup,num,sudu,*pt;

 while (movleft--)
   { 
    for (num=0;num<8;num++)           //移动8次
    {
     for (sudu=0;sudu<1 + speed;sudu++)     //控制LED点阵显示屏的速度speed是全局变量,通过上位机可以设置
     {
         for (stup=0;stup<16;stup++)
      {
        pt = pd + stup;
       load_oneline_data(pt);
       send_oneline_data(16 * l_word + num );//l_word是总的显示字数,通过上位机可以设置,最大的字数是12个字
       scan_oneline(stup);
       delay_us(4);          //扫描16次为320us
      }
      delay_us(200);          //大概延时1ms                 
     }
    }
   pd += 16;
  }
}

既然选择了就要一直走下去。。。。。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

558

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
164897
金钱
164897
注册时间
2010-12-1
在线时间
2100 小时
发表于 2011-11-14 16:52:02 | 显示全部楼层
这个一般是你有个别地方数据发送顺序有点问题.自己查查吧.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-5-29 04:50

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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