fumenglong 发表于 2012-3-24 08:30:57

12864液晶不显示 求前辈 帮忙看看

//串并行直接接串行   复位接高   片选信号接高
//小弟检查了好几遍思维定式了求前辈 帮忙指点下
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit sid=P3^1;//数据口
sbit clk=P3^2;//时钟信号   void DelayMs(uchar n)   //延时

{
uchar i;
while(n--)
   {
   for(i=0; i<200; i++)
   _nop_();                        
}

}
void lcd_com(uchar dat,uchar str)
{
        uint i,j,temp;
        temp=str;
          DelayMs(1);
        //sid=0;
        clk=0;
        sid=1;
       
        for(i=0;i<5;i++)
        {               
                clk=1;
                clk=0;
        }
        sid=0;
        clk=1;
        clk=0;
        if(dat==1)
sid = 1;            
elsesid= 0;      
   clk = 1;
   clk = 0;
        sid=0;
        clk=1;
        clk=0;

        for(j=0;j<2;j++)
                {
                        for(i=0;i<4;i++)
                        {
                                //temp=str;
                                temp <<=1;
                                sid=CY;
                                clk=1;
                                clk=0;       
                        }
                        sid=0;
                        for(i=0;i<4;i++)
                        {
                               
                                clk=1;
                                clk=0;
                        }

                }
        //sid=0;
}
void init()
{
lcd_com(0,0x30);
lcd_com(0,0x0c);
lcd_com(0,0x01);
lcd_com(0,0x02);
lcd_com(0,0x80);
}
void Lcd_DisplayString(uchar x,uchar y,uchar *str)
{
       unsigned char temp;
       switch(y)
       {
          case 1:x|=0x80;break;
          case 2:x|=0x90;break;
          case 3:x|=0x88;break;
          case 4:x|=0x98;break;
          default:break;
       };
        // lcd_com(0,0x90);//行地址:首行地址:0x80,第二行地址:0x90,第三行地址:0x88,第四行0x98
             lcd_com(0,x);      
             temp= *str;
        while(temp!=0)
        {
                lcd_com(1,temp);
                temp=*(++str);
       
        }
}
void main()
{
        init();
        Lcd_DisplayString(0,2,"大连民族学院");
        while(1);
}

anvy178 发表于 2012-3-24 08:56:43

你用的128 64 的液晶的控制芯片是什么的啊?CS是高有效的吗?看清楚;还有你的液晶要不要调对比度的啊,很多时候是对比度 没调好显示不出来的(应该是显示了 但是看不见)

fumenglong 发表于 2012-3-24 09:05:03

51控制的啊   我在网上找的程序我自己根据他的思想自习写的初始化是没问题的cs也没问题:'(

yuyu87 发表于 2012-3-24 09:06:04

PSB 这个很重要,串行方式PSB要接地~ :(

lengshuicha 发表于 2012-3-24 09:12:28

需要注意看看屏资料,我手头有几块屏,资料弄丢了,现在头大得很。

fumenglong 发表于 2012-3-24 09:17:00

yuyu87 发表于 2012-3-24 09:06 static/image/common/back.gif
PSB 这个很重要,串行方式PSB要接地~

硬件连接应该没问题的因为 我在网上找的程序稍微改了下下进去就好使了然后我 根据他 的思路自己又写的上面的程序   我感觉没问题 可就是 不显示

yuyu87 发表于 2012-3-24 09:26:58

fumenglong 发表于 2012-3-24 09:17 static/image/common/back.gif
硬件连接应该没问题的因为 我在网上找的程序稍微改了下下进去就好使了然后我 根据他 的思路自己又 ...

我大致看了下代码,我以前也遇到过
我在STC 12T的单片机上通过,换到1T的单片机上就不行了,原因就是1T直接写IO低,再写高,产生上升沿,但实际可能没有那么快,也没有上升沿,后来我在底层写字节模块上加点延时_nop_();就好了,原因是IO口没有那么快,通常500K已经很高了

在你那个for循环里要加两三个nop就好了~
不信你可以用示波器看下IO口的波形,肯定很差的~

fumenglong 发表于 2012-3-24 10:32:15

yuyu87 发表于 2012-3-24 09:26 static/image/common/back.gif
我大致看了下代码,我以前也遇到过
我在STC 12T的单片机上通过,换到1T的单片机上就不行了,原因就是1T直 ...

谢谢大神指点   的确学了很多东西

xslff 发表于 2012-3-24 11:28:45

小细节产生大问题!

zhenglu891028 发表于 2012-3-24 22:04:07

:@:@:@:@:@:@:@:@:@:):):)
页: [1]
查看完整版本: 12864液晶不显示 求前辈 帮忙看看