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

分享个驱动TFT的程序

[复制链接]
holts1 发布时间:2015-2-3 08:27

) }/ K. F6 w, _- ^程序支持STM,FSL, ST 三家公司的MCU,通用的,只要改下头文件就可以了,方便移值( h& y. P* W1 w" P+ R9 j- d% @
* \* o, G6 G+ u+ R
  1. ; m* G4 X/ P! t5 H4 P+ o0 G
  2. #include "st7585.h"
    ( M& ~4 i# ~4 m+ S/ E- y
  3. #include "asc0508.h" : I- l+ p! l" O* K! x) ]: _# e' f- y2 I
  4. - S6 |" P& }6 M% d6 I
  5. const unsigned char  hanzi[]=
    5 I9 m: p) n+ f. l8 B- x9 A5 x. W
  6. {
    ! I/ f0 ~5 u1 T. b1 L( i* n
  7. /*--  文字:  S  --*/
    9 G3 |+ F* D) e: ]
  8. /*--  Trebuchet MS12;  此字体下对应的点阵为:宽x高=16x16   --*/
    9 w1 i' \8 C! l6 s/ ^$ I/ ^
  9. 0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      b0 I4 ?7 v' P
  10. 0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    # p9 x5 s! ~' A! O3 Z
  11. /*--  文字:  T  --*/$ w# e) H: w1 d: H
  12. /*--  Trebuchet MS12;  此字体下对应的点阵为:宽x高=16x16   --*/9 X6 a4 B1 h! z$ n% S0 A# d$ @
  13. 0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    ; J1 m3 L* v; r! J3 o
  14. 0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,8 C8 {  i) p% R. R0 B4 O( N
  15. /*--  文字:  M  --*/
    3 v, A5 y. S2 |6 A/ R% M
  16. /*--  Trebuchet MS12;  此字体下对应的点阵为:宽x高=16x16   --*/$ t+ O1 {+ P( c  s' J4 @3 [' E
  17. 0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    ' \+ j. D; X. z( G$ n
  18. 0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,& b" u. n; w) n+ r; D
  19. /*--  文字:  8  --*/8 l0 l) O$ ]5 Q' X
  20. /*--  Trebuchet MS12;  此字体下对应的点阵为:宽x高=16x16   --*/2 }$ X" V! B. C
  21. 0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,& z9 T6 X! }+ D2 _: F
  22. 0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0 v- G% X9 V& V5 {9 Q* M9 y# O
  23. /*--  文字:  开  --*/9 H; B, d; P% t, m# x
  24. /*--  Trebuchet MS12;  此字体下对应的点阵为:宽x高=16x16   --*/' j8 U. I7 K" p3 y+ R( H
  25. 0x80,0x82,0x82,0x82,0xFE,0x82,0x82,0x82,0x82,0x82,0xFE,0x82,0x82,0x82,0x80,0x00,
    : k7 D1 o6 G# g, X  r7 n5 _
  26. 0x00,0x80,0x40,0x30,0x0F,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,
    1 l3 J3 n9 K" |& \6 Y8 U
  27. /*--  Trebuchet MS12;  此字体下对应的点阵为:宽x高=16x16   --*/0 U' Y7 O: U0 q. C
  28. 0x00,0x00,0x18,0x16,0x10,0xD0,0xB8,0x97,0x90,0x90,0x90,0x92,0x94,0x10,0x00,0x00," Q: i* O" y" ]+ F2 D0 r3 f# ^
  29. 0x00,0x20,0x10,0x8C,0x83,0x80,0x41,0x46,0x28,0x10,0x28,0x44,0x43,0x80,0x80,0x00,9 ~8 Y, W0 \) Y$ D6 l/ u( L
  30. /*--  文字:  板  --*/2 g- h! M" R9 w: K, @0 f  e
  31. /*--  Trebuchet MS12;  此字体下对应的点阵为:宽x高=16x16   --*/
    - g/ O0 R. h" r$ J; S! m! p
  32. 0x10,0x10,0xD0,0xFF,0x90,0x10,0x00,0xFC,0x24,0xE4,0x24,0x22,0x23,0xE2,0x00,0x00,4 b: T: Y: b2 m/ y' k, i
  33. 0x04,0x03,0x00,0xFF,0x00,0x83,0x60,0x1F,0x80,0x41,0x26,0x18,0x26,0x41,0x80,0x00,
    , s' g, y" H# L, E  y8 a9 P) d
  34. };  l& C/ w- h7 D3 d
  35. 8 W7 i6 m: [4 ~* A

  36. 3 ]! Y/ a: B; I  N
  37. extern volatile unsigned char LCDDly;" E4 c. z3 v9 K2 {0 `

  38.   [1 m1 h* O1 q+ i/ @3 g+ q
  39. //=============================================================$ B+ \, D( z7 B" _
  40. //延时, u6 M! [% J/ q' [: w8 S
  41. //=============================================================# T$ W; l4 e" H$ M
  42. void DlyMs(unsigned char nCount)
    ! E; I- Q1 p0 V
  43. {6 v9 W0 R7 T) f, ^
  44.   LCDDly = nCount ;5 J6 t- k7 Z7 R
  45.   while ( LCDDly > 0 );
    $ U! w# n9 b/ p
  46. }1 m, [( W% r! f
  47.   a. a' n2 N9 ]6 T) X% l. j
  48. //=============================================================
    6 V  O% I. h! I, X9 e. r+ x2 L4 }4 e6 L6 D
  49. //传送数据
    * C  @& e. g+ J+ [7 [0 ?
  50. //=============================================================7 _% c1 C, y/ U: G# X
  51. void LCD_WriteBus(unsigned char Value)  
    # r4 _9 J" e6 K! N  L: s; s
  52. {     unsigned char i;      
    % L& ]- W* ~7 B: [& e% ~
  53.         LCD_SDA_1;    " }' E# H" B2 C4 R9 {
  54.         LCD_SCL_0;2 D7 T+ H  X" l# J) H6 l: y$ Y& a) o
  55.     for(i=0;i<8;i++)
    $ P& i6 M+ q' j3 j
  56.     {       LCD_SCL_0;9 b  D+ B: n: S$ e- g+ \9 k! H, e
  57.         if(Value&0x80) LCD_SDA_1; else LCD_SDA_0;
    6 L" t; W" ?! D0 i0 r
  58.         LCD_SCL_1;           ! H0 c0 ?+ R/ E. `
  59.          Value=Value<<1;            
    8 i8 z9 c7 e! ^, u1 v
  60.     }
      |0 N7 G" D' v" S4 V, K: G6 D& {3 g
  61.     LCD_SCL_1;. C3 Z2 O) H' F9 D' X# i
  62.     LCD_SDA_1;
    8 ?' [' ]) n' ~4 ~9 Q- g( U" ^
  63. }
    : c: z1 ]: F! ^
  64. + K5 E2 A6 ], x, Q
  65. //=============================================================
    & `" @* ^( W2 `3 y1 i
  66. //写命令% S7 M6 K. ~: d( _0 m' T/ n
  67. //=============================================================8 ^( `* a6 C7 B+ m
  68. void LCD_WriteCmd(unsigned char Cmd)     5 c; Y7 o" k& q  y
  69. {   
    5 c! J/ }" D7 g7 R3 r6 Q
  70.     LCD_CS_0;
    & A$ Q- \5 w, k
  71.     LCD_RS_0;
    3 a+ u$ r1 i- t+ P% X3 @
  72.     LCD_WriteBus(Cmd);
    4 q! }3 E' ^7 S" `
  73.     LCD_CS_1;8 d6 C2 O5 T" g
  74. }
    2 l1 X% `* h: p" m& c, N
  75. ( ]7 }( ^( X$ Z+ E
  76. //=============================================================- ?- a" p) x9 Y1 t3 s
  77. //写数据8 h+ X3 ^+ o( m
  78. //=============================================================3 x! l: j" X. `7 K" P) b9 U$ h
  79. void LCD_WriteDat(unsigned char Dat)     
    * i6 O- S4 q7 h8 G" C- o0 A
  80. {
    ; |( n' M6 F$ M/ S; F$ V8 _/ s
  81.     LCD_CS_0;& v$ U# i  k* F4 p7 q! x
  82.     LCD_RS_1;
    8 j  f! e3 I9 `. C8 h
  83.     LCD_WriteBus(Dat);8 y" c) d, w4 v* J3 ~8 R
  84.     LCD_CS_1;
    $ f  Z' X; D# T3 H
  85. }
    % `8 L* x6 \# l" b: \4 K

  86. 1 w+ z" B5 P1 X: Q( o- y* Y1 k
  87. /*******************************************************************************
    . f; r; g. U( E/ e3 Q
  88. *函  数: LCD_SetXY(unsigned char x,unsigned char y)                            *, `+ N. }3 m: U% R* S" e9 w
  89. *功  能: 移动显示指针到指定位置                                                *
    3 V& v( M9 X1 O  p4 p
  90. *参  数: X,Y  座标值                                                           *
    . v3 v$ i7 {) S- R
  91. *******************************************************************************/
    8 T: m/ v( a% F5 C- t$ R& Q% {. t9 q
  92. void LCD_SetXY(unsigned char X,unsigned char Y)
    7 J1 D9 v" g  f. v' t, M
  93. {# s: R- s) _8 e# v- y) ]
  94.     LCD_WriteCmd(0x80 | X); // row3 _/ Y& [  d' L; o
  95.     LCD_WriteCmd(0x40 | Y); // column" Q& q& Z3 b% {# U6 X* o6 b
  96. }
    0 b+ y( ~, f' s$ P7 B
  97. 4 R% a- o5 X+ p  @, }2 o- _
  98. /*******************************************************************************% ]5 v. V! @8 q1 ]- i- @* G
  99. *函  数: lcd_goto1(unsigned char x)                                            *) ?& D) V. q8 e
  100. *功  能: 移动到第一行的指定位置                                                *  ^( r8 o5 D4 T' r  Z  S
  101. *参  数: 字符在屏上的位置    ( 0 - 16 )                                        *
    : a4 C: a; b# a( W6 l5 t/ l
  102. *******************************************************************************/
    4 R+ S$ ?+ ~3 B9 O. G" H
  103. void lcd_goto1(unsigned char x){LCD_SetXY(x*6,7);} //第1行x位: t/ s& l( v1 u: |: x7 v
  104. void lcd_goto2(unsigned char x){LCD_SetXY(x*6,6);} //第2行x位
    # y+ {) C* ]8 q
  105. void lcd_goto3(unsigned char x){LCD_SetXY(x*6,5);} //第3行x位
    4 R2 N$ k( a  [1 n% X/ T
  106. void lcd_goto4(unsigned char x){LCD_SetXY(x*6,4);} //第4行x位" u1 V0 Z6 `+ Y) j. |/ ?
  107. void lcd_goto5(unsigned char x){LCD_SetXY(x*6,3);} //第5行x位
    ; ~) a/ K/ C; k  n
  108. void lcd_goto6(unsigned char x){LCD_SetXY(x*6,2);} //第6行x位
    ! m$ |  E* v5 o' v- z
  109. void lcd_goto7(unsigned char x){LCD_SetXY(x*6,1);} //第7行x位" z' b+ n! B4 D0 A) Y8 u2 N- I
  110. void lcd_goto8(unsigned char x){LCD_SetXY(x*6,0);} //第8行x位0 f2 m* J) B. P; n0 V
  111. $ D; P- C  O0 {8 ?2 T: N
  112. /*******************************************************************************
    ! a3 a% r4 @( _
  113. *函  数: lcd_cls(unsigned int Color)                                           *
    ; @, W' k- s/ G5 e: x- g
  114. *功  能: 清屏                                                                  *: S' ~. L5 V8 b, @
  115. *参  数: Color                                                                 *: K8 o; b2 d) ]& i
  116. *******************************************************************************/: q6 Q$ X: x0 h) }0 P$ m# j2 I0 s
  117. void lcd_cls(unsigned int Color)
    6 m% @8 \% ]: E0 b$ _8 y
  118. {- d7 y7 ^% y( L" R  O2 f0 x# h
  119.     unsigned char t;( W, ^! E" Y) `8 Z( u* {( I
  120.     unsigned char k;/ k2 q1 R8 `  Y+ D
  121.     LCD_SetXY(0,0);
    - j+ x% k7 u$ r! z1 M. ^0 o
  122.     for(t=0;t<9;t++)( i+ q; o# O: O( S$ b. t) ~
  123.         { for(k=0;k<LCD_W;k++) { LCD_WriteDat(0x00); } } $ ^6 Y. h, W2 Z% N, o. j
  124. }' M4 d- ^% I. T  m5 ~6 @9 y, r

  125. 4 ?5 O+ F/ b( s; D' m2 M
  126. void lcd_putc(unsigned char asc)9 @% M2 b5 K# b7 O" O
  127. {
      q. [- x" ~5 Y* F- L# h
  128.     unsigned char line;
    " P; G6 V8 G5 S+ r4 Y
  129.     for (line=0; line<5; line++)3 B* N) C( j) {1 S. v
  130.         LCD_WriteDat(Asc0508[(asc-32)*5+line]);% i- _  ~% C" y% S8 t! `$ B
  131.     LCD_WriteDat(0x00);
    ! o7 v' V% d9 P5 z. X% l0 l- @2 c
  132. }
    + j) R& l3 u  \( t+ \

  133. : y0 H7 v" f: w3 _+ |
  134. void lcd_puts(char *s)4 j" ?, ]) z- e4 g
  135. { while (*s) { lcd_putc(*s++); } }
    * w0 X  S! `* b

  136. 6 g0 D; [' h4 t# V+ L! ?( M

  137. 5 s$ g! `6 [  G' J: {8 H
  138. void LcdWriteHanzi(unsigned char row,unsigned char page,unsigned char c)
    ) D! b  J0 l! @
  139. {8 R7 T! u2 Z; H5 V/ {" \
  140.     unsigned char i;      6 P( u2 m  ?1 p6 Q; X/ P

  141. ; |! _7 X: }3 S% I9 L6 T. t6 d
  142.     LCD_SetXY(row*8, page);// 列,页9 z6 V1 u# O% H. V% B
  143.     for(i=16; i<32;i++) { LCD_WriteDat(hanzi[c*32+i]); }    % U  R& w, q- ?
  144.     LCD_SetXY(row*8, page+1);// 列,页
    ( f6 I2 V' W2 f! O5 X; u* e0 E$ W
  145.     for(i=0; i<16;i++) { LCD_WriteDat(hanzi[c*32+i]);}
    0 Q) p$ W- [7 ?* l. {  F( I5 _! {

  146. " n, i# r5 [1 _: Y' `
  147. }$ w8 f. @3 P1 s1 I7 I# }7 S  l% |

  148. ( s* x% v" ^2 d' |1 s
  149. //=============================================================
      E* F6 t! X3 g6 W- q9 M
  150. //初始化LCD7 K% `$ e- y7 D: V. D/ I
  151. //=============================================================
    ; e4 O% N$ `& H/ V$ @2 a
  152. void lcd_init(void)" o: o$ w  F  e2 i
  153. {) U9 G! g2 W0 y, `
  154. //LCD_AdjBacklight(255);
    . y3 |' c; k1 t
  155. /* Configure the LCD  pins --------------------------------------------*/
    " R5 _3 d7 a9 z- Y* x
  156. //  SET_BUS_OUTPUT();/ [3 K- B' q  {9 d( S2 ?% ]; X

  157. - B! n1 I0 I( n) x& _  t
  158.   gpio_init(LCD_CS, 1, 0);
    % d! o; U% M3 u1 k2 r
  159.   gpio_init(LCD_RES, 1, 0);
    : z4 }; f+ c: V9 E2 z
  160.   gpio_init(LCD_RS, 1, 0);
    " V! c/ P+ h0 m4 Y
  161.   gpio_init(LCD_SDA, 1, 0);& @2 f' j: y5 G
  162.   gpio_init(LCD_SCL, 1, 0);. v' }5 x. v* n0 d7 U: j: O0 _! Y' R

  163. 1 H6 i- L  c6 e7 Q% Q0 H
  164.   DlyMs(MS10);
    + u- Z$ h4 H" v; S6 `; T. `0 |
  165.   LCD_CS_0;
    ' F* T/ k! R* m* A7 b7 _
  166.   LCD_RES_0;
    ( O% E  j+ A$ l' }
  167.   DlyMs(MS10);
    ) ]& J7 R* y" `! K
  168.   LCD_RES_1;/ K1 A9 |4 D+ d0 z
  169.   DlyMs(MS10);
    , S2 D% g3 T! B; k# l+ ?# y: L# [( T
  170.    
    8 A+ J, z" u9 K7 R1 B$ G
  171.   LCD_WriteCmd(0x21);//LCD功能设置:芯片活动,水平寻址,使用扩展指令
    ; L% e: `' I2 p  B8 G3 E% R
  172.   LCD_WriteCmd(0x9C);//设置VOP值,室温下的编程范围为3.00-10.68- Q, {4 S7 q7 K5 G
  173.   LCD_WriteCmd(0x30);' o- U$ H! S+ L8 m1 e' {+ h- z
  174.   DlyMs(MS50);
    ' G2 R* y, J  v3 M/ i
  175. ' i  {; N2 O; Z) ~! e7 w
  176.   LCD_WriteCmd(0x20);//LCD功能设置:芯片活动,水平寻址,使用基本指令+ C5 Y4 r# c* w% M  b
  177.   LCD_WriteCmd(0x0C);//设定显示配置:普通模式7 x- k7 L6 N  ~6 ^3 ]! q5 m
  178. }$ {8 n) E* s: b5 a1 m8 [# ~

  179. , V" R" s3 d/ q% ]6 ^4 C- b
  180. 6 |& C; e* N% p; X+ h
  181. void LcdTest(void)
    0 B/ A' a6 z2 _! W& j0 ?
  182. {
    ( q* v! m1 a, z& g: `
  183.     lcd_init();          //初始化LCD模块
    7 Q- J* D7 |4 H2 `2 a0 x& c
  184.     lcd_cls(0x00);         //清屏幕
      c* n9 C8 W. k5 w& p. X3 i
  185. 7 f; }/ s4 W$ u5 q. e9 T
  186.     LcdWriteHanzi(0,2,0);    //S
    + j7 U1 O/ e. S: G# Y2 y
  187.     LcdWriteHanzi(1,2,1);    //T6 D3 H( J& Y# o# b
  188.     LcdWriteHanzi(2,2,2);    //M
    1 g' X! H  @6 c$ |+ r' x
  189.     LcdWriteHanzi(3,2,3);    //8
    4 @7 ~- l8 [( g/ n; x9 \
  190.     LcdWriteHanzi(4,2,4);    //开
    ) {) Q9 h* a, p. f# {
  191.     LcdWriteHanzi(6,2,5);    //发
    ( b- X, x; n( m" O5 i
  192.     LcdWriteHanzi(8,2,6);    //板
    / j6 E7 Z. E  A4 g$ g9 D/ n* ^

  193. + s% ^3 r# c( j( C7 J! c* i; I, U
  194.     lcd_goto1(0);+ I! i4 e3 J! O  c" i4 W; M: d
  195.     lcd_puts("This is a demo."); . S" ?# L) [* |8 m! ?7 ?
  196. 1 z6 p0 I9 G% [- E* r
  197.     lcd_goto2(0);
    ) B- H* e  \$ \0 o4 `
  198.     lcd_puts("1234567890ABCDEFG");
    & }: G% @+ I' q: p* r* z3 `$ ]

  199. 3 _. s* K5 j6 o0 J$ k' R
  200.     lcd_goto4(1);6 L/ P3 @' Y, C4 E  P# M; j2 m  `
  201.     lcd_puts("1234567890ABCDEFG");
    ; n$ e/ ?: W# j  {2 e
  202. }
    $ e$ g. T- x) q# q7 f1 F" N3 b

  203. # o# Q, v: J8 I2 K0 {
复制代码

3 j/ t7 \% O( e. d! j  W. l- ?: ?, [. q& z! v9 i8 a
赞 收藏 评论6 发布时间:2015-2-3 08:27

举报

6个回答
raulgu-332879 回答时间:2015-3-4 11:28:08
屏也不分啊、、这能用吗。应该可以
holts1 回答时间:2015-3-5 13:05:13
屏不是写的很清了
w小菜才 回答时间:2015-3-11 20:02:20
怒赞!!!!
kqh1120 回答时间:2015-3-14 19:23:57
谢谢分享。学习 了 14.gif
wu1169668869 回答时间:2015-3-14 19:59:52
我承认我没有看懂
3 ]: ~; V4 `5 E/ u# y只知道是串行口= =
: d' S% {) p9 z& i6 ?
叶开-335763 回答时间:2018-5-31 15:52:29
顶一下
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版