?? s6d0118.c
字號:
/****************************************************************************
Controller IC:S6D0118,Hannstar 2.0 TFT
Paraller type:8 bit-8080 interface
Resolutions: 176*220 pixels
P0 : DB0---DB7===>D10-D17
P1 : P1.4 P1.3 P1.2 P1.1 P1.0
RES CS1 RS /WR RD
Modified date: 2006.09.24
****************************************************************************/
#include <reg52.h>
#include<intrins.h>
#define DisplayCol 220 //160
#define DisplaySeg 176 //128
#define DataPort P1
#define ContPort P3
sbit _RST = P3^0;
sbit _CS1 = P3^5;
sbit RS = P3^4;
sbit _WR = P3^3;
sbit _RD = P3^1;
//define control key
sbit STOP = P3^2;
sbit CONU = P3^6;
sbit COND = P3^7;
sbit PA0=P2^0;
sbit PA1=P2^1;
sbit PA2=P2^2;
sbit FlashChip1Select=P2^3; //flash memory chip 1
sbit LBLPowerOn=P2^4; //backlight DC/DC on
unsigned int xdata *ptr;
//unsigned char contrast=114;
int Rate=1,contrast=1, frequency=6300;
unsigned char KeyValue;
long time ;
int cycle;
int stand=1000;
void delay(unsigned int param)
{
int i;
for(;param>0;param--)
for(i=0;i<960;i++);
}
void LCD_Index(unsigned char index)
{
_nop_();
RS=0;_RD=1;
P1=index;
_WR=0;
delay(0);
_WR=1;
}
void LCD_DataWrite(unsigned int set_db)
{
_nop_();
RS=1;_RD=1;
P1=set_db>>8;
_WR=0;
delay(0);
_WR=1;
_nop_();
RS=1;_RD=1;
P1=set_db;
_WR=0;
delay(0);
_WR=1;
}
void LCD_CmdWrite(unsigned char index,unsigned int set_db)
{
//INDEX Register set
_nop_();
RS=0;_RD=1;
P1=index;
_WR=0;
delay(0);
_WR=1;
_nop_();
RS=1;_RD=1;
P1=set_db>>8;
_WR=0;
delay(0);
_WR=1;
_nop_();
RS=1;_RD=1;
P1=set_db;
_WR=0;
delay(0);
_WR=1;
}
void LCD_Reset(void)
{
_CS1=0;
_RST=1;
delay(10);
_RST=0;
delay(60);
_RST=1;
delay(10);
}
void Power_set(void) //Power setting
{
LCD_CmdWrite(0x00,0x0001); //osc start ---by YY 2006-9-28
delay(40);
//LCD_CmdWrite(0x12,0x00b3); //
LCD_CmdWrite(0x11,0x3000); //power control:PON=0,,PON1=0,AON=0
LCD_CmdWrite(0x14,0x1c12); //power control
//LCD_CmdWrite(0x0b,0x0000); //Frame cycle control
LCD_CmdWrite(0x10,0x2900); //power control
delay(50);
LCD_CmdWrite(0x13,0x0040); //power control :PON=1,PON1=0,AON=0
delay(10);
LCD_CmdWrite(0x13,0x0060); //power control :PON=1,PON1=1,AON=0
delay(10);
LCD_CmdWrite(0x13,0x0070); //power control :PON=1,PON1=1,AON=1
delay(100);
LCD_CmdWrite(0x11,0x3004); //power control:PON=0,,PON1=0,AON=0
LCD_CmdWrite(0x10,0x2d00); //power control
delay(20);
}
void LCD_Initial1(void) //initial code 1
{
LCD_CmdWrite(0x01,0x071d);//Driver Output Control 071b
//0000 0xxx 000x xxxx---0000 0001 0001 1101
//SM=1,GS=0,SS=1,NL[4:0]=1 0101---176*220 pixels
LCD_CmdWrite(0x02,0x0700);//LCD-Driving Waveform Control
//0000 xxxx 00xx xxxx---0000 0100 0000 0000
//FLD[1:0]=01,B/C=0,EOR=0,NW[5:0]=000000
LCD_CmdWrite(0x03,0x1030);//Entry Mode
LCD_CmdWrite(0x07,0x0004); //GON=0,DTE=0,D[1:0]=01
LCD_CmdWrite(0x08,0x0808);//display control---blink control
LCD_CmdWrite(0x09,0x0000);
LCD_CmdWrite(0x0b,0x0000);
LCD_CmdWrite(0x0c,0x0000);//display interface selection:16-bit RGB
}
void Gamma_Control(void) //Gamma control
{
//MP[5:0]([2:0]):gamma adjustment register for positive polarity output
LCD_CmdWrite(0x30,0x0102); //Gamma Control
LCD_CmdWrite(0x31,0x0707); //Gamma Control
LCD_CmdWrite(0x32,0x0101); //Gamma Control
LCD_CmdWrite(0x33,0x0200); //Gamma Control
LCD_CmdWrite(0x34,0x0506); //Gamma Control
LCD_CmdWrite(0x35,0x0707); //Gamma Control
LCD_CmdWrite(0x36,0x0304); //Gamma Control
LCD_CmdWrite(0x37,0x0200); //Gamma Control
LCD_CmdWrite(0x38,0x1802); //Gamma Control
LCD_CmdWrite(0x39,0x0800); //Gamma Control
}
void LCD_Initial2(void) //initial code 2
{
LCD_CmdWrite(0x40,0x0000);//Gate Scan Position
LCD_CmdWrite(0x41,0x0000);//
LCD_CmdWrite(0x42,0xe50a);//Screen Driving Position
LCD_CmdWrite(0x43,0x0000);//Screen Driving Position
LCD_CmdWrite(0x44,0xaf00);//Horzontal RAM Address Position:176
LCD_CmdWrite(0x45,0xe50a);//Vertical Address Position:220
delay(10);
//LCD_CmdWrite(0x61,0x0018);//Oscillator control
//LCD_CmdWrite(0x69,0x0000);//DC-DC control
//LCD_CmdWrite(0x70,0x0000);//source period setting
//LCD_CmdWrite(0x71,0x0000);//gate period setting
}
void Display_ON(void) //display on
{
LCD_CmdWrite(0x07,0x0014); //GON=0,DTE=0,D[1:0]=01
delay(2);
LCD_CmdWrite(0x07,0x0016); //GON=1,DTE=0,D[1:0]=01
delay(40);
LCD_CmdWrite(0x07,0x0017); //GON=1,DTE=0,D[1:0]=11
delay(40);
//display on status
LCD_CmdWrite(0x21,0x0a00); //0000 0000 0000 0000
LCD_Index(0x22);
}
void Display_Off(void) //display off
{
LCD_CmdWrite(0x07,0x0016);
delay(40);
LCD_CmdWrite(0x07,0x0000);
}
void Power_Off(void) //Power off
{
LCD_CmdWrite(0x07,0x0016);
delay(40);
LCD_CmdWrite(0x07,0x0000);
LCD_CmdWrite(0x10,0x0000);
LCD_CmdWrite(0x14,0x0000);
LCD_CmdWrite(0x11,0x0000);
LCD_CmdWrite(0x13,0x0060);
delay(10);
LCD_CmdWrite(0x13,0x0040);
delay(10);
LCD_CmdWrite(0x13,0x0000);
}
void Standby_on(void) //standby mode on
{
LCD_CmdWrite(0x10,0x0001);
}
void Standby_Off(void) //standby mode off
{
LCD_CmdWrite(0x00,0x0001);
delay(10);
LCD_CmdWrite(0x10,0x0000);
}
void Sleep_on(void) //sleep mode on
{
LCD_CmdWrite(0x10,0x0002);
}
void Sleep_Off(void) //sleep mode off
{
LCD_CmdWrite(0x10,0x0000);
}
void WriteBmp(unsigned char pages)
{
unsigned char page,seg;
unsigned int pointer;
// FlashChip1Select= 0;//chip selected
//pointer= 0;
LCD_CmdWrite(0x21,0x0a00); //0000 0000 0000 0000
LCD_Index(0x22);
switch(pages)
{
case 0 :PA0 = 0;PA1 = 0;PA2 = 0;break;
case 1 :PA0 = 1;PA1 = 0;PA2 = 0;break;
case 2 :PA0 = 0;PA1 = 1;PA2 = 0;break;
case 3 :PA0 = 1;PA1 = 1;PA2 = 0;break;
case 4 :PA0 = 0;PA1 = 0;PA2 = 1;break;
case 5 :PA0 = 1;PA1 = 0;PA2 = 1;break;
case 6 :PA0 = 0;PA1 = 1;PA2 = 1;break;
case 7 :PA0 = 1;PA1 = 1;PA2 = 1;break;
}
for(page=0;page<DisplayCol;page++)
{
for(seg=0;seg<DisplaySeg;seg++)
{
LCD_DataWrite(ptr[pointer++]);
}
}
// FlashChip1Select=1;
}
void Checker(unsigned int param1,unsigned int param2) //Full on,off,checkerboard,bar
{
unsigned char page,seg;
LCD_CmdWrite(0x21,0x0a00); //0000 0000 0000 0000
LCD_Index(0x22);
for(page=0;page<DisplayCol;page++)
{
for(seg=0;seg<DisplaySeg;seg++)
{
if(seg%2) LCD_DataWrite(param1);
else LCD_DataWrite(param2);
}
}
}
void WriteBoundary(void) //write boundary
{
unsigned char page,seg;
LCD_CmdWrite(0x21,0x0a00); //
LCD_Index(0x22);
for(page=0;page<DisplayCol;page++)
{
for(seg=0;seg<DisplaySeg;seg++)
{
if (seg==0||seg==(DisplaySeg-1)) LCD_DataWrite(0xffff);
else if (page==0) LCD_DataWrite(0xffff);
else if (page==(DisplayCol-1)) LCD_DataWrite(0xffff); //
else LCD_DataWrite(0x0000);
}
}
}
void test(void) //test
{
unsigned char page,seg;
for(page=0;page<DisplayCol;page++)
{
for(seg=0;seg<DisplaySeg;seg++)
{
if (page<3)
{
LCD_DataWrite(0xffff);
delay(10);
}
else
LCD_DataWrite(0x0000);
}
}
}
void WriteGrid1(void)
{
unsigned char col,seg;
LCD_CmdWrite(0x21,0x0a00); //
LCD_Index(0x22);
for(col=0;col<DisplayCol;col++)
{
for(seg=0;seg<DisplaySeg;seg++)
{
switch((col/16+seg/16)%3)
{
case 0: LCD_DataWrite(0x001f);break; //red
case 1: LCD_DataWrite(0x07e0);break; //green
case 2: LCD_DataWrite(0xf800);break; //blue
}
}
}
}
void WriteBar1(void)
{
unsigned char col,seg;
LCD_CmdWrite(0x21,0x0a00); //0000 0000 0000 0000
LCD_Index(0x22);
for(col=0;col<DisplayCol;col++)
{
for(seg=0;seg<DisplaySeg;seg++)
{
switch((col/16+col/16)%3)
{
case 0: LCD_DataWrite(0x001f);break; //red
case 1: LCD_DataWrite(0x07e0);break; //green
case 2: LCD_DataWrite(0xf800);break; //blue
}
}
}
}
void main(void)
{
unsigned int step=0;
delay(10);
LCD_Reset();
Power_set();
LCD_Initial1();
LCD_Initial2();
Gamma_Control();
//LCD_Initial2();
Display_ON();
for(step=0;step<8;step++)
{
switch(step)
{
case 0: Checker(0xffff,0xffff);break; //all on
case 1: Checker(0x0000,0x0000);break; //all off
case 2: Checker(0x07e0,0x07e0);break; //green
case 3: Checker(0x001f,0x001f);break; //blue
case 4: Checker(0xf800,0xf800);break; // red
case 5: WriteGrid1(); break; //Gird
case 6: WriteBar1(); break; //bar
//case 7: WriteBmp(0); break; //bitbmp
//case 8: test();break; //
case 7: WriteBoundary(); Power_Off(); break;//boundary
}
delay(200);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -