LCD12864 为什么就是显示不了内容!

来源:互联网 发布:苹果mac怎么关闭程序 编辑:程序博客网 时间:2024/06/05 14:26


#ifndef __12864_H
#define __12864_H
#include "stm32f10x.h"


#define RS  GPIO_Pin_12// Êý¾Ý/ÃüÁîÑ¡Ôñ¶Ë
#define RS_H GPIO_SetBits(GPIOA,GPIO_Pin_12)
#define RS_L GPIO_ResetBits(GPIOA,GPIO_Pin_12)


#define RW  GPIO_Pin_11// ¶Á/дѡÔñ¶Ë
#define RW_H GPIO_SetBits(GPIOA,GPIO_Pin_11)
#define RW_L GPIO_ResetBits(GPIOA,GPIO_Pin_11)


#define E  GPIO_Pin_10// ʹÄÜÐźÅ
#define E_H GPIO_SetBits(GPIOA,GPIO_Pin_10)
#define E_L GPIO_ResetBits(GPIOA,GPIO_Pin_10)


#define PSB GPIO_Pin_6 
#define PSB_H GPIO_SetBits(GPIOC,GPIO_Pin_6)  // ²¢/´®ÐÐÑ¡Ôñ¶Ë
#define PSB_L GPIO_ResetBits(GPIOC,GPIO_Pin_6)


#define RST  GPIO_Pin_10// ¸´Î»
#define RST_H GPIO_SetBits(GPIOA,GPIO_Pin_10)
#define RST_L GPIO_ResetBits(GPIOA,GPIO_Pin_10)


#define Light GPIO_Pin_9               //±³¹â¿ª¹Ø
#define Light_H GPIO_SetBits(GPIOC,GPIO_Pin_9)
#define Light_L GPIO_ResetBits(GPIOC,GPIO_Pin_9)


#define ReadDATA GPIOD


#define DATA GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7


void LCD_Write_Data(u16 data);
void LCD_Init(void);
void LCD_Position(u8 x,u8 y);
u8 LCD12864_Busy(void);
void LCD12864_DrowPic(u8 *a);
void LCD_Write_Cmd(u8 cmd); //дÃüÁî

#endif /* __12864_H */



#include "12864.h"
#include"User.h"
u8 LCD12864_Busy(void)
{
/*
u16 i = 0;
u16 ReadValue;
  GPIO_InitTypeDef GPIO_InitStructure;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE) ;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;//¸ü¸ÄλÖÃ
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_Init(GPIOD, &GPIO_InitStructure);//¸ü¸ÄλÖÃ

RS_L; 
RW_H; 
E_H;  
delay_ms(1);
ReadValue=GPIO_ReadInputData(GPIOD);
while((ReadValue& 0x0080) == 0x80)
{
i++;
if(i > 20000)
{
E_L;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE) ;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;//¸ü¸ÄλÖÃ
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_Init(GPIOD, &GPIO_InitStructure);//¸ü¸ÄλÖÃ
return 0;
}
}
  E_L;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE) ;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;//¸ü¸ÄλÖÃ
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_Init(GPIOD, &GPIO_InitStructure);//¸ü¸ÄλÖÃ
*/
delay_ms(20);
return 1;
}




void delay(u16 x )  //ÑÓʱ
{
delay_ms(x);
}


void LCD_Write_Cmd(u8 cmd) //дÃüÁî

   u16 i;
i = 0;
while( LCD12864_Busy() == 0)
{
delay_ms(1);
i++;
if( i>1000)
{
return;
}
}
  RS_L;
  RW_L;
  E_L;
  GPIOD->ODR = (GPIOD->ODR & 0xFF00) | cmd;
  E_H;
  delay(5);
  E_L;
}


void LCD_Write_Data(u16 data)    //дÊý¾Ý
{  
   u16 i;
i = 0;
while( LCD12864_Busy() == 0)
{
delay_ms(1);
i++;
if( i>1000)
{
return;  
}
}
  RS_H;       
  RW_L;
  E_L;
  GPIOD->ODR = (GPIOD->ODR & 0xFF00) | data;
  E_H;
  delay(5);  
  E_L;
  
}


void LCD_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;//¶¨ÒåÒ»¸öGPIO_InitTypeDefÀàÐ͵ĽṹÌå
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE); //¿ªÆôGPIOCµÄÍâÉèʱÖÓ
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE); //¿ªÆôGPIODµÄÍâÉèʱÖÓ

GPIO_InitStructure.GPIO_Pin = RS | RW | E;//Ñ¡ÔñÒª¿ØÖƵÄGPIOCÒý½Å
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//ÉèÖÃÒý½ÅģʽΪÍÆÍìÊä³ö
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //ÉèÖÃÒý½ÅËÙÂÊΪ50MHZ
GPIO_Init(GPIOC,&GPIO_InitStructure); //µ÷Óÿ⺯Êý£¬³õʼ»¯GPIOE

GPIO_InitStructure.GPIO_Pin = DATA;//Ñ¡ÔñÒª¿ØÖƵÄGPIODÒý½Å
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//ÉèÖÃÒý½ÅģʽΪÍÆÍìÊä³ö
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //ÉèÖÃÒý½ÅËÙÂÊΪ50MHZ
GPIO_Init(GPIOD,&GPIO_InitStructure); //µ÷Óÿ⺯Êý£¬³õʼ»¯GPIOD
delay(5);
PSB_H;  //²¢Ðз½Ê½
RST_H;
LCD_Write_Cmd(0x30);delay(20);//»ù±¾Ö¸Á
  LCD_Write_Cmd(0x0c);delay(20);//ÕûÌåÏÔʾ´ò¿ª,¹Ø¹â±ê
  LCD_Write_Cmd(0x01);delay(20);//Çå³ýLCDµÄÏÔʾÄÚÈÝ
  LCD_Write_Cmd(0x02);delay(20);// µØÖ·¹éλ
  LCD_Write_Cmd(0x06);delay(20);//ÓαêÓÒÒÆ
  LCD_Write_Cmd(0x80);delay(20);//É趨ÏÔʾµÄÆðʼµØÖ·
LCD_Write_Cmd(0x36);//´ò¿ª»æͼÏÔʾ
  LCD_Write_Cmd(0x30);//´ò¿ª»ù±¾Ö¸Á
}
void LCD12864_ClearScreen(void)//»æͼ·½Ê½Ê±ÇåÆÁ
{
u8 i,j;


LCD_Write_Cmd(0x34);  //¿ªÍØÕ¹Ö¸Á


for(i=0;i<32;i++)  //??LCD????32????????
{
LCD_Write_Cmd(0x80+i);  //??????Y??
LCD_Write_Cmd(0x80);  //??????X??
for(j=0;j<32;j++)  //????16?,????????????,?
{   //???32?????????????????
LCD_Write_Data(0xFF);  //??1,?????????????
}
}
LCD_Write_Cmd(0x36); //0x36????????????
LCD_Write_Cmd(0x30); //???????
}


void LCD12864_DrowPic(u8 *a)    //»æͼÃüÁî
{
u8 i,j;
LCD12864_ClearScreen();
LCD_Write_Cmd(0x34);      //???????,????????
for(i=0;i<32;i++)  //??LCD????32????????
{
LCD_Write_Cmd(0x80+i);  //??????Y??
LCD_Write_Cmd(0x80);  //??????X??
for(j=0; j<16; j++)  //????16?,????????????,?
{   //???32?????????????????
LCD_Write_Data(*a);       //??1,?????????????
a++;
}
}  
for(i=0; i<32; i++)  //??LCD????32????????
{
LCD_Write_Cmd(0x80+i);  //??????Y??
LCD_Write_Cmd(0x88);  //??????X??
for(j=0; j<16; j++)  //????16?,????????????,?
{   //???32?????????????????
LCD_Write_Data(*a);       //??1,?????????????
a++; }
}
LCD_Write_Cmd(0x36);   //???
LCD_Write_Cmd(0x30);     //???????
}


void LCD_Position(u8 x,u8 y)    //¶¨Î»ÔÚµÚ¼¸ÐеÚy¸öλÖÃÏÔʾ
{
u8 position;
   if(x==0)
 {  x=0x80;   //µÚÒ»ÐÐ
 }
else if(x==1)
{x=0x90;    //µÚ¶þÐÐ
}
else if(x==2)
{x=0x88;    //µÚÈýÐÐ
}
else if(x==3)
{x=0x98;    //µÚËÄÐÐ
}
position = x + y;
LCD_Write_Cmd(position);
}








 













0 0