采用16位方式驱动TFT3.2寸屏,控制器为ILI9341
板子与TFT屏接线如下:
PB0:片选端口CS PB1:数据/命令RS
PB5:背光 PB12:WR
PB13:RD PB14:RST
数据线:LCD_D对应PC
//****************************************************************** //函数名: LCD_GPIOInit //功能: GPIO初始化 //输入参数:无 //返回值: 无 //PB0:片选端口CS PB1:数据/命令RS //PB5:背光 PB12:WR //PB13:RD PB14:RST //****************************************************************** void LCD_GPIOInit(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_5 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_SetBits(GPIOB, GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_5 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All; GPIO_Init(GPIOC, &GPIO_InitStructure); GPIO_SetBits(GPIOC, GPIO_Pin_All); }
测试程序主函数:
int main(void) { SysTick_Init(); LED_Init(); LCD_Init(); while(1) { main_test(); //测试主界面 Test_Color(); //简单刷屏填充测试 Test_FillRec(); //GUI矩形绘图测试 Test_Circle(); //GUI画圆测试 English_Font_test();//英文字体示例测试 Chinese_Font_test();//中文字体示例测试 Pic_test(); //图片显示示例测试 } }测试程序中用到的相关函数:指定区域填充颜色函数://****************************************************************** //函数名: LCD_Fill //功能: 在指定区域内填充颜色 //输入参数:sx:指定区域开始点x坐标 // sy:指定区域开始点y坐标 // ex:指定区域结束点x坐标 // ey:指定区域结束点y坐标 // color:要填充的颜色 //返回值: 无 //****************************************************************** void LCD_Fill(u16 sx,u16 sy,u16 ex,u16 ey,u16 color) { u16 i,j; u16 width=ex-sx+1; //得到填充的宽度 u16 height=ey-sy+1; //高度 LCD_SetWindows(sx,sy,ex-1,ey-1);//设置显示窗口 #if LCD_USE8BIT_MODEL==1 LCD_RS_SET;//写数据 LCD_CS_CLR; for(i=0;i //****************************************************************** //函数名: LCD_ShowString //功能: 显示英文字符串 //输入参数:x,y :起点坐标 // size:字体大小 // *p:字符串起始地址 // mode:模式 0,填充模式;1,叠加模式 //返回值: 无 //****************************************************************** void LCD_ShowString(u16 x,u16 y,u8 size,u8 *p,u8 mode) { while((*p<=\'~\')&&(*p>=\' \'))//判断是不是非法字符! { if(x>(lcddev.width-1)||y>(lcddev.height-1)) return; LCD_ShowChar(x,y,POINT_COLOR,BACK_COLOR,*p,size,mode); x+=size/2; p++; } }直接上传完整程序,需要的朋友直接下载吧部分效果图:
SPI屏??