📄 lcdlib.c
字号:
LCD_DSERI_Hi;
else
LCD_DSERI_Lo;
delayLoop(DELAY);
LCD_DCLK_Hi; // CLOCK = High
delayLoop(DELAY);
if(j != 0)
{
LCD_DCLK_Lo;
delayLoop(DELAY); // CLOCK = Low
}
}
LCD_DSERI_Lo; // Data Low
delayLoop(DELAY);
LCD_DEN_Hi; // EN = High
delayLoop(DELAY);
LCD_DEN_Lo; // EN = Low
delayLoop(DELAY);
LCD_DCLK_Lo;
delayLoop(DELAY); // CLOCK = Low
for (j = 7; j >= 0; j--)
{
if ((data >> j) & 0x0001) // DATA HIGH or LOW
LCD_DSERI_Hi;
else
LCD_DSERI_Lo;
delayLoop(DELAY);
LCD_DCLK_Hi; // CLOCK = High
delayLoop(DELAY);
if(j != 0)
{
LCD_DCLK_Lo;
delayLoop(DELAY); // CLOCK = Low
}
}
LCD_DEN_Hi; // EN = High
delayLoop(DELAY);
}
//040616
//for LTS222H1 2.2inch QVGA LCD
void Init_240X320_AMLCD(void)
{
// Start LCD clock max : 6MHz
//Reg16_OPCLK_DIV = 0x0202; // 6.4
SET_LCD_DATA;
LCD_DEN_Hi;
LCD_DCLK_Hi;
LCD_DSERI_Hi;
LCD_RESET_Hi;
//LCD CLK is about 4.5Mhz
rLCDCON1=(rLCDCON1&~(0x3f<<13))|(0xa<<13);
rLCDCON1|=(1<<19);
// LCD_RESET_Lo;
// delayLoop(5000);
// Reg16_OPCLK_DIV = 0x0203; // 4.8
// Reg16_VDISPCNT |= 0x0010; //OSD_ON
// LCD Power enable again
//LCD_POWER_Hi; ????????????????????????
// delayLoop(5000);
// LCD Reset high
LCD_RESET_Hi;
// delayLoop(50000);
///////////////////////////////////////////////////////////////////
// Power Setting Function 1
//////////////////////////////////////////////////////////////////
Write_AMLCD(0x22,0x01); // PARTIAL 2 DISPLAY AREA RASTER-ROW NUMBER REGISTER 1
Write_AMLCD(0x03,0x01); // RESET REGISTER
///////////////////////////////////////////////////////////////////
// Initializing Function 1
///////////////////////////////////////////////////////////////////
Write_AMLCD(0x00,0x0a); // CONTROL REGISTER 1
delayLoop(5); // delay about 300ns
Write_AMLCD(0x01,0x10); // CONTROL REGISTER 2
delayLoop(5); // delay about 300ns
Write_AMLCD(0x02,0x00); // RGB INTERFACE REGISTER
delayLoop(5); // delay about 300ns
Write_AMLCD(0x05,0x00); // DATA ACCESS CONTROL REGISTER
delayLoop(5); // delay about 300ns
Write_AMLCD(0x0D,0x00); //
// delay about 40ms
delayLoop(700000);
///////////////////////////////////////////////////////////////////
// Initializing Function 2
///////////////////////////////////////////////////////////////////
Write_AMLCD(0x0E,0x00); //
delayLoop(5); // delay about 300ns
Write_AMLCD(0x0F,0x00); //
delayLoop(5); // delay about 300ns
Write_AMLCD(0x10,0x00); //
delayLoop(5); // delay about 300ns
Write_AMLCD(0x11,0x00); //
delayLoop(5); // delay about 300ns
Write_AMLCD(0x12,0x00); //
delayLoop(5); // delay about 300ns
Write_AMLCD(0x13,0x00); // DISPLAY SIZE CONTROL REGISTER
delayLoop(5); // delay about 300ns
Write_AMLCD(0x14,0x00); // PARTIAL-OFF AREA COLOR REGISTER 1
delayLoop(5); // delay about 300ns
Write_AMLCD(0x15,0x00); // PARTIAL-OFF AREA COLOR REGISTER 2
delayLoop(5); // delay about 300ns
Write_AMLCD(0x16,0x00); // PARTIAL 1 DISPLAY AREA STARTING REGISTER 1
delayLoop(5); // delay about 300ns
Write_AMLCD(0x17,0x00); // PARTIAL 1 DISPLAY AREA STARTING REGISTER 2
delayLoop(5); // delay about 300ns
Write_AMLCD(0x34,0x01); // POWER SUPPLY SYSTEM CONTROL REGISTER 14
delayLoop(5); // delay about 300ns
Write_AMLCD(0x35,0x00); // POWER SUPPLY SYSTEM CONTROL REGISTER 7
// delay about 30ms
delayLoop(500000);
////////////////////////////////////////////////////////////////////
// Initializing Function 3
////////////////////////////////////////////////////////////////////
Write_AMLCD(0x8D,0x01); //
delayLoop(5); // delay about 300ns
Write_AMLCD(0x8B,0x28); //
delayLoop(5); // delay about 300ns
Write_AMLCD(0x4B,0x00); //
delayLoop(5); // delay about 300ns
Write_AMLCD(0x4C,0x00); //
delayLoop(5); // delay about 300ns
Write_AMLCD(0x4D,0x00); //
delayLoop(5); // delay about 300ns
Write_AMLCD(0x4E,0x00); //
delayLoop(5); // delay about 300ns
Write_AMLCD(0x4F,0x00); //
delayLoop(5); // delay about 300ns
Write_AMLCD(0x50,0x00); // ID CODE REGISTER 2 Check it out
// delay about 50 us
delayLoop(900);
Write_AMLCD(0x86,0x00); //
delayLoop(5); // delay about 300ns
Write_AMLCD(0x87,0x26); //
delayLoop(5); // delay about 300ns
Write_AMLCD(0x88,0x02); //
delayLoop(5); // delay about 300ns
Write_AMLCD(0x89,0x05); //
delayLoop(5); // delay about 300ns
Write_AMLCD(0x33,0x01); // POWER SUPPLY SYSTEM CONTROL REGISTER 13
delayLoop(5); // delay about 300ns
Write_AMLCD(0x37,0x06); // POWER SUPPLY SYSTEM CONTROL REGISTER 12 Check it out
// delay about 50 us
delayLoop(900);
Write_AMLCD(0x76,0x00); // SCROLL AREA START REGISTER 2
// delay about 30ms
delayLoop(500000);
/////////////////////////////////////////////////////////////////////
// Initializing Function 4
/////////////////////////////////////////////////////////////////////
Write_AMLCD(0x42,0x00); //
delayLoop(5); // delay about 300ns
Write_AMLCD(0x43,0x00); //
delayLoop(5); // delay about 300ns
Write_AMLCD(0x44,0x00); //
delayLoop(5); // delay about 300ns
Write_AMLCD(0x45,0x00); // CALIBRATION REGISTER
delayLoop(5); // delay about 300ns
Write_AMLCD(0x46,0xef); //
delayLoop(5); // delay about 300ns
Write_AMLCD(0x47,0x00); //
delayLoop(5); // delay about 300ns
Write_AMLCD(0x48,0x00); //
delayLoop(5); // delay about 300ns
Write_AMLCD(0x49,0x01); // ID CODE REGISTER 1 check it out
// delay about 50 us
delayLoop(900);
Write_AMLCD(0x4A,0x3f); //
delayLoop(5); // delay about 300ns
Write_AMLCD(0x3C,0x00); //
delayLoop(5); // delay about 300ns
Write_AMLCD(0x3D,0x00); //
delayLoop(5); // delay about 300ns
Write_AMLCD(0x3E,0x01); //
delayLoop(5); // delay about 300ns
Write_AMLCD(0x3F,0x3f); //
delayLoop(5); // delay about 300ns
Write_AMLCD(0x40,0x03); // horizontal back porch
delayLoop(5); // delay about 300ns
Write_AMLCD(0x41,0x04); // vertical back porch
delayLoop(5); // delay about 300ns
Write_AMLCD(0x8F,0x05); //
// delay about 30ms
delayLoop(500000);
/////////////////////////////////////////////////////////////////////
// Initializing Function 5
/////////////////////////////////////////////////////////////////////
Write_AMLCD(0x90,0x05); //
delayLoop(5); // delay about 300ns
Write_AMLCD(0x91,0x44); //
delayLoop(5); // delay about 300ns
Write_AMLCD(0x92,0x44); //
delayLoop(5); // delay about 300ns
Write_AMLCD(0x93,0x44); //
delayLoop(5); // delay about 300ns
Write_AMLCD(0x94,0x33); //
delayLoop(5); // delay about 300ns
Write_AMLCD(0x95,0x05); //
delayLoop(5); // delay about 300ns
Write_AMLCD(0x96,0x05); //
delayLoop(5); // delay about 300ns
Write_AMLCD(0x97,0x44); //
delayLoop(5); // delay about 300ns
Write_AMLCD(0x98,0x44); //
delayLoop(5); // delay about 300ns
Write_AMLCD(0x99,0x44); //
delayLoop(5); // delay about 300ns
Write_AMLCD(0x9A,0x33); //
delayLoop(5); // delay about 300ns
Write_AMLCD(0x9B,0x33); //
delayLoop(5); // delay about 300ns
Write_AMLCD(0x9C,0x33); //
delayLoop(5); // delay about 300ns
Write_AMLCD(0x9D,0x81); //
// delay about 30ms
delayLoop(500000);
/////////////////////////////////////////////////////////////////////
// Power Setting 2
/////////////////////////////////////////////////////////////////////
Write_AMLCD(0x1D,0x08); //
// delay about 30ms
delayLoop(500000);
Write_AMLCD(0x23,0x00); // PARTIAL 2 DISPLAY AREA RASTER-ROW NUMBER REGISTER 2
// delay about 50 us
delayLoop(900);
Write_AMLCD(0x24,0x94); // POWER SUPPLY SYSTEM CONTROL REGISTER 1
// delay about 50 us
delayLoop(900);
Write_AMLCD(0x25,0x6f); // POWER SUPPLY SYSTEM CONTROL REGISTER 2
// delay about 40ms
delayLoop(700000);
/////////////////////////////////////////////////////////////////////
// Power Setting 3
/////////////////////////////////////////////////////////////////////
Write_AMLCD(0x28,0x1e); //
Write_AMLCD(0x1A,0x00); //
Write_AMLCD(0x21,0x10); // PARTIAL 1 DISPLAY AREA RASTER-ROW NUMBER REGISTER 2
Write_AMLCD(0x18,0x25); // PARTIAL 2 DISPLAY AREA STARTING REGISTER 1
// delay about 40ms
delayLoop(700000);
Write_AMLCD(0x19,0x48); // PARTIAL 2 DISPLAY AREA STARTING REGISTER 2
Write_AMLCD(0x18,0xe5); // PARTIAL 2 DISPLAY AREA STARTING REGISTER 1
// delay about 10ms
delayLoop(200000);
Write_AMLCD(0x18,0xF7); // PARTIAL 2 DISPLAY AREA STARTING REGISTER 1
// delay about 40ms
delayLoop(700000);
Write_AMLCD(0x1B,0x07); // org
// Write_AMLCD(0x1B,0x01); // 90 rotate
// Write_AMLCD(0x1B,0x02); // 90 rotate
// Write_AMLCD(0x1B,0x03); // 90 rotate
// delay about 80ms
delayLoop(1400000);
Write_AMLCD(0x1F,0x6b); // org
// Write_AMLCD(0x1F,0x5E); // 90 rotate
Write_AMLCD(0x20,0x51); // org, PARTIAL 1 DISPLAY AREA RASTER-ROW NUMBER REGISTER 1
// Write_AMLCD(0x20,0x5F); // 90 rotate, PARTIAL 1 DISPLAY AREA RASTER-ROW NUMBER REGISTER 1
Write_AMLCD(0x1E,0xc1); //
// delay about 10ms
delayLoop(200000);
Write_AMLCD(0x21,0x00); // PARTIAL 1 DISPLAY AREA RASTER-ROW NUMBER REGISTER 2
Write_AMLCD(0x3B,0x01); //
// delay about 20ms
delayLoop(400000);
Write_AMLCD(0x00,0x20); // CONTROL REGISTER 1
Write_AMLCD(0x02,0x01); // RGB INTERFACE REGISTER
// delay about 10ms
delayLoop(200000);
// Reg16_OPCLK_DIV = 0x0201; // 6.4
}
//->
//added by Sue.060322
#define LCD_DELAY_1MS 8000*5
void Write_LDI_LTV350(int address, int data)
{
unsigned char dev_id_code=0x1D;
int j;
unsigned char DELAY=50;
LCD_DEN_Hi; // EN = High CS high
LCD_DCLK_Hi; // SCL High
LCD_DSERI_Hi; // Data Low
delayLoop(DELAY);
LCD_DEN_Lo; // EN = Low CS Low
delayLoop(DELAY);
for (j = 5; j >= 0; j--)
{
LCD_DCLK_Lo; // SCL Low
if ((dev_id_code >> j) & 0x0001) // DATA HIGH or LOW
{
LCD_DSERI_Hi;
}
else
{
LCD_DSERI_Lo;
}
delayLoop(DELAY);
LCD_DCLK_Hi; // CLOCK = High
delayLoop(DELAY);
}
// RS = "0" : index data
LCD_DCLK_Lo; // CLOCK = Low
LCD_DSERI_Lo;
delayLoop(DELAY);
LCD_DCLK_Hi; // CLOCK = High
delayLoop(DELAY);
// Write
LCD_DCLK_Lo; // CLOCK = Low
LCD_DSERI_Lo;
delayLoop(DELAY);
LCD_DCLK_Hi; // CLOCK = High
delayLoop(DELAY);
for (j = 15; j >= 0; j--)
{
LCD_DCLK_Lo; // SCL Low
if ((address >> j) & 0x0001) // DATA HIGH or LOW
{
LCD_DSERI_Hi;
}
else
{
LCD_DSERI_Lo;
}
delayLoop(DELAY);
LCD_DCLK_Hi; // CLOCK = High
delayLoop(DELAY);
}
LCD_DSERI_Hi;
delayLoop(DELAY);
LCD_DEN_Hi; // EN = High
delayLoop(DELAY*10);
LCD_DEN_Lo; // EN = Low CS Low
delayLoop(DELAY);
for (j = 5; j >= 0; j--)
{
LCD_DCLK_Lo; // SCL Low
if ((dev_id_code >> j) & 0x0001) // DATA HIGH or LOW
{
LCD_DSERI_Hi;
}
else
{
LCD_DSERI_Lo;
}
delayLoop(DELAY);
LCD_DCLK_Hi; // CLOCK = High
delayLoop(DELAY);
}
// RS = "1" instruction data
LCD_DCLK_Lo; // CLOCK = Low
LCD_DSERI_Hi;
delayLoop(DELAY);
LCD_DCLK_Hi; // CLOCK = High
delayLoop(DELAY);
// Write
LCD_DCLK_Lo; // CLOCK = Low
LCD_DSERI_Lo;
delayLoop(DELAY);
LCD_DCLK_Hi; // CLOCK = High
delayLoop(DELAY);
for (j = 15; j >= 0; j--)
{
LCD_DCLK_Lo; // SCL Low
if ((data >> j) & 0x0001) // DATA HIGH or LOW
{
LCD_DSERI_Hi;
}
else
{
LCD_DSERI_Lo;
}
delayLoop(DELAY);
LCD_DCLK_Hi; // CLOCK = High
delayLoop(DELAY);
}
LCD_DEN_Hi; // EN = High
delayLoop(DELAY);
}
void Init_320X240_AMLCD(void)
{
// Start LCD clock max : 6MHz
//Reg16_OPCLK_DIV = 0x0202; // 6.4
SET_LCD_DATA;
delayLoop(LCD_DELAY_1MS*10);
LCD_DEN_Hi;
LCD_DCLK_Hi;
LCD_DSERI_Hi;
///////////////////////////////////////////////////////////////////
// Init_Lcd_Function
//////////////////////////////////////////////////////////////////
Write_LDI_LTV350(0x01,0x001d);
Write_LDI_LTV350(0x02,0x0000);
Write_LDI_LTV350(0x03,0x0000);
Write_LDI_LTV350(0x04,0x0000);
Write_LDI_LTV350(0x05,0x50a3);
Write_LDI_LTV350(0x06,0x0000);
Write_LDI_LTV350(0x07,0x0000);
Write_LDI_LTV350(0x08,0x0000);
Write_LDI_LTV350(0x09,0x0000);
Write_LDI_LTV350(0x0a,0x0000);
Write_LDI_LTV350(0x10,0x0000);
Write_LDI_LTV350(0x11,0x0000);
Write_LDI_LTV350(0x12,0x0000);
Write_LDI_LTV350(0x13,0x0000);
Write_LDI_LTV350(0x14,0x0000);
Write_LDI_LTV350(0x15,0x0000);
Write_LDI_LTV350(0x16,0x0000);
Write_LDI_LTV350(0x17,0x0000);
Write_LDI_LTV350(0x18,0x0000);
Write_LDI_LTV350(0x19,0x0000);
///////////////////////////////////////////////////////////////////
// Power On Reset Display off State
//////////////////////////////////////////////////////////////////
//Write_LDI_LTV350(0x09,0x0000);
// delay about 10ms
delayLoop(LCD_DELAY_1MS*10);
///////////////////////////////////////////////////////////////////
// Power Setting Function 1
//////////////////////////////////////////////////////////////////
Write_LDI_LTV350(0x09,0x4055);
Write_LDI_LTV350(0x0a,0x0000);
// delay about 10ms
delayLoop(LCD_DELAY_1MS*10);
/////////////////////////////////////////////////////////////////////
// Power Setting 2
/////////////////////////////////////////////////////////////////////
Write_LDI_LTV350(0x0a,0x2000);
// delay about 50ms
delayLoop(LCD_DELAY_1MS*50);
///////////////////////////////////////////////////////////////////
// Instruction Setting
///////////////////////////////////////////////////////////////////
Write_LDI_LTV350(0x01,0x409d);
Write_LDI_LTV350(0x02,0x0204);
Write_LDI_LTV350(0x03,0x2100);
Write_LDI_LTV350(0x04,0x1000);
Write_LDI_LTV350(0x05,0x5003);
Write_LDI_LTV350(0x06,0x0009); //vbp
Write_LDI_LTV350(0x07,0x000f); //hbp
Write_LDI_LTV350(0x08,0x0800);
Write_LDI_LTV350(0x10,0x0000);
Write_LDI_LTV350(0x11,0x0000);
Write_LDI_LTV350(0x12,0x000f);
Write_LDI_LTV350(0x13,0x1f00);
Write_LDI_LTV350(0x14,0x0000);
Write_LDI_LTV350(0x15,0x0000);
Write_LDI_LTV350(0x16,0x0000);
Write_LDI_LTV350(0x17,0x0000);
Write_LDI_LTV350(0x18,0x0000);
Write_LDI_LTV350(0x19,0x0000);
// delay about 2 frames
delayLoop(LCD_DELAY_1MS*50);
///////////////////////////////////////////////////////////////////
// Display On Sequence
///////////////////////////////////////////////////////////////////
Write_LDI_LTV350(0x09,0x4a55);
Write_LDI_LTV350(0x0a,0x2000);
}
//<-
// only for serial LCD backlight on SMDKboard
void LcdBacklightOnOff(unsigned char onoff) // pwm range :100 ~ 400Hz, level : 0 ~ 255
{
rGPICON = (rGPICON&~(0xf))|(9); // TOUT0 : output, TOUT1 : function
rGPIPU = (1); // disable internal pull-up
if(onoff == 0)
rGPIDAT &= ~(1);
else
rGPIDAT |= (1);
rTCFG0 |= (0xff); // prescaler 255
rTCFG1 = rTCFG1 & ~(0xf<<4) | (1<<4); // MUX1 divider is 1/4
// @PCLK=50MHz, PCLK/255/4 = 49.016KHz (timer 1 clock : 20us)
rTCNTB1 = 256; // clock freq. of TOUT1 is 192.21Hz
rTCMPB1 = onoff; // 255 is the best brightness
rTCON |= (2<<8); // update
rTCON = rTCON & ~(0xf<<8) |(9<<8); // start timer, auto-reload
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -