搜索
bottom↓
回复: 0

STM32F103VC驱动ST7565R问题

[复制链接]

出0入0汤圆

发表于 2013-9-5 21:53:58 | 显示全部楼层 |阅读模式
在做STM32F103VC驱动ST7565R时一直都点不亮LCD,不知道为什么,恳请各位大侠帮助。。。。
我的LCD电路图纸(见图片)

程序代码如下:
/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"

#define LCD_CS0                GPIO_ResetBits(GPIOE , GPIO_Pin_1);
#define LCD_CS1                GPIO_SetBits(GPIOE , GPIO_Pin_1);
#define lCD_RES0        GPIO_ResetBits(GPIOE , GPIO_Pin_0);
#define lCD_RES1        GPIO_SetBits(GPIOE , GPIO_Pin_0);
#define LCD_RS0                GPIO_ResetBits(GPIOB , GPIO_Pin_0);
#define LCD_RS1                GPIO_SetBits(GPIOB , GPIO_Pin_0);
#define LCD_WR0                GPIO_ResetBits(GPIOB , GPIO_Pin_1);
#define LCD_WR1                GPIO_SetBits(GPIOB , GPIO_Pin_1);
#define LCD_RD0                GPIO_ResetBits(GPIOB , GPIO_Pin_2);
#define LCD_RD1                GPIO_SetBits(GPIOB , GPIO_Pin_2);


/* Private functions ---------------------------------------------------------*/
void GPIO_Configuration(void);
void LCD_Initial(void);
void LCD_TransferCommand(int DATA);
void LCD_TransferData(int DATA);
void LCD_ClearScreen(void);
void LCD_Address(unsigned char PAGE, unsigned char COLUM);
void LCD_TestDisplay(unsigned char DATA1,unsigned char DATA2);


/*******************************************************************************
* Function Name  : Delay
* Description    : Delay Time
* Input          : - nCount: Delay Time
* Output         : None
* Return         : None
* Attention                 : None
*******************************************************************************/
void  Delay (uint32_t delay)
{
         unsigned int opp=0, p=0;

        for(p=0;p<delay;p++)
        {
                opp=2860;
                do opp--;
                while(opp>0);
        }
}


/*******************************************************************************
* Function Name  : main
* Description    : Main Programme
* Input          : None
* Output         : None
* Return         : None
* Attention                 : None
*******************************************************************************/
int main(void)
{
        GPIO_Configuration();
        LCD_Initial();
       
        /* Infinite loop */
        while (1)
                {
                LCD_TestDisplay(0x55,0xaa);               
                }
}

/*******************************************************************************
* Function Name  : GPIO_Configuration
* Description    : Configure GPIO Pin
* Input          : None
* Output         : None
* Return         : None
* Attention                 : None
*******************************************************************************/
void GPIO_Configuration(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE);
                                 
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_3 | GPIO_Pin_4| GPIO_Pin_5
  | GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12
  | GPIO_Pin_13 | GPIO_Pin_14| GPIO_Pin_15;
  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_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOA, &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_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOE, &GPIO_InitStructure);
}

void LCD_TransferCommand(int DATA)
{//D_ReadBusy();//忙状态检查
        LCD_CS0;
        LCD_RS0;
        LCD_RD0;
        LCD_WR0;       
        DATA = (DATA <<8)&0xff00;
        DATA = (GPIO_ReadOutputData(GPIOB)&0xff)&DATA;
        GPIO_Write(GPIOB, DATA);
        LCD_RD1;
        LCD_CS1;
        LCD_RD0;
}

void LCD_TransferData(int DATA)
{//D_ReadBusy();//忙状态检查
        LCD_CS0;
        LCD_RS1;
        LCD_RD0;
        LCD_WR0;
        DATA = (DATA <<8)&0xff00;
        DATA = (GPIO_ReadOutputData(GPIOB)&0xff)&DATA;
        GPIO_Write(GPIOB, DATA);
        LCD_RD1;
        LCD_CS1;
        LCD_RD0;
}

void LCD_ClearScreen(void)
{
        unsigned char i,j;
        LCD_CS0;
        for(i=0;i<9;i++)
                {
                LCD_Address(i+1,1);
                for(j=0;j<132;j++)
                        {
                        LCD_TransferData(0x00);
                        }
                }
        LCD_CS1;
}

void LCD_TestDisplay(unsigned char DATA1,unsigned char DATA2)
{
        unsigned char i,j;
        for(j=0;j<8;j++)
                {
                LCD_CS0;
                LCD_Address(j+1,0);
                for(i=0;i<128;i++)
                        {
                        LCD_TransferData(DATA1);
                        LCD_TransferData(DATA2);
                        }
                }
}

void LCD_Address(unsigned char PAGE, unsigned char COLUMN)
{
        LCD_CS0;
        COLUMN = COLUMN;
        PAGE = PAGE -1;
        LCD_TransferCommand(0xb0+PAGE);
        LCD_TransferCommand(((COLUMN>>4)&0x0f)+0x10);
        LCD_TransferCommand(COLUMN&0x0f);
}

void LCD_Initial(void)
{
        LCD_CS0;       
        lCD_RES0;//low volt reset
        Delay(100);
        lCD_RES1;//reset done
        Delay(20);
       
        LCD_TransferCommand(0xe2);//software reset
        Delay(50);
        LCD_TransferCommand(0x2c);//improve volt step1
        Delay(50);
        LCD_TransferCommand(0x2e);//improve volt step2
        Delay(50);
        LCD_TransferCommand(0x2f);//improve volt step3
        Delay(50);
        LCD_TransferCommand(0x24);//粗调对比度,范围0x20~0x27
        LCD_TransferCommand(0x81);//微调对比度
       
        LCD_TransferCommand(0x2c);//0x1a,微调对比度值,可设置范围0x00~0x3f
        LCD_TransferCommand(0xa2);//1/9偏压比
        LCD_TransferCommand(0xc8);//行扫描顺序,从上到下
        LCD_TransferCommand(0xa0);//列扫描顺寻,从左到右
        LCD_TransferCommand(0x60);//起始行,第一行开始       
        LCD_TransferCommand(0xaf);//开显示
       
        Delay(10);
        LCD_CS1;
       
}

帮忙分析一下,不知道问题出在哪里。。。。
救命啊。。。。
谢谢!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 14:32

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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