URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Subversion Repositories openrisc
[/] [openrisc/] [trunk/] [rtos/] [freertos-6.1.1/] [Demo/] [CORTEX_STM32F103_Primer_GCC/] [ST_Code/] [lcd.c] - Rev 603
Go to most recent revision | Compare with Previous | Blame | View Log
/********************* (C) COPYRIGHT 2007 RAISONANCE S.A.S. *******************/ /** * * @file lcd.c * @brief The LCD driver for the ST7637. * @author FL * @date 07/2007 * **/ /******************************************************************************/ /* Includes ------------------------------------------------------------------*/ #include "lcd.h" #include "circle.h" /// @cond Internal /* Private define ------------------------------------------------------------*/ #define V9_MADCTRVAL 0x90 /*!< Left orientation value. */ #define V12_MADCTRVAL 0x30 /*!< Up orientation value. */ #define V3_MADCTRVAL 0x50 /*!< Right orientation value. */ #define V6_MADCTRVAL 0xF0 /*!< Bottom orientation value. */ #define BACKLIGHT_DIVIDER 500 /*!< LCD handler step. */ /* Private variables ---------------------------------------------------------*/ // vars for timer dedicated for lcd backlight static TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; static TIM_OCInitTypeDef TIM_OCInitStructure; static int HandlerDivider = 0; int Current_CCR_BackLightStart = DEFAULT_CCR_BACKLIGHTSTART; /* External variable ---------------------------------------------------------*/ extern GPIO_InitTypeDef GPIO_InitStructure; extern u16 CCR_BackLight_Tab[5]; extern int CurrentRotateScreen; extern Rotate_H12_V_Match_TypeDef CurrentScreenOrientation; /*! ASCII Table. Each character is 7 column (7dots large) on two pages (16dots high) 7 column character: Two 8 bit data to display one column*/ static const u8 AsciiDotsTable[95 * 14 ] = { /* ASCII 32 */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* ASCII 33 */ 0x00,0x00,0x00,0x00,0x00,0x00,0x13,0xe0,0x00,0x00,0x00,0x00,0x00,0x00, /* ASCII 34 */ 0x00,0x00,0x00,0xe0,0x00,0x20,0x00,0x00,0x00,0xe0,0x00,0x20,0x00,0x00, /* ASCII 35 */ 0x00,0x00,0x35,0x00,0x0f,0x80,0x35,0x60,0x0f,0x80,0x05,0x60,0x00,0x00, /* ASCII 36 */ 0x00,0x00,0x0d,0x80,0x0a,0x40,0x3a,0x60,0x06,0x40,0x00,0x00,0x00,0x00, /* ASCII 37 */ 0x00,0x00,0x02,0x40,0x02,0xa0,0x0a,0x40,0x15,0x00,0x09,0x00,0x00,0x00, /* ASCII 38 */ 0x00,0x00,0x0c,0x00,0x13,0x00,0x14,0x80,0x08,0x80,0x14,0x00,0x00,0x00, /* ASCII 39 */ 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xe0,0x00,0x00,0x00,0x00,0x00,0x00, /* ASCII 40 */ 0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0x80,0x60,0x60,0x00,0x00,0x00,0x00, /* ASCII 41 */ 0x00,0x00,0x00,0x00,0x60,0x60,0x1f,0x80,0x00,0x00,0x00,0x00,0x00,0x00, /* ASCII 42 */ 0x00,0x00,0x00,0x40,0x03,0x40,0x00,0xe0,0x03,0x40,0x00,0x40,0x00,0x00, /* ASCII 43 */ 0x02,0x00,0x02,0x00,0x02,0x00,0x1f,0xc0,0x02,0x00,0x02,0x00,0x02,0x00, /* ASCII 44 */ 0x00,0x00,0x00,0x00,0x60,0x00,0x38,0x00,0x08,0x00,0x00,0x00,0x00,0x00, /* ASCII 45 */ 0x00,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x00,0x00, /* ASCII 46 */ 0x00,0x00,0x00,0x00,0x18,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* ASCII 47 */ 0x00,0x00,0x20,0x00,0x18,0x00,0x06,0x00,0x01,0x80,0x00,0x60,0x00,0x00, /* ASCII 48 */ 0x00,0x00,0x0f,0xc0,0x10,0x20,0x10,0x20,0x10,0x20,0x0f,0xc0,0x00,0x00, /* ASCII 49 */ 0x00,0x00,0x10,0x00,0x10,0x20,0x1f,0xe0,0x10,0x00,0x10,0x00,0x00,0x00, /* ASCII 50 */ 0x00,0x00,0x18,0x40,0x14,0x20,0x12,0x20,0x11,0x20,0x18,0xc0,0x00,0x00, /* ASCII 51 */ 0x00,0x00,0x08,0x40,0x10,0x20,0x11,0x20,0x11,0x20,0x0e,0xc0,0x00,0x00, /* ASCII 52 */ 0x00,0x00,0x06,0x00,0x05,0x00,0x04,0xc0,0x14,0x20,0x1f,0xe0,0x14,0x00, /* ASCII 53 */ 0x00,0x00,0x08,0x00,0x11,0xe0,0x11,0x20,0x11,0x20,0x0e,0x20,0x00,0x00, /* ASCII 54 */ 0x00,0x00,0x0f,0x80,0x11,0x40,0x11,0x20,0x11,0x20,0x0e,0x20,0x00,0x00, /* ASCII 55 */ 0x00,0x00,0x00,0x60,0x00,0x20,0x18,0x20,0x07,0x20,0x00,0xe0,0x00,0x00, /* ASCII 56 */ 0x00,0x00,0x0e,0xc0,0x11,0x20,0x11,0x20,0x11,0x20,0x0e,0xc0,0x00,0x00, /* ASCII 57 */ 0x00,0x00,0x11,0xc0,0x12,0x20,0x12,0x20,0x0a,0x20,0x07,0xc0,0x00,0x00, /* ASCII 58 */ 0x00,0x00,0x00,0x00,0x19,0x80,0x19,0x80,0x00,0x00,0x00,0x00,0x00,0x00, /* ASCII 59 */ 0x00,0x00,0x00,0x00,0x30,0x00,0x19,0x80,0x09,0x80,0x00,0x00,0x00,0x00, /* ASCII 60 */ 0x02,0x00,0x05,0x00,0x05,0x00,0x08,0x80,0x10,0x40,0x10,0x40,0x00,0x00, /* ASCII 61 */ 0x00,0x00,0x05,0x00,0x05,0x00,0x05,0x00,0x05,0x00,0x05,0x00,0x00,0x00, /* ASCII 62 */ 0x10,0x40,0x10,0x40,0x08,0x80,0x05,0x00,0x05,0x00,0x02,0x00,0x00,0x00, /* ASCII 63 */ 0x00,0x00,0x00,0x00,0x10,0x80,0x14,0x40,0x02,0x40,0x01,0x80,0x00,0x00, /* ASCII 64 */ 0x00,0x00,0x1f,0xe0,0x20,0x10,0x23,0x10,0x24,0x90,0x17,0xe0,0x00,0x00, /* ASCII 65 */ 0x10,0x00,0x1c,0x00,0x17,0xa0,0x04,0x60,0x17,0x80,0x1c,0x00,0x10,0x00, /* ASCII 66 */ 0x10,0x20,0x1f,0xe0,0x11,0x20,0x11,0x20,0x11,0x20,0x0e,0xc0,0x00,0x00, /* ASCII 67 */ 0x00,0x00,0x0f,0xc0,0x10,0x20,0x10,0x20,0x10,0x20,0x08,0x60,0x00,0x00, /* ASCII 68 */ 0x10,0x20,0x1f,0xe0,0x10,0x20,0x10,0x20,0x08,0x40,0x07,0x80,0x00,0x00, /* ASCII 69 */ 0x10,0x20,0x1f,0xe0,0x11,0x20,0x13,0xa0,0x10,0x20,0x18,0x60,0x00,0x00, /* ASCII 70 */ 0x00,0x00,0x10,0x20,0x1f,0xe0,0x11,0x20,0x03,0xa0,0x00,0x20,0x00,0x60, /* ASCII 71 */ 0x00,0x00,0x0f,0xc0,0x10,0x20,0x10,0x20,0x12,0x20,0x0e,0x60,0x02,0x00, /* ASCII 72 */ 0x10,0x20,0x1f,0xe0,0x11,0x20,0x01,0x00,0x11,0x20,0x1f,0xe0,0x10,0x20, /* ASCII 73 */ 0x00,0x00,0x10,0x20,0x10,0x20,0x1f,0xe0,0x10,0x20,0x10,0x20,0x00,0x00, /* ASCII 74 */ 0x00,0x00,0x0e,0x00,0x10,0x20,0x10,0x20,0x0f,0xe0,0x00,0x20,0x00,0x00, /* ASCII 75 */ 0x10,0x20,0x1f,0xe0,0x12,0x20,0x03,0x00,0x04,0xa0,0x18,0x60,0x10,0x20, /* ASCII 76 */ 0x00,0x00,0x10,0x20,0x1f,0xe0,0x10,0x20,0x10,0x00,0x1c,0x00,0x00,0x00, /* ASCII 77 */ 0x10,0x20,0x1f,0xe0,0x10,0xe0,0x03,0x00,0x10,0xe0,0x1f,0xe0,0x10,0x20, /* ASCII 78 */ 0x10,0x20,0x1f,0xe0,0x10,0xe0,0x07,0x00,0x18,0x20,0x1f,0xe0,0x00,0x20, /* ASCII 79 */ 0x00,0x00,0x0f,0xc0,0x10,0x20,0x10,0x20,0x10,0x20,0x0f,0xc0,0x00,0x00, /* ASCII 80 */ 0x00,0x00,0x10,0x20,0x1f,0xe0,0x12,0x20,0x02,0x20,0x01,0xc0,0x00,0x00, /* ASCII 81 */ 0x00,0x00,0x0f,0xc0,0x10,0x20,0x30,0x20,0x30,0x20,0x2f,0xc0,0x00,0x00, /* ASCII 82 */ 0x10,0x20,0x1f,0xe0,0x12,0x20,0x02,0x20,0x06,0x20,0x09,0xc0,0x10,0x00, /* ASCII 83 */ 0x00,0x00,0x18,0xc0,0x09,0x20,0x11,0x20,0x11,0x40,0x0e,0x60,0x00,0x00, /* ASCII 84 */ 0x00,0x60,0x00,0x20,0x10,0x20,0x1f,0xe0,0x10,0x20,0x00,0x20,0x00,0x60, /* ASCII 85 */ 0x00,0x20,0x0f,0xe0,0x10,0x20,0x10,0x00,0x10,0x20,0x0f,0xe0,0x00,0x20, /* ASCII 86 */ 0x00,0x20,0x00,0xe0,0x07,0x20,0x18,0x00,0x07,0x20,0x00,0xe0,0x00,0x20, /* ASCII 87 */ 0x00,0x20,0x0f,0xe0,0x10,0x20,0x0f,0x00,0x10,0x20,0x0f,0xe0,0x00,0x20, /* ASCII 88 */ 0x10,0x20,0x18,0x60,0x04,0x80,0x03,0x00,0x04,0x80,0x18,0x60,0x10,0x20, /* ASCII 89 */ 0x00,0x20,0x00,0x60,0x11,0xa0,0x1e,0x00,0x11,0xa0,0x00,0x60,0x00,0x20, /* ASCII 90 */ 0x00,0x00,0x18,0x60,0x14,0x20,0x13,0x20,0x10,0xa0,0x18,0x60,0x00,0x00, /* ASCII 91 */ 0x00,0x00,0x00,0x00,0x7f,0xe0,0x40,0x20,0x40,0x20,0x00,0x00,0x00,0x00, /* ASCII 92 */ 0x00,0x00,0x00,0x20,0x01,0xc0,0x06,0x00,0x38,0x00,0x00,0x00,0x00,0x00, /* ASCII 93 */ 0x00,0x00,0x00,0x00,0x40,0x20,0x40,0x20,0x7f,0xe0,0x00,0x00,0x00,0x00, /* ASCII 94 */ 0x00,0x00,0x01,0x00,0x00,0x80,0x00,0x60,0x00,0x80,0x01,0x00,0x00,0x00, /* ASCII 95 */ 0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00, /* ASCII 96 */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x40,0x00,0x00,0x00,0x00, /* ASCII 97 */ 0x00,0x00,0x0d,0x00,0x12,0x80,0x12,0x80,0x12,0x80,0x1f,0x00,0x10,0x00, /* ASCII 98 */ 0x10,0x20,0x1f,0xe0,0x11,0x00,0x10,0x80,0x10,0x80,0x0f,0x00,0x00,0x00, /* ASCII 99 */ 0x00,0x00,0x0f,0x00,0x10,0x80,0x10,0x80,0x10,0x80,0x09,0x80,0x00,0x00, /* ASCII 100 */ 0x00,0x00,0x0f,0x00,0x10,0x80,0x10,0x80,0x11,0x20,0x1f,0xe0,0x10,0x00, /* ASCII 101 */ 0x00,0x00,0x0f,0x00,0x12,0x80,0x12,0x80,0x12,0x80,0x13,0x00,0x00,0x00, /* ASCII 102 */ 0x00,0x00,0x10,0x80,0x1f,0xc0,0x10,0xa0,0x10,0xa0,0x10,0xa0,0x00,0x00, /* ASCII 103 */ 0x00,0x00,0x0f,0x00,0x50,0x80,0x50,0x80,0x51,0x00,0x3f,0x80,0x00,0x80, /* ASCII 104 */ 0x10,0x20,0x1f,0xe0,0x11,0x00,0x00,0x80,0x10,0x80,0x1f,0x00,0x10,0x00, /* ASCII 105 */ 0x00,0x00,0x10,0x80,0x10,0x80,0x1f,0xa0,0x10,0x00,0x10,0x00,0x00,0x00, /* ASCII 106 */ 0x00,0x00,0x40,0x80,0x40,0x80,0x40,0xa0,0x3f,0x80,0x00,0x00,0x00,0x00, /* ASCII 107 */ 0x10,0x20,0x1f,0xe0,0x02,0x00,0x16,0x80,0x19,0x80,0x10,0x80,0x00,0x00, /* ASCII 108 */ 0x00,0x00,0x10,0x00,0x10,0x20,0x1f,0xe0,0x10,0x00,0x10,0x00,0x00,0x00, /* ASCII 109 */ 0x10,0x80,0x1f,0x80,0x10,0x80,0x1f,0x00,0x10,0x80,0x1f,0x00,0x10,0x00, /* ASCII 110 */ 0x10,0x80,0x1f,0x80,0x11,0x00,0x00,0x80,0x10,0x80,0x1f,0x00,0x10,0x00, /* ASCII 111 */ 0x00,0x00,0x0f,0x00,0x10,0x80,0x10,0x80,0x10,0x80,0x0f,0x00,0x00,0x00, /* ASCII 112 */ 0x40,0x80,0x7f,0x80,0x51,0x00,0x10,0x80,0x10,0x80,0x0f,0x00,0x00,0x00, /* ASCII 113 */ 0x00,0x00,0x0f,0x00,0x10,0x80,0x10,0x80,0x51,0x00,0x7f,0x80,0x40,0x80, /* ASCII 114 */ 0x00,0x00,0x10,0x80,0x1f,0x80,0x11,0x00,0x10,0x80,0x10,0x80,0x00,0x00, /* ASCII 115 */ 0x00,0x00,0x19,0x00,0x12,0x80,0x12,0x80,0x12,0x80,0x0d,0x80,0x00,0x00, /* ASCII 116 */ 0x00,0x00,0x00,0x80,0x0f,0xc0,0x10,0x80,0x10,0x80,0x10,0x80,0x08,0x00, /* ASCII 117 */ 0x00,0x80,0x0f,0x80,0x10,0x00,0x10,0x00,0x08,0x80,0x1f,0x80,0x10,0x00, /* ASCII 118 */ 0x00,0x80,0x03,0x80,0x0c,0x80,0x10,0x00,0x0c,0x80,0x03,0x80,0x00,0x80, /* ASCII 119 */ 0x00,0x80,0x0f,0x80,0x10,0x80,0x0e,0x00,0x10,0x80,0x0f,0x80,0x00,0x80, /* ASCII 120 */ 0x10,0x80,0x19,0x80,0x06,0x00,0x06,0x00,0x19,0x80,0x10,0x80,0x00,0x00, /* ASCII 121 */ 0x00,0x80,0x41,0x80,0x46,0x80,0x78,0x00,0x4c,0x80,0x03,0x80,0x00,0x80, /* ASCII 122 */ 0x00,0x00,0x19,0x80,0x14,0x80,0x12,0x80,0x11,0x80,0x18,0x80,0x00,0x00, /* ASCII 123 */ 0x00,0x00,0x00,0x00,0x04,0x00,0x3b,0xc0,0x40,0x20,0x00,0x00,0x00,0x00, /* ASCII 124 */ 0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xe0,0x00,0x00,0x00,0x00,0x00,0x00, /* ASCII 125 */ 0x00,0x00,0x00,0x00,0x40,0x20,0x3b,0xc0,0x04,0x00,0x00,0x00,0x00,0x00, /* ASCII 126 */ 0x00,0x00,0x04,0x00,0x02,0x00,0x04,0x00,0x04,0x00,0x02,0x00,0x00,0x00}; int OrientationOffsetX [] = { 0 /* V12*/,0 /* V3*/,+4 /* V6*/,+4 /* V9*/ }; int OrientationOffsetY [] = { +4 /* V12*/,0 /* V3*/,0 /* V6*/,+4 /* V9*/ }; /* Private function prototypes -----------------------------------------------*/ static void LCD_7637_Controller( void ); static void LCD_DrawChar( u8 x, u8 y, u8 width, const u8 *bmp, u16 textColor, u16 bGndColor, u16 charMagniCoeff ); static void LCD_BackLightChange( void ); static void LCD_BackLightConfig( void ); static void LCD_CtrlLinesWrite( GPIO_TypeDef* GPIOx, u32 CtrlPins, BitAction BitVal ); /* Private functions ---------------------------------------------------------*/ /******************************************************************************* * * LCD_DataLinesConfig * *******************************************************************************/ /** * Configure data lines D0~D7 in Input Floating mode for read from LCD or in * Output Push-Pull mode for write on LCD * * @param[in] Mode Specifies the configuration mode for data lines D0~D7. * @n @c Input: configure in Input Floating mode * @n @c Output: configure in Output Push-Pul mode * **/ /******************************************************************************/ static void LCD_DataLinesConfig( DataConfigMode_TypeDef Mode ) { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = LCD_DATA_PINS; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; if( Mode == Input ) { /* Configure D0~D7 lines as Input */ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; } else { /* Configure D0~D7 lines in Output Push-Pull mode */ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; } GPIO_Init( GPIOx_D_LCD, &GPIO_InitStructure ); } /******************************************************************************* * * LCD_DataLinesWrite * *******************************************************************************/ /** * Write a value on D0~D7 * * @param[in] GPIOx GPIO port to write on. * @param[in] PortVal The value to write. Only the lowest 8 bits are taken into * account. * **/ /******************************************************************************/ static void LCD_DataLinesWrite( GPIO_TypeDef* GPIOx, u32 PortVal ) { // Write only the lowest 8 bits! GPIOx->ODR = ( (GPIOx->ODR) & 0xFF00 ) | (u8)PortVal; } /******************************************************************************* * * LCD_CtrlLinesConfig * *******************************************************************************/ /** * Configure control lines in Output Push-Pull mode. * **/ /******************************************************************************/ static void LCD_CtrlLinesConfig( void ) { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = LCD_CTRL_PINS; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init( GPIOx_CTRL_LCD, &GPIO_InitStructure ); GPIO_InitStructure.GPIO_Pin = CtrlPin_CS; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init( GPIOx_CS_LCD, &GPIO_InitStructure ); LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_RS, Bit_SET ); /* RS = 1 */ LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_RD, Bit_SET ); /* RD = 1 */ LCD_CtrlLinesWrite( GPIOx_CS_LCD, CtrlPin_CS, Bit_SET ); /* CS = 1 */ LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_WR, Bit_SET ); /* WR = 1 */ LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_RST, Bit_RESET ); /* RST = 0 */ } /******************************************************************************* * * LCD_CtrlLinesWrite * *******************************************************************************/ /** * Set or reset control lines. * * @param[in] GPIOx Where x can be 0, 1 or 2 to select the GPIO peripheral. * @param[in] CtrlPins The Control line. * @param[in] BitVal * **/ /******************************************************************************/ static void LCD_CtrlLinesWrite( GPIO_TypeDef* GPIOx, u32 CtrlPins, BitAction BitVal ) { /* Set or Reset the control line */ GPIO_WriteBit( GPIOx, CtrlPins, BitVal ); } /******************************************************************************* * * LCD_CheckLCDStatus * *******************************************************************************/ /** * Check whether LCD LCD is busy or not. * **/ /******************************************************************************/ static void LCD_CheckLCDStatus( void ) { unsigned char ID1; unsigned char ID2; unsigned char ID3; LCD_SendLCDCmd( ST7637_RDDID ); /* Configure Data lines as Input */ LCD_DataLinesConfig (Input ); /* Start the LCD send data sequence */ LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_RS, Bit_RESET ); /* RS = 0 */ LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_RD, Bit_RESET ); /* RD = 0 */ LCD_CtrlLinesWrite( GPIOx_CS_LCD, CtrlPin_CS, Bit_RESET ); /* CS = 0 */ LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_WR, Bit_SET ); /* WR = 1 */ /* Read data to the LCD */ GPIO_ReadInputData( GPIOx_D_LCD ); LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_RD, Bit_SET ); /* RD = 1 */ LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_RD, Bit_RESET ); /* RD = 0 */ ID1 = GPIO_ReadInputData( GPIOx_D_LCD ); LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_RD, Bit_SET ); /* RD = 1 */ LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_RD, Bit_RESET ); /* RD = 0 */ ID2 = GPIO_ReadInputData( GPIOx_D_LCD ); LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_RD, Bit_SET ); /* RD = 1 */ LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_RD, Bit_RESET ); /* RD = 0 */ ID3 = GPIO_ReadInputData( GPIOx_D_LCD ); LCD_DataLinesConfig( Output ); } /******************************************************************************* * * LCD_DrawChar * *******************************************************************************/ /** * Draw a character on the LCD screen. * * @param[in] x The line where to display the character shape. * @param[in] y The column start address. * @param[in] width The number of columns (dots) in a character width. * @param[in] bmp The character (monochrome) bitmap. A pointer of the dot matrix data. * @param[in] textColor The character color. * @param[in] bGndColor The character background color. * @param[in] charMagniCoeff The character magnifying coefficient. * * @warning The (0x0) point in on the low left corner. * **/ /******************************************************************************/ static void LCD_DrawChar( u8 x, u8 y, u8 width, const u8* bmp, u16 textColor, u16 bGndColor, u16 charMagniCoeff ) { int i; int j; int k1; int k2; // Select the area for LCD output. LCD_SetRect_For_Cmd( x, y, 7 * charMagniCoeff, 14 * charMagniCoeff ); // Select LCD output mode. LCD_SendLCDCmd( ST7637_RAMWR ); for( i = 0; i < 7; i++ ) { for( k1 = 0; k1 < charMagniCoeff; k1++ ) { for( j = 0x80; j; j >>= 1 ) // 8 { for( k2 = 0; k2 < charMagniCoeff; k2++ ) { LCD_SendLCDData( ( bmp[2*i] & j ) ? ( textColor & 255 ) : ( bGndColor & 255 ) ); LCD_SendLCDData( ( bmp[2*i] & j ) ? ( textColor >> 8 ) : ( bGndColor >> 8 ) ); } } for( j = 0x80; j > 2; j >>= 1 ) // 8 { for( k2 = 0; k2 < charMagniCoeff; k2++ ) { LCD_SendLCDData( ( bmp[2*i+1] & j ) ? ( textColor & 255 ) : ( bGndColor & 255 ) ); LCD_SendLCDData( ( bmp[2*i+1] & j ) ? ( textColor >> 8 ) : ( bGndColor >> 8 ) ); } } } } } /******************************************************************************* * * LCD_DisplayRotate * *******************************************************************************/ /** * Configure the LCD controller for a given orientation. * * @param[in] H12 The new screen orientation. * **/ /******************************************************************************/ static void LCD_DisplayRotate( Rotate_H12_V_Match_TypeDef H12 ) { // Memory Access Control 0x36 LCD_SendLCDCmd( ST7637_MADCTR ); switch( H12 ) { case V3 : LCD_SendLCDData( V3_MADCTRVAL ); break; case V6 : LCD_SendLCDData( V6_MADCTRVAL ); break; case V9 : LCD_SendLCDData( V9_MADCTRVAL ); break; case V12 : default : LCD_SendLCDData( V12_MADCTRVAL ); break; } } /******************************************************************************* * * LCD_7637_Controller * *******************************************************************************/ /** * Initialization of the controller registers. * * @note See ST7637.PDF for more information. * **/ /******************************************************************************/ static void LCD_7637_Controller( void ) { extern void starting_delay ( long unsigned ); /** Apply hardware reset **/ LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_RST, Bit_SET ); /* RST = 1 */ LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_RST, Bit_RESET ); /* RST = 0 */ starting_delay( 0x500 ); LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_RST, Bit_SET ); /* RST = 1 */ starting_delay( 0x500 ); //default mode is output LCD_DataLinesConfig( Output ); LCD_CheckLCDStatus(); LCD_SendLCDCmd( ST7637_SWRESET ); //-----------disable autoread + Manual read once ---------------------------- LCD_SendLCDCmd( ST7637_AUTOLOADSET ); // Auto Load Set 0xD7 LCD_SendLCDData( 0xBF ); // Auto Load Disable LCD_SendLCDCmd( ST7637_EPCTIN ); // EE Read/write mode 0xE0 LCD_SendLCDData( 0x00 ); // Set read mode LCD_SendLCDCmd( ST7637_EPMRD ); // Read active 0xE3 LCD_SendLCDCmd( ST7637_EPCTOUT ); // Cancel control 0xE1 //---------------------------------- Sleep OUT ------------------------------ LCD_SendLCDCmd( ST7637_DISPOFF ); // display off 0x28 LCD_SendLCDCmd( ST7637_SLPOUT ); // Sleep Out 0x11 //--------------------------------Vop setting-------------------------------- LCD_SendLCDCmd( ST7637_VOPSET ); // Set Vop by initial Module 0xC0 LCD_SendLCDData( 0xFB ); // Vop = 13.64 LCD_SendLCDData( 0x00 ); // base on Module //----------------------------Set Register----------------------------------- LCD_SendLCDCmd( ST7637_BIASSEL ); // Bias select 0xC3 LCD_SendLCDData( 0x00 ); // 1/12 Bias, base on Module LCD_SendLCDCmd( ST7637_BSTBMPXSEL ); // Setting Booster times 0xC4 LCD_SendLCDData( 0x05 ); // Booster X 8 LCD_SendLCDCmd( ST7637_BSTEFFSEL ); // Booster eff 0xC5 LCD_SendLCDData( 0x11 ); // BE = 0x01 (Level 2) LCD_SendLCDCmd( ST7637_VGSORCSEL ); // Vg with booster x2 control 0xcb LCD_SendLCDData( 0x01 ); // Vg from Vdd2 LCD_SendLCDCmd( ST7637_ID1SET ); // ID1 = 00 0xcc LCD_SendLCDData( 0x00 ); // LCD_SendLCDCmd( ST7637_ID3SET ); // ID3 = 00 0xce LCD_SendLCDData( 0x00 ); // LCD_SendLCDCmd( 0xB7 ); // Glass direction LCD_SendLCDData( 0xC0 ); // LCD_SendLCDCmd( ST7637_ANASET ); // Analog circuit setting 0xd0 LCD_SendLCDData( 0x1D ); // LCD_SendLCDCmd( 0xB4 ); // PTL mode set LCD_SendLCDData( 0x18 ); // power normal mode LCD_SendLCDCmd( ST7637_INVOFF ); // Display Inversion OFF 0x20 LCD_SendLCDCmd( 0x2A ); // column range LCD_SendLCDData( 0x04 ); // LCD_SendLCDData( 0x83 ); // LCD_SendLCDCmd( 0x2B ); // raw range LCD_SendLCDData( 0x04 ); // LCD_SendLCDData( 0x83 ); // LCD_SendLCDCmd( ST7637_COLMOD ); // Color mode = 65k 0x3A LCD_SendLCDData( 0x05 ); // LCD_SendLCDCmd( ST7637_MADCTR ); // Memory Access Control 0x36 LCD_SendLCDData( V9_MADCTRVAL ); LCD_SendLCDCmd( ST7637_DUTYSET ); // Duty = 132 duty 0xb0 LCD_SendLCDData( 0x7F ); LCD_SendLCDCmd( 0x29 ); // Display ON LCD_SendLCDCmd( 0xF9 ); // Gamma LCD_SendLCDData( 0x00 ); // LCD_SendLCDData( 0x03 ); // LCD_SendLCDData( 0x05 ); // LCD_SendLCDData( 0x07 ); // LCD_SendLCDData( 0x09 ); // LCD_SendLCDData( 0x0B ); // LCD_SendLCDData( 0x0D ); // LCD_SendLCDData( 0x0F ); // LCD_SendLCDData( 0x11 ); // LCD_SendLCDData( 0x13 ); // LCD_SendLCDData( 0x15 ); // LCD_SendLCDData( 0x17 ); // LCD_SendLCDData( 0x19 ); // LCD_SendLCDData( 0x1B ); // LCD_SendLCDData( 0x1D ); // LCD_SendLCDData( 0x1F ); // } /******************************************************************************* * * LCD_BackLightConfig * *******************************************************************************/ /** * Setting of the PWM that drives the backlight intensity. * **/ /******************************************************************************/ static void LCD_BackLightConfig( void ) { GPIO_InitTypeDef GPIO_InitStructure; /* Enable GPIOB clock */ RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE ); /* GPIOB Configuration:TIM4 2 in Output */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init( GPIOB, &GPIO_InitStructure ); /* TIM4 Configuration -----------------------------------------------------*/ /* TIM4CLK = 12 MHz, Prescaler = 0x0 */ /* Enable TIM4 clock */ RCC_APB1PeriphClockCmd( RCC_APB1Periph_TIM4, ENABLE ); TIM_DeInit( TIM4 ); TIM_TimeBaseStructInit( &TIM_TimeBaseStructure ); TIM_OCStructInit( &TIM_OCInitStructure ); /* Time base configuration */ TIM_TimeBaseStructure.TIM_Period = 0xFFFF; TIM_TimeBaseStructure.TIM_Prescaler = 0x0; TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit( TIM4, &TIM_TimeBaseStructure ); /* Output Compare Toggle Mode configuration: Channel2 */ TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = Current_CCR_BackLightStart; TIM_OC2Init( TIM4, &TIM_OCInitStructure ); TIM_OC4PreloadConfig( TIM4, TIM_OCPreload_Disable ); TIM_ARRPreloadConfig( TIM4, ENABLE ); /* Enable TIM4 IT */ TIM_ITConfig( TIM4, TIM_IT_CC2, ENABLE ); // Go !!! TIM_Cmd( TIM4, ENABLE ); } /******************************************************************************* * * LCD_BackLightChange * *******************************************************************************/ /** * Modify the PWM rate. * **/ /******************************************************************************/ static void LCD_BackLightChange( void ) { /* Output Compare Toggle Mode configuration: Channel2 */ TIM_OCInitStructure.TIM_Pulse = Current_CCR_BackLightStart; TIM_OCInit( TIM4, &TIM_OCInitStructure ); } /* Public functions for CircleOS ---------------------------------------------*/ /******************************************************************************* * * LCD_Init * *******************************************************************************/ /** * * Initialize LCD. Called at CircleOS startup. * * @attention This function must <b>NOT</b> be called by the user. * **/ /******************************************************************************/ void LCD_Init( void ) { LCD_SetBackLight( UTIL_ReadBackupRegister( BKP_BKLIGHT ) ); /* Do some gpio configs*/ GPIO_InitTypeDef GPIO_InitStructure; /* Enable GPIO clock for LCD */ RCC_APB2PeriphClockCmd( GPIO_LCD_CTRL_PERIPH, ENABLE ); RCC_APB2PeriphClockCmd( GPIO_LCD_D_PERIPH, ENABLE ); RCC_APB2PeriphClockCmd( GPIO_LCD_CS_PERIPH, ENABLE ); /* Enable GPIOC clock */ RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC, ENABLE ); /* Init BackLight*/ LCD_BackLightConfig(); /* Configure control lines signals as output mode */ LCD_CtrlLinesConfig(); /* LCD LCD Init */ LCD_7637_Controller(); } /******************************************************************************* * * LCD_Handler * *******************************************************************************/ /** * * Called by the CircleOS scheduler to manage LCD tasks. * * @attention This function must <b>NOT</b> be called by the user. * **/ /******************************************************************************/ void LCD_Handler( void ) { if( ++HandlerDivider % BACKLIGHT_DIVIDER ) { return; } LCD_BackLightChange(); } /// @endcond /* Public functions ----------------------------------------------------------*/ /******************************************************************************* * * LCD_SendLCDCmd * *******************************************************************************/ /** * * Send on command byte to the LCD. * * @param[in] Cmd An unsigned char containing the user command to send to the LCD. * **/ /******************************************************************************/ void LCD_SendLCDCmd( u8 Cmd ) { /* Start the LCD send data sequence */ LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_RS, Bit_RESET ); /* RS = 0 */ LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_RD, Bit_SET ); /* RD = 1 */ LCD_CtrlLinesWrite( GPIOx_CS_LCD, CtrlPin_CS, Bit_RESET ); /* CS = 0 */ LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_WR, Bit_RESET ); /* WR = 0 */ /* Write data to the LCD */ LCD_DataLinesWrite( GPIOx_D_LCD, (u32)Cmd ); LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_WR, Bit_SET ); /* WR = 1 */ } /******************************************************************************* * * LCD_SendLCDData * *******************************************************************************/ /** * * Send one data byte to the LCD. * * @param[in] Data An unsigned character containing the data to send to the LCD. * @pre An LCD_SendLCDCmd was done with a command waiting for data. * * **/ /******************************************************************************/ void LCD_SendLCDData( u8 Data ) { /* Configure Data lines as Output */ LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_RS, Bit_SET ); LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_RD, Bit_SET ); LCD_CtrlLinesWrite( GPIOx_CS_LCD, CtrlPin_CS, Bit_RESET ); LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_WR, Bit_RESET ); /* Write data to the LCD */ LCD_DataLinesWrite( GPIOx_D_LCD,(u32)Data ); LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_WR, Bit_SET ); } /*********************************************************************************** * * LCD_ReadLCDData * ************************************************************************************/ /** * * Read one data byte from the LCD. * * @return An unsigned 32 bit word containing the data returned by a LCD command. * @pre An LCD_SendLCDCmd was done with a command returning data. * **/ /********************************************************************************/ u32 LCD_ReadLCDData( void ) { u32 LCDData = 0; /* Configure Data lines as Input */ LCD_DataLinesConfig(Input); /* Start the LCD send data sequence */ LCD_CtrlLinesWrite( GPIOx_D_LCD, CtrlPin_RS, Bit_SET ); /* RS = 1 */ LCD_CtrlLinesWrite( GPIOx_D_LCD, CtrlPin_WR, Bit_SET ); /* WR = 1 */ LCD_CtrlLinesWrite( GPIOx_CS_LCD, CtrlPin_CS, Bit_RESET ); /* CS = 0 */ LCD_CtrlLinesWrite( GPIOx_D_LCD, CtrlPin_RD, Bit_RESET ); /* RD = 0 */ /* Read data from the LCD */ LCDData = (GPIO_ReadInputData( GPIOx_D_LCD ) & LCD_DATA_PINS ); LCD_CtrlLinesWrite( GPIOx_D_LCD, CtrlPin_RD, Bit_SET ); /* RD = 1 */ /* Read the LCD returned data */ LCD_DataLinesConfig( Output ); return LCDData; } /******************************************************************************* * * LCD_FillRect * *******************************************************************************/ /** * * Fill a rectangle with a provided color. * * @param[in] x The horizontal coordinate of the rectangle low left corner. * @param[in] y The vertical coordinate of the rectangle low left corner. * @param[in] width The rectangle width in pixels. * @param[in] height The rectangle height in pixels. * @param[in] color The RGB color to fill the rectangle with. * * @warning The (0x0) point in on the low left corner. * **/ /******************************************************************************/ void LCD_FillRect( u16 x, u16 y, u16 width, u16 height, u16 color ) { u8 Line; u8 Column; /* Select LCD screen area. */ LCD_SetRect_For_Cmd( x, y, width, height ); /* Send LCD RAM write command. */ LCD_SendLCDCmd( ST7637_RAMWR ); /* Fill selected LCD screen area with provided color. */ for( Line = 0; Line < width; Line++ ) { for( Column = 0; Column < height; Column++ ) { LCD_SendLCDData( color & 0xff ); LCD_SendLCDData( ( color >> 8 ) & 0xff ); } } #ifdef TESTLCD /* Configure Data lines as Input */ LCD_DataLinesConfig( Input ); LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_RST, Bit_SET ); /* RST = 1 */ LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_RST, Bit_RESET ); /* RST = 0 */ LCD_CtrlLinesWrite( GPIOx_CTRL_LCD, CtrlPin_RST, Bit_SET ); /* RST = 1 */ /* Start the LCD send data sequence */ LCD_CtrlLinesWrite( GPIOx_D_LCD, CtrlPin_RS, Bit_SET ); /* RS = 1 */ LCD_CtrlLinesWrite( GPIOx_D_LCD, CtrlPin_RS, Bit_RESET ); /* RS = 0 */ LCD_CtrlLinesWrite( GPIOx_D_LCD, CtrlPin_RS, Bit_SET ); /* RS = 1 */ LCD_CtrlLinesWrite( GPIOx_D_LCD, CtrlPin_RS, Bit_SET ); /* RS = 1 */ LCD_CtrlLinesWrite( GPIOx_D_LCD, CtrlPin_RS, Bit_RESET ); /* RS = 0 */ LCD_CtrlLinesWrite( GPIOx_D_LCD, CtrlPin_RS, Bit_SET ); /* RS = 1 */ LCD_CtrlLinesWrite( GPIOx_D_LCD, CtrlPin_WR, Bit_SET ); /* WR = 1 */ LCD_CtrlLinesWrite( GPIOx_D_LCD, CtrlPin_WR, Bit_RESET ); /* WR = 1 */ LCD_CtrlLinesWrite( GPIOx_D_LCD, CtrlPin_WR, Bit_SET ); /* WR = 1 */ LCD_CtrlLinesWrite( GPIOx_D_LCD, CtrlPin_RD, Bit_SET ); /* RD = 1 */ LCD_CtrlLinesWrite( GPIOx_D_LCD, CtrlPin_RD, Bit_RESET ); /* RD = 0 */ LCD_CtrlLinesWrite( GPIOx_D_LCD, CtrlPin_RD, Bit_SET ); /* RD = 1 */ LCD_CtrlLinesWrite( GPIOx_D_LCD, CtrlPin_RD, Bit_SET ); /* RD = 1 */ LCD_CtrlLinesWrite( GPIOx_D_LCD, CtrlPin_RD, Bit_RESET ); /* RD = 0 */ LCD_CtrlLinesWrite( GPIOx_D_LCD, CtrlPin_RD, Bit_SET ); /* RD = 1 */ /* Configure Data lines as Input */ LCD_DataLinesConfig( Output ); LCD_DataLinesWrite( GPIOx_D_LCD, ~0 ); LCD_DataLinesWrite( GPIOx_D_LCD, 0 ); LCD_DataLinesWrite( GPIOx_D_LCD, ~1 ); LCD_DataLinesWrite( GPIOx_D_LCD, 1 ); LCD_DataLinesWrite( GPIOx_D_LCD, ~2 ); LCD_DataLinesWrite( GPIOx_D_LCD, 2 ); LCD_DataLinesWrite( GPIOx_D_LCD, ~4 ); LCD_DataLinesWrite( GPIOx_D_LCD, 4 ); LCD_DataLinesWrite( GPIOx_D_LCD, ~8 ); LCD_DataLinesWrite( GPIOx_D_LCD, 8 ); LCD_DataLinesWrite( GPIOx_D_LCD, ~0x10 ); LCD_DataLinesWrite( GPIOx_D_LCD, 0x10 ); LCD_DataLinesWrite( GPIOx_D_LCD, ~0x20 ); LCD_DataLinesWrite( GPIOx_D_LCD, 0x20 ); LCD_DataLinesWrite( GPIOx_D_LCD, ~0x40 ); LCD_DataLinesWrite( GPIOx_D_LCD, 0x40 ); LCD_DataLinesWrite( GPIOx_D_LCD, ~0x80 ); LCD_DataLinesWrite( GPIOx_D_LCD, 0x80 ); LCD_DataLinesConfig( Input ); #endif } /******************************************************************************* * * LCD_DrawRect * *******************************************************************************/ /** * * Draw a rectangle with a provided color. * * @param[in] x The horizontal coordinate of the rectangle low left corner. * @param[in] y The vertical coordinate of the rectangle low left corner. * @param[in] width The rectangle width in pixels. * @param[in] height The rectangle height in pixels. * @param[in] color The RGB color to draw the rectangle with. * * @warning The (0x0) point in on the low left corner. * **/ /******************************************************************************/ void LCD_DrawRect( u16 x, u16 y, u16 width, u16 height, u16 color ) { // Draw horizontal sides. LCD_FillRect( x, y, width, 1, color ); LCD_FillRect( x, y + height - 1, width, 1, color ); // Draw vertical sides. LCD_FillRect( x, y, 1, height, color ); LCD_FillRect( x + width - 1, y, 1, height, color ); } /******************************************************************************* * * LCD_DrawPixel * *******************************************************************************/ /** * * Draw a pixel on the LCD with the provided color. * * @param[in] XPos The horizontal coordinate of the pixel. * @param[in] YPos The vertical coordinate of the pixel. * @param[in] Color The RGB color to draw the pixel with. * * @warning The (0x0) point in on the low left corner. * **/ /******************************************************************************/ void LCD_DrawPixel( u8 XPos, u8 YPos, u16 Color ) { /* Select LCD screen area. */ LCD_SetRect_For_Cmd( XPos, YPos, 1, 1 ); /* Send LCD RAM write command. */ LCD_SendLCDCmd( ST7637_RAMWR ); // Draw pixel. LCD_SendLCDData( Color ); LCD_SendLCDData( Color >> 8 ); } /******************************************************************************* * * LCD_RectRead * *******************************************************************************/ /** * * Save the pixels of a rectangle part of the LCD into a RAM variable. * * @param[in] x The horizontal coordinate of the rectangle low left corner. * @param[in] y The vertical coordinate of the rectangle low left corner. * @param[in] width The rectangle width in pixels. * @param[in] height The rectangle height in pixels. * @param[out] bmp The variable to store the read data into. * * @warning One pixel weights 2 bytes. * @warning The (0x0) point in on the low left corner. * **/ /******************************************************************************/ void LCD_RectRead( u16 x, u16 y, u16 width, u16 height, u8* bmp ) { int i; int bytesize = (width * height) *2; // 2 bytes per pixel. /* Select LCD screen area. */ LCD_SetRect_For_Cmd( x, y, width, height ); /* Send LCD RAM write command. */ LCD_SendLCDCmd(ST7637_RAMRD); // First read byte is dummy! LCD_ReadLCDData(); // Read pixels from LCD screen. for( i = 0; i < bytesize; i++ ) { *bmp++ = LCD_ReadLCDData(); } } /******************************************************************************* * * LCD_GetPixel * *******************************************************************************/ /** * * Read the RGB color of the pixel the coordinate are provided in parameter. * * @param[in] x The horizontal coordinate of the pixel. * @param[in] y The vertical coordinate of the pixel. * @return An unsigned 16 bit word containing the RGB color of the pixel. * * @warning The (0x0) point in on the low left corner. * @see LCD_RectRead * **/ /******************************************************************************/ u16 LCD_GetPixel( u8 x, u8 y ) { u16 val; LCD_RectRead( x, y, 1, 1, (u8*)&val ); return val; } /******************************************************************************* * * LCD_DisplayChar * *******************************************************************************/ /** * * Display at provided coordinates the provided ASCII character with the provided * text and background colors and with the provided magnify coefficient. * * @param[in] x The horizontal coordinate of the character. * @param[in] y The vertical coordinate of the character. * @param[in] Ascii The ASCII code of the character to display. * @n Ascii must be higher than 31 and lower than 127. * @param[in] TextColor The color used to draw the character. * @param[in] BGndColor The background color of the drawn character. * @param[in] CharMagniCoeff The magnify coefficient used to draw the character. * * @warning The (0x0) point in on the low left corner. * **/ /******************************************************************************/ void LCD_DisplayChar( u8 x, u8 y, u8 Ascii, u16 TextColor, u16 BGndColor, u16 CharMagniCoeff) { // Display the selected bitmap according to the provided ASCII character. LCD_DrawChar( x, y, 7, (u8*)&AsciiDotsTable[ (Ascii-32) * 14 ], TextColor, BGndColor, CharMagniCoeff ); } /******************************************************************************* * * LCD_SetRect_For_Cmd * *******************************************************************************/ /** * * Define the rectangle for the next command to be applied. * * @param[in] x The horizontal coordinate of the rectangle low left corner. * @param[in] y The vertical coordinate of the rectangle low left corner. * @param[in] width The rectangle width in pixels. * @param[in] height The rectangle height in pixels. * * @warning The (0x0) point in on the low left corner. * **/ /******************************************************************************/ void LCD_SetRect_For_Cmd( s16 x, s16 y, s16 width, s16 height ) { LCD_SendLCDCmd( ST7637_CASET ); LCD_SendLCDData( y + OrientationOffsetX[ CurrentScreenOrientation ] ); LCD_SendLCDData( y + OrientationOffsetX[ CurrentScreenOrientation ] + height - 1 ); LCD_SendLCDCmd( ST7637_RASET ); LCD_SendLCDData( x + OrientationOffsetY[ CurrentScreenOrientation ] ); LCD_SendLCDData( x + OrientationOffsetY[ CurrentScreenOrientation ] + width - 1 ); } /******************************************************************************* * * LCD_SetBackLight * *******************************************************************************/ /** * * Modify the PWM rate. Any value below BACKLIGHTMIN reset the value to the * default value (DEFAULT_CCR_BACKLIGHTSTART). * * @param[in] newBacklightStart The new PWM rate. * **/ /******************************************************************************/ void LCD_SetBackLight( u32 newBacklightStart ) { if( newBacklightStart >= BACKLIGHTMIN ) { Current_CCR_BackLightStart = newBacklightStart; } else { Current_CCR_BackLightStart = DEFAULT_CCR_BACKLIGHTSTART; } } /******************************************************************************* * * LCD_SetBackLightOff * *******************************************************************************/ /** * * Switch the LCD back light off. * **/ /******************************************************************************/ void LCD_SetBackLightOff( void ) { Current_CCR_BackLightStart = 0; } /******************************************************************************* * * LCD_SetBackLightOn * *******************************************************************************/ /** * * Switch the LCD back light on. * **/ /******************************************************************************/ void LCD_SetBackLightOn( void ) { Current_CCR_BackLightStart = DEFAULT_CCR_BACKLIGHTSTART; } /******************************************************************************* * * LCD_GetBackLight * *******************************************************************************/ /** * * Returns le LCD PWM rate. * * @return The current LCD PWM rate. * **/ /******************************************************************************/ u32 LCD_GetBackLight( void ) { return Current_CCR_BackLightStart; } /******************************************************************************* * * LCD_SetRotateScreen * *******************************************************************************/ /** * * Enable or disable the ability of the screen display to rotate according to * the MEMs information. * * @param[in] RotateScreen 0 to disable screen rotation and 1 to enable. * **/ /******************************************************************************/ void LCD_SetRotateScreen( u8 RotateScreen) { CurrentRotateScreen = RotateScreen; } /******************************************************************************* * * LCD_GetRotateScreen * *******************************************************************************/ /** * * Return the screen rotation mode. * * @retval 0 screen rotation is disabled. * @retval 1 screen rotation is enabled. * **/ /******************************************************************************/ u8 LCD_GetRotateScreen( void ) { return CurrentRotateScreen; } /******************************************************************************* * * LCD_SetScreenOrientation * *******************************************************************************/ /** * * Set the screen orientation. * * @param[in] ScreenOrientation The new screen orientation. * **/ /******************************************************************************/ void LCD_SetScreenOrientation( Rotate_H12_V_Match_TypeDef ScreenOrientation ) { CurrentScreenOrientation = ScreenOrientation; LCD_DisplayRotate( CurrentScreenOrientation ); } /******************************************************************************* * * LCD_GetScreenOrientation * *******************************************************************************/ /** * * Return current screen orientation. * * @return A Rotate_H12_V_Match_TypeDef telling the current screen orientation. * **/ /******************************************************************************/ Rotate_H12_V_Match_TypeDef LCD_GetScreenOrientation( void ) { return CurrentScreenOrientation; }
Go to most recent revision | Compare with Previous | Blame | View Log