分享

调了几天的12864终于点亮了.

 whlky 2016-05-26
 本帖最后由 wambob 于 2015-1-19 19:16 编辑

从1月10收到某宝买的12864后,下班回家测试,先拿上手的STC80C52开发板,测试,上电下载,除了屏幕亮,不显示字.担心买到某宝的假货,反复检查程序,没有错误,哎,嵌入式不难,难的是程序有问题,硬件有问题,查资料,看手册,实在不行了. 期间都准备给某宝退货了突然想起来自己不是焊了2块板子么,换另一块试试.
结果令人欣慰,可以显示,看来液晶没坏,是原来的板子有问题.

确定12864是好的了,下面继续学习摩尔吧之SPI驱动教程,看了几天并写程序,修改,下载,依然不能显示字符等.查百度,看视频,全是10X的,不过原理总是一样吧,配置GPIO口时钟,SPI时钟,各种例程看了好多个,模拟的也看.只要跟12864挂边的都看,手册,时序图.

昨天看视频里的仿真很好很直观,尝试调试12864驱动,结果出现错误,又是百度一箩筐.怎么改也不行,把DUG界面改个面目全非,恢复不了,干脆卸了重装吧,装完器件发现dcomutil_libfnp.dll 这个动态链接库老是被360当毒杀掉,于是恢复掉,并用模拟示波器在DUG单步运行观察串口时钟和数据的发送.,结果波形没看到,看到液晶屏显示,给人莫名其妙的感觉.期间因为用了PB3,看到SWO有用,又调到了PB4. 正常显示后,又换回PB3,也正常,看来不是引脚冲突.

总之,我感觉这次调试就是因为360杀毒给把红色的文件删了,才引起的液晶不显示.  杀毒软件也误杀.


/*Includes --------------------------------------------------------------------*/
#include  "lcd.h"
#include  "includes.h"
unsigned char disps[]={"I love STM32!"};
unsigned char dispx[]={"我爱社区!"};

void LCD_GPIO_Init(void)
{
     GPIO_InitTypeDef GPIO_InitStructure ;
     RCC_AHBPeriphClockCmd(LCD_PORT_CLK ,ENABLE);
     
     GPIO_InitStructure.GPIO_Pin   = LCD_CLK_PIN|LCD_SID_PIN ;
     GPIO_InitStructure.GPIO_Mode =  GPIO_Mode_OUT;
     GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  //   GPIO_InitStructure.GPIO_PuPd =  GPIO_PuPd_UP;
     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
     GPIO_Init(LCD_PRORT, &GPIO_InitStructure);
     
      
}
void send_command(unsigned char command_data)
{
unsigned char i;
unsigned char i_data;
i_data=0xf8;
LCD_CLK_0;
for(i=0; i<8; i++)
{
  
  if(i_data & 0x80)
  {
   LCD_SID_1;
  }
  else
  {
   LCD_SID_0;
  }
  LCD_CLK_0;
  LCD_CLK_1;
  
  i_data=i_data<<1;
}
i_data=command_data;
i_data=i_data&0xf0;
for(i=0; i<8; i++)
{
  
  if(i_data & 0x80)
  {
   LCD_SID_1;
  }
  else
  {
   LCD_SID_0;
  }
  LCD_CLK_0;
  LCD_CLK_1;
  i_data=i_data<<1;
}
i_data=command_data;
i_data=i_data<<4;
for(i=0; i<8; i++)
{
  
  if(i_data & 0x80)
  {
   LCD_SID_1;
  }
  else
  {
   LCD_SID_0;
  }
  LCD_CLK_0;
  LCD_CLK_1;
  i_data=i_data<<1;
}
Delay_Ms(10);
}
void send_data(unsigned char command_data)
{
unsigned char i;
unsigned char i_data;
i_data=0xfa;
//LCD_CLK_0;
for(i=0; i<8; i++)
{
  
  if(i_data & 0x80)
  {
   LCD_SID_1;
  }
  else
  {
   LCD_SID_0;
  }
  LCD_CLK_0;
  LCD_CLK_1;
  i_data=i_data<<1;
}
i_data=command_data;
i_data=i_data&0xf0;
for(i=0; i<8; i++)
{
  
  if(i_data & 0x80)
  {
   LCD_SID_1;
  }
  else
  {
   LCD_SID_0;
  }
  LCD_CLK_0;
  LCD_CLK_1;
  i_data=i_data<<1;
}
i_data=command_data;
i_data=i_data<<4;
for(i=0; i<8; i++)
{
  
  if(i_data & 0x80)
  {
   LCD_SID_1;
  }
  else
  {
   LCD_SID_0;
  }
  LCD_CLK_0;
  LCD_CLK_1;
  i_data=i_data<<1;
}
Delay_Ms(10);
}


void lcd_init(void)
{  

Delay_Ms(100);
send_command(0x30);
send_command(0x02);
send_command(0x06);
send_command(0x0c);
send_command(0x01);
send_command(0x80);

}

void display_s(void)
{  
unsigned char a;
send_command(0x80);
  for(a=0;a<13;a++)
{
  send_data(disps[a]);  
  }
}
void display_x(void)
{  
unsigned char a;
send_command(0x92);
  for(a=0;a<11;a++)
{
  send_data(dispx[a]);  
  }
}

void Delay(unsigned int nCount)
{
  
  while (nCount != 0)
  {
  nCount--;
  }
}
void Delay_Us(unsigned int nCount)
{
  
  while (nCount != 0)
  {
    nCount--;  
    Delay(150);
  }
}
void Delay_Ms(unsigned int nCount)
{
  
  while (nCount != 0)
  {
nCount--;  
Delay(15000);
  }
}




    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多