#include "..\basedefine.h"
#include "lcd.h"
#include "font\font.h"
#include "font\GB1616.h" //16*16汉字字模
u16 BACK_COLOR=ORANGE;
u16 POINT_COLOR=WHITE; //背景色,画笔色
//IO连接
#define LCD_DataBus P3OUT //高8位数据口,8位模式下只使用高8位
#define LCD_DataSEL0 P3SEL0
#define LCD_DataSEL1 P3SEL1
#define LCD_DataREN P3REN
#define LCD_DataDIR P3DIR
#define LCD_CtrlPort P1OUT
#define LCD_CtrlSEL0 P1SEL0
#define LCD_CtrlSEL1 P1SEL1
#define LCD_CtrlREN P1REN
#define LCD_CtrlDIR P1DIR
#define LCD_RS BIT4 //数据/命令切换
#define LCD_WR BIT0 //写控制
#define LCD_RD BIT3 //读控制
#define LCD_CS BIT1 //片选
#define LCD_RST BIT2 //复位
#define LCD_ClrCtrl(CTRL_PORT) LCD_CtrlPort&=~CTRL_PORT;
#define LCD_SetCtrl(CTRL_PORT) LCD_CtrlPort|=CTRL_PORT;
void LCD_WR_DATA(u8 data)
{
// 8080 interface
LCD_ClrCtrl(LCD_CS );
LCD_SetCtrl(LCD_RS );
LCD_SetCtrl(LCD_RD );
LCD_DataBus = data;
LCD_ClrCtrl(LCD_WR );
LCD_SetCtrl(LCD_WR);
LCD_SetCtrl(LCD_CS );
}
void LCD_WR_REG(u8 reg)
{
LCD_SetCtrl(LCD_RD);
LCD_ClrCtrl( LCD_RS );
LCD_ClrCtrl( LCD_CS );
LCD_DataBus = reg;
LCD_ClrCtrl(LCD_WR);
LCD_SetCtrl(LCD_WR);
}
void LCD_Perpheral_Init()
{
//set data port as i/o port ,output, enable pullup res
PJSEL0 = 0x00;
PJSEL1 = 0x00;
PJREN = 0x00;
PJDIR = 0xFF;
PJOUT = 0xFF;
//set data port as i/o port ,output, enable pullup res
LCD_DataSEL0 = 0x00;
LCD_DataSEL1 = 0x00;
LCD_DataREN = 0x00;
LCD_DataDIR = 0xFF;
//set control port as i/o port ,output, enable pullup res
LCD_CtrlSEL0 &= ~(0x1F);
LCD_CtrlSEL1 &= ~(0x1F);
LCD_CtrlREN &= ~(0x1F);
LCD_CtrlDIR |= 0x1F;
LCD_CtrlPort |= 0x1F;
}
void LCD_Init(void)
{
LCD_Perpheral_Init();
//CS0=0;
LCD_SetCtrl(LCD_RST);
delay_ms(100);
LCD_ClrCtrl(LCD_RST);
delay_ms(800);
LCD_SetCtrl(LCD_RST);
delay_ms(800);
//HX8347-A, FOR CMO2.8
LCD_WR_REG(0x46);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x95);
LCD_WR_REG(0x47);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x51);
LCD_WR_REG(0x48);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x00);
LCD_WR_REG(0x49);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x36);
LCD_WR_REG(0x4a);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x11);
LCD_WR_REG(0x4b);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x66);
LCD_WR_REG(0x4c);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x14);
LCD_WR_REG(0x4d);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x77);
LCD_WR_REG(0x4e);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x13);
LCD_WR_REG(0x4f);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x4c);
LCD_WR_REG(0x50);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x46);
LCD_WR_REG(0x51);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x46);
//240x320 window setting
LCD_WR_REG(0x02);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x00);
LCD_WR_REG(0x03);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x00);
LCD_WR_REG(0x04);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x00);
LCD_WR_REG(0x05);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0xef);
LCD_WR_REG(0x06);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x00);
LCD_WR_REG(0x07);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x00);
LCD_WR_REG(0x08);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x01);
LCD_WR_REG(0x09);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x3f);
//Display Setting
LCD_WR_REG(0x01);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x06);
LCD_WR_REG(0x16);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x68);
//LCD_WR_REG(0x16);
//LCD_WR_DATA(0x0048);
LCD_WR_REG(0x18);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x00);
LCD_WR_REG(0x23);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x95);
LCD_WR_REG(0x24);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x95);
LCD_WR_REG(0x25);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0xff);
LCD_WR_REG(0x27);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x06);
LCD_WR_REG(0x28);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x06);
LCD_WR_REG(0x29);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x06);
LCD_WR_REG(0x2a);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x06);
//LCD_WR_REG(0x2b);LCD_WR_DATA(0x0006);
LCD_WR_REG(0x2c);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x06);
LCD_WR_REG(0x2d);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x06);
LCD_WR_REG(0x3a);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x01);
LCD_WR_REG(0x3b);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x00);
LCD_WR_REG(0x3c);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0xf0);
LCD_WR_REG(0x3d);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x00);
delay_ms(50);
LCD_WR_REG(0x35);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x38);
LCD_WR_REG(0x36);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x78);
LCD_WR_REG(0x3e);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x38);
LCD_WR_REG(0x40);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x0f); //VCOMH VCOM1~VCOM6
LCD_WR_REG(0x41);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0xf0);
//Power Supply Setting
LCD_WR_REG(0x19);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x49); // OSCADJ=010000);LCD_WR_DATA( OSD_EN=1
LCD_WR_REG(0x93);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x0c);
delay_ms(20);
//for the setting before power supply startup
LCD_WR_REG(0x20);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x40);
LCD_WR_REG(0x1d);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x07);
LCD_WR_REG(0x1e);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x00);
LCD_WR_REG(0x1f);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x04);
LCD_WR_REG(0x44);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x4d); //VCOMH VCOM1~VCOM6
LCD_WR_REG(0x45);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x11); //VCOM VD0~VD4
delay_ms(10);
//for power supply setting
LCD_WR_REG(0x1c);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x04);
delay_ms(10);
LCD_WR_REG(0x1b);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x18);
delay_ms(10);
LCD_WR_REG(0x1b);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x10);
delay_ms(10);
LCD_WR_REG(0x43);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x80);
delay_ms(10);
//Display ON Setting
LCD_WR_REG(0x90);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x7f);
delay_ms(10);
LCD_WR_REG(0x26);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x04);
delay_ms(10);
LCD_WR_REG(0x26);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x24);
LCD_WR_REG(0x26);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x2c);
delay_ms(10);
LCD_WR_REG(0x26);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x3c);
LCD_WR_REG(0x21);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x00);
LCD_WR_REG(0x22);
}
void LCD_SetArea(u16 stx,u16 sty,u16 endx,u16 endy)
{
//HX8347-A
LCD_WR_REG(0x02);
LCD_WR_DATA(stx>>8);
LCD_WR_REG(0x03);
LCD_WR_DATA(stx);
LCD_WR_REG(0x04);
LCD_WR_DATA(endx>>8);
LCD_WR_REG(0x05);
LCD_WR_DATA(endx);
LCD_WR_REG(0x06);
LCD_WR_DATA(sty>>8);
LCD_WR_REG(0x07);
LCD_WR_DATA(sty);
LCD_WR_REG(0x08);
LCD_WR_DATA(endy>>8);
LCD_WR_REG(0x09);
LCD_WR_DATA(endy);
LCD_WR_REG(0x22);
}
void LCD_DrawPoint(u16 x,u16 y,u16 color)
{
//tft :RRRRRRGGGGGGBBBBBB
//paramiter:RRRRRGGGGGGBBBBB
LCD_SetArea(x,y,x+1,y+1);
//8080 interface
LCD_ClrCtrl(LCD_CS );
LCD_SetCtrl(LCD_RS );
LCD_SetCtrl(LCD_RD );
//color RED
LCD_DataBus = (color>>11)<<3;
LCD_ClrCtrl(LCD_WR );
LCD_SetCtrl(LCD_WR);
//color GREEN
LCD_DataBus = (color>>6) <<3;
LCD_ClrCtrl(LCD_WR );
LCD_SetCtrl(LCD_WR);
//color BLUE
LCD_DataBus = color<<3;
LCD_ClrCtrl(LCD_WR );
LCD_SetCtrl(LCD_WR);
LCD_SetCtrl(LCD_CS );
}
void LCD_FillArea(u16 sx,u16 ex,u16 sy,u16 ey,u16 color)
{
u32 i;
u16 color_R =(color>>11)<<3;
u16 color_G =(color>>5) <<2;
u16 color_B =color<<3;
LCD_SetArea(sx,sy,ex-1,ey-1);
LCD_ClrCtrl(LCD_CS );
LCD_SetCtrl(LCD_RS );
LCD_SetCtrl(LCD_RD );
for(i = 0 ;i <(u32) (ex-sx)*(ey-sy) ; i ++)
{
//color RED
LCD_DataBus = color_R; //High 6bit Is active
LCD_ClrCtrl(LCD_WR );
LCD_SetCtrl(LCD_WR);
//color GREEN
LCD_DataBus = color_G;
LCD_ClrCtrl(LCD_WR );
LCD_SetCtrl(LCD_WR);
//color BLUE
LCD_DataBus = color_B;
LCD_ClrCtrl(LCD_WR );
LCD_SetCtrl(LCD_WR);
}
LCD_SetCtrl(LCD_CS );
}
void LCD_Clear(u16 color)
{
u32 i;
u16 c
- 1
- 2
前往页