社区导航

 
快捷导航
  • 首页
  • 论坛
  • 查看新帖
  • 最新回复
  • 社区活动
  • 联系管理员
  • 消灭零回复
  • E金币兑换
  • 干货
搜索
查看: 1699|回复: 13

[讨论] 5110控制一个像素点

[复制链接]

174

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2014-8-24 10:31:59 | 显示全部楼层 |阅读模式
各位,我用5110做显示,控制一个像素点。当只控制一个或只控制左右相邻的像素点时,可以完整显示,当控制上下几个相邻像素点时,只会出现间隔的几个点,且伴有闪烁,我把5110带的程序改了一下,y只改了一部分没有改彻底。请问我该如何处理发生的问题?多谢。




void LCD_Set_xy(unsigned char x, unsigned char y )
{      
       unsigned  i,y_standard, command, dat, x_location,y_location;

       dat=0x80>>(y%8);                                                 //y轴分为 0-7   8-15  16-23   24-31  32-39  40-45  5个区域
       y_standard=y%8;

       y = 5-y/8;
       y_location=0x40|y;                                              // 0x40=1 000 000      5=101           0x45=0x40|0x5=1 000 101
       //y  坐标
       command = 0;
       LCD_CE_0;       
       LCD_DC_0;   
       for(i=0;i<8;i++)
         {   
           if(y_location&0x80)                                //   10 000 000& 1 000 101           if( (i==1)||(i==5)||(i==7) )
                SDIN_1;
            else             
                SDIN_0;
            SCLK_0;         
            y_location = y_location << 1;       
            SCLK_1;
         }
      LCD_CE_1;

      x_location = 0x80|x;
       //x  坐标
      command = 0;
      LCD_CE_0;               
      LCD_DC_0;
      for(i=0;i<8;i++)
        {
           if(x_location&0x80)                                          
                SDIN_1;     
            else                                          
                SDIN_0;

            SCLK_0;         
            x_location = x_location << 1;       
            SCLK_1;
         }
      LCD_CE_1;


     //赋值
     command = 1;   
     LCD_CE_0;
     LCD_DC_1;
     for(i=0;i<8;i++)
       {
           if(i==y_standard)  SDIN_1;
           else      SDIN_0;
           SCLK_0;
           SCLK_1;
       }   
     LCD_CE_1;
}




回复

使用道具 举报

73

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2014-8-25 14:11:55 | 显示全部楼层
   我就是来看看,帮你顶一下帖子,不至于让帖子 沉了,  希望楼下有人可以帮的上你。

点评

多谢,不知您看过后,有何高见?  详情 回复 发表于 2014-8-25 15:58
线性模组 直线导轨 三轴运动平台厂家 http://www.vavsz.com


回复

使用道具 举报

174

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2014-8-25 15:58:46 | 显示全部楼层
vavsz003 发表于 2014-8-25 14:11
我就是来看看,帮你顶一下帖子,不至于让帖子 沉了,  希望楼下有人可以帮的上你。

多谢,不知您看过后,有何高见?


回复

使用道具 举报

9

TA的帖子

1

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2014-8-26 14:36:14 | 显示全部楼层
能把现象贴上来吗?前段时间我也在用5110

点评

[attachimg]169406[/attachimg][attachimg]169405[/attachimg][attachimg]169404[/attachimg] 同学,拍的比较差不好意思了,是三个像素点竖着一条线,其中第二个没有显示,我的程序如下  详情 回复 发表于 2014-8-27 12:19


回复

使用道具 举报

541

TA的帖子

1

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2014-8-27 09:38:19 | 显示全部楼层
本帖最后由 曾经in 于 2014-8-28 09:40 编辑

是不是数据被覆盖了
用command定位一组xy对应控制8个点
就是每次刷新都是只能8个点同时刷新
要不开一个‘显存’的数组buffer[84][6]
每次描点更新显存然后吧更新的字节刷出去

点评

同学,我还是不太明白你的意思,一个像素点没有被覆盖,显示时它的上方会有其他未设置的点,还有‘显存’的数组buffer[48][6]能详细介绍一下不,多谢。  详情 回复 发表于 2014-8-27 11:58


回复

使用道具 举报

174

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2014-8-27 11:58:30 | 显示全部楼层
曾经in 发表于 2014-8-27 09:38
是不是数据被覆盖了
用command定位一组xy对应控制8个点
就是每次刷新都是只能8个点同时刷新

同学,我还是不太明白你的意思,一个像素点没有被覆盖,显示时它的上方会有其他未设置的点,还有‘显存’的数组buffer[48][6]能详细介绍一下不,多谢。


回复

使用道具 举报

174

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2014-8-27 12:19:30 | 显示全部楼层
磁轨炮 发表于 2014-8-26 14:36
能把现象贴上来吗?前段时间我也在用5110

IMAG1741.jpg IMAG1740.jpg IMAG1739.jpg                         同学,拍的比较差不好意思了,是三个像素点竖着一条线,其中第二个没有显示,我的程序如下

我对程序中 x,y,赋值都改过,其中对 y,赋值改动都能改变点的的位置,觉得赋值好改,就把赋值改了,显示时会出现竖着方向多出几个点,或者连续的几个点会把相邻的点屏蔽掉,做到这时我就没再往下做,把其它关于5110的做完之后就其他的去了,多谢你回帖。


void LCD_Set_xy(unsigned char x, unsigned char y )
{      
       unsigned dat, i,y_standard, command, x_location,y_location;

       y_standard=y%8;                                              //y轴分为 0-7   8-15  16-23   24-31  32-39  40-45  5个区域
       dat=0x80>>(y%8);  

       y = 5-y/8;
       y_location=0x40|y;                                            // 0x40=1 000 000      5=101           0x45=0x40|0x5=1 000 101
       //y  坐标                                                             // 0x40=1 000 000      1=1             0x41=0x40|0x5=1 000 001
       command = 0;
       LCD_CE_0;       
       LCD_DC_0;   
       for(i=0;i<8;i++)
         {   
           if(y_location&0x80)                                         //   10 000 000& 1 000 101           if( (i==1)||(i==5)||(i==7) )
                SDIN_1;                                                   //   10 000 000& 1 000 001           if( (i==1)||(i==7) )
            else             
                SDIN_0;
            SCLK_0;         
            y_location = y_location << 1;       
            SCLK_1;
         }
      LCD_CE_1;


      x_location = 0x80|x;
       //x  坐标
      command = 0;
      LCD_CE_0;               
      LCD_DC_0;
      for(i=0;i<8;i++)
        {
           if(x_location&0x80)                                          
                SDIN_1;     
            else                                          
                SDIN_0;

            SCLK_0;         
            x_location = x_location << 1;       
            SCLK_1;
         }
      LCD_CE_1;

     //赋值
     command = 1;   
     LCD_CE_0;
     LCD_DC_1;

     for(i=0;i<8;i++)
       {
           if(i==y_standard)  SDIN_1;
           else      SDIN_0;
           SCLK_0;
           SCLK_1;
       }     
     LCD_CE_1;
}




回复

使用道具 举报

541

TA的帖子

1

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2014-8-27 16:52:50 | 显示全部楼层
TGWF{YNKX0_G30R0TPVDLJU.jpg
一个地址下控制8个点
x,y地址(0,0)对应底0列的1到8行
对(0,0)写0x01(0,0)亮
对(0,0)写0x80(0,7)亮(0,0)就灭了
对(0,0)写0x87才能一起亮
要实现描点就只能在单片机里保存屏幕之前的状态

点评

请问保存单片机之前的状态什么意思,我不太明白,麻烦了。  详情 回复 发表于 2014-8-27 21:27


回复

使用道具 举报

541

TA的帖子

1

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2014-8-27 16:56:32 | 显示全部楼层
显示的线长一点试试,每8个点是不是只显示最后刷新过的


回复

使用道具 举报

174

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2014-8-27 21:27:25 | 显示全部楼层
曾经in 发表于 2014-8-27 16:52
一个地址下控制8个点
x,y地址(0,0)对应底0列的1到8行
对(0,0)写0x01(0,0)亮

请问保存单片机之前的状态什么意思,我不太明白,麻烦了。


回复

使用道具 举报

9

TA的帖子

1

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2014-8-28 08:26:36 | 显示全部楼层
没仔细看程序,是不是数据被覆盖掉了

点评

这个应该没有,while内只有点亮一个像素点的程序,多次按复位键后也没有改变。  详情 回复 发表于 2014-8-28 12:23


回复

使用道具 举报

541

TA的帖子

1

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2014-8-28 09:48:29 | 显示全部楼层
这样试试
unsigned char show_buffer[84][6]={0};/*定义图像缓冲器*/
void LCD_Set_xy(unsigned char x, unsigned char y )
{      
       unsigned dat, i,y_standard, command, x_location,y_location;

       y_standard=y%8;                                              //y轴分为 0-7   8-15  16-23   24-31  32-39  40-45  5个区域
       dat=0x80>>(y%8);  

       y = 5-y/8;
       y_location=0x40|y;                                            // 0x40=1 000 000      5=101           0x45=0x40|0x5=1 000 101
       //y  坐标                                                             // 0x40=1 000 000      1=1             0x41=0x40|0x5=1 000 001
       command = 0;
       LCD_CE_0;        
       LCD_DC_0;   
       for(i=0;i<8;i++)
         {   
           if(y_location&0x80)                                         //   10 000 000& 1 000 101           if( (i==1)||(i==5)||(i==7) )
                SDIN_1;                                                   //   10 000 000& 1 000 001           if( (i==1)||(i==7) )
            else            
                SDIN_0;
            SCLK_0;         
            y_location = y_location << 1;        
            SCLK_1;
         }
      LCD_CE_1;


      x_location = 0x80|x;
       //x  坐标
      command = 0;
      LCD_CE_0;               
      LCD_DC_0;
      for(i=0;i<8;i++)
        {
           if(x_location&0x80)                                          
                SDIN_1;     
            else                                          
                SDIN_0;

            SCLK_0;         
            x_location = x_location << 1;        
            SCLK_1;
         }
      LCD_CE_1;
       
        /*******************************************************/
        show_buffer[x_location][y_location]|=1<<y_standard;
        y_standard=show_buffer[x_location][y_location];
       
     //赋值
     command = 1;   
     LCD_CE_0;
     LCD_DC_1;

     for(i=0;i<8;i++)
        {
           if(y_standard&0x80)                                          
                SDIN_1;     
            else                                          
                SDIN_0;

            SCLK_0;         
            y_standard = y_standard << 1;        
            SCLK_1;
         }
     LCD_CE_1;
}

点评

多谢您的指导,谢谢‘  详情 回复 发表于 2014-8-29 08:26


回复

使用道具 举报

174

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2014-8-28 12:23:35 | 显示全部楼层
磁轨炮 发表于 2014-8-28 08:26
没仔细看程序,是不是数据被覆盖掉了

这个应该没有,while内只有点亮一个像素点的程序,多次按复位键后也没有改变。


回复

使用道具 举报

174

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2014-8-29 08:26:58 | 显示全部楼层
曾经in 发表于 2014-8-28 09:48
这样试试
unsigned char show_buffer[84][6]={0};/*定义图像缓冲器*/
void LCD_Set_xy(unsigned char x,  ...

多谢您的指导,谢谢‘


回复

使用道具 举报

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

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

小黑屋|手机版|Archiver|电子工程世界 ( 京ICP证 060456

GMT+8, 2017-12-13 11:15 , Processed in 0.724508 second(s), 18 queries , Redis On.

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