网站首页 美食营养 游戏数码 手工爱好 生活家居 健康养生 运动户外 职场理财 情感交际 母婴教育 时尚美容

东软载波单片机HR8P506驱动TFT SPI串口屏显示

时间:2024-10-12 18:38:00

1、【1】打开Keil uVision猱蝰逾鸾5建立好相应的工程项目,添加相应的文件和头文件路径,在建立工程过程中需要使吹涡皋陕用Keil插件,可到官网去下载,亦可联系我。【2】.初始化SPI GPIO配置。SPI_MOSI、SPI_MISO、SPI_SCK、SPI_CS配置为复用输出模式,SPI_CS亦可配置为普通输出模式。若是使用模拟SPI方式直接配置为普通模式输出即可。#define TFT_SPI0_MOSI_Pin GPIO_Pin_A13#define TFT_SPI0_MISO_Pin GPIO_Pin_A12#define TFT_SPI0_SCK_Pin GPIO_Pin_A11#define TFT_SPI0_CS_Pin GPIO_Pin_A10static void vTFT_SPI0_GPIO_Configuration(void){ GPIO_InitSettingType GPIO_InitStructure; GPIO_InitStructure.Signal = GPIO_Pin_Signal_Digital; //Digital Pin GPIO_InitStructure.Dir = GPIO_Direction_Output; //Output mode GPIO_InitStructure.Func = GPIO_Reuse_Func3; //Reuse functio3 GPIO_InitStructure.ODE = GPIO_ODE_Output_Disable; //Open drain disable GPIO_InitStructure.DS = GPIO_DS_Output_Strong; //Strong output GPIO_InitStructure.PUE = GPIO_PUE_Input_Disable; //Pull up disable GPIO_InitStructure.PDE = GPIO_PDE_Input_Disable; //Pull Down disable GPIO_Init(TFT_SPI0_MISO_Pin, &GPIO_InitStructure); //Init TFT_SPI0_MISO_Pin GPIO_Init(TFT_SPI0_MOSI_Pin, &GPIO_InitStructure); //Init TFT_SPI0_MOSI_Pin GPIO_Init(TFT_SPI0_SCK_Pin, &GPIO_InitStructure); //Init TFT_SPI0_SCK_Pin GPIO_InitStructure.Signal = GPIO_Pin_Signal_Digital; //Digital Pin GPIO_InitStructure.Dir = GPIO_Direction_Output; //Output mode GPIO_InitStructure.Func = GPIO_Reuse_Func0; //Reuse functio0 GPIO_InitStructure.ODE = GPIO_ODE_Output_Disable; //Open drain disable GPIO_InitStructure.DS = GPIO_DS_Output_Strong; //Strong output GPIO_InitStructure.PUE = GPIO_PUE_Input_Disable; //Pull up disable GPIO_InitStructure.PDE = GPIO_PDE_Input_Disable; //Pull Down disable GPIO_Init(TFT_SPI0_CS_Pin, &GPIO_InitStructure); //Init TFT_SPI0_CS_Pin}【3】配置SPI。SPI频率、数据格式、通讯模式、发送帧位宽、延时接收使能、发送间隔使能、发送间隔周期。若使用模拟SPI方式此步骤可以忽略,最后初始化SPI。static void vTFT_SPI0_Configuration(void){ SPI_InitStruType SPI_InitStructure; SPI_InitStructure.SPI_Freq = 10000000; //SPI frequency SPI_InitStructure.SPI_Df = SPI_FallSendRiseRec; //Data Rise Send Fall Recieve SPI_InitStructure.SPI_Mode = SPI_Mode_Master; //Work mode SPI_InitStructure.SPI_DW = 7; //Data bit width SPI_InitStructure.SPI_DelayRec = Disable; //Delay recieve SPI_InitStructure.SPI_DelaySend = Disable; //Delay send SPI_InitStructure.SPI_SendDelayPeroid = 0; //Delay send peroid SPI_Init(SPI0, &SPI_InitStructure); //Init SPI0 SPI0_Enable(); //SPI0 enable }void vTFT_SPI0_Initialization(void){ vTFT_SPI0_GPIO_Configuration(); vTFT_SPI0_Configuration();}【4】配置TFT GPIO。TFT_RESET、TFT_RS配置为普通模式输出。#define TFT_RESET_Pin GPIO_Pin_A15#define TFT_RS_Pin GPIO_Pin_A14static void vTFT_GPIO_Configuration(void){ GPIO_InitSettingType GPIO_InitStructure; GPIO_InitStructure.Signal = GPIO_Pin_Signal_Digital; //Digital Pin GPIO_InitStructure.Dir = GPIO_Direction_Output; //Output mode GPIO_InitStructure.Func = GPIO_Reuse_Func0; //Reuse function 0 GPIO_InitStructure.ODE = GPIO_ODE_Output_Disable; //Open drain disable GPIO_InitStructure.DS = GPIO_DS_Output_Normal; //Normal Output GPIO_InitStructure.PUE = GPIO_PUE_Input_Disable; //Pull up disable GPIO_InitStructure.PDE = GPIO_PDE_Input_Disable; //Pull Down disable GPIO_Init(TFT_RESET_Pin, &GPIO_InitStructure); //Init TFT_RESET_Pin GPIO_Init(TFT_RS_Pin, &GPIO_InitStructure); //Init TFT_RS_Pin}

东软载波单片机HR8P506驱动TFT SPI串口屏显示东软载波单片机HR8P506驱动TFT SPI串口屏显示

2、【1】编写写指令、写数据函数,这两个函数是最核心的函数。若使用模拟SPI方式,重点也是修改这两个函数。#define TFT_CS_SET() GPIO_SetBit(TFT_SPI0_CS_Pin)#define TFT_CS_CLR() GPIO_ResetBit(TFT_SPI0_CS_Pin)#define TFT_RS_SET() GPIO_SetBit(TFT_RS_Pin)#define TFT_RS_CLR() GPIO_ResetBit(TFT_RS_Pin)写字节命令函数void vTFT_WriteByte_Command(u8 cmd){ TFT_CS_CLR(); TFT_RS_CLR(); SPI_SendByte(SPI0, cmd); while(SPI_GetStatus(SPI0, SPI_STA_IDLE) == RESET); TFT_CS_SET();}写字节数据函数void vTFT_WriteByte_Data(u8 dat){ TFT_CS_CLR(); TFT_RS_SET(); SPI_SendByte(SPI0, dat); while(SPI_GetStatus(SPI0, SPI_STA_IDLE) == RESET); TFT_CS_SET();}写u16数据函数void vTFT_Write_Data(u16 dat){ TFT_CS_CLR(); TFT_RS_SET(); SPI_SendByte(SPI0, (u8)(dat >> 8)); while(SPI_GetStatus(SPI0, SPI_STA_IDLE) == RESET); SPI_SendByte(SPI0, (u8)dat); while(SPI_GetStatus(SPI0, SPI_STA_IDLE) == RESET); TFT_CS_SET();}

东软载波单片机HR8P506驱动TFT SPI串口屏显示东软载波单片机HR8P506驱动TFT SPI串口屏显示东软载波单片机HR8P506驱动TFT SPI串口屏显示

4、【1】编写TFT出厂参数校准函数,这个函数里才参数都是有TFT LCD厂家调试好的参数,直接拿过来用就行,需要设置的参数比较多,这里只展示一部分。static void vTFT_Default_Set(void){ TFT_RESET_CLR(); Delay_ms(500); TFT_RESET_SET(); Delay_ms(100); TFT_CS_CLR(); vTFT_WriteByte_Command(0xCB); vTFT_WriteByte_Data(0x39); vTFT_WriteByte_Data(0x2C); vTFT_WriteByte_Data(0x00); vTFT_WriteByte_Data(0x34); vTFT_WriteByte_Data(0x02); vTFT_WriteByte_Command(0x36);//Memory Access Control #if ( TFT_DISPLAY_MODE_LEVEL > 0 )//横屏 竖屏选择 vTFT_WriteByte_Data(0xE8); #else vTFT_WriteByte_Data(0x48); #endif vTFT_WriteByte_Command(0x3A); vTFT_WriteByte_Data(0x55); .......}

东软载波单片机HR8P506驱动TFT SPI串口屏显示东软载波单片机HR8P506驱动TFT SPI串口屏显示东软载波单片机HR8P506驱动TFT SPI串口屏显示

6、【1】在指定位置显示数字,static u32 uxTFT_Resolve_Num(u8 m, u8 n){ u32 result=1; while(n--) result *= m; return result;}void vTFT_Show_Number(u16 x, u16 y, u8 size, u32 num, u8 len, u16 backcolor, u16 fontcolor){ u8 i,temper = 0; for(i=0; i<len; i++) { if((x + size/2) > TFT_XWIDTH_MAX)//Next char start position { x = 0; y = y + size;//Next Fong High } if((y+ size) > TFT_YHEIGHT_MAX) return; temper = (num/uxTFT_Resolve_Num(10, len-i-1))%10; vTFT_Show_Chars(x, y, size ,(temper + '0'), backcolor, fontcolor); x = x + size/2; }}

东软载波单片机HR8P506驱动TFT SPI串口屏显示东软载波单片机HR8P506驱动TFT SPI串口屏显示东软载波单片机HR8P506驱动TFT SPI串口屏显示东软载波单片机HR8P506驱动TFT SPI串口屏显示东软载波单片机HR8P506驱动TFT SPI串口屏显示东软载波单片机HR8P506驱动TFT SPI串口屏显示
© 五度知识库