搜索
bottom↓
回复: 6

12864向大虾们求助!

[复制链接]

出0入0汤圆

发表于 2011-8-8 19:36:02 | 显示全部楼层 |阅读模式
我想实现在12864画任意点,可是读出的数据总是不对,明明只点亮一个点,画出的点多显示那么两三个点,关于12864读数据时要注意的两点:一是EN要先置低,二是读数据时要先假读一次,这两个地方我都注意了,可读出的数据还是不正确,请大虾们帮帮我!谢谢大家了。
读数据及画点函数如下:
/*******************************************
函数名称:Read_Data
功    能:从液晶中读出数据
参    数:无
返回值  :无
********************************************/
uchar  Read_Data()
{
    uchar lcdtemp = 0,lcddata = 0;   
        
    LCD_RS_L;
    LCD_RW_H;  
    LCD_DataIn;               //设置P4口为输入状态
    do                       //判忙
    {   
        LCD_EN_H;
        _NOP();               
        _NOP();
        lcdtemp = LCD2MCU_Data;
        LCD_EN_L;      
    }
    while(0x80==(lcdtemp & 0x80));  
   
    LCD_RS_H;             //读数据:RS=0;RW=1
    LCD_RW_H;
    _NOP();

    LCD_EN_L;
    LCD_EN_H;               //使能,读出数据
   
    lcddata = LCD2MCU_Data;
    delay_us(1);

    LCD_EN_L;
    delay_us(1);
    return lcddata;
   
}  


/*********************************************
函数名称:Lcd_Point
功    能:实现液晶屏上任意点(x,y)的绘画
参    数:x:横坐标(范围:0~127)
         y:从坐标(范围:0~63)
         color:是否点亮该点(1:点亮;0:不点亮)
返回值  :无
**********************************************/
void Lcd_Point(uchar x,uchar y,uchar color)
{
  uchar i,XAddr,YAddr,BitTemp,Data_H,Data_L;
  XAddr = x/16;    //确定x的区域(0~8)
  YAddr = y%64;
  BitTemp = x%16;
  if(y > 31)      //change:32->31
  {
    XAddr +=8;
    YAddr -=32;
  }
  Write_Cmd(0x34);
  
  for(i=0;i<2;i++)
  {
  Write_Cmd(0x80 + YAddr);
  Write_Cmd(0x80 + XAddr);
  Data_H = Read_Data();
  Data_L = Read_Data();
  }
  if(color == 1)
  {
    if(BitTemp > 7)
    {
      Data_L |= (0x80>>(BitTemp-8));
    }
    else
    {
      Data_H |= (0x80>>(BitTemp));
    }
  
  }
  else
  {
  }                                 //最后打开图形显示功能  
  Write_Cmd(0x80 + YAddr);
  Write_Cmd(0x80 + XAddr);
  Write_Data(Data_H);
  Write_Data(Data_L);
  Write_Cmd(0x36);
}
单片机用的是MSP430f149,液晶控制IC是ST7920。

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2011-8-8 19:54:27 | 显示全部楼层
没办法,自己先顶一下了,静等高手出现···

出0入0汤圆

 楼主| 发表于 2011-8-8 20:47:05 | 显示全部楼层
为了进一步确定是那个函数出了问题,小弟又把画点函数简化了一下,简化的画点函数不从12864读取数据(这样的画点函数限制很大,没什么太大价值),经测试能够实现在“任意点”处画点,因此问题应该出在读数据函数,哪位大虾有成功从12864读出数据的函数没,附上一二,借小弟参考下吧

程序如下:
/*********************************************
函数名称:Lcd_Point1(简化版)
功    能:实现液晶屏上任意点(x,y)的绘画
参    数:x:横坐标(范围:0~127)
         y:从坐标(范围:0~63)
         color:是否点亮该点(1:点亮;0:不点亮)
返回值  :无
**********************************************/
void Lcd_Point1(uchar x,uchar y,uchar color)
{
  uchar XAddr,YAddr,BitTemp,Data_H,Data_L;
  XAddr = x/16;    //确定x的区域(0~8)
  YAddr = y%64;
  BitTemp = x%16;
  if(y > 31)      //change:32->31
  {
    XAddr +=8;
    YAddr -=32;
  }
  Write_Cmd(0x34);
  
  Write_Cmd(0x80 + YAddr);
  Write_Cmd(0x80 + XAddr);
  
  if(color == 1)
  {
    if(BitTemp > 7)
    {
      Data_H = 0x00;
      Data_L = (0x80>>(BitTemp-8));
    }
    else
    {
      Data_H = (0x80>>(BitTemp));
      Data_L = 0x00;
    }
  
  }
  else
  {
  }                                   
  Write_Cmd(0x80 + YAddr);
  Write_Cmd(0x80 + XAddr);
  Write_Data(Data_H);
  Write_Data(Data_L);
  Write_Cmd(0x36);        //最后打开图形显示功能
}
希望大家帮我顶下吧

出0入0汤圆

发表于 2011-8-8 23:07:07 | 显示全部楼层
不知道你有没有看过这个帖子,http://www.ceet.hbnu.edu.cn/web/?action-viewthread-tid-7679  里面介绍得很详细

出0入0汤圆

发表于 2011-8-8 23:08:07 | 显示全部楼层
我用来描过点,也是有你那种情况,不知道是不是我的硬件问题

出0入0汤圆

 楼主| 发表于 2011-8-9 15:43:50 | 显示全部楼层
回复【3楼】hck2llj 小猪
-----------------------------------------------------------------------

稍微看了下,这篇帖子不错!谢谢推荐!昨晚经过排查,终于能够成功的读出数据并画出点了,问题处在假读那块,只需将那块稍微修改一下即可
程序如下:
  Write_Cmd(0x80 + YAddr);
  Write_Cmd(0x80 + XAddr);
  Read_Data();            //注意这块与源程序的区别
  Data_H = Read_Data();
  Data_L = Read_Data();
其实之前这样也试过,但不成功,估计是修改时不小心还修改了其他地方,不知你描点不成功是否也是这块的原因。这两次在430版块发帖都没什么人回,不知是430版块太冷清了,还是是我人品太差了
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-24 20:06

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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