搜索
bottom↓
回复: 2

求救LCD显示问题

[复制链接]

出0入0汤圆

发表于 2013-4-15 22:02:57 | 显示全部楼层 |阅读模式
本帖最后由 hanbing4147 于 2013-4-15 22:06 编辑

我在调试8952驱动T6963C的LCD时,在(0,0)位置时为乱码,其他位置正常,请教各位大侠是怎么回事?!
附上程序;#include <reg52.h>



#include"LCD_ziku.h"
#define unint  unsigned int
#define unchar unsigned char
sbit LCD_CD=P3^3;
sbit LCD_WR=P3^6;
sbit LCD_RD=P3^7;
sbit LCD_CE=P3^4;
unchar LCD_Busy(void)  //读取ST0,ST1状态
{
  unchar i,dat;
      for(i=10;i>0;i--)
        {
          P0=0xff;
          LCD_CD=1;
          LCD_RD=0;
          dat=P0;
          LCD_RD=1;
          dat=0x03&dat;
          if(dat==0x03)
             return 1;
        }  
     return 0;     
}

void LCD_Data(dat)
{
        if(LCD_Busy()==1)
        {LCD_CD=0;
        P0=dat;
        LCD_WR=0;
        LCD_WR=1;}
}


void LCD_Com1(command)//写有 1 个参数命令
{
        if(LCD_Busy()==1)
        {LCD_CD=1;
        P0=command;
        LCD_WR=0;
        LCD_WR=1;}
}

void LCD_Com2(dat, command)//写有 2 个参数命令
{
        LCD_Data(dat);
        LCD_Com1(command);
}

void LCD_Com3(data1, data2, command)//写有 3 个参数命令
{
        LCD_Data(data1);
        LCD_Data(data2);
        LCD_Com1(command);
}


//汉字显示 参数说明LCD_HZ(行,列,第几个字)
void LCD_HZ(int x,int y,unchar n)
{
        int i,StartAddr;                 //
    StartAddr=x*30*16+y*2;                 //1行30*8点; 1个汉字占2行
        for(i=0;i<16;i++)
  {
        LCD_Com3((StartAddr%256),(StartAddr/256),0x24);
        LCD_Com2( HZTable[n][i*2], 0xc0); //数据自动写,地址加1
        LCD_Com2( HZTable[n][i*2+1], 0xc4); //数据自动写,地址不变
        StartAddr=StartAddr +30;
  }
}


void LCD_Clear(void)//清屏
{
        long i;
        LCD_Com3(0x00,0x00,0x24);
        LCD_Com1(0xb0);
        for(i=0;i<4096;i++)   //8*1024=8K
        LCD_Data(0x00);
        LCD_Com1(0xb2);
}


void LCD_Init(void)//初始化LCD
{
        LCD_CE=0;
        LCD_CD=1;
        LCD_WR=1;
        LCD_RD=1;
        LCD_Com3( 0x00,0x00,0x40 ); //设置文本显示首地址
        LCD_Com3( 0x1e,0x00,0x41);  //设置文本显示宽度
        LCD_Com3( 0x00,0x00,0x42 ); //设置图形显示首地址
        LCD_Com3( 0x1e,0x00,0x43);  //设置图形显示宽度
    //LCD_Com3( 0x00,0x00,0x21 );
        LCD_Com1(0x80);             //设置显示方式 文本xor图形(因)
        LCD_Com1(0x9F);             //设置显示状态  文本开,图形开,光标闪烁开
        LCD_Com1(0xa7);             //设置光标形状   8x8方块
        LCD_Clear();
}



main()
{
  LCD_Init();
  while(1)
  {
   
       LCD_HZ(0,0,1);        〈〈==这句改成LCD_HZ(1,0,1);  就正常。
        LCD_HZ(7,14,1);
   
  }
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

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

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

出0入0汤圆

发表于 2013-4-15 23:04:21 | 显示全部楼层
检查下LCD的初始化代码,弄清楚每个命令的含义
官方的初始化代码有时候不是能直接使用的
搞懂初始化代码后尝试修改,一般很快就会好的!

出0入0汤圆

 楼主| 发表于 2013-4-17 22:12:42 | 显示全部楼层
283868130 发表于 2013-4-15 23:04
检查下LCD的初始化代码,弄清楚每个命令的含义
官方的初始化代码有时候不是能直接使用的
搞懂初始化代码后 ...

十分感谢您的回复,我已经搞定了,只要把StartAddr=StartAddr +30;
放在LCD_Com3((StartAddr%256),(StartAddr/256),0x24);
        LCD_Com2( HZTable[n][i*2], 0xc0); //数据自动写,地址加1
        LCD_Com2( HZTable[n][i*2+1], 0xc4); //数据自动写,地址不变
的前面就OK。不过显示速度有点慢还在研究中。。。。。。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-18 11:22

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

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