打印

EDM-12864的编程问题

[复制链接]
3109|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
QRQ|  楼主 | 2007-11-28 17:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我的LCD不按照原来的意图显示,大家帮我看看程序把!谢谢!
#include<reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsinged int
sbit E=P3^7;
sbit RW=P3^4;
sbit DI=P3^5;//命令OR数据
sbit CS=P3^2;
sbit RST=P3^3;
void init();
void wrc(uchar);
void wrd(uchar);
void main()
{

    while(1)
  {
 
    uchar i,j;
    
    CS=1;
    init();
    for(i=0;i<8;i++)
       {
          wrc(i|0xB8);
          wrc(0|0x40);
          for(j=0;j<64;j++)
              wrd(0xf0);
        }
    CS=0;
    init();
    for(i=0;i<8;i++)
       {
          wrc(i|0x40);
          wrc(0|0x40);
          for(j=0;j<64;j++)
              wrd(0xf0);
        }
   }
}

void wrc(uchar commend)
{
     E=0;
     RW=0;
     DI=0;
     _nop_();
     E=1;
     _nop_();
     P0=commend;
     _nop_();
     E=0;
}
void wrd(uchar dat)
{
     E=0;
     RW=0;
     DI=1;
     _nop_();

     E=1;
     _nop_();
     
     P0=dat;
     _nop_();
     E=0;
}

void init()
{

     wrc(0x3f);
     wrc(0xc0);
  
}

相关帖子

沙发
QRQ|  楼主 | 2007-11-28 17:43 | 只看该作者

对不起搞错了

应试EDM12832,CS=1/0是选中左右半屏的功能,会使什么原因呢?
我已经困扰了几天了!

使用特权

评论回复
板凳
mohanwei| | 2007-11-28 20:15 | 只看该作者

看手册,要么就测试一下,发现反了就对调一下……

显示不对,还要看看你的液晶取模方式是什么……

使用特权

评论回复
地板
QRQ|  楼主 | 2007-11-28 20:39 | 只看该作者

是根本就不显示东东

现在不是反不反的问题了,是什么都没有,我做过1602都感觉没那么困难,12832有什么不同吗?应该没有啊?!

使用特权

评论回复
5
孤星119| | 2007-11-28 21:03 | 只看该作者

写函数错了吧?

写函数错了吧?WR是等于0么?莫非你还出去非了以下?

使用特权

评论回复
6
QRQ|  楼主 | 2007-11-29 10:01 | 只看该作者

要哭了

扪,闷

使用特权

评论回复
7
孤星119| | 2007-11-29 11:29 | 只看该作者

呵呵,把p0口加上拉吧

使用特权

评论回复
8
QRQ|  楼主 | 2007-11-29 17:54 | 只看该作者

是的

P0 口本来就加了上拉电阻了,还是排阻呢!谢谢帮忙,再帮我想想吧!

使用特权

评论回复
9
xqhe| | 2007-11-29 18:41 | 只看该作者

随便说说~~~

 你的程序:
    E=1;
     _nop_();
     P0=commend;
手册说,Tddr要求<320ns,故先数据再E=1。先E=1,再数据,本来就至少迟了1000ns,你还来个_nop_();  

使用特权

评论回复
10
xqhe| | 2007-11-29 18:43 | 只看该作者

补充,偶用的是KS0108,

ks0108手册说,Tddr要求<320ns,

使用特权

评论回复
11
孤星119| | 2007-11-29 21:20 | 只看该作者

呵呵,好象少了一个读忙状态..

我的12864
/***读液晶的忙状态****/
unsigned char readBF(void)
{
    unsigned char state;
    LCD_E=0;
    LCD_RS=0;/**设定为读状态控制方式**/
    LCD_RW=1;
    LCD_DATA=0xff;
    LCD_E=1;
    state=LCD_DATA;
    LCD_E=0;
    return(state&0x80);
}
/**写指令寄存器****/
void send_instr(unsigned char x)
{
    while(readBF());
    LCD_E=0;
    LCD_RS=0;/**设定为写指令控制方式**/
    LCD_RW=0;
    LCD_E=1;
    LCD_DATA=x;
    LCD_E=0;
}

使用特权

评论回复
12
孤星119| | 2007-11-29 21:21 | 只看该作者

xx

/***写数据寄存器****/
void writedat(unsigned char dat)
{
    while(readBF());
    LCD_E=0;
    LCD_RS=1;/**设定为写数据控制方式**/
    LCD_RW=0;
    LCD_E=1;
    LCD_DATA=dat;
    LCD_E=0;
}

使用特权

评论回复
13
QRQ|  楼主 | 2007-11-29 21:43 | 只看该作者

多谢

我会继续把它弄出来,我只写LCD,忙读改为足够的延时了,读写状态直接接地了,我看到许多人都那么做,没想到还要有最大时间限制!--------------------------------------------!---!----!明天我会试试的。

使用特权

评论回复
14
QRQ|  楼主 | 2007-11-30 09:23 | 只看该作者

下定决心

弄不出来,不许吃肉!

使用特权

评论回复
15
xqhe| | 2007-11-30 13:46 | 只看该作者

延迟=肉

     加个延迟就OK了
     But,好像
     E=1;
     _nop_();
     P0=commend;
也是可以的

使用特权

评论回复
16
QRQ|  楼主 | 2007-11-30 14:23 | 只看该作者

硬件方面

我的硬件是手动练得导线,有点粗糙,会不会这个有较大的干扰?这次是我第一次 作比较独立的系统,拿着别人做好的开发办编程练习毕竟和自己做有很大差别呀!干扰   干扰  !

使用特权

评论回复
17
QRQ|  楼主 | 2007-11-30 15:04 | 只看该作者

是啊是啊

大家的方法我都试过了,还是没结果!这个时候往往很可怕!

使用特权

评论回复
18
hellomcu| | 2007-11-30 16:10 | 只看该作者

cs = 0 时?

wrc(i|0x40);  //?
wrc(0|0x40);  


基本的思路是,片选,写页,写列,写数,写完一个字再写相它的  如果不行,就检查硬件电路,用示波器看下有没有信号
相关链接:http://shop35088126.taobao.com

使用特权

评论回复
19
muslimsali| | 2007-11-30 16:26 | 只看该作者

是否是 对比度调节 的问题

先排除硬件的问题,
你先从侧面看看,有无淡淡的显示的痕迹,
如有,则是你的对比度调节上有问题。

如果没有再找软件的问题。

使用特权

评论回复
20
QRQ|  楼主 | 2007-11-30 17:11 | 只看该作者

出来了,就是有些怪异

怪异极了!
我编了两个程序,一个用C,我们就简称它C,
另一个用汇编编的,我们简称它A。
下载了A后没有什么显示,然后就下载了C,奇怪的是显示的竟是A  “您好”两个字。
而且只有右半屏显示,但我的程序中都分别对左右屏进行了驱动啊?!
是不是还有什么初始化的指令,看来我的结合两个程序了。
出字了,真舒服,但距离按我的意思出字不知还有多长一段路???
希望大家继续发表心得与经验!
再次感谢!
附注:1,对比度的调节奏效了;
      2,hellomcu那位朋友指出的错误我早已改过来了,多谢1

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QRQ

22

主题

65

帖子

0

粉丝