
花了一下午时间写完并且测试我的程序,现在共享出来补给一下* W9 L5 F6 y. A' \+ _) x; ~% @$ u6 K #include "mbed.h"0 \* a4 n6 ~' A- g: Q/ u0 L. ` 2 j( K) M! w+ Q! j! n+ o1 v SPI device(SPI_MOSI, SPI_MISO, SPI_SCK); ![]() ![]() 其中SPI_MOSI对应你的开发板上面的默认的MOSI,MISO,SCK引脚4 ~0 y/ g* g+ ?3 w7 ` ![]() //这是我的板子上面的引脚分布图,SPI协议引脚都有在上面 typedef unsigned char uchar; typedef unsigned int uint; DigitalOut rs(D10); //RS,是这种液晶屏幕的一个重要引脚,也常常标记为PC; \4 X, G! t( d E DigitalOut cs(D9);! P: R) \; ^4 a3 X# c# h6 }, I X" b) l //CS与片选使能还是有一定区别 DigitalOut reset(D8); . a$ N! ?$ r( H: z: r# e8 N2 D0 ` //RESET复位引脚 uchar bitdata;$ W ]* B2 s S, h2 Z) u3 D; v void delay(uint t); 9 X. p8 Q' p6 l" }/ ^ 延时函数 void delay(uint time)/ x/ L9 U g7 \2 D" j {7 w; a- L9 ^- h" q- T F uint i,j; for(i=0;i<time;i++) for(j=0;j<2500;j++); }/ o' ?9 [. A, O6 W& s' Z; P 写命令* y/ n4 C( U$ J2 \, q+ x2 x8 p t void write_command(uchar c) {7 X3 i1 n: t# l' V: c* k cs=0; rs=0;( g% C9 I" T# D0 c- ^ bitdata=c; device.write(bitdata);7 f$ B5 }# w, i* e+ C cs=1; }6 U9 m: e9 H/ W7 g) e 写数据 void write_data(uchar d)5 r$ A' [; ~5 A! B# ` {6 k W/ d/ y$ i' ^ cs=0;: _5 h# i1 \5 x# k rs=1;) d* o' q0 U+ d$ z. A" ] bitdata=d; device.write(bitdata);% Y1 Y, \. D5 ?+ `. V0 J cs=1;' t2 ~7 Q" w( V* ` } 写16位数据 void wr_com16(unsigned char i,unsigned char j) ) E' j& s* D; Q8 R/ D& [ { cs=0;) L- c/ m; O, \0 S: G) O4 C9 y rs=1; bitdata=i; device.write(bitdata); cs=1; cs=0;: y) _; X5 T" s7 w9 v+ v rs=1;' f+ z: y) j5 {* ~) w bitdata=j;$ j, s1 p% G- h device.write(bitdata); cs=1; + ]( ]% _, {% S+ _6 W M) _! w+ S1 o }; A/ H. e$ Z" ?7 t 写命令与数据1 d8 S* k7 w( t8 ~+ K void LCD_Write_COM_DATA(uchar i,uint j) { write_command(i);8 u- r$ |7 o$ [. ~! J" Q wr_com16(j>>8,j); } 初始化液晶屏幕. m8 G+ t) N* T* K void lcd_initial() { reset=0; delay(100); reset=1;/ o1 \4 S2 K! y delay(100);: T) ^/ `' B9 C0 ]0 P W 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 p6 ~' T7 s, T" s2 m LCD_Write_COM_DATA(0x13, 0x0000); // Set GVDD LCD_Write_COM_DATA(0x14, 0x0000); // Set VCOMH/VCOML voltage7 r! H4 b7 ~/ ] 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,DC39 e* n* L' r$ _* o4 J1 Q LCD_Write_COM_DATA(0x13, 0x0063); // Set GVDD LCD_Write_COM_DATA(0x14, 0x3961); // Set VCOMH/VCOML voltage2 o0 s4 A2 ~5 P! T1 v# F1 z& s1 l LCD_Write_COM_DATA(0x10, 0x0800); // Set SAP,DSTB,STB) P) D# ~3 m! f- y- e G1 o* C' V delay(10); // Delay 10 ms LCD_Write_COM_DATA(0x11, 0x1038); // Set APON,PON,AON,VCI1EN,VC* r7 ]/ X% C9 b8 @ delay(30); // Delay 30 ms % {& m# r1 k5 j# k, D7 ?0 Q LCD_Write_COM_DATA(0x02, 0x0100); // set 1 line inversion ' [& i4 ]; N& z" c+ y //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), @- H2 E0 `' G' K$ h7 _ LCD_Write_COM_DATA(0x03, 0x1030); // set GRAM write direction.# j0 w3 Y+ h$ q% I' C5 D; P LCD_Write_COM_DATA(0x07, 0x0000); // Display off4 O* {4 ~5 n7 l 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; u6 e; L3 H, e* r 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 + l- o* v# C% u. R3 u0 f" _; D //------------------------ Set GRAM area --------------------------------// LCD_Write_COM_DATA(0x30, 0x0000); LCD_Write_COM_DATA(0x31, 0x00DB); 0 P7 u2 J6 a1 j" E, c7 A LCD_Write_COM_DATA(0x32, 0x0000); & _5 I, P; t/ B% n; L 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); * K" S0 `5 I4 _. j+ }5 n% \8 w$ w LCD_Write_COM_DATA(0x38, 0x00DB); ! i5 n/ m! F9 M LCD_Write_COM_DATA(0x39, 0x0000); & v m$ [5 B8 d, B5 N% n4 O% s: Q / V* `" i7 p, V( E4 C // ---------- Adjust the Gamma 2.2 Curve -------------------//5 P6 z ]) W4 L2 [1 l& |" H LCD_Write_COM_DATA(0x50, 0x0603); , A" K' b6 \4 c- v% ], N LCD_Write_COM_DATA(0x51, 0x080D); LCD_Write_COM_DATA(0x52, 0x0D0C); % X2 a8 L$ b" i6 w) j) q9 E t: ` 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); : m- h5 P' z6 M) ] 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$ v8 ^/ @' ^4 z% I$ @4 C LCD_Write_COM_DATA(0x07, 0x1017); // Vertical RAM Address Position 7 N4 D' Q8 d0 n8 U. d& F 9 u" l# P; O( q- A- M$ b- d }1 ?" _1 t8 s7 U0 d1 G2 S 设置显示位置的命令+ t3 _! y9 a. ?/ C6 Y7 b/ S; p void addset(unsigned int x,unsigned int y) {2 }. r8 Q7 W Q& O+ g/ @ LCD_Write_COM_DATA(0x20,x);. E5 i. _, l. p. B% | //write_command(0x20); // LCD_Write_COM_DATA(0x36,x);& I8 P7 I! w- [" x: V H" ?& T //wr_com16(x>>8,x);6 K( `2 g: K- Y" m O; a4 m LCD_Write_COM_DATA(0x21,y);* j9 b6 V+ u1 {/ ^. `: W# o //write_command(0x21);" M( \+ }; V! J+ |1 ]6 _ // LCD_Write_COM_DATA(0x36,x);2 s9 W$ y% W! t+ ` //wr_com16(y>>8,y); write_command(0x22); & {/ M9 U5 W; a( L: G }8 a& n0 C7 \& m2 v 显示区域设置命令 void Lcd_SetRegion(uchar xStar, uchar yStar,uchar xEnd,uchar yEnd)# q. p6 j; J" O6 R8 _ { / p4 C9 o1 X3 q. o+ \. O+ x' v 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);2 j$ O G, t9 ? \: R7 T9 h write_command(0x22); 3 M9 O6 u, D- D* B, W: O } 屏幕清除命令 void Lcd_Clear(uchar DH,uchar DL) 4 j8 I% d: m% @ O" x! t3 d { unsigned int i,m; Lcd_SetRegion(0,0,175,219);6 }; N6 D% u, f7 {% O$ |! B$ b for(i=0;i<175;i++) for(m=0;m<219;m++) { wr_com16(DH,DL);8 z" Y w/ m8 X9 @- o( | ? } N& g( h K0 ~ } / l: T( h' d. o& y& K 9 l7 }- E4 |2 d ]* U int main() {) x" F$ r6 Q! Q lcd_initial();7 Y, g# s' [: h1 `9 l Lcd_Clear(0x07,0xe0);//绿色. C% i, i8 p$ V: d; _( W9 r/ G /*RGB9 r+ P. v1 j% ?# O+ e2 @ {$ p' o( j #define RED 0xf800 #define GREEN 0x07e0 #define BLUE 0x001f #define WHITE 0xffff #define BLACK 0x0000 #define YELLOW 0xFFE09 M* ~/ x+ W+ ]! k2 R #define GRAY0 0xEF7D . d m. z, q3 j) P #define GRAY1 0x8410 #define GRAY2 0x4208 : L: B% p! k& S, x6 l+ @ */0 S0 A5 L/ L9 l while(1);/ S O+ F# z0 f% B! ` K, t {} }$ x6 u0 c5 [+ _" B v / J# _( T* v# h, ?7 {8 H: O# C7 V |
当然是自己写的