下面是屏幕的一些资料
屏幕主控是ILI9225,分辨率:176*220,16bit并口,262k彩屏
为什么用89c52驱动,因为并口16位,加上CS、RS、WR、RD、RST控制引脚一共需要21个IO口,看了看手头的开发板也就89C52胜任了。
其中:
sbit TFT_RST = P3^3; //复位
sbit TFT_CS = P2^7; //片选
sbit TFT_RS = P2^6; //数据命令选择端
sbit TFT_WR = P2^5; //读写控制
sbit TFT_RD = P3^2; //读写控制
16位并口用P0、P1
main.c
- #include "REG51.H"
- #include "lcd_driver.h"
-
- /****************************************************************************
- *函数名:main
- *输 入:无
- *输 出:无
- *功 能:主函数
- ****************************************************************************/
-
- void main (void)
- {
- TFT_Init(); //初始化TFT
-
- while(1)
- {
- TFT_ClearScreen(BLACK); //刷黑色
- TFT_ClearScreen(BLUE);
- TFT_ClearScreen(RED);
- TFT_ClearScreen(MAGENTA);
- TFT_ClearScreen(GREEN);
- TFT_ClearScreen(CYAN);
- TFT_ClearScreen(YELLOW);
- TFT_ClearScreen(WHITE);
- }
- }
-
-
复制代码
lcd_driver.h
- #ifndef __LCD_DRIVER_H
- #define __LCD_DRIVER_H
-
-
- #include <reg51.h>
-
- //---重定义关键词---//
- #ifndef uchar
- #define uchar unsigned char
- #endif
-
- #ifndef uint
- #define uint unsigned int
- #endif
-
- //---定义使用的IO口---//
- sbit TFT_RST = P3^3; //复位
- sbit TFT_CS = P2^7; //片选
- sbit TFT_RS = P2^6; //数据命令选择端
- sbit TFT_WR = P2^5; //读写控制
- sbit TFT_RD = P3^2; //读写控制
-
- #define TFT_DATAPORTH P1 //放置高8位数据
- #define TFT_DATAPORTL P0
- //---定义屏的大小---//
- #define TFT_XMAX ((uchar)175)// //设置TFT屏的大小
- #define TFT_YMAX ((uchar)219)//
-
- //---定义颜色的宏---//
- #define WHITE 0xFFFF
- #define BLACK 0x0000
- #define BLUE 0x001F
- #define RED 0xF800
- #define MAGENTA 0xF81F
- #define GREEN 0x07E0
- #define CYAN 0x7FFF
- #define YELLOW 0xFFE0 //定义颜色的宏
-
- //-- 声明全局函数 --//
- void TFT_WriteCmd(uint cmd);
- void TFT_WriteData(uint dat);
- void TFT_Init(void);
- void TFT_SetWindow(uchar xStart, uchar yStart, uchar xEnd, uchar yEnd);
- void TFT_ClearScreen(uint color);
- #endif
复制代码
lcd_driver.c
- #include "lcd_driver.h"
-
- /****************************************************************************
- *函数名:TFT_WriteCmd
- *输 入:cmd
- *输 出:
- *功 能:写命令。
- ****************************************************************************/
-
- void TFT_WriteCmd(uint cmd)
- {
- uchar cmdH, cmdL;
- cmdH = cmd >> 8;
- cmdL = cmd & 0x00FF;
-
- TFT_WR = 1; //初始化WR
- TFT_CS = 0; //打开片选
-
- TFT_RD = 1; //选择写
- TFT_RS = 0; //选择命令
-
- TFT_DATAPORTH = cmdH; //放置命令数据
- TFT_DATAPORTL = cmdL; //放置命令数据
-
- TFT_WR = 0; //写入时序
- TFT_WR = 1;
-
- TFT_CS = 1; //关闭片选
- }
-
- /****************************************************************************
- *函数名:TFT_WriteCmdData
- *输 入:cmd, dat
- *输 出:
- *功 能:写命令, 写数据。
- ****************************************************************************/
-
- void TFT_WriteData(uint dat)
- {
- uchar datH, datL;
- datH = dat >> 8;
- datL = dat & 0x00FF;
-
- TFT_WR = 1; //初始化WR
- TFT_CS = 0; //打开片选
-
- TFT_RD = 1; //选择写
- TFT_RS = 1; //选择发送数据
-
- TFT_DATAPORTH = datH; //放置命令数据
- TFT_DATAPORTL = datL; //放置命令数据
-
- TFT_WR = 0; //写入时序
- TFT_WR = 1;
-
- TFT_CS = 1; //关闭片选
- }
-
- /****************************************************************************
- *函数名:TFT_Init
- *输 入:
- *输 出:
- *功 能:初始化TFT。
- ****************************************************************************/
-
- void TFT_Init(void)
- {
- uint i;
-
- TFT_RST = 1;
- for(i=500; i>0; i--);
- TFT_RST = 0;
- for(i=500; i>0; i--);
- TFT_RST = 1;
- for(i=5000; i>0; i--);
-
- TFT_CS = 0;
-
-
- //LCD Init For 2.0inch LCD Panel with ILI9225.
- TFT_WriteCmd(0x10);TFT_WriteData(0x0000);
- TFT_WriteCmd(0x11);TFT_WriteData(0x0000);
- TFT_WriteCmd(0x12);TFT_WriteData(0x0000);
- TFT_WriteCmd(0x13);TFT_WriteData(0x0000);
- TFT_WriteCmd(0x14);TFT_WriteData(0x0000);
- for(i=500; i>0; i--);
- TFT_WriteCmd(0x11);TFT_WriteData(0x0018);
- TFT_WriteCmd(0x12);TFT_WriteData(0x200E);
- TFT_WriteCmd(0x13);TFT_WriteData(0x0052);
- TFT_WriteCmd(0x14);TFT_WriteData(0x3961);
- TFT_WriteCmd(0x10);TFT_WriteData(0x0000);
- for(i=500; i>0; i--);
-
- TFT_WriteCmd(0x11);TFT_WriteData(0x1038);
- for(i=500; i>0; i--);
-
- TFT_WriteCmd(0x02);TFT_WriteData(0x0100);
-
- TFT_WriteCmd(0x01);TFT_WriteData(0x011C);
- TFT_WriteCmd(0x03);TFT_WriteData(0x1030);
-
- TFT_WriteCmd(0x07);TFT_WriteData(0x0000);
- TFT_WriteCmd(0x08);TFT_WriteData(0x0808);
- TFT_WriteCmd(0x0B);TFT_WriteData(0x1100);
- TFT_WriteCmd(0x0C);TFT_WriteData(0x0000);
- TFT_WriteCmd(0x0F);TFT_WriteData(0x0501);
- TFT_WriteCmd(0x15);TFT_WriteData(0x0020);
- TFT_WriteCmd(0x20);TFT_WriteData(0x0000);
- TFT_WriteCmd(0x21);TFT_WriteData(0x0000);
-
- TFT_WriteCmd(0x30);TFT_WriteData(0x0000);
- TFT_WriteCmd(0x31);TFT_WriteData(0x00DB);
- TFT_WriteCmd(0x32);TFT_WriteData(0x0000);
- TFT_WriteCmd(0x33);TFT_WriteData(0x0000);
- TFT_WriteCmd(0x34);TFT_WriteData(0x00DB);
- TFT_WriteCmd(0x35);TFT_WriteData(0x0000);
- TFT_WriteCmd(0x36);TFT_WriteData(0x00AF);
- TFT_WriteCmd(0x37);TFT_WriteData(0x0000);
- TFT_WriteCmd(0x38);TFT_WriteData(0x00DB);
- TFT_WriteCmd(0x39);TFT_WriteData(0x0000);
-
- TFT_WriteCmd(0x50);TFT_WriteData(0x0603);
- TFT_WriteCmd(0x51);TFT_WriteData(0x080D);
- TFT_WriteCmd(0x52);TFT_WriteData(0x0D0C);
- TFT_WriteCmd(0x53);TFT_WriteData(0x0205);
- TFT_WriteCmd(0x54);TFT_WriteData(0x040A);
- TFT_WriteCmd(0x55);TFT_WriteData(0x0703);
- TFT_WriteCmd(0x56);TFT_WriteData(0x0300);
- TFT_WriteCmd(0x57);TFT_WriteData(0x0400);
- TFT_WriteCmd(0x58);TFT_WriteData(0x0B00);
- TFT_WriteCmd(0x59);TFT_WriteData(0x0017);
-
- TFT_WriteCmd(0x0F);TFT_WriteData(0x0701);
- TFT_WriteCmd(0x07);TFT_WriteData(0x0012);
- for(i=500; i>0; i--);
- TFT_WriteCmd(0x07);TFT_WriteData(0x1017);
-
-
-
-
- }
-
- /****************************************************************************
- *函数名:TFT_SetWindow
- *输 入:xStart, yStart, xEnd, yEnd
- *输 出:
- *功 能:设置要操作的窗口。
- ****************************************************************************/
-
- void TFT_SetWindow(uchar xStart, uchar yStart, uchar xEnd, uchar yEnd)
- {
- uint x,y,xy;
-
- x=(xEnd <<8)|xStart;
- y=(yEnd <<8)|yStart;
- xy = (yStart<<8)|xStart;
-
- TFT_WriteCmd(0x44);TFT_WriteData(x);
- TFT_WriteCmd(0x45);TFT_WriteData(y);
- TFT_WriteCmd(0x21);TFT_WriteData(xy);
-
-
- /*TFT_WriteCmd(0x20);TFT_WriteData(xStart); //xStart
- TFT_WriteCmd(0x21);TFT_WriteData(yStart); //yStart
- */
- TFT_WriteCmd(0x22);
- }
-
-
- /****************************************************************************
- *函数名:GUI_Clearcreen
- *输 入:backColor
- *输 出:
- *功 能:清屏并涂上颜色。
- ****************************************************************************/
-
- void TFT_ClearScreen(uint color)
- {
- uint i, j;
-
- TFT_SetWindow(0, 0, TFT_XMAX, TFT_YMAX); //作用区域
- for(i=0; i<=TFT_XMAX; i++)
- {
- for (j=0; j<=TFT_YMAX; j++)
- {
- TFT_WriteData(color);
- }
- }
- }
-
复制代码
|