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

MBED下的SPI驱动TFT的程序

[复制链接]
一花一世界003 发布时间:2015-2-2 18:54
花了一下午时间写完并且测试我的程序,现在共享出来补给一下
* |: ?3 y" g0 m5 c4 ~3 y% e* V# v#include "mbed.h"
& P1 l; T( P0 f! k9 f5 L, E1 w; N* X
SPI device(SPI_MOSI, SPI_MISO, SPI_SCK);! G6 R0 u" B8 H( R. F: ?
QQ截图20150202184406.png QQ截图20150202184432.png 7 x/ K- o0 V& m: I1 ?
其中SPI_MOSI对应你的开发板上面的默认的MOSI,MISO,SCK引脚. }- y8 }/ c% L" \4 d5 s
QQ截图20150202184739.png
/ D& a& l: \+ i9 c, c% E: T//这是我的板子上面的引脚分布图,SPI协议引脚都有在上面
  y! h9 _" \8 x# y7 e: Ytypedef unsigned char uchar;) ]! S3 q  ~# F. T1 x
typedef unsigned int uint;7 K. H5 N" H8 m) Q8 i% |
DigitalOut rs(D10);+ y  t; o# s/ H7 o$ G8 \
//RS,是这种液晶屏幕的一个重要引脚,也常常标记为PC  {7 f7 {, i5 p7 {0 Z& T8 G
DigitalOut cs(D9);
. n8 L0 t* ]& |8 M8 z" h0 F* F//CS与片选使能还是有一定区别6 ^+ S; P- S$ d: M* v8 X
DigitalOut reset(D8);
% }; a7 d  u0 P. n8 R//RESET复位引脚
  D2 i7 E2 n4 ]4 [/ @uchar bitdata;
5 m: D# \( ~7 w2 E! {void  delay(uint t);
. B4 x6 l+ N; _& |6 E8 a) z6 O, l8 _) u
延时函数
0 j) D. D$ t! A: L+ c' a+ M/ c7 Gvoid delay(uint time)5 ^2 S0 P+ z+ T
{
% M( h4 n$ e/ b4 buint i,j;
: O. h0 p; ]( ]9 q, v  for(i=0;i<time;i++)
1 m: f& v* M, p0 E6 q" A' o   for(j=0;j<2500;j++);, K3 U6 L3 H9 O; _; A
}
0 ~# C0 g5 K9 `8 Q  C写命令
% q/ F1 t, Q  rvoid  write_command(uchar c)6 k" R3 b, `$ @$ X, u1 D
{5 O$ b+ p0 x, E8 E+ _  v+ i
cs=0;! r- m3 f9 e- a' l7 }, G
rs=0;. o- @3 [/ k8 w) K$ X
bitdata=c;
% O3 m' R* J" F6 b; [device.write(bitdata);& ?' z, S/ Q7 g3 J. X- b2 A7 @
cs=1;      5 ^" j6 V% L: o, Y2 m5 c2 i
}
2 b9 E! ]' G7 `3 }: |, N6 ~' z写数据
. |7 R5 R0 e$ b. k8 S# mvoid  write_data(uchar d)
9 s: ]. A" O& g{' y6 B: \: k; u5 N
cs=0;
: @( V- j- O  H/ F% G- n5 S" Drs=1;
( u  g1 k# j0 g2 D' {bitdata=d;$ ]8 r) g9 N) @! y
device.write(bitdata);/ e  @* U7 i. x! a6 }
cs=1;
. L9 b) B, H7 C2 ~# y; l" ^" w+ ?}
, T/ F  n; w  O, f; X写16位数据7 z1 _. p5 P4 t( K/ b. F
void wr_com16(unsigned char i,unsigned char j)    ) D  d6 E$ I, ?% v+ B  o- J8 ^
{         2 X, D: J- M9 J9 ]
  cs=0;
1 y2 k2 p! F) o/ a2 k5 t  rs=1;' i; ]5 G* [) ~! {
  bitdata=i;+ O/ u* h, I4 J8 L( S
device.write(bitdata);! [" s9 o" Z1 X: {" F9 q4 u+ U3 n
cs=1;  + F! W! Y7 R# w  a! J# o
  cs=0;! w* n4 E9 O9 I* k: v( u! ^
rs=1;
1 |* f& d2 B: K$ q7 fbitdata=j;- o' e% c4 y! p  H
device.write(bitdata);
3 U; Y* j5 O0 D) P+ B0 Ocs=1; 9 y' a" `2 K$ e9 |. m3 x/ C& ^
8 @% D, l3 ^$ O/ B/ M6 n: x! J
}% F, u; y6 V8 Z6 U% r! O
写命令与数据
5 V, z/ G3 W# kvoid LCD_Write_COM_DATA(uchar i,uint j)   
, t( }8 a3 \) [0 q! w{         ( d5 U" h- R) _4 |6 M) e0 @
write_command(i);) h( h( }, |& Z, X; O( v" K
wr_com16(j>>8,j);: f; W( k, `* @4 _# G$ Y
}
/ P! }2 U  J" z3 _! J% ]9 s) z8 I. u" `) A/ m8 _$ j: \! l
初始化液晶屏幕
  R9 O$ l& ^' P- m2 jvoid lcd_initial()
* r+ Q) ~# d* _{+ Z9 I/ o: _' c* ]
   reset=0;; Q1 x( r* D: p+ J5 y) x
   delay(100);3 I: t) d. U3 K7 f' g. [0 V
   reset=1;
" @, L' ~( y, }" S   delay(100);
( H9 S0 ^* t* J: s    LCD_Write_COM_DATA(0x10, 0x0000); // Set SAP,DSTB,STB
( ^& J; |( a6 D9 ?+ k    LCD_Write_COM_DATA(0x11, 0x0000); // Set APON,PON,AON,VCI1EN,VC
8 b5 c0 ^+ C* A; P4 E) I) u, w. G$ q6 r. @    LCD_Write_COM_DATA(0x12, 0x0000); // Set BT,DC1,DC2,DC34 o- K$ S: O! T+ ?0 m
    LCD_Write_COM_DATA(0x13, 0x0000); // Set GVDD# Y7 ~" e: m  ?$ D7 U- |
    LCD_Write_COM_DATA(0x14, 0x0000); // Set VCOMH/VCOML voltage
! \! i5 L- m- A  o    delay(40); // Delay 20 ms
% F5 D  F# w3 q  T
0 J9 i3 C9 w& @( M    // Please follow this power on sequence& \, x" Z. B2 k/ p
    LCD_Write_COM_DATA(0x11, 0x0018); // Set APON,PON,AON,VCI1EN,VC8 [; n  w5 }# G: d5 N5 R6 T
    LCD_Write_COM_DATA(0x12, 0x1121); // Set BT,DC1,DC2,DC3' y& N" t& t# D; z
    LCD_Write_COM_DATA(0x13, 0x0063); // Set GVDD7 c1 b1 y% Q" m+ q2 R. Q) i* J
    LCD_Write_COM_DATA(0x14, 0x3961); // Set VCOMH/VCOML voltage" b# y5 V8 S% L+ {! e/ n) M2 y
    LCD_Write_COM_DATA(0x10, 0x0800); // Set SAP,DSTB,STB
" b& }% U5 I, P& M1 V, L    delay(10); // Delay 10 ms5 @& b# y. |+ D& X, H& N
    LCD_Write_COM_DATA(0x11, 0x1038); // Set APON,PON,AON,VCI1EN,VC7 m! s& b! X. ?# s% w( M  m6 B7 k9 m
    delay(30); // Delay 30 ms: H8 \9 y1 b; G1 e  _  o* s
$ Y, A( [& e6 Q
" D5 a5 ?! z+ E+ ?
    LCD_Write_COM_DATA(0x02, 0x0100); // set 1 line inversion5 M. b5 K$ Q- ^9 b4 C, ^

! d1 ~) |' Y  D! w- j9 d% y4 b+ i: U, C  ?
    //R01H:SM=0,GS=0,SS=1 (for details,See the datasheet of ILI9225)
4 v$ Q& [5 h- g  z0 h    LCD_Write_COM_DATA(0x01, 0x011C); // set the display line number and display direction / l& Q/ I! p  a7 l' i+ a. B
    //R03H:BGR=1,ID0=1,ID1=1,AM=0 (for details,See the datasheet of ILI9225)
% v5 M) p# r" E+ t. ~0 W1 o    LCD_Write_COM_DATA(0x03, 0x1030); // set GRAM write direction.4 G1 y: A6 P" a+ {3 R. x0 l
1 [4 Y3 ~' n+ M2 U5 o' @* Z- K4 O$ M

( v; t5 d* b2 X* M: v* U: R    LCD_Write_COM_DATA(0x07, 0x0000); // Display off
* A& P4 ?- @8 q( \8 h: y3 K; ]    LCD_Write_COM_DATA(0x08, 0x0808); // set the back porch and front porch0 V( l: R- Q5 M+ e2 u
    LCD_Write_COM_DATA(0x0B, 0x1100); // set the clocks number per line
: h' d! Z$ e" b/ s( L3 L    LCD_Write_COM_DATA(0x0C, 0x0000); // CPU interface1 P- x9 ]* y3 b/ Q
    LCD_Write_COM_DATA(0x0F, 0x0501); // Set Osc
2 G9 H/ ]! z1 ?, B    LCD_Write_COM_DATA(0x15, 0x0020); // Set VCI recycling
- {+ O  n( C: ^5 d9 c    LCD_Write_COM_DATA(0x20, 0x0000); // RAM Address( d# a2 S! e3 u! o* u& B- s0 ^# |
    LCD_Write_COM_DATA(0x21, 0x0000); // RAM Address9 J4 S% [2 P5 k) r5 P7 [) y
# g; h* f/ A( q5 L
    //------------------------ Set GRAM area --------------------------------//- x+ b5 A9 {% R0 c& C
    LCD_Write_COM_DATA(0x30, 0x0000); + J1 L/ U' {; m/ V. ~- P. [9 M
    LCD_Write_COM_DATA(0x31, 0x00DB); % r$ J' F  W. _$ \' k
    LCD_Write_COM_DATA(0x32, 0x0000); 2 p% Y9 @2 ?  D7 g
    LCD_Write_COM_DATA(0x33, 0x0000); ; w( V( X9 h9 t# N1 A7 |5 m. p% ^
    LCD_Write_COM_DATA(0x34, 0x00DB);   d6 B8 O5 J  E7 F5 `  G4 T; A* U
    LCD_Write_COM_DATA(0x35, 0x0000);
1 S2 x6 V% \* K3 O! d    LCD_Write_COM_DATA(0x36, 0x00AF);
( v5 C- u% n& G7 [( R3 R' P    LCD_Write_COM_DATA(0x37, 0x0000); . A7 [2 `' ]# \0 B7 s
    LCD_Write_COM_DATA(0x38, 0x00DB);
' h) B; X( _2 ^/ W8 D    LCD_Write_COM_DATA(0x39, 0x0000);
  ?% `0 F$ D; o. F; C6 m0 `
& k3 e4 t7 X5 G) n7 f% D+ @( B( P* y" G+ F3 Q
    // ---------- Adjust the Gamma 2.2 Curve -------------------//
' O0 x+ {( T3 c9 y1 f8 G; {    LCD_Write_COM_DATA(0x50, 0x0603);
0 d% P6 f7 \& _7 s    LCD_Write_COM_DATA(0x51, 0x080D);
8 D  c. V, ~4 [, `    LCD_Write_COM_DATA(0x52, 0x0D0C);
: A5 \" |$ j3 [* `' z    LCD_Write_COM_DATA(0x53, 0x0205); * R- w( p/ ]2 N, Z9 X9 I, F7 n6 L
    LCD_Write_COM_DATA(0x54, 0x040A); & T) Z4 k! o( y
    LCD_Write_COM_DATA(0x55, 0x0703);
# w, o7 N" D) X( g+ F    LCD_Write_COM_DATA(0x56, 0x0300);
# p; l) R0 d0 y' J* T6 i/ Z    LCD_Write_COM_DATA(0x57, 0x0400);
) j- i0 ?" U! E7 L( ^* b, r1 j. r    LCD_Write_COM_DATA(0x58, 0x0B00); * C3 G) a9 B& E/ {9 k" _
    LCD_Write_COM_DATA(0x59, 0x0017);
' r: c2 P" e5 R: s" Q( X; {+ g1 u3 w' _6 f5 _& U: a1 {7 I7 b

! H3 W/ y6 O" y3 a$ Y6 h+ ^" i+ \
8 R# `7 K" y' z6 L7 K' B$ u    LCD_Write_COM_DATA(0x0F, 0x0701); // Vertical RAM Address Position
( U) r! \- g0 R5 |$ _    LCD_Write_COM_DATA(0x07, 0x0012); // Vertical RAM Address Position
  n. b: }7 T: ^# M5 o% |- k    delay(50); // Delay 50 ms2 W3 }. y+ D* V& H  z
    LCD_Write_COM_DATA(0x07, 0x1017); // Vertical RAM Address Position  9 o( t# G4 \5 j2 a9 i+ K

0 C5 @% E* t/ b& O( M# U}6 n6 t( {( |: S  y
设置显示位置的命令
; D7 c1 U' ^. ]& i  x/ D5 xvoid addset(unsigned int x,unsigned int y)
$ W8 G2 H1 r- A) j5 g9 _{0 o+ J0 v8 ^9 x- `- K
   LCD_Write_COM_DATA(0x20,x);: u* o- n# Q# T1 I6 D9 B) `$ ?
  //write_command(0x20);8 T7 `4 y8 Z4 }, g! i
   // LCD_Write_COM_DATA(0x36,x);
2 X! q9 Q/ r: D8 _  //wr_com16(x>>8,x);
9 ^6 @2 a! Q. v5 ~& h  LCD_Write_COM_DATA(0x21,y);
7 N  [0 S, U$ C( G* ]7 i- a  //write_command(0x21);. R6 @* I* e9 p4 K( v2 e, z
   // LCD_Write_COM_DATA(0x36,x);
% I2 ~) t/ ?5 v: B6 P9 {  //wr_com16(y>>8,y);
' l0 B/ `& z  r! M: B8 m9 d    write_command(0x22);
/ _4 y: n2 g  f/ u' ^* r}2 t" K* k8 j% @7 J1 b0 r
显示区域设置命令* S7 x9 M6 P8 O0 h3 f4 H. R! T
void Lcd_SetRegion(uchar xStar, uchar yStar,uchar xEnd,uchar yEnd)
: y9 s' ?8 u4 F- N- j: a& ]* v  H& g{6 x* p8 b2 u: l4 M# G* L* V7 P6 ~
) F, u* ^4 }4 I
    LCD_Write_COM_DATA(0x36,xEnd);
! @9 J. i& m8 ^4 s1 w* T    LCD_Write_COM_DATA(0x37,xStar);
2 O: ?  A8 i: g1 g    LCD_Write_COM_DATA(0x38,yEnd);" w% Y' a0 \% S- P* v
    LCD_Write_COM_DATA(0x39,yStar);9 A! J0 r$ Z$ [  w0 A
    LCD_Write_COM_DATA(0x20,xStar);
" P: q/ e6 D0 w4 U6 n    LCD_Write_COM_DATA(0x21,yStar);
9 r' _5 S' I6 D$ k
- O  ?, y9 [! M+ }" h& E    write_command(0x22);   
# G. r4 b6 g' b4 c8 T. A( {}
- I$ c  s' R; H4 t0 i, ?8 b/ y1 x屏幕清除命令
# t2 D7 l& p9 \6 v, t* rvoid Lcd_Clear(uchar DH,uchar DL)               / n7 I) D% w- j9 f7 W& [
{     ?, n# F8 l4 O5 o
   unsigned int i,m;9 O* K& y: u" w* q7 _9 Q# t/ e. r
   Lcd_SetRegion(0,0,175,219);1 ]. @" c2 O1 J6 C3 H
   for(i=0;i<175;i++)( R' z/ o. ^/ n( ^
    for(m=0;m<219;m++)
) x; \' q: G% `8 Q9 S+ V    {   
7 E. E6 ~) k; y" M- f% G$ K. X        wr_com16(DH,DL);& H" z+ y0 e/ J( L8 t7 ?9 \! @/ f8 r
    }   
) F! U- s7 P7 e  K6 L# E2 y2 o}
9 ~" G  g. {4 o$ {  p! V5 n, a; m/ ]% U! u4 c

/ R. v* F8 u4 e
3 I2 ~% e0 p  ^/ A5 i& Kint main() {7 V% B0 n3 {1 S6 L' H; F) `
    lcd_initial();, A; H3 ~/ W8 c$ _0 O0 o4 q
   Lcd_Clear(0x07,0xe0);//绿色  O; G) _$ H; l( F  o! w
/*RGB
% |; }1 {. E" s: D2 ^7 l#define RED          0xf800. n  p  J" ~' O# ^3 A: G) Z
#define GREEN        0x07e0) ?3 p3 x, }8 m0 G0 E
#define BLUE         0x001f- O& b2 R3 }$ C
#define WHITE        0xffff/ x3 K  A4 l3 ?3 u
#define BLACK        0x0000
6 ^7 O8 v7 u& U! i#define YELLOW  0xFFE0
" G' p* V$ V4 \& @5 U4 M#define GRAY0   0xEF7D           . \7 [. c4 t/ w& _, J
#define GRAY1   0x8410              ; P' F7 L2 P. o; p  W( L& I& C. k, S
#define GRAY2   0x4208              " }$ `  s! L$ j
8 y1 W/ ?1 Q6 x7 G* {  ^  W
*/
& ]) g% u. r4 L   while(1);( p0 ?' F4 j7 k9 x
    {}4 E, x5 H5 _% e5 ?
}
  I( G/ I! b, F% j3 f, x
% {) x8 h1 m7 b' N1 z/ p  w, h' ~% W2 ^5 n: a1 Z1 i
赞 收藏 评论6 发布时间:2015-2-2 18:54

举报

6个回答
我夏了夏天 回答时间:2015-2-2 19:28:05
这是自己写的还是MBED上的?0 j5 i$ t- ]" w3 F4 H6 I+ h
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) ~$ T  u8 N" \$ l9 Z9 H0 U+ k/ S
这是自己写的还是MBED上的?
6 H5 F7 L9 N* P% m( r7 t
当然是自己写的
时光碎了天 回答时间:2015-2-3 13:14:40
很不错的
20091217083309-1058990770.jpg
wgsxsm 回答时间:2015-2-4 09:24:57
马克,谢谢楼主。。。
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版