📄 ic-ili9320-8bit.c
字号:
//---------------------------------------------------------------------------
// Target: C8051F12X
// Tool chain: Keil C51 7.50 / Keil EVAL C51
// Controller IC: ILI9320
// Paraller type: 8 bit-8080 interface
// Release 1.0
//-----------------------------------------------------------------------------
#include <c8051F120.h>
#include <math.h>
#include <OSC_init.c>
#include <PORT_init.c>
#include "176x40.h"
#include "240x40.h"
////#include "176x30.h"
#include "15x15.h"
#include "text.h"
unsigned char code CLR[1] = {0xff};
//-----------------------------------------------------------------------------
// 16-bit SFR Definitions for 'F12x
//-----------------------------------------------------------------------------
sfr16 RCAP3 = 0xCA; // Timer3 reload value
sfr16 TMR3 = 0xCC; // Timer3 counter
//-----------------------------------------------------------------------------
// Global Constants
//-----------------------------------------------------------------------------
//define the LCM pixel
#define DisplayCol 320
#define DisplaySeg 240
//define LCD control interface
sbit _WR = P4^7;
sbit _RD = P4^6;
sbit _CS1 = P1^0;
sbit RS = P1^1;
sbit _RST = P1^2;
//define Touch panel control interface
sbit TP_CS = P1^3;
sbit TP_DIN = P1^4;
sbit TP_DCLK = P1^5;
sbit TP_IRQ = P1^6;
sbit TP_DOUT = P1^7;
sbit TP_BUSY = P2^7;
//define external flash memory interface
sbit _FLASH_CS=P4^5;//4
sbit _FLASH_B4=P4^3;
sbit _FLASH_B3=P4^2;
sbit _FLASH_B2=P4^1;
sbit _FLASH_B1=P4^0;
#define XBYTE ((unsigned char volatile xdata *) 0)
#define SYSCLK 10000000 // approximate SYSCLK frequency in Hz
#define DataPort_H P3
#define DataPort_L P7
#define DATA_BUS XBYTE[0x0000]
#define BLOCK P4
//********KEYs Defined******
sbit TP_TEST_KEY = P2^2;
sbit STOP_KEY = P2^6;
sbit NEXTPHOTO_KEY = P2^5;
//sbit LED = P1^6;
long unsigned int x_cor=0;
long unsigned int y_cor=0;
unsigned char case_value = 0;
unsigned int d_color = 0;
//unsigned int page,seg;
unsigned int pointer;
unsigned long int adr;
unsigned char blocks=0,clear=0;
unsigned char xdata *ptr;
//-----------------------------------------------------------------------------
// Function Prototypes
//-----------------------------------------------------------------------------
//void Timer3_Init (int counts);
void delay(unsigned int param);
void LCD_Index(unsigned char index);
void LCD_DataWrite(unsigned int set_db);
void LCD_CmdWrite(unsigned char index_h,unsigned char index_l,unsigned int set_db_h,unsigned int set_db_l);
void LCD_Reset(void);
void Power_set(void);
void LCD_Initial1(void);
void Gamma_Control(void);
void LCD_Initial2(void) ;
void Display_ON(void);
void lcd_int(void);
void ADS7846_init();
void tp_test();
void standard_window(unsigned char x, unsigned int y, unsigned char dx, unsigned int dy, unsigned char *ptr);
void WriteBmp(unsigned char pages);
void Checker(unsigned int param1,unsigned int param2); //Full on,off,checkerboard
void WriteBoundary(void); //write boundary
//-----------------------------------------------------------------------------
// main() Routine
//-----------------------------------------------------------------------------
void main (void)
{ unsigned char step=0;
// disable watchdog timer
WDTCN = 0xde;
WDTCN = 0xad;
OSC_init();
PORT_Init (); // Initialize crossbar and GPIO
lcd_int();
ADS7846_init();
step=0;
while(1)
{
if((TP_TEST_KEY==0)){ Checker(0xff,0xff);WriteBoundary();delay(8000);Checker(0xf8,0x0);delay(8000);Checker(0x07,0xe0);delay(8000);Checker(0x00,0x1f);delay(8000);WriteBmp(0);delay(8000);Checker(0xff,0xff);} //all on
else { Checker(0xff,0xff);WriteBoundary();delay(8000);Checker(0xf8,0x0);delay(8000);Checker(0x07,0xe0);delay(8000);Checker(0x00,0x1f);delay(8000);WriteBmp(0);delay(8000);Checker(0xff,0xff);delay(8000);tp_test();}
}
}
//----------------------------------------------------------------------------
void delay(unsigned int param)
{ unsigned int i;
for(;param>0;param--)
for(i=0;i<960;i++);
}
void LCD_Index(unsigned char index)
{ SFRPAGE=CONFIG_PAGE;
RS=0; DATA_BUS=index; RS=1;
}
void LCD_DataWrite(unsigned int set_db) //80-16bit
{ // DataPort_H=set_db>>8;
RS=1; DATA_BUS=set_db; RS=0;
}
void LCD_CmdWrite(unsigned char index_h,unsigned char index_l,unsigned int set_db_h,unsigned int set_db_l)
{ RS=0;
LCD_Index(index_h);
LCD_Index(index_l);
RS=1;
LCD_DataWrite(set_db_h);
LCD_DataWrite(set_db_l);
}
void LCD_Reset(void)
{ P4=0;
_CS1=0;
_RST=1;
_RD=1;
delay(10);
_RST=0;
delay(60);
_RST=1;
delay(10);
}
void lcd_int(void) //ILI9220
{ LCD_Reset();
// display custom _(comment) seting
LCD_CmdWrite(0x00,0x00, 0x00,0x01);
LCD_CmdWrite(0x00,0x01, 0x01,0x00);
LCD_CmdWrite(0x00,0x02, 0x05,0x00);
LCD_CmdWrite(0x00,0x03, 0x11,0x30);
LCD_CmdWrite(0x00,0x04, 0x00,0x00);
LCD_CmdWrite(0x00,0x08, 0x02,0x02);
// display voltage seting
LCD_CmdWrite(0x00,0x09, 0x00,0x00);
LCD_CmdWrite(0x00,0x0a, 0x00,0x00);
LCD_CmdWrite(0x00,0x0c, 0x00,0x00);
LCD_CmdWrite(0x00,0x0d, 0x00,0x00);//LCD_CmdWrite(0x00,0x13, 0x32,0x1c)
LCD_CmdWrite(0x00,0x0f, 0x00,0x00);
LCD_CmdWrite(0x00,0x10, 0x00,0x00);
LCD_CmdWrite(0x00,0x11, 0x00,0x01);
// ARM adress setting
LCD_CmdWrite(0x00,0x12, 0x00,0x00);
LCD_CmdWrite(0x00,0x13, 0x00,0x00);
LCD_CmdWrite(0x00,0x10, 0x14,0xb0);
LCD_CmdWrite(0x00,0x11, 0x00,0x01);
// display on setting
LCD_CmdWrite(0x00,0x12, 0x01,0x38);
LCD_CmdWrite(0x00,0x13, 0x18,0x00);
LCD_CmdWrite(0x00,0x17, 0x00,0x01);
LCD_CmdWrite(0x00,0x29, 0x00,0x18);
LCD_CmdWrite(0x00,0x20, 0x00,0x00);
LCD_CmdWrite(0x00,0x21, 0x00,0x00);
LCD_CmdWrite(0x00,0x2b, 0x01,0x30);
LCD_CmdWrite(0x00,0x50, 0x00,0x00);
LCD_CmdWrite(0x00,0x51, 0x00,0xef);
LCD_CmdWrite(0x00,0x52, 0x00,0x00);
LCD_CmdWrite(0x00,0x53, 0x01,0x3f);
LCD_CmdWrite(0x00,0x60, 0x27,0x00);
LCD_CmdWrite(0x00,0x61, 0x00,0x05);
LCD_CmdWrite(0x00,0x6a, 0x00,0x00);
LCD_CmdWrite(0x00,0x80, 0x00,0x00);
LCD_CmdWrite(0x00,0x81, 0x00,0x00);
LCD_CmdWrite(0x00,0x82, 0x00,0x00);
LCD_CmdWrite(0x00,0x83, 0x00,0x00);
LCD_CmdWrite(0x00,0x84, 0x00,0x00);
LCD_CmdWrite(0x00,0x85, 0x00,0x00);
LCD_CmdWrite(0x00,0x90, 0x00,0x00);
LCD_CmdWrite(0x00,0x91, 0x00,0x00);
LCD_CmdWrite(0x00,0x92, 0x00,0x00);
LCD_CmdWrite(0x00,0x93, 0x00,0x03);
LCD_CmdWrite(0x00,0x95, 0x00,0x00);
LCD_CmdWrite(0x00,0x97, 0x00,0x00);
LCD_CmdWrite(0x00,0x98, 0x00,0x00);
LCD_CmdWrite(0x00,0x07, 0x01,0x73);
LCD_Index(0x00);
LCD_Index(0x22);
}
void Set_address()
{
LCD_CmdWrite(0x00,0x50, 0x00,0x00);
LCD_CmdWrite(0x00,0x51, 0x00,0xef);
LCD_CmdWrite(0x00,0x52, 0x00,0x00);
LCD_CmdWrite(0x00,0x53, 0x01,0x3f);
LCD_CmdWrite(0x00,0x20, 0x00,0x00);
LCD_CmdWrite(0x00,0x21, 0x00,0x00);
LCD_Index(0x00);
LCD_Index(0x22);
}
//============================================================================
void standard_window(unsigned char x,unsigned int y,unsigned char dx,unsigned int dy,unsigned char *ptr)
{ unsigned int i;
unsigned char j;
unsigned int add_y = y;
long unsigned int k=0;
for(i=0;i<dy;i++)
{
// LCD_CmdWrite(0x00,0x44, (x+dx),x);
// LCD_CmdWrite(0x00,0x45, (y+dy),(add_y));
// LCD_CmdWrite(0x00,0x21, (add_y),x);
// LCD_Index(0x00);
// LCD_Index(0x22);
/* LCD_CmdWrite(0x00,0x50, 0x00,x);
LCD_CmdWrite(0x00,0x51, 0x00,x+dx);
LCD_CmdWrite(0x00,0x52, 0x00,(add_y));
LCD_CmdWrite(0x00,0x53, ((y+dy)-0xff),(y+dy));*/
//LCD_CmdWrite(0x00,0x45, 0xdb,0x00);
LCD_CmdWrite(0x00,0x20, 0x00,x);
LCD_CmdWrite(0x00,0x21, ((add_y)>>8),(add_y));
LCD_Index(0x00);
LCD_Index(0x22);
if(clear==0)
for(j=0;j<dx;j++)
{ DATA_BUS = ptr[k]; k++;
DATA_BUS =ptr[k]; k++;
}
else
for(j=0;j<dx;j++)
{ DATA_BUS = ptr[0];
DATA_BUS =ptr[0];
}
add_y=(add_y+1);
}
}
//============================================================================
void Pixel(unsigned char x, unsigned int y)
{ unsigned char i;
// LCD_CmdWrite(0x00,0x21, (y-1),(x-1));
/* LCD_Index(0x00);
LCD_Index(0x21);
LCD_DataWrite(y-1);
LCD_DataWrite(x-1);*/
// LCD_CmdWrite(0x00,0x44, (x-1),(x-1));
//// LCD_CmdWrite(0x00,0x45, (y-1),(y-1));
// LCD_Index(0x00);
// LCD_Index(0x22);
/* LCD_CmdWrite(0x00,0x50, 0x00,(x-1));
LCD_CmdWrite(0x00,0x51, 0x00,(x-1));
LCD_CmdWrite(0x00,0x52, 0x00,(y-1));
LCD_CmdWrite(0x00,0x53, ((y-1)-0xff),(y-1));
//LCD_CmdWrite(0x00,0x45, 0xdb,0x00);*/
LCD_CmdWrite(0x00,0x20, 0x00,(x-1));
LCD_CmdWrite(0x00,0x21, ((y-1)>>8),(y-1));
LCD_Index(0x00);
LCD_Index(0x22);
for(i=0;i<3;i++)
{ DATA_BUS = d_color;
DATA_BUS = d_color;
}
// LCD_CmdWrite(0x00,0x21, (y),(x-1));
/* LCD_Index(0x00);
LCD_Index(0x21);
LCD_DataWrite(y);
LCD_DataWrite(x-1);*/
// LCD_CmdWrite(0x00,0x44,(x-1),(x-1));
// LCD_CmdWrite(0x00,0x45, (y),(y));
// LCD_Index(0x00);
// LCD_Index(0x22);
/* LCD_CmdWrite(0x00,0x50, 0x00,(x-1));
LCD_CmdWrite(0x00,0x51, 0x00,(x-1));
LCD_CmdWrite(0x00,0x52, 0x00,(y));
LCD_CmdWrite(0x00,0x53, ((y)-0xff),(y));
//LCD_CmdWrite(0x00,0x45, 0xdb,0x00);*/
LCD_CmdWrite(0x00,0x20, 0x00,(x-1));
LCD_CmdWrite(0x00,0x21, ((y)>>8),(y));
LCD_Index(0x00);
LCD_Index(0x22);
for(i=0;i<3;i++)
{ DATA_BUS = d_color;
DATA_BUS = d_color;
}
// LCD_CmdWrite(0x00,0x21, (y+1),(x-1));
/* LCD_Index(0x00);
LCD_Index(0x21);
LCD_DataWrite(y+1);
LCD_DataWrite(x-1);*/
// LCD_CmdWrite(0x00,0x44, (x-1),(x-1));
// LCD_CmdWrite(0x00,0x45, (y+1),(y+1));
// LCD_Index(0x00);
// LCD_Index(0x22);
/* LCD_CmdWrite(0x00,0x50, 0x00,(x-1));
LCD_CmdWrite(0x00,0x51, 0x00,(x-1));
LCD_CmdWrite(0x00,0x52, 0x00,(y+1));
LCD_CmdWrite(0x00,0x53, ((y+1)-0xff),(y+1));*/
//LCD_CmdWrite(0x00,0x45, 0xdb,0x00);
LCD_CmdWrite(0x00,0x20, 0x00,(x-1));
LCD_CmdWrite(0x00,0x21, ((y+1)>>8),(y+1));
LCD_Index(0x00);
LCD_Index(0x22);
for(i=0;i<3;i++)
{ DATA_BUS = d_color;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -