?? lcd.c
字號:
#define LCD_C 1
#include <LPC23xx.H>
#include "lcd.h"
#include "chartable.h"
unsigned char gb_ucDegree;
const char ST7637DN_Initial_Table[] =
{
0x01,0x01,
0x02,0x00,
0x01,0xd7, //autoread control,disable autoread
0x00,0xbf,
0x01,0xe0, //control otp/mtp,read mode
0x00,0x00,
0x02,0x00,
0x01,0xe3, //control otp/mtp
0x02,0x00,
0x01,0xe1, //close read mode 10
0x01,0x11, //Sleep OUT
0x02,0x00, //delay 5ms
0x01,0x20, //normal diaplay
0x01,0xc3, //bias set ?
0x00,0x03,
0x01,0xc4, //booster set
0x00,0x06,
0x01,0xc5, //booster efficiency set
0x00,0x01,
0x01,0xcb, //VG Booster Set 10
0x00,0x01,
0x01,0xcc, //ID1 Set
0x00,0x45,
0x01,0xce, //ID3 Set
0x00,0x00,
0x01,0xb7, //Glass direction
0x00,0xc0,
0x01,0xd0, //follower type set
0x00,0x19,
0x01,0xd7, //auto read control 10
0x00,0xbf,
0x01,0xc7, //V0 offset voltage set
0x00,0x00,
0x00,0x00,
0x01,0xb5, //N-line Set
0x00,0x0a,
0x01,0xcd, //ID2 Set
0x00,0xd1,
0x01,0xd0, //Set Vg Source
0x00,0x1d, // 10
0x01,0xb4, //PTL Saving Mode Set
0x00,0x18, //power normal mode
0x01,0x2a, //windows column address set
0x00,0x02,
0x00,0x81,
0x01,0x2b, //ROW Start,ROW End
0x00,0x00,
0x00,0x7f,
0x01,0x3a, //pixel format set
0x00,0x05, // 10
0x01,0x36, //memory access control
0x00,0x08,
0x01,0x29, //display on
0x01,0xb0, //duty set
0x00,0x83,
0x01,0xb1, //first com set
//0x00,0x00,
0x00,0x03,
0x01,0xb3, //OSC DIV.SET
0x00,0x00,
//0x01,0xc0, //V0 valtage Set
0x01,0xc0, //V0 valtage Set ?? 10
//0x00,0x46, //0x20,
0x00,0xd2, //0x20, d5
0x00,0x00, //0xff,vlcd=15.84,0x46,vlcd=15.7;0x20,vlcd=15.24
0x01,0xc6, //V0 Bias Set
0x00,0x00,
0x01,0xb7, //glass direction
0x00,0xc8,
0x01,0xf9, //gamma
0x00,0x00,
0x00,0x03,
0x00,0x05, //10
0x00,0x07,
0x00,0x09,
0x00,0x0b,
0x00,0x0d,
0x00,0x0f,
0x00,0x11,
0x00,0x13,
0x00,0x15,
0x00,0x17,
0x00,0x19, //10
0x00,0x1b,
0x00,0x1d,
0x00,0x1f,
0x01,0x25, //write contrast?
0x00,0x42 //5?
};
void delayPeriod(unsigned char i)
{
unsigned int n;
while(i>1)
{
for(n=65535;n>1;n--);
i--;
}
}
void init_lcd_port(void)
{
//port initialized
//IODIR1=0x00FF0000;
//IODIR0=0x40600010;
PINSEL10 = 0;
IODIR0=0x000003c0;
FIO2DIR=0x000001ff; //P2.0-P2.8
FIO2MASK = 0x00000000;
}
void delayms (unsigned int i) { /* Delay function */
unsigned int n;
while(i>1)
{
for(n=65535;n>1;n--);
i--;
}
}
void initialTFT(void)
{
unsigned char i;
init_lcd_port();
delayPeriod(30); //delay 155ms
SET_TFTCS;//= 1; //NOP
SET_RDB;// = 1;
FIO2SET = 0xff;
CLR_RSTB;//REG1630_PC_GPIO_9C = REG1630_PC_GPIO_9C&0xfd;
CLR_TFTCS;// CS=0;
delayPeriod(30); //delay 155ms
SET_TFTCS;// TFTCS=1;
SET_RSTB;// REG1630_PC_GPIO_9C = REG1630_PC_GPIO_9C|0x02;
delayPeriod(30); //delay 155ms
CLR_TFTCS;// CS=0;
for (i=0;i<170;i+=2) //2007-06-09 Farmer
{
switch(ST7637DN_Initial_Table[i])
{
case 0x00: //00是數據
writedata(ST7637DN_Initial_Table[i+1]);
break;
case 0x01: //指令
writeCMD(ST7637DN_Initial_Table[i+1]);
break;
case 0x02: //延時100mS
delayPeriod(10); //delay 155ms(100);
break;
}
}
// writeCMD(0x20); //2008-01-29 Farmer 打開LCD顯示
// writeCMD(0x25); //2008-01-29 Farmer 打開LCD顯示
// writedata(0x3F); //2008-01-29 Farmer 打開LCD顯示
//CLR_TFTCS;// CS=0;
writeCMD(0x28); //2008-03-11 lakin 先關
writeCMD(0x29);
// SET_TFTCS;// TFTCS=1;
SET_TFTCS;// TFTCS=1;
}
void writedata(unsigned char ucW2LCM)
{
CLR_WRB ;//= 0;
OUT_DATA(ucW2LCM);
SET_WRB ;//= 1;
}
void writeCMD(unsigned char ucW2LCML)
{
CLR_DCB;// DCB=0;= 0;
CLR_WRB;// = 0;
OUT_DATA(ucW2LCML);
SET_WRB ;//= 1;
SET_DCB;//DCB = 1;
}
void WriteWindowSize(unsigned char ucStartX,unsigned char ucStartY,unsigned char ucEndX,unsigned char ucEndY)
{
unsigned char tx1=0,ty1=0,tx2=0,ty2=0;//lakin 2008-2-4
switch (gb_ucDegree){
case 0x03: //left 270C
tx1 =ucStartX;
tx2 =ucEndX;
ty1 =ucStartY;
ty2 =ucEndY;
break;
case 0x02: //down 180C
tx1 =ucStartX+4;
tx2 =ucEndX+4;
ty1 =ucStartY;
ty2 =ucEndY;
break;
case 0x01: //down 90
tx1 =ucStartX+4;
tx2 =ucEndX+4;
ty1 =ucStartY+4;
ty2 =ucEndY+4;
break;
case 0x00: //down 0
tx1=ucStartX;
tx2=ucEndX;
ty1=ucStartY+4;
ty2=ucEndY+4;
break;
}
CLR_TFTCS ;//= 0;
writeCMD(0x2a);
writedata(tx1); //start
writedata(tx2); //end
writeCMD(0x2b);
writedata(ty1); //start
writedata(ty2);
writeCMD(0x2c);
SET_TFTCS ;//= 1;
}
//===================================================
void Write8dot(unsigned char ucTemp)
{ unsigned char j;
for( j = 0; j<8; j++ )
{
if(ucTemp&0x80)
{
CLR_WRB ;//= 0;
OUT_DATA(gb_uc256BackColor); //background
SET_WRB ;//= 1;
} else{
CLR_WRB ;//= 0;
OUT_DATA(gb_uc256CharColor); //foreground
SET_WRB ;//= 1;
}
ucTemp=ucTemp<<1;
}
}
void Write8dot_02(unsigned char ucTemp)//lakin add 2008-2-20
{ unsigned char j;
CLR_TFTCS;//
for( j = 0; j<8; j++ )
{
if(ucTemp&0x80)
{
CLR_WRB ;//= 0;
OUT_DATA(gb_BAT_ucBackColorH);//0x00
SET_WRB ;//= 1;
CLR_WRB ;//= 0;
OUT_DATA( gb_BAT_ucBackColorL);
SET_WRB ;//= 1;
}
else
{
CLR_WRB ;//= 0;
OUT_DATA(gb_BAT_ucCharColorH);
SET_WRB;//= 1;
CLR_WRB ;//= 0;
OUT_DATA(gb_BAT_ucCharColorL);
SET_WRB;// = 1;
}
ucTemp=ucTemp<<1;
}
SET_TFTCS;//
}
//normal
void Write8dot_REV(unsigned char ucTemp)
{ unsigned char j;
CLR_TFTCS;//
for( j = 0; j<8; j++ )
{
if(ucTemp&0x80)
{
CLR_WRB ;//= 0;
OUT_DATA(gb_BAT_ucCharColorH);
SET_WRB ;//= 1;
CLR_WRB ;//= 0;
OUT_DATA(gb_BAT_ucCharColorL);
SET_WRB ;//= 1;
} else{
CLR_WRB ;//= 0;
OUT_DATA( gb_BAT_ucBackColorH);
SET_WRB ;//= 1;
CLR_WRB ;//= 0;
OUT_DATA(gb_BAT_ucBackColorL);
SET_WRB ;//= 1;
}
ucTemp=ucTemp<<1;
}
SET_TFTCS;//
}
void OUT_DATA(unsigned char data)
{
unsigned char i;
for(i=0;i<8;i++)
{
if(data&1) {Io_Set2(i);} //把相應的IO口置位或者清零
else {Io_Clr2(i);}
data=data>>1;
}
}
void Io_Set2(unsigned char pin) //單個IO口置位函數
{
unsigned int io_data=1;
io_data=io_data<<pin;
FIO2SET=io_data; //IOSET0為IO線上置位寄存器,1有效,0無
}
void Io_Clr2(unsigned char pin) //單個IO口清零函數
{
unsigned int io_data=1;
io_data=io_data<<pin;
FIO2CLR=io_data; //IOCLR0為IO線上清零寄存器,1有效,0無
}
void BlueScreen(void)
{
int i;
WriteWindowSize(0,0,127,127);
CLR_TFTCS;// = 0;
for(i=0;i<16384;i++)
{
writedata( gb_BAT_ucBackColorH); //zp 0327 for background color
writedata( gb_BAT_ucBackColorL);
}
SET_TFTCS;// = 1;
}
void LCD_print(unsigned char *c_string,unsigned char S_Width,unsigned char S_Height)
{
unsigned char i,j,l;
unsigned char t_Pos[20];
unsigned char * c_CompareChar="0123456789ABCDEFGHIJKLMNOPQRSTUVWSYZabcdefghijklmnopqrstuvwsyz :";
for(i=0;c_string[i] !='\0'; i++)
{// CLR_TFTCS;
//WriteWindowSize(S_Width+i*8,S_Height,S_Width+(i+1)*8-1,S_Height+10);
WriteWindowSize(S_Width,S_Height+i*8,S_Width+7,S_Height+(i+1)*8-1);
// SET_TFTCS;
for(j=0; j<64;j++)
{ if(c_string[i]==c_CompareChar[j])
{
t_Pos[i]=j;
for(l=0;l<8;l++)
Write8dot_REV(D_CharTable[t_Pos[i]][l]);
break;
}
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -