?? tft_lcd.c
字號:
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <avr/interrupt.h>
#include <string.h>
#include "TFT_LCD.h"
#include "portBit.h"
#include "mydelay.h"
// 作者:Jacky.L 13430733249
// 僅供學(xué)習(xí)使用.未經(jīng)本人同意不得任意轉(zhuǎn)載
// 請支持原創(chuàng),謝謝!
/* ------
VCC 22 --| |--1 GND
VCC 21 --| |--2 GND
VCC 20 --| |--3 GND
VCCIO 19 --| |--4 #RST
VCCIO 18 --| |--5 NC
D0 17 --| |--6 #RD
D1 16 --| |--7 #WR
D2 15 --| |--8 #CS
D3 14 --| |--9 RS
D4 13 --| |--10 D7
D5 12 --| |--11 D6
------
VCC :2.6~3.3V
VCCIO :1.6~3.3V */
/*
void DelayUs(unsigned int t)
{
t+=170;
while(--t);
}
void DelayMs(unsigned int t)
{
unsigned char i,j;
while(--t)
{
j=8;
while(--j)
while(--i);
}
}*/
//寫寄存器地址函數(shù)
void LCD_WriteRegister(unsigned char index)
{
L(CTL_PORT,LCD_RS);
L(CTL_PORT,LCD_CS);
DATA_PORT = index;
L(CTL_PORT,LCD_WR );
H(CTL_PORT,LCD_WR );
H(CTL_PORT,LCD_CS );
// LCD_RS = 0;
}
//寫8位數(shù)據(jù)函數(shù)
void LCD_WriteByte(unsigned char pd)
{
// DelayUs(10);
H(CTL_PORT,LCD_RS);
L(CTL_PORT,LCD_CS);
DATA_PORT = pd;
L(CTL_PORT,LCD_WR );
H(CTL_PORT,LCD_WR );
H(CTL_PORT,LCD_CS );
}
//寫寄存器數(shù)據(jù)函數(shù)
//輸入:dbw 數(shù)據(jù)位數(shù),1為16位,0為8位。
void LCD_WriteCommand(unsigned char dbw,unsigned char index,unsigned int val)
{
L(CTL_PORT,LCD_RS);
L(CTL_PORT,LCD_CS);
DATA_PORT = index;
L(CTL_PORT,LCD_WR );
H(CTL_PORT,LCD_WR );
H(CTL_PORT,LCD_CS );
DelayUs(1);
if(dbw)
{
H(CTL_PORT,LCD_RS);
L(CTL_PORT,LCD_CS);
DATA_PORT = (unsigned char)(val>>8);
L(CTL_PORT,LCD_WR );
H(CTL_PORT,LCD_WR );
H(CTL_PORT,LCD_CS );
}
DelayUs(1);
H(CTL_PORT,LCD_RS);
L(CTL_PORT,LCD_CS);
DATA_PORT = (unsigned char)val;
L(CTL_PORT,LCD_WR );
H(CTL_PORT,LCD_WR );
H(CTL_PORT,LCD_CS );
}
//寫16位數(shù)據(jù)函數(shù)
void LCD_WriteWord(unsigned int val)
{
H(CTL_PORT,LCD_RS);
L(CTL_PORT,LCD_CS);
DATA_PORT = (unsigned char)(val>>8);
L(CTL_PORT,LCD_WR );
H(CTL_PORT,LCD_WR );
//H(CTL_PORT,LCD_CS );
//H(CTL_PORT,LCD_RS);
//L(CTL_PORT,LCD_CS);
DATA_PORT = (unsigned char)val;
L(CTL_PORT,LCD_WR );
H(CTL_PORT,LCD_WR );
H(CTL_PORT,LCD_CS );
}
//初始化函數(shù)
void LCD_Init()
{
DATA_PORT_OUT;
CTL_PORT_OUT;
CTL_PORT_H;
L(CTL_PORT,LCD_RST);
DelayMs(200);
H(CTL_PORT,LCD_RST);
DelayMs(200);
//initializing funciton 1
DelayUs(10);
LCD_WriteRegister(0xA1);
DelayUs(16);
LCD_WriteByte(0x00);
DelayUs(90);
LCD_WriteRegister(0xA0);
DelayUs(10);
LCD_WriteByte(0x00);
DelayUs(10);
LCD_WriteCommand(0,0x70,0xC8);
DelayMs(20);
LCD_WriteCommand(0,0x72,0xA3);
DelayUs(10);
LCD_WriteCommand(0,0x73,0x04);
DelayUs(10);
LCD_WriteCommand(0,0x75,0x45);
DelayUs(10);
LCD_WriteCommand(0,0x76,0x23);
DelayUs(10);
LCD_WriteCommand(0,0x77,0x08);
DelayUs(10);
LCD_WriteCommand(0,0x78,0x08);
DelayUs(10);
LCD_WriteCommand(0,0x79,0x00);
DelayUs(10);
LCD_WriteCommand(0,0x7F,0xF0);
DelayUs(10);
LCD_WriteCommand(0,0x71,0x81); //
DelayMs(2);
LCD_WriteCommand(0,0x0D,0x23);
DelayUs(10);
LCD_WriteCommand(0,0x11,0x00);
DelayUs(10);
LCD_WriteCommand(0,0x12,0x00);
DelayUs(10);
LCD_WriteCommand(0,0x21,0x37);
DelayUs(10);
LCD_WriteCommand(0,0x22,0x02);
DelayUs(10);
LCD_WriteCommand(0,0x23,0x24);
DelayUs(10);
DelayUs(10);
LCD_WriteCommand(0,0x24,0x13);
DelayUs(10);
LCD_WriteCommand(0,0x25,0x0A);
DelayUs(10);
LCD_WriteCommand(0,0x26,0x82);
DelayUs(10);
LCD_WriteCommand(0,0x27,0x01);
DelayUs(10);
LCD_WriteCommand(0,0x1E,0x25);
DelayUs(10);
LCD_WriteCommand(0,0x1F,0x59);
DelayUs(10);
//GAMMA設(shè)置
LCD_WriteCommand(1,0x30,0x0777);
DelayUs(10);
LCD_WriteCommand(1,0x31,0x0444);
DelayUs(10);
LCD_WriteCommand(1,0x32,0x0555);
DelayUs(10);
LCD_WriteCommand(1,0x33,0x0444);
DelayUs(10);
LCD_WriteCommand(1,0x34,0x0333);
DelayUs(10);
LCD_WriteCommand(1,0x35,0x0333);
DelayUs(10);
LCD_WriteCommand(1,0x36,0x0333);
DelayUs(10);
LCD_WriteCommand(1,0x37,0x0333);
DelayUs(10);
LCD_WriteCommand(1,0x38,0x0444);
DelayUs(10);
LCD_WriteCommand(1,0x39,0x0555);
DelayUs(10);
LCD_WriteCommand(1,0x3A,0x0666);
DelayUs(10);
LCD_WriteCommand(1,0x3B,0x0666);
DelayUs(10);
LCD_WriteCommand(1,0x3C,0x0777);
DelayUs(10);
LCD_WriteCommand(1,0x3D,0x0777);
DelayUs(10);
LCD_WriteCommand(1,0x3E,0x0777);
DelayUs(10);
LCD_WriteCommand(1,0x3F,0x0777);
DelayUs(10);
LCD_WriteCommand(1,0x40,0x0777);
DelayUs(10);
LCD_WriteCommand(1,0x41,0x0777);
DelayUs(10);
LCD_WriteCommand(1,0x42,0x0777);
DelayUs(10);
LCD_WriteCommand(1,0x43,0x0777);
DelayUs(10);
LCD_WriteCommand(1,0x44,0x0777);
DelayUs(10);
LCD_WriteCommand(1,0x45,0x0777);
DelayUs(10);
LCD_WriteCommand(1,0x46,0x0777);
DelayUs(10);
LCD_WriteCommand(1,0x47,0x0777);
DelayUs(10);
LCD_WriteCommand(1,0x48,0x0777);
DelayUs(10);
LCD_WriteCommand(1,0x49,0x0777);
DelayUs(10);
LCD_WriteCommand(1,0x4A,0x0777);
DelayUs(10);
LCD_WriteCommand(1,0x4B,0x0777);
DelayUs(10);
LCD_WriteCommand(1,0x4C,0x0777);
DelayUs(10);
LCD_WriteCommand(1,0x4D,0x0666);
DelayUs(10);
LCD_WriteCommand(1,0x4E,0x0666);
DelayUs(10);
LCD_WriteCommand(1,0x4F,0x0666);
DelayUs(400);
LCD_WriteCommand(0,0x00,0x04); //掃描方向控制
DelayUs(10);
LCD_WriteCommand(0,0x01,0x07); //掃描方向控制
DelayUs(10);
LCD_WriteCommand(0,0x02,0x00); //X
LCD_WriteCommand(1,0x03,0x0000); //Y
//面板大小設(shè)置
LCD_WriteCommand(0,0x04,0xEF); //結(jié)束列數(shù)(0~239) 0xEF=239
LCD_WriteCommand(1,0x05,0x013F); //結(jié)束行數(shù)(0~319) 0x13F=319
//窗口設(shè)置
LCD_WriteCommand(0,0x06,0x00); //水平起始位置
LCD_WriteCommand(1,0x07,0x0000); //垂直起始位置
LCD_WriteCommand(0,0x08,0xEF); //水平結(jié)束位置
LCD_WriteCommand(1,0x09,0x013F); //垂直結(jié)束位置
DelayUs(10);
LCD_WriteCommand(0,0x0A,0x00);
DelayUs(10);
LCD_WriteCommand(0,0x0B,0x00);
DelayUs(10);
LCD_WriteCommand(0,0x0C,0x00);
DelayUs(10);
LCD_WriteCommand(0,0x14,0x00);
DelayUs(10);
LCD_WriteCommand(0,0x15,0x00);
DelayUs(10);
LCD_WriteCommand(0,0x16,0x00);
DelayUs(10);
LCD_WriteCommand(1,0x17,0x01FF);
DelayUs(10);
LCD_WriteCommand(1,0x18,0x01FF);
DelayUs(10);
LCD_WriteCommand(0,0x13,0x00);
DelayUs(10);
LCD_WriteCommand(1,0x19,0x01FF);
DelayUs(10);
LCD_WriteCommand(1,0x1B,0x01FF);
DelayUs(10);
LCD_WriteCommand(1,0x1C,0x01FF);
DelayUs(10);
LCD_WriteCommand(1,0x1A,0x01FF);
DelayUs(10);
LCD_WriteCommand(0,0x1D,0x0E);
DelayUs(10);
LCD_WriteCommand(0,0x10,0x06); //開顯示
LCD_WriteRegister(0x0E);
DelayUs(100);
}
void LCD_Start_Window(void)
{
LCD_WriteCommand(0,0x2,0); //0-239
LCD_WriteCommand(1,0x3,0); //0-319
LCD_WriteCommand(0,0x04,239); //結(jié)束列數(shù)(0~239)
LCD_WriteCommand(1,0x05,319); //結(jié)束行數(shù)(0~319)
LCD_WriteRegister(0x0E);
H(CTL_PORT,LCD_RS);
L(CTL_PORT,LCD_CS);
}
void LCD_SetSCRN(unsigned int color)
{
unsigned int n,num;
/*
LCD_Start_Window();
for(n=0;n<320;n++)
{
for(num=0;num<240;num++)
{
DATA_PORT = 0;
L(CTL_PORT,LCD_WR );
H(CTL_PORT,LCD_WR );
DATA_PORT = 0x1f;
L(CTL_PORT,LCD_WR );
H(CTL_PORT,LCD_WR );
}
}*/
LCD_WriteCommand(0,0x02,0); //X
LCD_WriteCommand(1,0x03,0); //Y
LCD_WriteCommand(0,0x04,239); //結(jié)束列數(shù)(0~239)
LCD_WriteCommand(1,0x05,319); //結(jié)束行數(shù)(0~319)
LCD_WriteRegister(0x0E); //寫顯示數(shù)據(jù)區(qū)
for(n=0;n<320;n++)
{
for(num=0;num<240;num++)
{
LCD_WriteWord(color);
}
}
}
/*********************************************
//畫點(diǎn)函數(shù)
//(x,y)點(diǎn)的坐標(biāo)量,color 點(diǎn)的顏色
**********************************************/
void LCD_Point(unsigned char x, unsigned int y, unsigned int color)
{
LCD_WriteCommand(0,0x02,x); //X
LCD_WriteCommand(1,0x03,y); //Y
LCD_WriteCommand(0,0x04,x); //結(jié)束列數(shù)(0~239)
LCD_WriteCommand(1,0x05,y); //結(jié)束行數(shù)(0~319)
LCD_WriteRegister(0x0E); //寫顯示數(shù)據(jù)區(qū)
LCD_WriteWord(color);
}
/**********************************************************
//畫橫線函數(shù)
//(x,y)開始點(diǎn)的坐標(biāo)量,color 線的顏色, length 橫線長度
************************************************************/
void LCD_HLine(unsigned char x, unsigned int y, unsigned char length, unsigned int color)
{
LCD_WriteCommand(0,0x02,x); //X
LCD_WriteCommand(1,0x03,y); //Y
LCD_WriteCommand(0,0x04,x+length-1); //結(jié)束列數(shù)(0~239)
LCD_WriteCommand(1,0x05,y); //結(jié)束行數(shù)(0~319)
LCD_WriteRegister(0x0E); //寫顯示數(shù)據(jù)區(qū)
do{
LCD_WriteWord(color); // 逐點(diǎn)顯示,描出水平線
length--;
}while(length);
}
/**********************************************************
//畫豎線函數(shù)
//(x,y)開始點(diǎn)的坐標(biāo)量,color 線的顏色, high 豎線高度
************************************************************/
/*
void LCD_RLine(unsigned char x, unsigned int y, unsigned int high, unsigned int color)
{
LCD_WriteCommand(0,0x02,x); //X
LCD_WriteCommand(1,0x03,y); //Y
LCD_WriteCommand(0,0x04,x); //結(jié)束列數(shù)(0~239)
LCD_WriteCommand(1,0x05,y+high-1); //結(jié)束行數(shù)(0~319)
LCD_WriteRegister(0x0E); //寫顯示數(shù)據(jù)區(qū)
do{
LCD_WriteWord(color); // 逐點(diǎn)顯示,描出垂直線
high--;
}while(high);
}
*/
/**********************************************************
//顯示圖片函數(shù)
//(x,y)開始點(diǎn)的坐標(biāo)量
//length 圖片長度, high 圖片高度
//pic 圖片數(shù)組的指針
************************************************************/
/*
void LCD_DisPicture(unsigned char x, unsigned int y, unsigned char length, unsigned int high ,const unsigned char *pic)
{
unsigned int temp,tmp=0,num=0;
LCD_WriteCommand(0,0x02,x); //X
LCD_WriteCommand(1,0x03,y); //Y
LCD_WriteCommand(0,0x04,x+length-1); //結(jié)束列數(shù)(0~239)
LCD_WriteCommand(1,0x05,y+high-1); //結(jié)束行數(shù)(0~319)
num=length*high*2;
LCD_WriteRegister(0x0E); //寫顯示數(shù)據(jù)區(qū)
do{
temp=pic[tmp]| pic[tmp+1]<<8;
LCD_WriteWord(temp); // 逐點(diǎn)顯示
tmp+=2;
}while(tmp<num);
}
*/
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -