LCD不显示,请各位帮忙看一下

2019-07-21 08:42发布

代码:/************************************************************************** * 文件名:main.c    * 开发板:STM32F107VCT6*****************************************************************************/ 1#include "main.h"int main(void){        SystemInit();                                   Key_Init();        LED_Init();        LCD_GPIO_Configuration();        LCD6800_Init();        Display_String(name1);  while(1)        {   }; }2#ifndef _LCD6800_H_#define _LCD6800_H_ #include "stm32f10x.h"#include "LED.h" #define   RST       GPIOB,GPIO_Pin_5#define   RW        GPIOE,GPIO_Pin_4#define   RS        GPIOE,GPIO_Pin_3#define   E         GPIOE,GPIO_Pin_2 #define   CSA       GPIOC,GPIO_Pin_12#define   CSB       GPIOC,GPIO_Pin_9#define   CSC       GPIOC,GPIO_Pin_8 //数据口LCDD0-D7接到了PD7-PD0#define   LCDDB0    GPIOD,GPIO_Pin_7#define   LCDDB1    GPIOD,GPIO_Pin_6#define   LCDDB2    GPIOD,GPIO_Pin_5#define   LCDDB3    GPIOD,GPIO_Pin_4#define   LCDDB4    GPIOD,GPIO_Pin_3#define   LCDDB5    GPIOD,GPIO_Pin_2#define   LCDDB6    GPIOD,GPIO_Pin_1#define   LCDDB7    GPIOD,GPIO_Pin_0 #define Data_Out(x)    GPIOD->ODR=(GPIOD->ODR&0xff00)|(x&0x00ff);#define  LCD_column        0x40  #define  LCD_Page          0xb8 #define  LCD_ON            0x3f #define  LCD_OFF           0x3e #define  LCD_StartLine     0xc0   #define LCD_RST_1   GPIO_SetBits(GPIOB,GPIO_Pin_5);      //RST = 1   #define LCD_RST_0   GPIO_ResetBits(GPIOB,GPIO_Pin_5);    //RST = 0 #define LCD_RS_1    GPIO_SetBits(GPIOE,GPIO_Pin_3);       //RS=1   #define LCD_RS_0    GPIO_ResetBits(GPIOE,GPIO_Pin_3);     //RS=0 #define LCD_RW_1    GPIO_SetBits(GPIOE,GPIO_Pin_4);       //R/W=1    #define LCD_RW_0    GPIO_ResetBits(GPIOE,GPIO_Pin_4);    //R/W = 0 #define LCD_E_1     GPIO_SetBits(GPIOE,GPIO_Pin_2);      //E = 1   #define LCD_E_0     GPIO_ResetBits(GPIOE,GPIO_Pin_2);    //E = 0 #define LCD_CSC_1   GPIO_SetBits(GPIOC,GPIO_Pin_8);      //CSC = 1   #define LCD_CSC_0   GPIO_ResetBits(GPIOC,GPIO_Pin_8);    //CSC = 0#define LCD_CSB_1   GPIO_SetBits(GPIOC,GPIO_Pin_9);      //CSB = 1   #define LCD_CSB_0   GPIO_ResetBits(GPIOC,GPIO_Pin_9);    //CSB = 0#define LCD_CSA_1   GPIO_SetBits(GPIOC,GPIO_Pin_12);     //CSA = 1   #define LCD_CSA_0   GPIO_ResetBits(GPIOC,GPIO_Pin_12);   //CSA = 0 void LCD6800_Init(void);void LCD_GPIO_Configuration(void);void Write_Cmd(uint8_t Chipselect,uint8_t cmd);void Write_Data(uint8_t Chipselect,uint8_t data);void Display_String(const uint8_t *DisplayData);void delay_ms(uint16_t nms);void delay_us(uint32_t nus); #endif 3void LCD_GPIO_Configuration(void){        GPIO_InitTypeDef   GPIO_InitStructure;        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC |                               RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE, ENABLE);                GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;        GPIO_Init(GPIOB, &GPIO_InitStructure);                GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_12;        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;        GPIO_Init(GPIOC, &GPIO_InitStructure);                GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 |                                      GPIO_Pin_4| GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;        GPIO_Init(GPIOD, &GPIO_InitStructure);                         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4;//&#191;&#216;&#214;&#198;&#207;&#223;        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//í&#198;íìê&#228;3&#246;        GPIO_Init(GPIOE, &GPIO_InitStructure);        } void LCD6800_Init(void){                LCD_RST_0;        delay_ms(10);        LCD_RST_1;                        Write_Cmd(1,0x3f); // display ON;  Write_Cmd(2,0x3f); // for all chips  Write_Cmd(3,0x3f);  Write_Cmd(4,0x3f);     Write_Cmd(1,0xc0); // start line =0;          Write_Cmd(2,0xc0); // for all chips            Write_Cmd(3,0xc0);     Write_Cmd(4,0xc0);        }// write command      void Write_Cmd(uint8_t Chipselect,uint8_t cmd){        cmd=((cmd&0x01)<<7)|((cmd&0x02)<<5)|((cmd&0x04)<<3)|((cmd&0x08)<<1)|((cmd&0x10)>>1)|((cmd&0x20)>>3)|((cmd&0x40)>>5)|((cmd&0x80)>>7);        LCD_RS_0;        LCD_RW_0;        Data_Out(cmd);        switch(Chipselect)        {                case 1:                                LCD_CSC_0; LCD_CSB_0; LCD_CSA_0; break;// write into 1st driver                case 2:                                LCD_CSC_0; LCD_CSB_0; LCD_CSA_1; break;// write into 2st driver                case 3:                                LCD_CSC_0; LCD_CSB_1; LCD_CSA_0; break;// write into 3st driver                case 4:        LCD_CSC_0; LCD_CSB_1; LCD_CSA_1; break;// write into 4st driver                  }                LCD_E_1;        delay_ms(1);        LCD_E_0;  LCD_CSC_1; LCD_CSB_0; LCD_CSA_0;// disable all drivers  } //====================   // write data   //====================  void Write_Data(uint8_t Chipselect,uint8_t data){        data=((data&0x01)<<7)|((data&0x02)<<5)|((data&0x04)<<3)|((data&0x08)<<1)|((data&0x10)>>1)|((data&0x20)>>3)|((data&0x40)>>5)|((data&0x80)>>7);        LCD_RS_1;        LCD_RW_0;        Data_Out(data);        switch(Chipselect)        {                case 1:                                LCD_CSC_0; LCD_CSB_0; LCD_CSA_0; break;// write into 1st driver                case 2:                                LCD_CSC_0; LCD_CSB_0; LCD_CSA_1; break;// write into 2st driver                case 3:                                LCD_CSC_0; LCD_CSB_1; LCD_CSA_0; break;// write into 3st driver                case 4:        LCD_CSC_0; LCD_CSB_1; LCD_CSA_1; break;// write into 4st driver                  }                LCD_E_1;        delay_ms(1);        LCD_E_0;  LCD_CSC_1; LCD_CSB_0; LCD_CSA_0;// disable all drivers } void Display_String(const uint8_t *DisplayData)    // DisplayData should be 256x64/8 = 2048 bytes   {       uint8_t TempData;       uint8_t i;       uint32_t  j;       for(i=0;i<8;i++)       {           Write_Cmd(1,0xb8 | i); // select page no to all driver           Write_Cmd(2,0xb8 | i);           Write_Cmd(3,0xb8 | i);           Write_Cmd(4,0xb8 | i);              Write_Cmd(1,0x40);     // set column 00h to all driver           Write_Cmd(2,0x40);           Write_Cmd(3,0x40);           Write_Cmd(4,0x40);                      for(j=0;j<=255;j++)               {               TempData=(*(DisplayData+(i*256)+j));               if ((j>=0) & (j<=63))                   {                       Write_Data(1,TempData);    // 0~63 column goto driver 1                   }               if ((j>=64) & (j<=127))                   {                       Write_Data(2,TempData);    // 64~127 column goto driver 2                   }               if ((j>=128) & (j<=191))                   {                       Write_Data(3,TempData);    // 128~191 column goto driver 3                   }               if ((j>=192) & (j<=255))                   {                       Write_Data(4,TempData);    // 192-255 column goto driver 4                   }               }       }              }4const uint8_t name1[]={0x00,0x10,0x10,0x1F,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0xFC,0x04,0x04,0x00,0x00,0x00,0x01,0x19,0x19,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0xFC,0x04,0x04,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0xF8,0x04,0x04,0x04,0x08,0xFC,0x04,0x00,0x01,0x01,0x00,0x01,0x01,0x01,0x00,0x00,0x04,0x8C,0x74,0x70,0x8C,0x04,0x00,0x00,0x01,0x19,0x19,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0xFC,0x04,0x04,0x00,0x00                };
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。