3629|13

161

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

5110控制一个像素点 [复制链接]

各位,我用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;
}


最新回复

这样试试 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  详情 回复 发表于 2014-8-28 09:48
 
点赞 关注(1)

回复
举报

70

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
   我就是来看看,帮你顶一下帖子,不至于让帖子 沉了,  希望楼下有人可以帮的上你。

点评

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

回复

161

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
vavsz003 发表于 2014-8-25 14:11
我就是来看看,帮你顶一下帖子,不至于让帖子 沉了,  希望楼下有人可以帮的上你。

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

回复

10

帖子

1

TA的资源

一粒金砂(初级)

4
 
能把现象贴上来吗?前段时间我也在用5110

点评

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

回复

503

帖子

1

TA的资源

一粒金砂(高级)

5
 
本帖最后由 曾经in 于 2014-8-28 09:40 编辑

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

点评

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

回复

161

帖子

0

TA的资源

一粒金砂(中级)

6
 
曾经in 发表于 2014-8-27 09:38
是不是数据被覆盖了
用command定位一组xy对应控制8个点
就是每次刷新都是只能8个点同时刷新

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

回复

161

帖子

0

TA的资源

一粒金砂(中级)

7
 
磁轨炮 发表于 2014-8-26 14:36
能把现象贴上来吗?前段时间我也在用5110

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

我对程序中 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;
}


 
 
 

回复

503

帖子

1

TA的资源

一粒金砂(高级)

8
 

一个地址下控制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
 
 
 

回复

503

帖子

1

TA的资源

一粒金砂(高级)

9
 
显示的线长一点试试,每8个点是不是只显示最后刷新过的
 
 
 

回复

161

帖子

0

TA的资源

一粒金砂(中级)

10
 
曾经in 发表于 2014-8-27 16:52
一个地址下控制8个点
x,y地址(0,0)对应底0列的1到8行
对(0,0)写0x01(0,0)亮

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

回复

10

帖子

1

TA的资源

一粒金砂(初级)

11
 
没仔细看程序,是不是数据被覆盖掉了

点评

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

回复

503

帖子

1

TA的资源

一粒金砂(高级)

12
 
这样试试
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=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
 
 
 

回复

161

帖子

0

TA的资源

一粒金砂(中级)

13
 
磁轨炮 发表于 2014-8-28 08:26
没仔细看程序,是不是数据被覆盖掉了

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

回复

161

帖子

0

TA的资源

一粒金砂(中级)

14
 
曾经in 发表于 2014-8-28 09:48
这样试试
unsigned char show_buffer[84][6]={0};/*定义图像缓冲器*/
void LCD_Set_xy(unsigned char x,  ...

多谢您的指导,谢谢‘
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表