OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2260|回复: 3

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

[复制链接]

2

主题

3

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2018-10-10
在线时间
4 小时
发表于 2018-10-24 21:32:17 | 显示全部楼层 |阅读模式
代码:
/**************************************************************************
* 文件名: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;//¿ØÖÆÏß
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//íÆíìêä3ö
        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   
                }   
            }   
    }   
           
}
4
const 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               
};

LCD原理图.PNG
LM6800(基于S6B0108).PNG
接口连接.PNG
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10572
金钱
10572
注册时间
2017-2-18
在线时间
1914 小时
发表于 2018-10-24 22:26:54 | 显示全部楼层
回复 支持 反对

使用道具 举报

0

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2018-10-6
在线时间
3 小时
发表于 2018-10-25 08:31:25 | 显示全部楼层
可以详细说一下吗,感谢楼主
回复 支持 反对

使用道具 举报

2

主题

3

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2018-10-10
在线时间
4 小时
 楼主| 发表于 2018-10-25 18:11:51 | 显示全部楼层
硬件连接和时序我都测了,感觉没有问题,有哪位大佬知道是哪的问题吗,感谢
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-21 17:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表