#include "stm32f10x.h"
#include "SSD2119.h"
#include "SSD2119_font.h"
u16 DeviceCode;
void Lcd_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/*开启相应时钟 */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC, ENABLE);
/*所有Lcd引脚配置为推挽输出*/
/*16位数据低8位*/
GPIO_InitStructure.GPIO_Pin = 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);
/*16位数据高8位*/
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_Init(GPIOC, &GPIO_InitStructure);
/*控制脚*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12;
GPIO_Init(GPIOC, &GPIO_InitStructure);
/*背光控制*/
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_13;
GPIO_Init(GPIOC, &GPIO_InitStructure);
Lcd_Light_ON;
}
/****************************************************************************
* 名 称:void Lcd_Initializtion()
* 功 能:初始化 ILI9320 控制器
* 入口参数:无
* 出口参数:无
* 说 明:
* 调用方法:Lcd_Initializtion();
****************************************************************************/
void Lcd_Initializtion(void)
{
/*****************************
** 硬件连接说明 **
** STM32 ili9320/ili9325/SSD2119 **
** PB8~15 <----> DB0~7 **
** PC0~7 <----> DB8~15 **
** PC11 <----> nRD **
** PC9 <----> RS **
** PC10 <----> nWR **
** PC8 <----> nCS **
** PC12 <----> nReset **
** PC13 <----> BK_LED **
******************************/
u16 i;
Lcd_WriteData(0xffff);
Set_Rst;
Set_nWr;
Set_Cs;
Set_Rs;
Set_nRd;
Set_Rst;
Lcd_Reset(); // 复位 Lcd_Reset
Lcd_WriteReg(0x0000,0x0001);
Lcd_Delay(10000); // 10 ms
DeviceCode = Lcd_ReadRegister(0x0000);
if(DeviceCode==0x9919) // SSD2119
{
//*********POWER ON &RESET DISPLAY OFF
Lcd_WriteReg(0x28,0x0006); // VCOM OTP - Page 55-56 of SSD2119 datasheet
Lcd_WriteReg(0x00,0x0001); // start Oscillator - Page 36 of SSD2119 datasheet
Lcd_WriteReg(0x10,0x0000); // Sleep mode - Page 49 of SSD2119 datasheet
Lcd_WriteReg(0x01,0x72ef); // Driver Output Control - Page 36-39 of SSD2119 datasheet
Lcd_WriteReg(0x02,0x0600); // LCD Driving Waveform Control - Page 40-42 of SSD2119 datasheet
Lcd_WriteReg(0x03,0x6a38); // Power Control 1 - Page 43-44 of SSD2119 datasheet
Lcd_WriteReg(0x11,0x6874); // Entry Mode - Page 50-52 of SSD2119 datasheet
// RAM WRITE DATA MASK
Lcd_WriteReg(0x0f,0x0000); // Gate Scan Position - Page 49 of SSD2119 datasheet
// RAM WRITE DATA MASK
Lcd_WriteReg(0x0b,0x5308); // Frame Cycle Control - Page 45 of SSD2119 datasheet
Lcd_WriteReg(0x0c,0x0003); // Power Control 2 - Page 47 of SSD2119 datasheet
Lcd_WriteReg(0x0d,0x000a); // Power Control 3 - Page 48 of SSD2119 datasheet
Lcd_WriteReg(0x0e,0x2e00); // Power Control 4 - Page 48 of SSD2119 datasheet
Lcd_WriteReg(0x1e,0x00be); // Power Control 5 - Page 53 of SSD2119 datasheet
Lcd_WriteReg(0x25,0x8000); // Frame Frequency Control - Page 53 of SSD2119 datasheet
Lcd_WriteReg(0x26,0x7800); // Analog setting - Page 54 of SSD2119 datasheet
Lcd_WriteReg(0x4e,0x0000); // Ram Address Set - Page 58 of SSD2119 datasheet
Lcd_WriteReg(0x4f,0x0000); // Ram Address Set - Page 58 of SSD2119 datasheet
Lcd_WriteReg(0x12,0x08d9); // Sleep mode - Page 49 of SSD2119 datasheet
// -----------------Adjust the Gamma Curve----//
Lcd_WriteReg(0x30,0x0000); //0007
Lcd_WriteReg(0x31,0x0104); //0203
Lcd_WriteReg(0x32,0x0100); //0001
Lcd_WriteReg(0x33,0x0305); //0007
Lcd_WriteReg(0x34,0x0505); //0007
Lcd_WriteReg(0x35,0x0305); //0407
Lcd_WriteReg(0x36,0x0707); //0407
Lcd_WriteReg(0x37,0x0300); //0607
Lcd_WriteReg(0x3a,0x1200); //0106
Lcd_WriteReg(0x3b,0x0800);
Lcd_WriteReg(0x07,0x0033); // Display Control - Page 45 of SSD2119 datasheet
}
/*
else if(DeviceCode==0x9325||DeviceCode==0x9328)
{
Lcd_WriteReg(0x00e7,0x0010);
Lcd_WriteReg(0x0000,0x0001); //start internal osc
Lcd_WriteReg(0x0001,0x0100);
Lcd_WriteReg(0x0002,0x0700); //power on sequence
Lcd_WriteReg(0x0003,(1<<12)|(1<<5)|(1<<4) ); //65K
Lcd_WriteReg(0x0004,0x0000);
Lcd_WriteReg(0x0008,0x0207);
Lcd_WriteReg(0x0009,0x0000);
Lcd_WriteReg(0x000a,0x0000); //display setting
Lcd_WriteReg(0x000c,0x0001); //display setting
Lcd_WriteReg(0x000d,0x0000); //0f3c
Lcd_WriteReg(0x000f,0x0000);
//Power On sequence //
Lcd_WriteReg(0x0010,0x0000);
Lcd_WriteReg(0x0011,0x0007);
Lcd_WriteReg(0x0012,0x0000);
Lcd_WriteReg(0x0013,0x0000);
for(i=50000;i>0;i--);
for(i=50000;i>0;i--);
Lcd_WriteReg(0x0010,0x1590);
Lcd_WriteReg(0x0011,0x0227);
for(i=50000;i>0;i--);
for(i=50000;i>0;i--);
Lcd_WriteReg(0x0012,0x009c);
for(i=50000;i>0;i--);
for(i=50000;i>0;i--);
Lcd_WriteReg(0x0013,0x1900);
Lcd_WriteReg(0x0029,0x0023);
Lcd_WriteReg(0x002b,0x000e);
for(i=50000;i>0;i--);
for(i=50000;i>0;i--);
Lcd_WriteReg(0x0020,0x0000);
Lcd_WriteReg(0x0021,0x0000);
///////////////////////////////////////////////////////
for(i=50000;i>0;i--);
for(i=50000;i>0;i--);
Lcd_WriteReg(0x0030,0x0007);
Lcd_WriteReg(0x0031,0x0707);
Lcd_WriteReg(0x0032,0x0006);
Lcd_WriteReg(0x0035,0x0704);
Lcd_WriteReg(0x0036,0x1f04);
Lcd_WriteReg(0x0037,0x0004);
Lcd_WriteReg(0x0038,0x0000);
Lcd_WriteReg(0x0039,0x0706);
Lcd_WriteReg(0x003c,0x0701);
Lcd_WriteReg(0x003d,0x000f);
for(i=50000;i>0;i--);
for(i=50000;i>0;i--);
Lcd_WriteReg(0x0050,0x0000);
Lcd_WriteReg(0x0051,0x00ef);
Lcd_WriteReg(0x0052,0x0000);
Lcd_WriteReg(0x0053,0x013f);
Lcd_WriteReg(0x0060,0xa700);
Lcd_WriteReg(0x0061,0x0001);
Lcd_WriteReg(0x006a,0x0000);
Lcd_WriteReg(0x0080,0x0000);
Lcd_WriteReg(0x0081,0x0000);
Lcd_WriteReg(0x0082,0x0000);
Lcd_WriteReg(0x0083,0x0000);
Lcd_WriteReg(0x0084,0x0000);
Lcd_WriteReg(0x0085,0x0000);
Lcd_WriteReg(0x0090,0x0010);
Lcd_WriteReg(0x0092,0x0000);
Lcd_WriteReg(0x0093,0x0003);
Lcd_WriteReg(0x0095,0x0110);
Lcd_WriteReg(0x0097,0x0000);
Lcd_WriteReg(0x0098,0x0000);
//display on sequence
Lcd_WriteReg(0x0007,0x0133);
Lcd_WriteReg(0x0020,0x0000);
Lcd_WriteReg(0x0021,0x0000);
}
else if(DeviceCode==0x9320)
{
Lcd_WriteReg(0x00,0x0000);
Lcd_WriteReg(0x01,0x0100); //Driver Output Contral.
Lcd_WriteReg(0x02,0x0700); //LCD Driver Waveform Contral.
Lcd_WriteReg(0x03,0x1030); //Entry Mode Set.
Lcd_WriteReg(0x04,0x0000); //Scalling Contral.
Lcd_WriteReg(0x08,0x0202); //Display Contral 2.(0x0207)
Lcd_WriteReg(0x09,0x0000); //Display Contral 3