#include<LPC2103.h>
#include<string.h>
#include <assert.h>
#define E (1<<10)
#define RW (1<<9)
#define RS (1<<8)
#define E_set IOSET=E //液晶使能
#define E_clear IOCLR=E
#define RW_set IOSET=RW //液晶读写
#define RW_clear IOCLR=RW
#define RS_set IOSET=RS //液晶数据
#define RS_clear IOCLR=RS //液晶指令
#define uchar unsigned char
#define uint unsigned int
const unsigned char ENfont[];
const unsigned char gImage_dd[];
void delayms(unsigned int z)
{
unsigned int x,y;
for(x=z;x>0;x--)
for(y=11000;y>0;y--);
}
void delayus(unsigned int t)
{
while(--t);
}
void wr_com(unsigned char value)//写指令,写指令时必须为RS=0;RW=0;
{
E_clear;
RS_clear;
RW_clear;
IOCLR=0xFF;
IOSET=value;
E_set;
//delayus(10); //如果没有延时就必须要加查忙指令
E_clear;
//delayus(1);
}
void wr_data(unsigned char sj)//写数据,写数据时必须为 RS=1;RW=0;
{
E_clear;
RS_set;
RW_clear;
//delayus(1);
IOCLR=0xFF;
IOSET=sj;
E_set;
//delayus(10);//如果没有延时就必须要加查忙指令
E_clear;
//delayus(1);
}
unsigned char rd_data(void)
{
unsigned char sj;
IOSET=IOSET|0xFF;
E_clear;
RS_set;
RW_set;
delayus(1);
E_set;
delayus(10);//如果没有延时就必须要加查忙指令
sj=(unsigned char )IOSET;
E_clear;
return sj;
}
void Drawpoint(uint x,uint y,uint color)
{
wr_com(x%256);
wr_com(x/256);
wr_com(y);
wr_com(0);
wr_data(color%256);
wr_data(color/256);
}
void DisplayoneChar(uint x,uint y,char Char,uint color,uint Bcolor)
{
uchar i,j,Dat;
uchar const *p;
p=ENfont+(uint)Char*16;
for(i=0;i<16;i++)
{
wr_com(x%256);
wr_com(x/256);
wr_com(y+i);
wr_com(0);
Dat=*(p+i);
for(j=0;j<8;j++)
{
if(Dat&0x01)
{
wr_data(color%256);
wr_data(color/256);
}else
{
wr_data(Bcolor%256);
wr_data(Bcolor/256);
}
Dat>>=1;
}
}
}
unsigned int Sstrlen(const uchar *str)
{
const uchar *p;
p=str;
assert(str);
while(*p++!=NULL);
return p-str-1;
}
void Displaychars(uint x,uint y, const uchar *dd,uint color,uint Bcolor)
{
int len,i;
len=Sstrlen(dd);
//while(!len);
for(i=0;i<len;i++)
{DisplayoneChar(x+(uint)8*i,y,*dd,color,Bcolor);
dd++;
}
}
void RGBto565(uchar R,uchar G,uchar B)
{
uint color;
color=(uint)(R<<11)+(uint)(G<<5)+B;
wr_data(color%256);
wr_data(color/256);
}
void DisplaycharsAuto(uint x,uint y, const uchar *dd,uint color,uint Bcolor,uint t)
{
unsigned int len,i,k=0,yd=0;
len=Sstrlen(dd);
//while(!len);
DisplayoneChar(x,y,*dd,color,Bcolor);
k=1;
for(i=1;i<len;i++)
{
if(*(dd+i)=='\n')
{
yd+=16;
k=0;
x=0;
continue;
}
else if(x+(k+1)*8>320)
{
yd+=16;
k=0;
x=0;
}
if(y+yd+16>240) break;
DisplayoneChar(x+k*8,y+yd,*(dd+i),color,Bcolor);
k++;
delayms(t);
}
}
void Dramcolor(void)
{
uchar j;
uint i;
wr_com(0);
wr_com(0);
wr_com(0);
wr_com(0);
for(j=0;j<48;j++)
for(i=0;i<320;i++)
{
if(i<50)
RGBto565(31,i*63/50,0);
else if(i>=50&&i<100)
RGBto565(31-(i-50)*31/50,63,0);
else if(i>=100&&i<150)
RGBto565(0,63,(i-100)*31/50);
else if(i>=150&&i<200)
RGBto565(0,63-(i-150)*63/50,31);
else if(i>=200&&i<250)
RGBto565((i-200)*31/50,0,31);
else if(i>=250&&i<300)
RGBto565(31,0,31-(i-250)*31/50);
else RGBto565(31,(i-300)*63/50,0);
}
wr_com(0);
wr_com(0);
wr_com(48);
wr_com(0);
for(j=0;j<48;j++)
for(i=0;i<320;i++)
{
RGBto565(31-i*31/320,i*63/320,31-i*31/320);
}
wr_com(0);
wr_com(0);
wr_com(96);
wr_com(0);
for(j=0;j<48;j++)
for(i=0;i<320;i++)
{
RGBto565(31-i*31/320,i*63/320,i*31/320);
}
wr_com(0);
wr_com(0);
wr_com(144);
wr_com(0);
for(j=0;j<48;j++)
for(i=0;i<320;i++)
{
RGBto565(31-i*31/320,63-i*63/320,i*31/320);
}
wr_com(0);
wr_com(0);
wr_com(192);
wr_com(0);
for(j=0;j<48;j++)
for(i=0;i<320;i++)
{
RGBto565(i*31/320,i*63/320,i*31/320);
}
}
const unsigned char *info="System is boot ......... \n"
" wr_com(0);\n"
" wr_com(0);\n"
" wr_com(96);\n"
" wr_com(0);\n"
" for(j=0;j<48;j++)\n"
" for(i=0;i<320;i++)\n"
" {\n"
" RGBto565(31-i*31/320,0,0);\n"
" }\n"
" wr_com(0);\n"
" wr_com(0);\n"
" wr_com(144);\n"
" wr_com(0);\n"
" for(j=0;j<48;j++)\n"
" for(i=0;i<320;i++)\n"
" {\n"
" RGBto565(0,63-i*63/320,0);\n"
" }\n"
;
int main(void)
{
unsigned long i,j;
PINSEL0=0x00000000;
IODIR=0xFFFFFFFF;
IOSET=0xFFFFFFFF;
for(j=0;j<240;j++)
{
wr_com(0);
wr_com(0);
wr_com(j);
wr_com(0);
for(i=0;i<320*2;i++)
wr_data(0x00);
}
delayms(100);
DisplaycharsAuto(0,0,info,0xFFFF,0x0000,0);
delayms(100);
Dramcolor();
delayms(100);
for(j=0;j<190;j++)
{
wr_com(0);
wr_com(0);
wr_com(j+25);
wr_com(0);
for(i=0;i<320*2;i++)
wr_data(gImage_dd[j*320*2+i]);
}
Displaychars(10,0,"Bmp Display test !",0x0000,0xFFFF);
while(1);
}
const unsigned char ENfont[]=
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",0*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x10,0x10,0x10,0x10,0x10,0x10,0x10,/*"",1*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x10,0x10,0x10,0x10,0x10,0x10,0x10,/*"",2*/
0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"",3*/
0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"",4*/
0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,/*"",5*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"",6*/
0x00,0x00,0x00,0x00,0x18,0x3C,0x7E,0x7E,0x7E,0x3C,0x18,0x00,0x00,0x00,0x00,0x00,/*"",7*/
0xFF,0xFF,0xFF,0xFF,0xE7,0xC3,0x81,0x81,0x81,0xC3,0xE7,0xFF,0xFF,0xFF,0xFF,0xFF,/*"",8*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",9*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",10*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",11*/
0x00,0x00,0xF8,0xA0,0xA0,0x90,0x90,0x08,0x08,0x1C,0x22,0x22,0x22,0x1C,0x00,0x00,/*"",12*/
0x00,0x00,0x38,0x44,0x44,0x44,0x38,0x10,0x10,0xFE,0x10,0x10,0x10,0x10,0x00,0x00,/*"",13*/
0x00,0xC0,0xB8,0x88,0xC8,0xB8,0x88,0x88,0x88,0xC8,0xE8,0x6C,0x0E,0x06,0x00,0x00,/*"",14*/
0x00,0x10,0x10,0xBA,0x44,0x44,0x44,0xC6,0x44,0x44,0x44,0xBA,0x10,0x10,0x00,0x00,/*"",15*/
0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x10,0x10,0x10,0x10,/*"",16*/
0x00,0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x00,/*"",17*/
0x00,0x10,0x38,0x54,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x54,0x38,0x10,0x00,/*"",18*/
0x00,0x00,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x00,0x00,0x24,0x24,0x00,/*"",19*/
0x00,0x00,0xF8,0xA4,0xA2,0xA2,0xA2,0xA4,0xB8,0xA0,0xA0,0xA0,0xA0,0xA0,0x00,0x00,/*"",20*/
0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"",21*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x10,0x10,0x10,0x10,0x10,0x10,0x10,/*"",22*/
0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x1F,0x10,0x10,0x10,0x10,0x10,0x10,0x10,/*"",23*/
0x00,0x10,0x38,0x54,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,/*"",24*/
0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0xF0,0x10,0x10,0x10,0x10,0x10,0x10,0x10,/*"",25*/
0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x40,0xFE,0x40,0x20,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x04,0xFE,0x04,0x08,0x00,0x00,0x00,0x00,0x00,/*"",27*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"",28*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0