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

2020-02-04 09:26发布

//串并行直接接串行   复位接高   片选信号接高
//小弟  检查了好几遍  思维定式了  求前辈 帮忙指点下
#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;              
else  sid= 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);
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
anvy178
1楼-- · 2020-02-04 14:41
你用的128 64 的液晶的控制芯片是什么的啊?CS是高有效的吗?看清楚;还有你的液晶要不要调对比度的啊,很多时候是对比度 没调好  显示不出来的(应该是显示了 但是看不见)
fumenglong
2楼-- · 2020-02-04 15:44
 精彩回答 2  元偷偷看……
yuyu87
3楼-- · 2020-02-04 18:28
PSB 这个很重要,串行方式PSB要接地~ :(
lengshuicha
4楼-- · 2020-02-04 21:24
需要注意看看屏资料,我手头有几块屏,资料弄丢了,现在头大得很。
fumenglong
5楼-- · 2020-02-05 00:51
yuyu87 发表于 2012-3-24 09:06
PSB 这个很重要,串行方式PSB要接地~

硬件连接应该没问题的  因为 我在网上找的程序稍微改了下  下进去就好使了  然后我 根据他 的思路自己又写的上面的程序   我感觉没问题 可就是 不显示
yuyu87
6楼-- · 2020-02-05 03:03
fumenglong 发表于 2012-3-24 09:17
硬件连接应该没问题的  因为 我在网上找的程序稍微改了下  下进去就好使了  然后我 根据他 的思路自己又 ...

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

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