[求助] 求助 为什么我的液晶都显示不了

chxiaoer0624   2013-8-16 15:45 楼主
  看了论坛大神给的程序 也照他们说的去连线 为什么液晶都显示不出 12864 1602的都不行 板子和程序应该都没问题 我弄得呼吸灯的程序可以用 为什么就是液晶的不行

回复评论 (24)

楼主最好贴上图,连线的图,程序等发出来,你光这样说,谁知道什么问题呀!
点赞  2013-8-16 16:12
什么图也没有,怎么分析啊
点赞  2013-8-16 16:21

回复 沙发qinkaiabc 的帖子

版主能给个QQ吗 我加你吧方便问些
点赞  2013-8-16 16:36
#include

void int_port(void)                    //管脚初始化                       
{
   P1SEL&=~BIT4;                        //P1.4模拟SID,设置为i/o口输出方向                        
   P1DIR|=BIT4;                          
   P1OUT&=~BIT4;                           
   P1SEL&=~BIT5;                        //P1.5模拟SCLK,设置为i/o口输出方向                           
   P1DIR|=BIT5;                           
   P1OUT&=~BIT5;                           
}
void delay(unsigned int t)             //延时函数
{                                      //粗略延时,满足时序要求
unsigned int i,j;
  for(i=0; i          for(j=0; j<10; j++);
}
void sendbyte(unsigned char zdata)     //数据传送函数
{
   unsigned char code_seg7;            
   unsigned char serial_clk;              
   unsigned char serial_shift;               
   code_seg7=zdata;                              
   serial_shift=0x80;                       
   for(serial_clk=0; serial_clk<8; serial_clk++)
   {                                   
     if(code_seg7&serial_shift)            
     {
       P1OUT|=BIT4;                     //SID为1
     }
     else
     {
       P1OUT&=~BIT4;                    //SID为0                       
     }
     P1OUT&=~BIT5;                      //产生时钟信号下沿
    P1OUT|=BIT5;                       //产生时钟信号上沿                             
     serial_shift=serial_shift>>1;      //准备发送下一位数据           
   }   
}
void write_com(unsigned char cmdcode)  //写命令函数
{                                      //串口控制格式(11111AB0)
                                //A数据方向控制,A=H时读,A=L时写
                                       //B数据类型选择,B=H时为显示数据,B=L时为命令
sendbyte(0xf8);                //MCU向LCD发命令

         sendbyte(cmdcode & 0xf0);      //发高四位数据(数据格式D7D6D5D4_0000)
  sendbyte((cmdcode << 4) & 0xf0);//发低四位数据(数据格式D3D2D1D0_0000)
  delay(2);                      //延时等待
}
void write_data(unsigned char Dispdata)//写数据函数
{
  
  sendbyte(0xfa);                //MCU向LCD发数据
sendbyte(Dispdata & 0xf0);     //发高四位数据
sendbyte((Dispdata << 4) & 0xf0);//发低四位数据
delay(2);
}
void lcdinit()                         //LCD初始化
{  
  delay(20000);                  //复位等待(内部自带上电复位电路),时间较长
write_com(0x30);               //功能设定:基本指令集操作               
  delay(50);                     //延时等待
write_com(0x0c);               //整体显示,关游标            
  delay(50);
}
void print_string(unsigned char *s)          //发送字符串
{  
  while(*s > 0)                  //C语言里字符串末尾自动加“\0”(ASCII码值为0)
     {
   write_data(*s);        //发送字符对应的ASCII码,12864指针可设置自动指向下一个显示地址
  s++;      
   delay(50);
     }
}
void Test()
{       unsigned char dat1,dat2,dat3,dat4;
  dat1=1;dat2=2;dat3=3;dat4=4;
         write_com(0x03);              //发指令,地址归位
delay(50);                     //延时   
  write_com(0x80);               //第一行首地址0x80
  print_string("德州仪器MSP430 "); //第一行显示(必须加一个空格否则不能下载)
        write_com(0x94);               //第二行首地址0x90,从第四个开始显示
        write_data(dat1+0x30);         //发送dat1的ASCII码,显示dat1的值
        write_data(dat2+0x30);         //发送dat1的ASCII码,显示dat2的值
        write_data(dat3+0x30);         //发送dat1的ASCII码,显示dat3的值
        write_data(dat4+0x30);         //发送dat1的ASCII码,显示dat4的值
        write_data('H');               //发送H的ASCII码,显示H
         write_data('z');               //发送z的ASCII码,显示z
         write_com(0x90);
         print_string("频率: ");
         delay(500);                    //较长时间延时,保证下次操作前LCD完成上述功能处于非忙状态
}
void main()
{
         WDTCTL=WDTPW+WDTHOLD;          //关闭看门狗
        int_port();                    //端口初始化
lcdinit();                     //LCD初始化
Test();                        //测试
while(1);                      //CPU空转m
}
点赞  2013-8-16 16:37
IMG_20130816_163951.jpg /P1.4模拟SID(接第5脚),P1.5模拟SCLK(接第6脚)
//4脚(CS信号)接高电平选通,15脚(PSB信号)接地选择串行方式
//17脚(RST信号)根据注释提示悬空 我都按着接了- -·
点赞  2013-8-16 16:42

回复 板凳mii 的帖子

你好- -图和程序都在下面
点赞  2013-8-16 16:43

回复 沙发qinkaiabc 的帖子

图和程序都在下面了 求助··
点赞  2013-8-16 16:48
首先得确认是3.3V供电的吧。
其次要有厂家提供的资料吧,12864不都是相同的,不是随便找个例子就能驱动的,一般需要厂家提供的驱动才行。
点赞  2013-8-16 16:48

回复 9楼lcofjp 的帖子

  貌似是5V供电的 我用51的板子给液晶供电了。。 2块液晶之前在51上都能用啊·
点赞  2013-8-16 16:52

回复 10楼chxiaoer0624 的帖子

那3.3的电平可能驱动不了,看看手册吧。
点赞  2013-8-16 17:13

回复 6楼chxiaoer0624 的帖子

12864我不熟悉,我只用过1602和5110.是不是偏执电压引脚接地之类的问题?
点赞  2013-8-16 17:50

回复 11楼lcofjp 的帖子

我用51当供电的 我测了一下有5V··
点赞  2013-8-16 19:03

回复 10楼chxiaoer0624 的帖子

如果你能确定在51开发板可以正常运行的话,那说明你在51上用的程序的思路是没有问题的,现在的这个程序是不是你根据51里用的代码写的呢,如果是的话,那就仔细检查一下各个端口是否配置正确,然后进行单步调试,看看数据传输是否正常,着重看看液晶在初始化的过程中有没有反应;
其次,单片机用的是3.3V的电压,液晶工作在5V,就要确保这两个电源要共地,否则是会有问题的;
还有,单片机上不是有SPI通讯接口吗,建议使用原生的,这样会比较可靠一些
点赞  2013-8-16 19:45

回复 14楼bobde163 的帖子

大神 能否留个QQ或者加我340303125
点赞  2013-8-16 19:49

回复 13楼chxiaoer0624 的帖子

逻辑电平跟供电电压是两回事,要确保两个都正常才行。
点赞  2013-8-16 19:57

回复 15楼chxiaoer0624 的帖子

额。。。我也是个小白,只是玩过一点2553而已
我也只用过1602,12864没有用过,但是涉及到串行通信的话,SPI相对来说还是很容易掌握的
我的qq是781528021,我们可以一起讨论一下
点赞  2013-8-16 20:00
很明显你的共地有问题,你是用2553驱动12864的,可是液晶供电又是另一块板子提供的。将两块板子的地连起来试试。
点赞  2013-8-22 08:29
你有没有在其他平台实现过显示出图像?首先你确定你的LCD驱动IC时序,我看你图应该是KS0108,这个很简单,程序网上一堆,只要注意一下初始化的时候要同选中左右屏,如果没有做这项,忙检测会不通过,其他指令也不能识别。
点赞  2013-8-22 15:59

回复 18楼逆风飞翔 的帖子

我找到什么原因了 液晶的第三脚我没接- -所以没显示饿了 现在好了
点赞  2013-8-23 00:40
12下一页
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复