1602是指的16字符2行的那种吧。如果是,搭敏亮其点阵是这样的结构。其IC带有字库。想显示字符,只需要输入对应字的地址。
而12864的点阵是连续的。一般不带有字库。想写一个圆点,都要自己想好要写那些位置。屏上每个点都对应字IC内部RAM中一个BIT. 黑白的程序已经很久没有用了。不知道拿卖240*320彩屏的对LZ有帮助没有。区别是彩屏一个像素点需要16BIT数据(或者18,或者24).
//---------------------------------------------------------------------------
#include "reg51.h"
typedef bit uint1;
typedef unsigned char uint8, uchar, UCHAR;
typedef unsigned int uint16, uint, UINT;
typedef unsigned long uint32, ulong, ULONG;
//---------------------------------------------------------------------------
sbit A0=P3^2;
sbit _RES=P3^0;
sbit _WR=P3^1;
sbit _LE=P3^6;
sbit _CS=P3^3;
//---------------------------------------------------------------------------
void Delay10ms(UINT t);
void W_COM(UCHAR dat);
void 知宽W_DATA1(UCHAR dat);
void W_DATA2(UCHAR dat1, UCHAR dat2);
void Init(void);
void ILI9320_HSD24_Initial(void);
void LCD_CtrlWrite_ILI9320(UINT com, UINT dat);
void Edge(void);
void Test(void);
void Clear(void);
void Full(void);
void Red(void);
void Green(void);
void Blue(void);
void RGBMix(void);
void Bar(void);
void Show(UINT sx, UINT ex, UINT sy, UINT ey, UINT dat);
void SetShowArea(UINT sx, UINT ex, UINT sy, UINT ey);
//void ShowPic(UCHAR* ppic, UCHAR size, UCHAR ystart, UCHAR xstart);
//---------------------------------------------------------------------------
void main(void)
{
_LE = 0;
_CS = 0;
ILI9320_HSD24_Initial();
while(1)
{
Full();
Delay10ms(400);
Clear();
Delay10ms(400);
Red();
Delay10ms(400);
Green();
Delay10ms(400);
Blue();
Delay10ms(400);
/*RGBMix();
Delay10ms(400);
Bar();
Delay10ms(400);*/
}
}
//---------------------------------------------------------------------------
void Delay10ms(UINT t)
{
UCHAR i;
while( t > 0 )
{
t--;
for ( i = 0; i < 255; i++ )
;
}
}
//---------------------------------------------------------------------------
void W_COM(UCHAR dat)
{
A0 = 0;
_LE = 1;
P1 = 0x00;
_LE = 0;
P1 = dat;
_WR = 0;
_WR = 1;
}
//---------------------------------------------------------------------------
void W_DATA1(UCHAR dat)
{
A0 = 1;
P1 = dat;
_WR = 0;
_WR = 1;
}
//---------------------------------------------------------------------------
void W_DATA2(UCHAR dat1, UCHAR dat2)
{
A0 = 1;
_LE = 1;
P1 = dat1;
_LE = 0;
P1 = dat2;
_WR = 0;
_WR = 1;
}
//---------------------------------------------------------------------------
void Init(void)
{
_RES = 1;
Delay10ms(100);
_RES = 0;
Delay10ms(100);
_RES = 1;
/*W_COM(0xE5);
W_DATA2(0x80, 0x00);*/
W_COM(0x00);
W_DATA2(0x00, 0x01);
Delay10ms(10);
W_COM(0x01);
W_DATA2(0x01, 0x00);
W_COM(0x02);
W_DATA2(0x07, 0x00);
W_COM(0x03);
W_DATA2(0x10, 0x30);
//W_DATA2(0x0030);
W_COM(0x04);
W_DATA2(0x00, 0x00);
W_COM(0x08);
W_DATA2(0x02, 0x02);
W_COM(0x09);
W_DATA2(0x00, 0x00);
W_COM(0x0A);
W_DATA2(0x00, 0x00);
W_COM(0x0C);
W_DATA2(0x00, 0x00);
W_COM(0x0D);
W_DATA2(0x00, 0x00);
W_COM(0x0F);
W_DATA2(0x00, 0x00);
W_COM(0x10);
W_DATA2(0x00, 0x00);
W_COM(0x11);
W_DATA2(0x00, 0x07);
W_COM(0x12);
W_DATA2(0x00, 0x00);
W_COM(0x13);
W_DATA2(0x00, 0x00);
Delay10ms(100);
W_COM(0x10);
W_DATA2(0x17, 0xB0);
W_COM(0x11);
W_DATA2(0x00, 0x37);
Delay10ms(100);
W_COM(0x12);
W_DATA2(0x01, 0x3A);
Delay10ms(100);
W_COM(0x13);
W_DATA2(0x16, 0x00);
W_COM(0x29);
W_DATA2(0x00, 0x0C);
Delay10ms(100);
W_COM(0x20);
W_DATA2(0x00, 0x00);
W_COM(0x21);
W_DATA2(0x00, 0x00);
W_COM(0x30);
W_DATA2(0x05, 0x04);
W_COM(0x31);
W_DATA2(0x07, 0x03);
W_COM(0x32);
W_DATA2(0x07, 0x02);
W_COM(0x35);
W_DATA2(0x01, 0x01);
W_COM(0x36);
W_DATA2(0x0A, 0x1F);
W_COM(0x37);
W_DATA2(0x05, 0x04);
W_COM(0x38);
W_DATA2(0x00, 0x03);
W_COM(0x39);
W_DATA2(0x07, 0x06);
W_COM(0x3C);
W_DATA2(0x07, 0x07);
W_COM(0x3D);
W_DATA2(0x09, 0x1F);
W_COM(0x50);
W_DATA2(0x00, 0x00);
W_COM(0x51);
W_DATA2(0x00, 0xEF);
W_COM(0x52);
W_DATA2(0x00, 0x00);
W_COM(0x53);
W_DATA2(0x01, 0x3F);
W_COM(0x60);
W_DATA2(0x27, 0x00);
W_COM(0x61);
W_DATA2(0x00, 0x01);
W_COM(0x6A);
W_DATA2(0x00, 0x00);
W_COM(0x80);
W_DATA2(0x00, 0x00);
W_COM(0x81);
W_DATA2(0x00, 0x00);
W_COM(0x82);
W_DATA2(0x00, 0x00);
W_COM(0x83);
W_DATA2(0x00, 0x00);
W_COM(0x84);
W_DATA2(0x00, 0x00);
W_COM(0x85);
W_DATA2(0x00, 0x00);
W_COM(0x90);
W_DATA2(0x00, 0x10);
W_COM(0x92);
W_DATA2(0x00, 0x00);
W_COM(0x93);
W_DATA2(0x00, 0x03);
W_COM(0x95);
W_DATA2(0x01, 0x10);
W_COM(0x97);
W_DATA2(0x00, 0x00);
W_COM(0x98);
W_DATA2(0x00, 0x00);
W_COM(0x07);
W_DATA2(0x01, 0x73);
}
//---------------------------------------------------------------------------
void SetShowArea(UINT sx, UINT ex, UINT sy, UINT ey)
{
W_COM(0x50);
W_DATA2(0, sx);
W_COM(0x51);
W_DATA2(0, ex);
W_COM(0x52);
W_DATA2(sy/256, sy%256);
W_COM(0x53);
W_DATA2(ey/256, ey%256);
}
//---------------------------------------------------------------------------
void Clear(void)
{
Show(0x0000, 0x00EF, 0x0000, 0x013F, 0x0000);
}
//---------------------------------------------------------------------------
void Full(void)
{
Show(0x0000, 0x00EF, 0x0000, 0x013F, 0xFFFF);
}
//---------------------------------------------------------------------------
void Red(void)
{
Show(0x0000, 0x00EF, 0x0000, 0x013F, 0xF800);
}
//---------------------------------------------------------------------------
void Green(void)
{
Show(0x0000, 0x00EF, 0x0000, 0x013F, 0x07E0);
}
//---------------------------------------------------------------------------
void Blue(void)
{
Show(0x0000, 0x00EF, 0x0000, 0x013F, 0x001F);
}
//---------------------------------------------------------------------------
void RGBMix(void)
{
Show(0x0000, 0x00EF, 0x0000, 0x013F, 0xFFE0);
Delay10ms(400);
Show(0x0000, 0x00EF, 0x0000, 0x013F, 0x07FF);
Delay10ms(400);
Show(0x0000, 0x00EF, 0x0000, 0x013F, 0xF81F);
Delay10ms(400);
Clear();
/*
Show(0x00, 0x3F, 0x00, 0x34, 0xFF, 0xE0);
Show(0x00, 0x3F, 0x35, 0x6A, 0x07, 0xFF);
Show(0x00, 0x3F, 0x6B, 0x9F, 0xF8, 0x1F);
Show(0x40, 0x7F, 0x00, 0x34, 0xF8, 0x00);
Show(0x40, 0x7F, 0x35, 0x6A, 0x07, 0xE0);
Show(0x40, 0x7F, 0x6B, 0x9F, 0x00, 0x1F);*/
}
//---------------------------------------------------------------------------
void Bar(void)
{
Clear();
/*
Show(0x1F, 0x5F, 0x1A, 0x35, 0xF8, 0x00);
Show(0x1F, 0x5F, 0x50, 0x6B, 0x07, 0xE0);
Show(0x1F, 0x5F, 0x86, 0x9F, 0x00, 0x1F); */
}
//---------------------------------------------------------------------------
void Show(UINT sx, UINT ex, UINT sy, UINT ey, UINT dat)
{
UINT x, y, i, j;
SetShowArea(sx, ex, sy, ey);
x = ex - sx;
y = ey - sy;
W_COM(0x22);
for ( i = 0; i <= y; i++ )
for ( j = 0; j <= x; j++ )
W_DATA2(dat/256, dat%256);
}
//---------------------------------------------------------------------------
void ILI9320_HSD24_Initial(void)
{
// VCI=2.8V
//************* Reset LCD Driver ****************//
_RES = 1;
Delay10ms(1); // Delay 1ms
_RES = 0;
Delay10ms(10); // Delay 10ms // This delay time is necessary
_RES = 1;
Delay10ms(50); // Delay 50 ms
//************* Start Initial Sequence **********//
LCD_CtrlWrite_ILI9320(0x00E5, 0x8000); // Set the internal vcore voltage
LCD_CtrlWrite_ILI9320(0x0000, 0x0001); // Start internal OSC.
LCD_CtrlWrite_ILI9320(0x0001, 0x0100); // set SS and SM bit
LCD_CtrlWrite_ILI9320(0x0002, 0x0700); // set 1 line inversion
LCD_CtrlWrite_ILI9320(0x0003, 0x1030); // set GRAM write direction and BGR=1.
LCD_CtrlWrite_ILI9320(0x0004, 0x0000); // Resize register
LCD_CtrlWrite_ILI9320(0x0008, 0x0202); // set the back porch and front porch
LCD_CtrlWrite_ILI9320(0x0009, 0x0000); // set non-display area refresh cycle ISC[3:0]
LCD_CtrlWrite_ILI9320(0x000A, 0x0000); // FMARK function
LCD_CtrlWrite_ILI9320(0x000C, 0x0000); // RGB interface setting
LCD_CtrlWrite_ILI9320(0x000D, 0x0000); // Frame marker Position
LCD_CtrlWrite_ILI9320(0x000F, 0x0000); // RGB interface polarity
//*************Power On sequence ****************//
LCD_CtrlWrite_ILI9320(0x0010, 0x0000); // SAP, BT[3:0], AP, DSTB, SLP, STB
LCD_CtrlWrite_ILI9320(0x0011, 0x0000); // DC1[2:0], DC0[2:0], VC[2:0]
LCD_CtrlWrite_ILI9320(0x0012, 0x0000); // VREG1OUT voltage
LCD_CtrlWrite_ILI9320(0x0013, 0x0000); // VDV[4:0] for VCOM amplitude
Delay10ms(200); // Dis-charge capacitor power voltage
LCD_CtrlWrite_ILI9320(0x0010, 0x17B0); // SAP, BT[3:0], AP, DSTB, SLP, STB
LCD_CtrlWrite_ILI9320(0x0011, 0x0037); // DC1[2:0], DC0[2:0], VC[2:0]
Delay10ms(50); // Delay 50ms
LCD_CtrlWrite_ILI9320(0x0012, 0x013A); // VREG1OUT voltage
Delay10ms(50); // Delay 50ms
LCD_CtrlWrite_ILI9320(0x0013, 0x1C00); // VDV[4:0] for VCOM amplitude
LCD_CtrlWrite_ILI9320(0x0029, 0x000A); // VCM[4:0] for VCOMH
Delay10ms(50);
LCD_CtrlWrite_ILI9320(0x0020, 0x0000); // GRAM horizontal Address
LCD_CtrlWrite_ILI9320(0x0021, 0x0000); // GRAM Vertical Address
// ----------- Adjust the Gamma Curve ----------//
LCD_CtrlWrite_ILI9320(0x0030, 0x0007);
LCD_CtrlWrite_ILI9320(0x0031, 0x0203);
LCD_CtrlWrite_ILI9320(0x0032, 0x0001);
LCD_CtrlWrite_ILI9320(0x0035, 0x0007);
LCD_CtrlWrite_ILI9320(0x0036, 0x0407);
LCD_CtrlWrite_ILI9320(0x0037, 0x0607);
LCD_CtrlWrite_ILI9320(0x0038, 0x0106);
LCD_CtrlWrite_ILI9320(0x0039, 0x0007);
LCD_CtrlWrite_ILI9320(0x003C, 0x0007);
LCD_CtrlWrite_ILI9320(0x003D, 0x001E);
//------------------ Set GRAM area ---------------//
LCD_CtrlWrite_ILI9320(0x0050, 0x0000); // Horizontal GRAM Start Address
LCD_CtrlWrite_ILI9320(0x0051, 0x00EF); // Horizontal GRAM End Address
LCD_CtrlWrite_ILI9320(0x0052, 0x0000); // Vertical GRAM Start Address
LCD_CtrlWrite_ILI9320(0x0053, 0x013F); // Vertical GRAM Start Address
LCD_CtrlWrite_ILI9320(0x0060, 0x2700); // Gate Scan Line
LCD_CtrlWrite_ILI9320(0x0061, 0x0001); // NDL,VLE, REV
LCD_CtrlWrite_ILI9320(0x006A, 0x0000); // set scrolling line
//-------------- Partial Display Control ---------//
LCD_CtrlWrite_ILI9320(0x0080, 0x0000);
LCD_CtrlWrite_ILI9320(0x0081, 0x0000);
LCD_CtrlWrite_ILI9320(0x0082, 0x0000);
LCD_CtrlWrite_ILI9320(0x0083, 0x0000);
LCD_CtrlWrite_ILI9320(0x0084, 0x0000);
LCD_CtrlWrite_ILI9320(0x0085, 0x0000);
//-------------- Panel Control -------------------//
LCD_CtrlWrite_ILI9320(0x0090, 0x0010);
LCD_CtrlWrite_ILI9320(0x0092, 0x0000);
LCD_CtrlWrite_ILI9320(0x0093, 0x0003);
LCD_CtrlWrite_ILI9320(0x0095, 0x0110);
LCD_CtrlWrite_ILI9320(0x0097, 0x0000);
LCD_CtrlWrite_ILI9320(0x0098, 0x0000);
LCD_CtrlWrite_ILI9320(0x0007, 0x0173); // 262K color and display ON
}
//---------------------------------------------------------------------------
void LCD_CtrlWrite_ILI9320(UINT com, UINT dat)
{
W_COM( com&0xFF );
W_DATA2( dat>>8, dat&0xFF );
}