
花了一下午时间写完并且测试我的程序,现在共享出来补给一下 #include "mbed.h" SPI device(SPI_MOSI, SPI_MISO, SPI_SCK); ![]() ![]() 其中SPI_MOSI对应你的开发板上面的默认的MOSI,MISO,SCK引脚 ![]() //这是我的板子上面的引脚分布图,SPI协议引脚都有在上面 typedef unsigned char uchar; typedef unsigned int uint; DigitalOut rs(D10); //RS,是这种液晶屏幕的一个重要引脚,也常常标记为PC DigitalOut cs(D9); //CS与片选使能还是有一定区别 DigitalOut reset(D8); //RESET复位引脚 uchar bitdata; void delay(uint t); 延时函数 void delay(uint time) { uint i,j; for(i=0;i<time;i++) for(j=0;j<2500;j++); } 写命令 void write_command(uchar c) { cs=0; rs=0; bitdata=c; device.write(bitdata); cs=1; } 写数据 void write_data(uchar d) { cs=0; rs=1; bitdata=d; device.write(bitdata); cs=1; } 写16位数据 void wr_com16(unsigned char i,unsigned char j) { cs=0; rs=1; bitdata=i; device.write(bitdata); cs=1; cs=0; rs=1; bitdata=j; device.write(bitdata); cs=1; } 写命令与数据 void LCD_Write_COM_DATA(uchar i,uint j) { write_command(i); wr_com16(j>>8,j); } 初始化液晶屏幕 void lcd_initial() { reset=0; delay(100); reset=1; delay(100); LCD_Write_COM_DATA(0x10, 0x0000); // Set SAP,DSTB,STB LCD_Write_COM_DATA(0x11, 0x0000); // Set APON,PON,AON,VCI1EN,VC LCD_Write_COM_DATA(0x12, 0x0000); // Set BT,DC1,DC2,DC3 LCD_Write_COM_DATA(0x13, 0x0000); // Set GVDD LCD_Write_COM_DATA(0x14, 0x0000); // Set VCOMH/VCOML voltage delay(40); // Delay 20 ms // Please follow this power on sequence LCD_Write_COM_DATA(0x11, 0x0018); // Set APON,PON,AON,VCI1EN,VC LCD_Write_COM_DATA(0x12, 0x1121); // Set BT,DC1,DC2,DC3 LCD_Write_COM_DATA(0x13, 0x0063); // Set GVDD LCD_Write_COM_DATA(0x14, 0x3961); // Set VCOMH/VCOML voltage LCD_Write_COM_DATA(0x10, 0x0800); // Set SAP,DSTB,STB delay(10); // Delay 10 ms LCD_Write_COM_DATA(0x11, 0x1038); // Set APON,PON,AON,VCI1EN,VC delay(30); // Delay 30 ms LCD_Write_COM_DATA(0x02, 0x0100); // set 1 line inversion //R01H:SM=0,GS=0,SS=1 (for details,See the datasheet of ILI9225) LCD_Write_COM_DATA(0x01, 0x011C); // set the display line number and display direction //R03H:BGR=1,ID0=1,ID1=1,AM=0 (for details,See the datasheet of ILI9225) LCD_Write_COM_DATA(0x03, 0x1030); // set GRAM write direction. LCD_Write_COM_DATA(0x07, 0x0000); // Display off LCD_Write_COM_DATA(0x08, 0x0808); // set the back porch and front porch LCD_Write_COM_DATA(0x0B, 0x1100); // set the clocks number per line LCD_Write_COM_DATA(0x0C, 0x0000); // CPU interface LCD_Write_COM_DATA(0x0F, 0x0501); // Set Osc LCD_Write_COM_DATA(0x15, 0x0020); // Set VCI recycling LCD_Write_COM_DATA(0x20, 0x0000); // RAM Address LCD_Write_COM_DATA(0x21, 0x0000); // RAM Address //------------------------ Set GRAM area --------------------------------// LCD_Write_COM_DATA(0x30, 0x0000); LCD_Write_COM_DATA(0x31, 0x00DB); LCD_Write_COM_DATA(0x32, 0x0000); LCD_Write_COM_DATA(0x33, 0x0000); LCD_Write_COM_DATA(0x34, 0x00DB); LCD_Write_COM_DATA(0x35, 0x0000); LCD_Write_COM_DATA(0x36, 0x00AF); LCD_Write_COM_DATA(0x37, 0x0000); LCD_Write_COM_DATA(0x38, 0x00DB); LCD_Write_COM_DATA(0x39, 0x0000); // ---------- Adjust the Gamma 2.2 Curve -------------------// LCD_Write_COM_DATA(0x50, 0x0603); LCD_Write_COM_DATA(0x51, 0x080D); LCD_Write_COM_DATA(0x52, 0x0D0C); LCD_Write_COM_DATA(0x53, 0x0205); LCD_Write_COM_DATA(0x54, 0x040A); LCD_Write_COM_DATA(0x55, 0x0703); LCD_Write_COM_DATA(0x56, 0x0300); LCD_Write_COM_DATA(0x57, 0x0400); LCD_Write_COM_DATA(0x58, 0x0B00); LCD_Write_COM_DATA(0x59, 0x0017); LCD_Write_COM_DATA(0x0F, 0x0701); // Vertical RAM Address Position LCD_Write_COM_DATA(0x07, 0x0012); // Vertical RAM Address Position delay(50); // Delay 50 ms LCD_Write_COM_DATA(0x07, 0x1017); // Vertical RAM Address Position } 设置显示位置的命令 void addset(unsigned int x,unsigned int y) { LCD_Write_COM_DATA(0x20,x); //write_command(0x20); // LCD_Write_COM_DATA(0x36,x); //wr_com16(x>>8,x); LCD_Write_COM_DATA(0x21,y); //write_command(0x21); // LCD_Write_COM_DATA(0x36,x); //wr_com16(y>>8,y); write_command(0x22); } 显示区域设置命令 void Lcd_SetRegion(uchar xStar, uchar yStar,uchar xEnd,uchar yEnd) { LCD_Write_COM_DATA(0x36,xEnd); LCD_Write_COM_DATA(0x37,xStar); LCD_Write_COM_DATA(0x38,yEnd); LCD_Write_COM_DATA(0x39,yStar); LCD_Write_COM_DATA(0x20,xStar); LCD_Write_COM_DATA(0x21,yStar); write_command(0x22); } 屏幕清除命令 void Lcd_Clear(uchar DH,uchar DL) { unsigned int i,m; Lcd_SetRegion(0,0,175,219); for(i=0;i<175;i++) for(m=0;m<219;m++) { wr_com16(DH,DL); } } int main() { lcd_initial(); Lcd_Clear(0x07,0xe0);//绿色 /*RGB #define RED 0xf800 #define GREEN 0x07e0 #define BLUE 0x001f #define WHITE 0xffff #define BLACK 0x0000 #define YELLOW 0xFFE0 #define GRAY0 0xEF7D #define GRAY1 0x8410 #define GRAY2 0x4208 */ while(1); {} } |
当然是自己写的