你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

MBED下的SPI驱动TFT的程序

[复制链接]
一花一世界003 发布时间:2015-2-2 18:54
花了一下午时间写完并且测试我的程序,现在共享出来补给一下* 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);
1 X! k- Z+ j( j5 z QQ截图20150202184406.png QQ截图20150202184432.png * M1 n% ]# f6 h7 I' T% S+ y
其中SPI_MOSI对应你的开发板上面的默认的MOSI,MISO,SCK引脚4 ~0 y/ g* g+ ?3 w7 `
QQ截图20150202184739.png 7 r' d% y8 K: E5 B! B1 C. Q6 ?6 g
//这是我的板子上面的引脚分布图,SPI协议引脚都有在上面
- b4 A2 v5 e3 P) ], utypedef unsigned char uchar;
& v' x- g+ h: a* j, m  ytypedef unsigned int uint;
% d: M; M8 `6 k' ~) n( jDigitalOut rs(D10);
$ ~, i( h1 S% J& A//RS,是这种液晶屏幕的一个重要引脚,也常常标记为PC; \4 X, G! t( d  E
DigitalOut cs(D9);! P: R) \; ^4 a3 X# c# h6 }, I  X" b) l
//CS与片选使能还是有一定区别
2 h# x' f6 o, [4 E& L% b; z! VDigitalOut reset(D8); . a$ N! ?$ r( H: z: r# e8 N2 D0 `
//RESET复位引脚
$ N9 g& v- j& T0 Euchar bitdata;$ W  ]* B2 s  S, h2 Z) u3 D; v
void  delay(uint t);
- E* d" a) `9 }; a9 X. p8 Q' p6 l" }/ ^
延时函数
2 x" y! w) o0 _0 _& P# Uvoid delay(uint time)/ x/ L9 U  g7 \2 D" j
{7 w; a- L9 ^- h" q- T  F
uint i,j;
% h; O5 X' `# {$ P7 R  Q0 d9 H0 T  for(i=0;i<time;i++)
: n" R" Q( K6 n# q  X8 P* T   for(j=0;j<2500;j++);
# ^4 e: D# E# n. x9 s# x}/ o' ?9 [. A, O6 W& s' Z; P
写命令* y/ n4 C( U$ J2 \, q+ x2 x8 p  t
void  write_command(uchar c)
# ?7 |$ b1 m2 m# d& @{7 X3 i1 n: t# l' V: c* k
cs=0;
& {; v8 Z; R* P3 Zrs=0;( g% C9 I" T# D0 c- ^
bitdata=c;
- }) ?$ N! G, ]device.write(bitdata);7 f$ B5 }# w, i* e+ C
cs=1;      
+ H: ?; p& x% G9 y# Y0 e0 C}6 U9 m: e9 H/ W7 g) e
写数据
6 ?  |1 [' [- Y/ t+ nvoid  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;
, s. V' K) [& y8 odevice.write(bitdata);% Y1 Y, \. D5 ?+ `. V0 J
cs=1;' t2 ~7 Q" w( V* `
}
; _# Y. h  J% c0 p. C写16位数据
5 k5 |' L. |' |2 o- ^void wr_com16(unsigned char i,unsigned char j)    ) E' j& s* D; Q8 R/ D& [
{         
7 I3 C- {: |9 D( A; [0 L  cs=0;) L- c/ m; O, \0 S: G) O4 C9 y
  rs=1;
5 [' E* M  x" N1 J  bitdata=i;
: u( ~8 N8 f8 f! a) b2 ]. g. Xdevice.write(bitdata);
/ v8 w* i5 O  m/ t* h2 |cs=1;  
) N' R; ~/ B/ e9 C" _5 V7 ?  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);
% \7 i6 ~' R, Ycs=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)   
- g$ z' K: {: D9 o! o2 M7 {{         
0 U5 L4 M" U, G1 ~- Y  L$ Wwrite_command(i);8 u- r$ |7 o$ [. ~! J" Q
wr_com16(j>>8,j);
6 q- J' S- z+ d2 W- p}
1 @) ~1 m% @, M
7 r. q5 s3 c3 o  `" A4 x初始化液晶屏幕. m8 G+ t) N* T* K
void lcd_initial()
# k( t' y6 y- `  C8 N6 _{
3 D9 O$ p2 v* }" x   reset=0;
/ z) A# w' x1 @& a; O& A   delay(100);
$ a& S2 `! S8 m' Y' f4 V4 a   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
1 M, B& w& b7 ]& P& |    LCD_Write_COM_DATA(0x11, 0x0000); // Set APON,PON,AON,VCI1EN,VC
: r# E: w  `; l- L$ ]: ^    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
  q8 x+ {$ X. W6 P0 U& |8 W" V    LCD_Write_COM_DATA(0x14, 0x0000); // Set VCOMH/VCOML voltage7 r! H4 b7 ~/ ]
    delay(40); // Delay 20 ms
: Z2 h8 I& o+ P
0 r4 ?) B5 p8 |( d    // Please follow this power on sequence
' h7 P- G( K2 o$ F9 D    LCD_Write_COM_DATA(0x11, 0x0018); // Set APON,PON,AON,VCI1EN,VC
0 `2 P. ^4 X& `/ M    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
$ }) D) ^) b  `0 b! W& \7 l2 Z    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
0 W( P9 r/ T! n) o4 q0 W" @% o- n/ e    LCD_Write_COM_DATA(0x11, 0x1038); // Set APON,PON,AON,VCI1EN,VC* r7 ]/ X% C9 b8 @
    delay(30); // Delay 30 ms
) u1 J4 d  c6 M
9 ^/ R* w. C: T) Z0 T) A% {& m# r1 k5 j# k, D7 ?0 Q
    LCD_Write_COM_DATA(0x02, 0x0100); // set 1 line inversion
) o" _" g9 z" @0 B' [& i4 ]; N& z" c+ y

0 [; f0 `$ G9 D* J4 w    //R01H:SM=0,GS=0,SS=1 (for details,See the datasheet of ILI9225)
! a5 Y7 \3 u: C( X/ |" g    LCD_Write_COM_DATA(0x01, 0x011C); // set the display line number and display direction
8 D/ F" ^) O" G: B    //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

& X8 ?7 k2 r% s9 \0 W
8 y" ]) E5 T1 v    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
2 {: @% Q: ~& C4 z9 T4 N    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
4 b# b' }) H3 R    LCD_Write_COM_DATA(0x0F, 0x0501); // Set Osc
  [4 |' a  i2 [+ h3 x, t6 G, c6 Z    LCD_Write_COM_DATA(0x15, 0x0020); // Set VCI recycling
# k, \& Z" c2 u" r    LCD_Write_COM_DATA(0x20, 0x0000); // RAM Address
. \9 N; ^* x2 [* h    LCD_Write_COM_DATA(0x21, 0x0000); // RAM Address
# Z# i8 g; I) ~  @& X0 \% Q+ l- o* v# C% u. R3 u0 f" _; D
    //------------------------ Set GRAM area --------------------------------//
$ j  C) m* E6 d( N- \; Q' r    LCD_Write_COM_DATA(0x30, 0x0000);
% c( G& W0 c. [+ o( o1 O    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);
; \9 J4 s, O1 X* n- B    LCD_Write_COM_DATA(0x34, 0x00DB);
9 F7 ]; |+ _! W( X* R- @( _5 }; s6 Q    LCD_Write_COM_DATA(0x35, 0x0000);
  E. p" M. v% E7 b2 }% C    LCD_Write_COM_DATA(0x36, 0x00AF);
, E$ z7 Q9 H' d& b) i! U1 E* k6 Y) G! X    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

3 r: a# g- x/ a1 ^5 V+ d    // ---------- 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);
. v1 l* i/ _/ G8 V    LCD_Write_COM_DATA(0x52, 0x0D0C); % X2 a8 L$ b" i6 w) j) q9 E  t: `
    LCD_Write_COM_DATA(0x53, 0x0205);
1 D) i; n2 k  P) e    LCD_Write_COM_DATA(0x54, 0x040A);
; C5 f  L- D+ U" h9 [: N    LCD_Write_COM_DATA(0x55, 0x0703);
. q8 E1 p! f1 w) i  G( A% j    LCD_Write_COM_DATA(0x56, 0x0300);
, c1 T+ W6 C/ f1 ?  f, O5 \8 v    LCD_Write_COM_DATA(0x57, 0x0400); : m- h5 P' z6 M) ]
    LCD_Write_COM_DATA(0x58, 0x0B00);
% D# M2 E4 U! x5 H  z. u8 N    LCD_Write_COM_DATA(0x59, 0x0017);
" n7 _% l1 r# O2 L6 ^- c
4 `1 T- V. }" g- x  m8 A: T: s
5 C9 Q1 L: q, n: w
! q. f  e1 t8 |  }" x6 z    LCD_Write_COM_DATA(0x0F, 0x0701); // Vertical RAM Address Position
4 P! I2 k! r3 U7 C: k6 i    LCD_Write_COM_DATA(0x07, 0x0012); // Vertical RAM Address Position
8 B+ M% i5 E& T7 R    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)
' p! G* B3 J* R# X{2 }. r8 Q7 W  Q& O+ g/ @
   LCD_Write_COM_DATA(0x20,x);. E5 i. _, l. p. B% |
  //write_command(0x20);
6 n. J, p2 g- l; j: w   // 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);
6 P4 l4 l4 P# R7 l    write_command(0x22); & {/ M9 U5 W; a( L: G
}8 a& n0 C7 \& m2 v
显示区域设置命令
) j6 K/ y* p- _: [- bvoid Lcd_SetRegion(uchar xStar, uchar yStar,uchar xEnd,uchar yEnd)# q. p6 j; J" O6 R8 _
{
0 D; h/ |0 P2 B: S5 T% s/ \0 L/ p4 C9 o1 X3 q. o+ \. O+ x' v
    LCD_Write_COM_DATA(0x36,xEnd);
$ U2 ^& [  `. R5 {6 M    LCD_Write_COM_DATA(0x37,xStar);
7 w7 }3 b, m4 M0 p9 r- G7 p    LCD_Write_COM_DATA(0x38,yEnd);
3 f% m0 T: d/ k" B$ p# Q, o/ M    LCD_Write_COM_DATA(0x39,yStar);
/ S+ u& b, \6 l    LCD_Write_COM_DATA(0x20,xStar);
# c% D& N. v5 D# y8 G) B0 G    LCD_Write_COM_DATA(0x21,yStar);2 j$ O  G, t9 ?  \: R7 T9 h

' A) z6 Q: k" j1 }$ }3 W: q    write_command(0x22);   3 M9 O6 u, D- D* B, W: O
}
2 g* ]7 t* ^  F8 p: d3 W- h3 q7 U屏幕清除命令
3 c- G3 x4 ^7 z# tvoid Lcd_Clear(uchar DH,uchar DL)               4 j8 I% d: m% @  O" x! t3 d
{   
! ?" J+ a+ q* X7 J" t% [   unsigned int i,m;
5 L4 K5 c# l  P# G   Lcd_SetRegion(0,0,175,219);6 }; N6 D% u, f7 {% O$ |! B$ b
   for(i=0;i<175;i++)
- q- ?& _2 w! n! e! V6 }7 H, J9 v    for(m=0;m<219;m++)
9 H; c: Y. g0 ?" i    {   
* T+ m  p, u. P1 r2 S        wr_com16(DH,DL);8 z" Y  w/ m8 X9 @- o( |  ?
    }     N& g( h  K0 ~
}
6 _7 L5 t4 g2 l; ^# C  L
0 _5 y7 P/ j( L8 R# }1 K/ 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
/ y3 R1 y: X" ^2 K#define GREEN        0x07e0
) P; M* ?# q! S* _' b2 ]#define BLUE         0x001f
5 m" M8 S) @0 b! `  a  Y* U#define WHITE        0xffff
% n5 \5 j+ T) y#define BLACK        0x0000
! c+ W* O& \5 I) ]/ u#define YELLOW  0xFFE09 M* ~/ x+ W+ ]! k2 R
#define GRAY0   0xEF7D           . d  m. z, q3 j) P
#define GRAY1   0x8410             
6 s8 {& w' o! q% Q1 w. `0 a#define GRAY2   0x4208              : L: B% p! k& S, x6 l+ @

- F  b' C4 l6 Z" t, f8 {*/0 S0 A5 L/ L9 l
   while(1);/ S  O+ F# z0 f% B! `  K, t
    {}
+ n+ [1 j5 H# N, M2 O}$ x6 u0 c5 [+ _" B  v

2 B2 y% {: }+ [( [/ J# _( T* v# h, ?7 {8 H: O# C7 V
收藏 评论6 发布时间:2015-2-2 18:54

举报

6个回答
我夏了夏天 回答时间:2015-2-2 19:28:05
这是自己写的还是MBED上的?
' }' I8 C% c1 \/ h7 Y
wu1169668869 回答时间:2015-2-2 20:21:04
程序要是大些就不好调试了吧
sacq12 回答时间:2015-2-2 21:52:26
好分享,谢楼主
一花一世界003 回答时间:2015-2-3 12:50:53
我夏了夏天 发表于 2015-2-2 19:28
9 ^0 M/ X/ ~7 Z5 j: }  t' z这是自己写的还是MBED上的?
) ?3 G5 {( x$ c  f# g
当然是自己写的
时光碎了天 回答时间:2015-2-3 13:14:40
很不错的
20091217083309-1058990770.jpg
wgsxsm 回答时间:2015-2-4 09:24:57
马克,谢谢楼主。。。

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版