本文主要是介绍MSP432 TFTLCD ILI9481 软件SPI,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
下面是我用的LCD屏的图片
CS : PF1 RS : PF2
RST: PF3 MOSI: PL4
SCK: PL5
代码:
SPI.h
#ifndef _SPI_H_
#define _SPI_H_#include <driverlib.h>
#define u32 unsigned int
#define u16 unsigned short
#define u8 unsigned char#define SPI_MOSI_SET MAP_GPIOPinWrite(GPIO_PORTL_BASE,GPIO_PIN_4,GPIO_PIN_4)
#define SPI_SCLK_SET MAP_GPIOPinWrite(GPIO_PORTL_BASE,GPIO_PIN_5,GPIO_PIN_5) #define SPI_MOSI_CLR MAP_GPIOPinWrite(GPIO_PORTL_BASE,GPIO_PIN_4,0)
#define SPI_SCLK_CLR MAP_GPIOPinWrite(GPIO_PORTL_BASE,GPIO_PIN_5,0) void SPIv_WriteData(u8 Data);#endif
SPI.c
#include "spi.h"void SPIv_WriteData(u8 Data)
{unsigned char i=0;for(i=8;i>0;i--){if(Data&0x80) SPI_MOSI_SET; else SPI_MOSI_CLR;SPI_SCLK_CLR; SPI_SCLK_SET;Data<<=1; }
}
LCD.h
#include "lcd.h"u16 POINT_COLOR = 0x0000,BACK_COLOR = 0xFFFF;
u16 DeviceCode; /****************************************************************************** @function :Write an 8-bit command to the LCD screen
******************************************************************************/
void LCD_WR_REG(u8 data)
{ LCD_CS_CLR; LCD_RS_CLR; SPIv_WriteData(data);LCD_CS_SET;
}/****************************************************************************** @function :Write an 8-bit data to the LCD screen
******************************************************************************/
void LCD_WR_DATA(u8 data)
{LCD_CS_CLR;LCD_RS_SET;SPIv_WriteData(data);LCD_CS_SET;
}/****************************************************************************** @function :Write data into registers******************************************************************************/
void LCD_WriteReg(u8 LCD_Reg, u16 LCD_RegValue)
{ LCD_WR_REG(LCD_Reg); LCD_WR_DATA(LCD_RegValue);
} /****************************************************************************** @function :Write GRAM
******************************************************************************/
void LCD_WriteRAM_Prepare(void)
{LCD_WR_REG(lcddev.wramcmd);
} /****************************************************************************** @function :Write an 16-bit command to the LCD screen
******************************************************************************/
void Lcd_WriteData_16Bit(u16 Data)
{ //18Bit LCD_WR_DATA((Data>>8)&0xF8);//REDLCD_WR_DATA((Data>>3)&0xFC);//GREENLCD_WR_DATA(Data<<3);//BLUE
}/****************************************************************************** @function :Write a pixel data at a specified location
******************************************************************************/
void LCD_DrawPoint(u16 x,u16 y)
{LCD_SetCursor(x,y);Lcd_WriteData_16Bit(POINT_COLOR);
}/****************************************************************************** @function :Full screen filled LCD screen
******************************************************************************/
void LCD_Clear(u16 Color)
{unsigned int i,m; LCD_SetWindows(0,0,lcddev.width-1,lcddev.height-1); LCD_CS_CLR;LCD_RS_SET;for(i=0;i<lcddev.height;i++){for(m=0;m<lcddev.width;m++){ Lcd_WriteData_16Bit(Color);}}LCD_CS_SET;
} /****************************************************************************** @function :Reset LCD screen
******************************************************************************/
void LCD_RESET(void)
{LCD_RST_CLR;delay_ms(100); LCD_RST_SET;delay_ms(50);
}/****************************************************************************** @function :Initialization LCD screen
******************************************************************************/
void LCD_Init(void)
{ LCD_RESET(); LCD_WR_REG(0XF7);LCD_WR_DATA(0xA9);LCD_WR_DATA(0x51);LCD_WR_DATA(0x2C);LCD_WR_DATA(0x82);LCD_WR_REG(0xC0);LCD_WR_DATA(0x11);LCD_WR_DATA(0x09);LCD_WR_REG(0xC1);LCD_WR_DATA(0x41);LCD_WR_REG(0XC5);LCD_WR_DATA(0x00);LCD_WR_DATA(0x0A);LCD_WR_DATA(0x80);LCD_WR_REG(0xB1);LCD_WR_DATA(0xB0);LCD_WR_DATA(0x11);LCD_WR_REG(0xB4);LCD_WR_DATA(0x02);LCD_WR_REG(0xB6);LCD_WR_DATA(0x02);LCD_WR_DATA(0x42);LCD_WR_REG(0xB7);LCD_WR_DATA(0xc6);LCD_WR_REG(0xBE);LCD_WR_DATA(0x00);LCD_WR_DATA(0x04);LCD_WR_REG(0xE9);LCD_WR_DATA(0x00);LCD_WR_REG(0x36);LCD_WR_DATA((1<<3)|(0<<7)|(1<<6)|(1<<5));LCD_WR_REG(0x3A);LCD_WR_DATA(0x66);LCD_WR_REG(0xE0);LCD_WR_DATA(0x00);LCD_WR_DATA(0x07);LCD_WR_DATA(0x10);LCD_WR_DATA(0x09);LCD_WR_DATA(0x17);LCD_WR_DATA(0x0B);LCD_WR_DATA(0x41);LCD_WR_DATA(0x89);LCD_WR_DATA(0x4B);LCD_WR_DATA(0x0A);LCD_WR_DATA(0x0C);LCD_WR_DATA(0x0E);LCD_WR_DATA(0x18);LCD_WR_DATA(0x1B);LCD_WR_DATA(0x0F);LCD_WR_REG(0XE1);LCD_WR_DATA(0x00);LCD_WR_DATA(0x17);LCD_WR_DATA(0x1A);LCD_WR_DATA(0x04);LCD_WR_DATA(0x0E);LCD_WR_DATA(0x06);LCD_WR_DATA(0x2F);LCD_WR_DATA(0x45);LCD_WR_DATA(0x43);LCD_WR_DATA(0x02);LCD_WR_DATA(0x0A);LCD_WR_DATA(0x09);LCD_WR_DATA(0x32);LCD_WR_DATA(0x36);LCD_WR_DATA(0x0F);LCD_WR_REG(0x11);LCD_WR_REG(0x29);LCD_direction(USE_HORIZONTAL);LCD_Fill(0,0,lcddev.width,lcddev.height,WHITE);//LCD_Clear(WHITE);
}/****************************************************************************** @function :Setting LCD display window
******************************************************************************/
void LCD_SetWindows(u16 xStar, u16 yStar,u16 xEnd,u16 yEnd)
{ LCD_WR_REG(lcddev.setxcmd); LCD_WR_DATA(xStar>>8);LCD_WR_DATA(0x00FF&xStar); LCD_WR_DATA(xEnd>>8);LCD_WR_DATA(0x00FF&xEnd);LCD_WR_REG(lcddev.setycmd); LCD_WR_DATA(yStar>>8);LCD_WR_DATA(0x00FF&yStar); LCD_WR_DATA(yEnd>>8);LCD_WR_DATA(0x00FF&yEnd);LCD_WriteRAM_Prepare();
} /****************************************************************************** @function :Set coordinate value******************************************************************************/
void LCD_SetCursor(u16 Xpos, u16 Ypos)
{ LCD_SetWindows(Xpos,Ypos,Xpos,Ypos);
} /****************************************************************************** @function :Setting the display direction of LCD screen******************************************************************************/
void LCD_direction(u8 direction)
{ lcddev.setxcmd=0x2A;lcddev.setycmd=0x2B;lcddev.wramcmd=0x2C;switch(direction){ case 0: lcddev.width=LCD_W;lcddev.height=LCD_H; LCD_WriteReg(0x36,(1<<3)|(0<<6)|(0<<7));//BGR==1,MY==0,MX==0,MV==0break;case 1:lcddev.width=LCD_H;lcddev.height=LCD_W;LCD_WriteReg(0x36,(1<<3)|(0<<7)|(1<<6)|(1<<5));//BGR==1,MY==1,MX==0,MV==1break;case 2: lcddev.width=LCD_W;lcddev.height=LCD_H; LCD_WriteReg(0x36,(1<<3)|(1<<6)|(1<<7));//BGR==1,MY==0,MX==0,MV==0break;case 3:lcddev.width=LCD_H;lcddev.height=LCD_W;LCD_WriteReg(0x36,(1<<3)|(1<<7)|(1<<5));//BGR==1,MY==1,MX==0,MV==1break; default:break;}
}
其余见(免费):
(48条消息) TFT-LCDSPI显示-硬件开发文档类资源-CSDN文库
这篇关于MSP432 TFTLCD ILI9481 软件SPI的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!