⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 glcd.c

📁 STM32驱动ADXL345
💻 C
📖 第 1 页 / 共 2 页
字号:
/*----------------------------------------------------------------------------
 * Name:    GLCD.c
 * Purpose: MCBSTM32C low level Graphic LCD (320x240 pixels) functions
 * Version: V1.00
 * Note(s):
 *----------------------------------------------------------------------------
 * This file is part of the uVision/ARM development tools.
 * This software may only be used under the terms of a valid, current,
 * end user licence from KEIL for a compatible version of KEIL software
 * development tools. Nothing else gives you the right to use this software.
 *
 * This software is supplied "AS IS" without warranties of any kind.
 *
 * Copyright (c) 2009 Keil - An ARM Company. All rights reserved.
 *----------------------------------------------------------------------------
 * History:
 *          V1.00 Initial Version
 *----------------------------------------------------------------------------*/

#pragma diag_suppress=550

#include "stm32f10x.h"
#include "GLCD.h"
#include "font.h"

/* SPI_SR - bit definitions. */
#define RXNE    0x01
#define TXE     0x02
#define BSY     0x80


/*********************** Hardware specific configuration **********************/

/*------------------------- Speed dependant settings -------------------------*/

/* If processor works on high frequency delay has to be increased, it can be 
   increased by factor 2^N by this constant                                   */
#define DELAY_2N    18

/*---------------------- Graphic LCD size definitions ------------------------*/

#define WIDTH       320                 /* Screen Width (in pixels)           */
#define HEIGHT      240                 /* Screen Hight (in pixels)           */
#define BPP         16                  /* Bits per pixel                     */
#define BYPP        ((BPP+7)/8)         /* Bytes per pixel                    */

/*--------------- Graphic LCD interface hardware definitions -----------------*/

#define SPI_START   (0x70)              /* Start byte for SPI transfer        */#define SPI_RD      (0x01)              /* WR bit 1 within start              */#define SPI_WR      (0x00)              /* WR bit 0 within start              */#define SPI_DATA    (0x02)              /* RS bit 1 within start byte         */#define SPI_INDEX   (0x00)              /* RS bit 0 within start byte         */
 
/*---------------------------- Global variables ------------------------------*/

/******************************************************************************/
static volatile unsigned short TextColor = Black, BackColor = White;


/************************ Local auxiliary functions ***************************/

/*******************************************************************************
* Delay in while loop cycles                                                   *
*   Parameter:    cnt:    number of while cycles to delay                      *
*   Return:                                                                    *
*******************************************************************************/

static void delay (int cnt) {

  cnt <<= DELAY_2N;
  while (cnt--);
}

/*******************************************************************************
* Write data to LCD controller                                                 *
*   Parameter:    c:      data to be written                                   *
*   Return:                                                                    *
*******************************************************************************/

__inline void wr_dat (unsigned short c) {

	Set_Rs;
	Set_nRd;
  	GPIOE->ODR = c;
	Clr_nWr;
	Set_nWr;
}

/*******************************************************************************
* Write command to LCD controller                                              *
*   Parameter:    c:      command to be written                                *
*   Return:                                                                    *
*******************************************************************************/

__inline void wr_cmd (unsigned char c) {

	Clr_Rs;
	Set_nRd;
	GPIOE->ODR = c;
	Clr_nWr;
	Set_nWr;
}

/*******************************************************************************
* Read data from LCD controller                                                *
*   Parameter:                                                                 *
*   Return:               read data                                            *
*******************************************************************************/

__inline unsigned short rd_dat (void) {
  unsigned short val = 0;

	Set_Rs;
	Set_nWr;
	Clr_nRd;
    GPIOE->CRH = 0x44444444;
	GPIOE->CRL = 0x44444444;
	val = GPIOE->IDR;
	val = GPIOE->IDR;
	GPIOE->CRH = 0x33333333;
	GPIOE->CRL = 0x33333333;
	Set_nRd;
	return val;
}

/*******************************************************************************
* Write to LCD register                                                        *
*   Parameter:    reg:    register to be read                                  *
*                 val:    value to write to register                           *
*******************************************************************************/

__inline void wr_reg (unsigned char reg, unsigned short val) {

  	Clr_Cs;
	wr_cmd(reg);      
	wr_dat(val);    
	Set_Cs; 
}


/*******************************************************************************
* Read from LCD register                                                       *
*   Parameter:    reg:    register to be read                                  *
*   Return:               value read from register                             *
*******************************************************************************/

unsigned short rd_reg (unsigned short reg) {

  	Clr_Cs;
	wr_cmd(reg);     
	reg = rd_dat();      	
	Set_Cs;
	return reg;
}


/************************ Exported functions **********************************/

/*******************************************************************************
* Initialize the Graphic LCD controller                                        *
*   Parameter:                                                                 *
*   Return:                                                                    *
*******************************************************************************/

void GLCD_init (void) { 
  static unsigned short DriverCode;

  /* Enable clock for GPIOA,B,C,D,E AFIO and SPI3. */
  RCC->APB2ENR |= 0x0000007D;

  /* NCS is PB2, GPIO output set to high. */
  GPIOE->CRL = 0x33333333;	    //设置PE口为50M通用推挽输出模式
  GPIOE->CRH = 0x33333333;

  GPIOD->CRH &= 0x0000ffff;	    //PD12,PD13,14,15设置为50M通用推挽输出模式
  GPIOD->CRH |= 0x33330000;

  GPIOD->BSRR = 0x0000F000;		//cs,rs,wr,rd = 1;

  delay(5);                             /* Delay 50 ms                        */
  DriverCode = rd_reg(0x00);
  if(DriverCode == 0x9320)
  {
	  /* Start Initial Sequence --------------------------------------------------*/
	  wr_reg(0xE5, 0x8000);                 /* Set the internal vcore voltage     */
	  wr_reg(0x00, 0x0001);                 /* Start internal OSC                 */
	  wr_reg(0x01, 0x0100);                 /* Set SS and SM bit                  */
	  wr_reg(0x02, 0x0700);                 /* Set 1 line inversion               */
	  wr_reg(0x03, 0x1030);                 /* Set GRAM write direction and BGR=1 */
	  wr_reg(0x04, 0x0000);                 /* Resize register                    */
	  wr_reg(0x08, 0x0202);                 /* 2 lines each, back and front porch */
	  wr_reg(0x09, 0x0000);                 /* Set non-disp area refresh cyc ISC  */
	  wr_reg(0x0A, 0x0000);                 /* FMARK function                     */
	  wr_reg(0x0C, 0x0000);                 /* RGB interface setting              */
	  wr_reg(0x0D, 0x0000);                 /* Frame marker Position              */
	  wr_reg(0x0F, 0x0000);                 /* RGB interface polarity             */
	
	  /* Power On sequence -------------------------------------------------------*/
	  wr_reg(0x10, 0x0000);                 /* Reset Power Control 1              */
	  wr_reg(0x11, 0x0000);                 /* Reset Power Control 2              */
	  wr_reg(0x12, 0x0000);                 /* Reset Power Control 3              */
	  wr_reg(0x13, 0x0000);                 /* Reset Power Control 4              */
	  delay(20);                            /* Discharge cap power voltage (200ms)*/
	  wr_reg(0x10, 0x17B0);                 /* SAP, BT[3:0], AP, DSTB, SLP, STB   */
	  wr_reg(0x11, 0x0137);                 /* DC1[2:0], DC0[2:0], VC[2:0]        */
	  delay(5);                             /* Delay 50 ms                        */
	  wr_reg(0x12, 0x0139);                 /* VREG1OUT voltage                   */
	  delay(5);                             /* Delay 50 ms                        */
	  wr_reg(0x13, 0x1D00);                 /* VDV[4:0] for VCOM amplitude        */
	  wr_reg(0x29, 0x0013);                 /* VCM[4:0] for VCOMH                 */
	  delay(5);                             /* Delay 50 ms                        */
	  wr_reg(0x20, 0x0000);                 /* GRAM horizontal Address            */
	  wr_reg(0x21, 0x0000);                 /* GRAM Vertical Address              */
	
	  /* Adjust the Gamma Curve --------------------------------------------------*/
	  wr_reg(0x30, 0x0006);
	  wr_reg(0x31, 0x0101);
	  wr_reg(0x32, 0x0003);
	  wr_reg(0x35, 0x0106);
	  wr_reg(0x36, 0x0B02);
	  wr_reg(0x37, 0x0302);
	  wr_reg(0x38, 0x0707);
	  wr_reg(0x39, 0x0007);
	  wr_reg(0x3C, 0x0600);
	  wr_reg(0x3D, 0x020B);
	  
	  /* Set GRAM area -----------------------------------------------------------*/
	  wr_reg(0x50, 0x0000);                 /* Horizontal GRAM Start Address      */
	  wr_reg(0x51, (HEIGHT-1));             /* Horizontal GRAM End   Address      */
	  wr_reg(0x52, 0x0000);                 /* Vertical   GRAM Start Address      */
	  wr_reg(0x53, (WIDTH-1));              /* Vertical   GRAM End   Address      */
	  wr_reg(0x60, 0x2700);                 /* Gate Scan Line                     */
	  wr_reg(0x61, 0x0001);                 /* NDL,VLE, REV                       */
	  wr_reg(0x6A, 0x0000);                 /* Set scrolling line                 */
	
	  /* Partial Display Control -------------------------------------------------*/
	  wr_reg(0x80, 0x0000);
	  wr_reg(0x81, 0x0000);
	  wr_reg(0x82, 0x0000);
	  wr_reg(0x83, 0x0000);
	  wr_reg(0x84, 0x0000);
	  wr_reg(0x85, 0x0000);
	
	  /* Panel Control -----------------------------------------------------------*/
	  wr_reg(0x90, 0x0010);
	  wr_reg(0x92, 0x0000);
	  wr_reg(0x93, 0x0003);
	  wr_reg(0x95, 0x0110);
	  wr_reg(0x97, 0x0000);
	  wr_reg(0x98, 0x0000);
	
	  /* Set GRAM write direction and BGR = 1
	     I/D=10 (Horizontal : increment, Vertical : increment)
	     AM=1 (address is updated in vertical writing direction)                  */
	  wr_reg(0x03, 0x1038);
//	  wr_reg(0x03, 0x1018);
	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -