长汀无线电厂交流论坛

 找回密码
 注册
查看: 4448|回复: 23
打印 上一主题 下一主题

大家看看显示这样是什么问题

  [复制链接]
跳转到指定楼层
楼主
 楼主| 发表于 2011-3-23 15:44:04 | 显示全部楼层 |只看大图 回帖奖励 |倒序浏览 |阅读模式


16x80的led点阵屏   显示看起来像重影,具体看图。不懂是什么问题,请大家帮忙下

回复

使用道具 举报

沙发
 楼主| 发表于 2011-3-23 16:52:08 | 显示全部楼层
我的是静止的,没有移动
回复 支持 反对

使用道具 举报

板凳
 楼主| 发表于 2011-3-24 08:32:46 | 显示全部楼层
本帖最后由 zhujianfeng 于 2011-3-24 08:33 编辑

这是程序,帮看下


// A B C D 对应P1.0; P1.1 ; P1.2; P1.3

//--------------------------------
#include "reg52.h"
#include "intrins.h"
#define  uchar unsigned char
#define  uint  unsigned int
void Keyscan (void); //修改参数按键扫描子程序
void  Sendping(); //发送半屏子程序
sbit  CLK =P1^5 ;                  //74HC595移时钟
sbit  STB =P1^4        ;          // 74HC595锁存信号
sbit  Red=P1^6        ;          //红色数据输出引脚低电平有效            
sbit  Greed=P1^7;         //全屏控制使能0,低电平有效
sbit  OE = P0^7;           //全屏使能
uchar SendData;                  //要发送的数据变量
uchar hang;        //行扫描变量  (半屏只有16行,所以hang=0到15)
void delay()
{
        uint i;
        for(i=0;i<2;i++);

}               


uchar code zhong[]=
                                
                                {
0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x3F,0xFC,0x31,0x8C,0x31,0x8C,0x31,0x8C,0x31,0x8C,0x3F,0xFC,0x31,0x8C,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x00,0x00
                                        };        

uchar code guo[]=
                                
                                {
        0x00,0x00,0x00,0x00,0x3F,0xFE,0x20,0x06,0x2F,0xF6,0x21,0x86,0x21,0x86,0x27,0xF6,0x21,0xA6,0x21,0xA6,0x2F,0xF6,0x2F,0xFE,0x20,0x06,0x3F,0xFE,0x20,0x06,0x00,0x00
                                        };        

uchar code ren[]=
                                
                                {
        
0x00,0x00,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x03,0x80,0x03,0xC0,0x02,0x40,0x06,0x60,0x0C,0x30,0x18,0x18,0x78,0x0E,0x20,0x06,0x00,0x00
                                        };        

uchar code min[]=
                                
                                {
        
0x00,0x00,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x03,0x80,0x03,0xC0,0x02,0x40,0x06,0x60,0x0C,0x30,0x18,0x18,0x78,0x0E,0x20,0x06,0x00,0x00
                                        };        

uchar code zhu[]=
                                
                                {
        
0x01,0x80,0x19,0x80,0x19,0x80,0x1F,0xF8,0x3F,0xF8,0x31,0x80,0x01,0x80,0x7F,0xFE,0x03,0xC0,0x07,0xE0,0x0D,0xA0,0x19,0xB8,0x39,0x9C,0x71,0x8E,0x01,0x80,0x00,0x00
                                        };        



        //------------------------------------
        //----------字发送子程序-----------

void delays(int s)
{
   int i,j;
        for(i=s;i>0;i--)
         for(j=110;j>0;j--);

}        


        void SendByte()
                {
                   uchar m;
                   for(m=0;m<8;m++)
                   {
                                   CLK = 0;
                                Red =(SendData & 0x80);                  //红屏显示
                            Greed =0;//(SendData & 0x80);                  //红屏显示
                                  SendData =SendData<<1;                        
                                CLK = 1;          //移位时钟上升沿
                    
                   }
                }

        
           //-----------------------------------
           //----------行扫描子程序-------------
           void RowsCan(void)
           {
                        if (hang>=16)
                        {
                                hang =0x00;
                        }
                        
                        P1 = P1 & 0xf0;
                        P1 = P1 | hang;
                        hang++;

                }
   

            //---------------------------------------
                //----------发送一屏数据-----------------

                void initial(void)
                   {
                          OE = 1;
                        Red = 1;
                        Greed = 1;
                        SendData = 0x00;
                        hang = 0x00;
                                                        
                 }
                //;---------主程序循环--------------
                   void main()
                {
                        
                        int m,t=0;
                        initial();
                        while(1)
                        {        
              STB = 0;
                        for(m=t;m<2+t;m++)///////////
         {
                        SendData=zhong[m];
                        SendByte();
               
         }

               
                for(m=t;m<2+t;m++)//////////////////////
         {
                        SendData=guo[m];
                        SendByte();
               
         }
                for(m=t;m<2+t;m++)//////////////////////////////////
         {
                        SendData=ren[m];
                        SendByte();
               
         }
                for(m=t;m<2+t;m++)//////////////////
         {
                        SendData=min[m];
                        SendByte();
               
         }
                                for(m=t;m<2+t;m++)/////////////////////////
         {
                        SendData=zhu[m];
                        SendByte();
               
         }

                   t=t+2;
                        if(t==32)
                        {t=0;}

               
                        STB =1;                 //上升沿数据锁存
                        RowsCan();                //行扫描
                        
                        OE = 0;
     
                delay();
        
               
                        }
                 }
回复 支持 反对

使用道具 举报

地板
 楼主| 发表于 2011-3-24 10:23:06 | 显示全部楼层
老毛子 发表于 2011-3-24 09:19
是字模问题

怎么说,帮改下啊,还有这么左移?
回复 支持 反对

使用道具 举报

5#
 楼主| 发表于 2011-3-24 13:56:22 | 显示全部楼层
lyxing 发表于 2011-3-24 13:25
此处改下试试:  
              while(1)
                   {        

无效。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
回复 支持 反对

使用道具 举报

6#
 楼主| 发表于 2011-3-24 14:46:38 | 显示全部楼层
                OE = 1;
        RowsCan();                //行扫描
           STB = 0;
                STB =1;                 //上升沿数据锁存        
                OE = 0;

这样改好多了,不过第一行还有一点点淡淡的亮
回复 支持 反对

使用道具 举报

7#
 楼主| 发表于 2011-3-24 15:08:27 | 显示全部楼层
还有就是现在闪得厉害,是不是字摸的问题,我看别人的都是用二维数组的,不过我不懂二维数组,不知道该怎么解决了。
回复 支持 反对

使用道具 举报

8#
 楼主| 发表于 2011-3-26 13:17:58 | 显示全部楼层
现在主要是移屏的问题了,我不会,谁帮帮我。。。。。。。。。
回复 支持 反对

使用道具 举报

9#
 楼主| 发表于 2011-3-26 13:39:21 | 显示全部楼层
蓝绿黄 发表于 2011-3-24 13:12
左移的算法是:
同一行,以字节为单位(如16*64的屏,每一行就有8字节)。如果要实现左移N列,那么就是第1 ...

第一个字节左移N位,第二个字节右移(8-N)位,那第三位呢?第四位呢?。。。。。。。
回复 支持 反对

使用道具 举报

10#
 楼主| 发表于 2011-3-26 21:38:17 | 显示全部楼层
蓝绿黄 发表于 2011-3-26 17:21
拿笔在纸上推算推算,很快就会明白的

找你的方法写,不行,嘻嘻。动都不动
回复 支持 反对

使用道具 举报

11#
 楼主| 发表于 2011-3-27 00:20:23 | 显示全部楼层
// A B C D 对应P1.0; P1.1 ; P1.2; P1.3
//--------------------------------
#include "reg52.h"
#include <intrins.h>
#define  uchar unsigned char
#define  uint  unsigned int
sbit  CLK =P1^5 ;                  //74HC595移时钟
sbit  STB =P1^4        ;          // 74HC595锁存信号
sbit  Red=P1^6        ;          //红色数据输出引脚低电平有效            
sbit  Greed=P1^7;         //全屏控制使能0,低电平有效
sbit  OE = P0^0;           //全屏使能
uchar SendData;                  //要发送的数据变量

uchar hang;        //行扫描变量  (半屏只有16行,所以hang=0到15)
       


uchar code zhong[]=
                               
                                {
0x00,0x00,0x01,0x80,0x20,0x86,0x3F,0xFE,0x60,0x1C,0x1F,0xF8,0x07,0x18,0x0D,0xB8,0x33,0xE0,0x06,0xF0,0x19,0xD0,0x63,0x58,0x0C,0x4E,0x3A,0xC4,0x41,0xC0,0x00,0x00
                                        };       

uchar code guo[]=
                               
                                {
0x00,0x00,0x01,0x80,0x01,0x80,0x3F,0xF8,0x3F,0xF8,0x31,0x98,0x3F,0xF8,0x3F,0xF8,0x31,0x98,0x31,0x98,0x3F,0xF8,0x01,0x80,0x01,0x87,0x01,0xFE,0x00,0xFC,0x00,0x00

                                        };       

uchar code ren[]=
                               
                                {
        0x00,0x80,0x18,0xF0,0x18,0xD8,0x35,0x96,0x27,0xFE,0x6D,0xB0,0x7B,0xB4,0x5B,0xFE,0x11,0xB0,0x3F,0xB4,0x31,0xFE,0x07,0xB0,0x3D,0xB2,0x71,0xFF,0x01,0x80,0x01,0x00
                                        };       

uchar code min[]=
                               
                                {
       
0x08,0x40,0x1C,0xE0,0x18,0xC4,0x1C,0xFC,0x35,0x58,0x37,0x70,0x74,0x78,0x55,0xAF,0x17,0x70,0x14,0xF8,0x15,0xB8,0x16,0x6E,0x15,0xDC,0x13,0x70,0x17,0xC0,0x0C,0x00
                                        };       

uchar code zhu[]=
                               
                                {
       
0x00,0x00,0x0C,0x00,0x06,0xBE,0x7F,0xE6,0x33,0x24,0x1B,0x24,0x1A,0x2C,0x7F,0xEC,0x21,0x24,0x3F,0xA6,0x31,0x22,0x31,0x3E,0x3F,0x2E,0x31,0x20,0x31,0x20,0x00,0x20
                                        };       



        //------------------------------------
        //----------字发送子程序-----------


        void SendByte()
                {
                   uchar m;
                   for(m=0;m<8;m++)
                   {
                                   CLK = 0;
                                Red =(SendData & 0x80);                  //红屏显示
                            Greed =0;//(SendData & 0x80);                  //红屏显示
                                  SendData =SendData<<1;                       
                                CLK = 1;          //移位时钟上升沿
                  
                   }
                }

       
           //-----------------------------------
           //----------行扫描子程序-------------
           void RowsCan(void)
           {
                        if (hang>=16)
                        {
                                hang =0x00;
                        }
                       
                        P1 = P1 & 0xf0;
                        P1 = P1 | hang;
                        hang++;

                }
   

            //---------------------------------------
                //----------初始化-----------------

                void initial(void)
                   {
                          OE = 1;
                        Red = 1;
                        Greed = 1;
                        SendData = 0x00;
                        hang = 0x00;
                                                       
                 }
                //;---------主程序循环--------------
                   void main()
                {
                        
                        int m,t=0;
                        int k=0;
                        initial();
                        while(1)
                        {       
             
      
                  
                        for(m=t;m<2+t;m++)///////////
         {
                        SendData=zhong[m];
                        SendByte();
       
         }

                for(m=t;m<2+t;m++)//////////////////////
         {
                        SendData=guo[m];
                        SendByte();
       
         }
                for(m=t;m<2+t;m++)//////////////////////////////////
         {
                        SendData=ren[m];
                         
                        SendByte();
       
         }
                for(m=t;m<2+t;m++)//////////////////
         {
                        SendData=min[m];
                         
                        SendByte();
       
         }
                for(m=t;m<2+t;m++)/////////////////////////
         {       
                        SendData=zhu[m];
                       
                        SendByte();
       
         }
   
       
                        OE = 1;
                        RowsCan();                //行扫描
                        STB = 0;
                                STB =1;                 //上升沿数据锁存        
                                OE = 0;
                       
                                    t=t+2;
                                        if(t==32)
                                        {t=0;}
                        }
                 }


这是静态显示的程序,可以帮我在这改吗?我真的看不懂
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|手机版|小黑屋|Archiver|长汀无线电厂交流论坛  

GMT+8, 2024-5-21 19:27 , Processed in 0.782565 second(s), 22 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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