这是我自己参照王伟明老师的视屏教程和他提供的51例程所更改的MSP430 14系列单片机的TFT彩屏例程,该例程分为含三部分,一为主函数(main())部分,彩屏驱动部分,和彩屏GUI函数部分。本部分为彩屏驱动函数部分。
本彩屏是使用的是16位的数据线 彩屏图片为:
接线图片为:
注意:图中排针脚标号不对,接地的为1;
彩屏驱动程序.h文件 TFT.h
#include
#define Bus_16 //16位数据模式,如果使用8位模式,请注释此语句,如果使用16位模式,请打开此句
#define LCD_DataPortH P2OUT //高8位数据口,8位模式下只使用高8位 #define LCD_DataPortL P1OUT //低8位数据口 ,8位模式下低8位可以不接线 #define LCD_RS_H P4OUT|=(1<<6) //数据切换 #define LCD_RS_L P4OUT&=~(1<<6) //命令切换 #define LCD_WR_H P4OUT|=(1<<5) //写控制 #define LCD_WR_L P4OUT&=~(1<<5) //写关控制 #define LCD_RD_H P4OUT|=(1<<4) //读控制 #define LCD_RD_L P4OUT&=~(1<<4) //读关控制 #define LCD_CS_H P4OUT|=(1<<3) //片选 #define LCD_CS_L P4OUT&=~(1<<3) //关片选 #define LCD_REST_H P4OUT|=(1<<1) //复位 #define LCD_REST_L P4OUT&=~(1<<1) //关复位
void delayms(int count);
void LCD_Writ_Bus(char VH,char VL); void LCD_Write_COM(char VH,char VL); void LCD_Write_DATA(char VH,char VL);
void Address_set(unsigned int x1,unsigned int y1,unsigned int x2,unsigned int y2); void LCD_Init(void);
void Pant(char VH,char VL);
void write_data_u16(unsigned int dat);
void LCD_setxy(unsigned char x,unsigned int y);
彩屏驱动程序.c文件 TFT.c
#include
unsigned int color[]={0xf800,0x07e0,0x001f,0xffe0,0x0000,0xffff,0x07ff,0xf81f};
void delayms(int count) // /* X1ms */ {
int i,j;
for(i=0;i for(j=0;j<100;j++); } //#ifdef Bus_16 //条件编译-16位数据模式 void LCD_Writ_Bus(char VH,char VL) //并行数据写入函数 { LCD_DataPortH=VH; LCD_DataPortL=VL; LCD_WR_L; LCD_WR_H; } /*#else //条件编译-8位数据模式 void LCD_Writ_Bus(char VH,char VL) //并行数据写入函数 { LCD_DataPortH=VH; LCD_WR_L; LCD_WR_H; LCD_DataPortH=VL; LCD_WR_L; LCD_WR_H; } #endif*/ void LCD_Write_COM(char VH,char VL) //发送命令 { LCD_RS_L; LCD_Writ_Bus(VH,VL); } void LCD_Write_DATA(char VH,char VL) //发送数据 { LCD_RS_H; LCD_Writ_Bus(VH,VL); } //============================================================== //写16位数据 //功能: 写一个数据到TFT控制器。 //入口参数: dat为要写入的16位数据。 //出口参数: 无 void write_data_u16(unsigned int dat) { unsigned char m,n; m=dat>>8; n=dat; LCD_Write_DATA(m,n); } void Address_set(unsigned int x1,unsigned int y1,unsigned int x2,unsigned int y2) { LCD_Write_COM(0x00,0x20);LCD_Write_DATA(x1>>8,x1); //设置X坐标位置 LCD_Write_COM(0x00,0x21);LCD_Write_DATA(y1>>8,y1); //设置Y坐标位置 LCD_Write_COM(0x00,0x50);LCD_Write_DATA(x1>>8,x1); //开始X LCD_Write_COM(0x00,0x52);LCD_Write_DATA(y1>>8,y1); //开始Y LCD_Write_COM(0x00,0x51);LCD_Write_DATA(x2>>8,x2); //结束X LCD_Write_COM(0x00,0x53);LCD_Write_DATA(y2>>8,y2); //结束Y LCD_Write_COM(0x00,0x22); } //=============================================================== //设定当前显示坐标 //入口参数: x,y为当前显示坐标。 //出口参数: 无 //说明:本函数实际上是LCD_setwindow函数的一个特例,显示窗口为最小,仅是一个像素点。 void LCD_setxy(unsigned char x,unsigned int y) { Address_set(x,y,x,y); } void LCD_Init(void) { LCD_REST_H; delayms(10); LCD_REST_L; delayms(10); LCD_REST_H; LCD_CS_H; LCD_RD_H;
相关推荐: