智能车制作

标题: stm32f103c8t6不能点亮LCM19264D液晶,代码如下,请问有知道哪里出问题的大神么? [打印本页]

作者: My_EE~    时间: 2015-9-23 21:24
标题: stm32f103c8t6不能点亮LCM19264D液晶,代码如下,请问有知道哪里出问题的大神么?
.h文件
#ifndef __LCD_19264_H
#define __LCD_19264_H  
#include "sys.h"
        //LCD12964控制端口
#define LCD_RS  PBout(0)// PB.0
#define LCD_E   PBout(1)// PB.1
#define LCD_CS1 PBout(2)// PB.2
#define LCD_RST PBout(3)// PB.3
#define LCD_CS2 PBout(4)// PB.4
#define LCD_CS3 PBout(5)// PB.5
#define LCD_RW  PBout(6)// PB.6
        //设置数据A0-A7
#define DATA_I0 GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7
        //设置控制口
#define CTRL_I0 GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7
        #define  LCD_PAGE_ADDR 0xb8
#define  LCD_COL_ADDR  0x40  

void LCDPortSet(void); //LCD IO口配置
void LcdInit(void);   //初始化程序
void LcdClear(void); //清屏程序
void WriteChr16x16(u8 pag,u8 col, u8 *chr);  //写一个汉字   
#endif


         /***********************************************************
  功能:LCD19264驱动程序
作者:HUATU
  时间:2015-9-22
  ************************************************************/
  #include "lcd_19264.h"
  #include "delay.h"
  //LCD IO口配置

  /***********************************
   说明:LCD12964 数据引脚与控制引脚分配
************************************/
void LCDPortSet(void)
{
  GPIO_InitTypeDef  GPIO_InitStructure;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB, ENABLE);  //使能PA,B端口时钟
GPIO_InitStructure.GPIO_Pin = DATA_I0;//设置数据输入引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;    //设置推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure);                  //PA0-7为数据输入  
  
  GPIO_InitStructure.GPIO_Pin = CTRL_I0;            //端口配置,设置LCD控制引脚PB0-PB7
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;    //设置推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        //设置速度为50MHZ
  GPIO_Init(GPIOB, &GPIO_InitStructure);                   //对应的是PB
  
  GPIO_SetBits(GPIOB, GPIO_Pin_0);
  GPIO_SetBits(GPIOB, GPIO_Pin_1);
  GPIO_SetBits(GPIOB, GPIO_Pin_2);
  GPIO_SetBits(GPIOB, GPIO_Pin_3);
  GPIO_SetBits(GPIOB, GPIO_Pin_4);
  GPIO_SetBits(GPIOB, GPIO_Pin_5);
  GPIO_SetBits(GPIOB, GPIO_Pin_6);
        }

//****************判忙********************
void wtcom(void)
{
  LCD_RS=0;
  LCD_RW=1;
  LCD_E=1;
  delay_us(20);
  LCD_E=0;
  delay_us(20);
}

/******************选择第1屏***********************/
void SelectChip1(void)
{
  LCD_CS1=0;
  LCD_CS2=1;
  LCD_CS3=1;
  wtcom();
  }
        /******************选择第2屏***********************/
  void SelectChip2(void)
{
  LCD_CS1=1;
  LCD_CS2=0;
  LCD_CS3=1;
  wtcom();
  }
         /*****************选择第3屏**************************/
  void SelectChip3(void)
{
  LCD_CS1=1;
  LCD_CS2=1;
  LCD_CS3=0;
     wtcom();
  }
         
  void WriteCommand(u8 cmd)   //写命令
{     
  LCD_RS=0;    //写命令
LCD_RW=0;  
  //LCD_DATA_OUT(cmd);
  GPIO_Write(GPIOA,(0xff00&(cmd<<8)));   //写数据到PA低八位
LCD_E=1;
  delay_us(10);
  LCD_E=0;
  }
  void WriteData(u8  dat)  //写数据
{  
  LCD_RS=1;//写数据
LCD_RW=0;
  //LCD_DATA_OUT(dat);//数据输出到数据口
GPIO_Write(GPIOA,(0xff00&(dat<<8)));   //写数据到PA低八位
LCD_E=1;  //写入到LCD
  delay_us(10);
  LCD_E=0;
  }
         void LcdClear(void) //清屏
{
  u16  j = 0;
  u16  k = 0;
  LCD_CS1 = 0;
  LCD_CS2 = 0;
  LCD_CS3 = 0;
  WriteCommand(LCD_PAGE_ADDR + 0);
  WriteCommand(LCD_COL_ADDR  + 0);
  for(k=0;k<8;k++)
  {
  WriteCommand(LCD_PAGE_ADDR+k);
  for(j=0;j<64;j++)  
  {
   WriteData(0x00);
  }
  }
  LCD_CS1 = 1;
  LCD_CS2 = 1;
  LCD_CS3 = 1;
  }
         void LcdInit(void) //初始化程序
{
  LCD_RST = 0;
  delay_us(20);
  LCD_RST = 1;
  delay_us(5);
  LCD_CS1=0;
  LCD_CS2=0;
  LCD_CS3=0;
  WriteCommand(0x3f);  //设置开显示命令
WriteCommand(0xc0);//设置起始位置
LCD_CS1 = 1;
  LCD_CS2 = 1;
  LCD_CS3 = 1;
  LcdClear();    //清屏
}
        //写一个汉字
void WriteChr16x16(u8 pag,u8 col,u8 *chr)
{
  u8 i = 0;
  u8 j = 0;
  u8 col_t = 0;
  WriteCommand(0xc0);
  col_t = col;
  for(i=0;i<2;i++)
  {
    for(j=0;j<16;j++)
    {
  switch(col_t&0xc0)
  {
  case 0:
  SelectChip1();
  WriteCommand(LCD_PAGE_ADDR + pag + i);
  WriteCommand(LCD_COL_ADDR  + col_t - 0 );
  WriteData(chr[16*i + j]);
  col_t++;
  break;
  case 0x40:
  SelectChip2();
  WriteCommand(LCD_PAGE_ADDR + pag + i);
  WriteCommand(LCD_COL_ADDR  + col_t - 64);
  WriteData(chr[16*i + j]);
  col_t++;
  break;
  case 0x80:
  SelectChip3();
  WriteCommand(LCD_PAGE_ADDR + pag + i);
  WriteCommand(LCD_COL_ADDR  + col_t - 128);
  WriteData(chr[16*i + j]);
  col_t++;
  break;
  default:  break;
  }
     
  }
   col_t=col_t-16;
  }
  }


main.c 如下
while(1)
                {           
                        delay_ms(1000);
WriteChr16x16(0,i*16,table[0]);
        }

作者: 机遇    时间: 2015-9-25 08:45
你判断忙怎么这样写的,不是应该读寄存器的吗




欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2