打印

12864 ST7920 贴上代码,,不能显示 求解程序错误

[复制链接]
2505|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
#include"STC12C5A60S2.h"
#include<intrins.h>
sbit CS=P3^6;
sbit SID=P3^7;
sbit SCLK=P0^6;
unsigned char com,date;
  
void Write_12864(com,date)  
{ unsigned int temp,temp1,temp2,temp3,temp4,i;
  CS=0;
  SCLK=0;
  CS=1;
  for(i=8;i>0;i--)  //资料同步1 1 1 1 1 rw rs 0
  {
    SCLK=0;
temp=com&0x80;
if(temp)
{
SID=1;            
}
else
{
SID=0;
}
com<<=1;
SCLK=1;           
   }
  for(i=8;i>0;i--)  //写数据
  {
    SCLK=0;
temp1=date&0xf0;  //高4位
temp2=temp1&0x80;
if(temp2)
{
   SID=1;
}
else
{
  SID=0;
}
    temp1<<=1;
SCLK=1;      
   }
   for(i=8;i>0;i--)  //写命令
  {
    SCLK=0;
temp3=date&0x0f;   //低4位
temp4=(temp3<<4)&0x80;
if(temp4)
{
   SID=1;
   _nop_();
  }
  else
  {
   SID=0;
   _nop_();
  }
    temp3<<=1;
SCLK=1;      
   }
   CS=0;
}
void Init_12864()
{
   Write_12864(0xf8,0x01);           //清屏
   Write_12864(0xf8,0x0f);    //整体显示打开 ,光标闪烁,反白。
   Write_12864(0xf8,0x30);    //选择8bit数据流
}   
   
void display_12864()
{  Write_12864(0xf8,0x80);     //显示地址 0x80
   Write_12864(0xfa,0x11);    //显示内容
}        
   
  void main ()
{   
    Init_12864();
  while(1)
   {   
   display_12864();
   }
}

相关帖子

沙发
senzh01| | 2012-3-11 10:21 | 只看该作者
没仔细看,没看到延时,液晶没那没快,还有硬件也需要一定条件!

使用特权

评论回复
板凳
shikeju| | 2012-3-11 10:35 | 只看该作者
沃尔沃而

使用特权

评论回复
地板
355643304|  楼主 | 2012-3-11 10:38 | 只看该作者
延时,,的确没有延时,但是我在SID=0;SID=1后面加过—_nop_,好像也没效果

使用特权

评论回复
5
355643304|  楼主 | 2012-3-11 10:41 | 只看该作者
延时,,的确没有延时,但是我在SID=0;SID=1后面加过—_nop_,好像也没效果,他的要求是200ns,然而for循环一次1us时间好像够了,不用延时把

使用特权

评论回复
6
NE5532| | 2012-3-11 14:55 | 只看该作者
鬼影有没有?不要只想到软件问题。

使用特权

评论回复
7
ningling_21| | 2012-3-11 17:46 | 只看该作者
用这个调试好的驱动程序试试,如果不行,就是硬件问题了。。。
//-------------------------------------------------------
//写命令到LCD
//-------------------------------------------------------
void Write_lcd_command(uchar command)
{
//         uchar i,com,dly;
        uchar com;
        com=WRITE_COMMAND;
        lcd_ck=0;
//        Check_busy();
        send_lcd_byte(com);
        com=command;
        com&=0xf0;
        send_lcd_byte(com);                //HIGH 4BIT
        com=command;
        com<<=4;
        send_lcd_byte(com);                // LOW 4BIT
        //com=bmp1[0];
}
//-------------------------------------------------------
//写数据到LCD
//-------------------------------------------------------
void Write_lcd_data(uchar dat)
{
//         uchar i,dat0,dly;
        uchar dat0;
        dat0=WRITE_DATA;
        lcd_ck=0;
//        Check_busy();
        send_lcd_byte(dat0);
        dat0=dat;
        dat0&=0xf0;
        send_lcd_byte(dat0);          //HIGH 4BIT
        dat0=dat;
        dat0<<=4;
        send_lcd_byte(dat0);        // LOW 4BIT


}
/* --------------------------------------------------------------------------------------
函数原型:void Init_lcd(void)
函数功能:初始化LCD
函数参数:无
备注:    MCU运行时钟:24MHZ
--------------------------------------------------------------------------------------*/
void Init_lcd(void)
{        //30000=14.8ms //300=152us //30=16us         //400=200us //800=400us   //960=480us
        uint dly;
        lcd_rst=0;
        dly=30000;
        while(dly--);
        dly=30000;
        while(dly--);
        dly=30000;
        while(dly--);                //> 40ms
        lcd_rst=1;

        lcd_cs=1;
        Write_lcd_command(0x30);        //基本指令集
        dly=210;
        while(dly--);                                //>100us
        Write_lcd_command(0x03);        //设定CGRAM

        dly=210;
        while(dly--);                                //>100us                                //>100us

        Write_lcd_command(0X0C);        //DISPLAY ON
        dly=210;
        while(dly--);                                   //>100US

        Write_lcd_command(0X01);        //CLEAR SCREEN
        dly=35000;
        while(dly--);                                   //>10MS

        Write_lcd_command(0X06);         //光标向右移动

//        lcd_cs=1;                                        //关片选
}

使用特权

评论回复
8
NE5532| | 2012-3-11 21:09 | 只看该作者
先硬件后软件,先把鬼影弄出来~

使用特权

评论回复
9
ghg061| | 2012-3-12 09:23 | 只看该作者
Init_12864();
delay(1000);试一下

使用特权

评论回复
10
coody| | 2012-3-12 11:39 | 只看该作者
注意速度,黑白屏速度慢,而STC的1T系列,访问黑白屏,要加延时。
时序处理好了,1602、12864、320240等等都很容易驱动的。
内带驱动器的TFT,就没有速度问题。

使用特权

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

本版积分规则

0

主题

22

帖子

0

粉丝