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

分享个驱动TFT的程序

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

: B" B: l8 U1 Z: \$ V* C程序支持STM,FSL, ST 三家公司的MCU,通用的,只要改下头文件就可以了,方便移值
7 b7 [# V! A+ q. K9 d& G2 Y* o) T$ S# [0 ^9 B5 ?% C6 }$ U; H* i

  1. $ }$ }5 Z3 ?7 ~' i: C1 d1 I
  2. #include "st7585.h"
    0 X1 D. B: i; I
  3. #include "asc0508.h"
    0 \9 W! G+ J, S+ ?0 w

  4. . w+ f5 Z1 H2 j1 V: m7 Q2 r! X
  5. const unsigned char  hanzi[]=3 G9 o: n" |8 y% h  E/ o
  6. {# {2 t. P9 H5 I& ?- _, g
  7. /*--  文字:  S  --*/
    ; y& |1 v1 Q1 j5 f
  8. /*--  Trebuchet MS12;  此字体下对应的点阵为:宽x高=16x16   --*/0 ^4 ]% k, E5 K* d
  9. 0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,$ W% d: V* Z4 y' i" I
  10. 0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    / W+ s+ h6 P5 \5 ?4 l! Q4 J* N' Q
  11. /*--  文字:  T  --*/9 g1 U" D  _: B# r
  12. /*--  Trebuchet MS12;  此字体下对应的点阵为:宽x高=16x16   --*/  r% k1 K( [' m; M! H. e
  13. 0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    4 B% N) X% O6 O$ v8 i0 p- r
  14. 0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,: H) g0 L) {/ h8 c
  15. /*--  文字:  M  --*/
    3 V, J. O6 }$ \4 Y+ u, y1 H* j
  16. /*--  Trebuchet MS12;  此字体下对应的点阵为:宽x高=16x16   --*/- o0 w/ j( \# G& Q& _& g
  17. 0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    ; D- U' X4 l1 D: ~3 Z+ M
  18. 0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,+ }3 j. b: I" u" l- T
  19. /*--  文字:  8  --*/
    5 V- h& J$ V/ t( z- o$ t6 I
  20. /*--  Trebuchet MS12;  此字体下对应的点阵为:宽x高=16x16   --*/
    , c$ z$ g/ r2 T$ Q
  21. 0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    ' K& C! J- A$ t/ H" J7 d
  22. 0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,2 w5 }3 x6 v4 h( ^) |+ I
  23. /*--  文字:  开  --*/+ R  R5 ]' i( L3 ~' ~
  24. /*--  Trebuchet MS12;  此字体下对应的点阵为:宽x高=16x16   --*/' Q- C1 y$ q7 q! |- y; ]" y
  25. 0x80,0x82,0x82,0x82,0xFE,0x82,0x82,0x82,0x82,0x82,0xFE,0x82,0x82,0x82,0x80,0x00,3 X6 I* n, E( d' h+ u8 x
  26. 0x00,0x80,0x40,0x30,0x0F,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,# f3 y6 r8 N: j. r
  27. /*--  Trebuchet MS12;  此字体下对应的点阵为:宽x高=16x16   --*/
    9 W9 ^0 \7 r7 z% C* V
  28. 0x00,0x00,0x18,0x16,0x10,0xD0,0xB8,0x97,0x90,0x90,0x90,0x92,0x94,0x10,0x00,0x00,9 A$ \) e7 N- ]# H9 g/ m
  29. 0x00,0x20,0x10,0x8C,0x83,0x80,0x41,0x46,0x28,0x10,0x28,0x44,0x43,0x80,0x80,0x00,
    5 Z: o! U3 N& y7 _# A
  30. /*--  文字:  板  --*/
    * h  m2 w1 }7 H% N7 |+ z
  31. /*--  Trebuchet MS12;  此字体下对应的点阵为:宽x高=16x16   --*/
    , h3 ^( c; j  L. s$ [9 b( V
  32. 0x10,0x10,0xD0,0xFF,0x90,0x10,0x00,0xFC,0x24,0xE4,0x24,0x22,0x23,0xE2,0x00,0x00,3 e( y* k: V. }0 m( l4 \# C# ^; O! @
  33. 0x04,0x03,0x00,0xFF,0x00,0x83,0x60,0x1F,0x80,0x41,0x26,0x18,0x26,0x41,0x80,0x00,
    1 m2 f( @- @0 w0 b  |$ O' H
  34. };- T% u2 _) K) f" |
  35.   o+ L/ q6 J) {5 y$ X; M8 Q- L
  36. + u5 p: G/ ?( G, T) I
  37. extern volatile unsigned char LCDDly;6 J1 _# t% b1 w
  38. ! f1 A( P( E- h
  39. //=============================================================' ^& Z5 i- _5 T/ d' u) \
  40. //延时
    6 R: |/ x1 x9 F( {
  41. //=============================================================# f6 i- N5 ]. ]$ N. r$ Y
  42. void DlyMs(unsigned char nCount)* `( W3 I  M  |* ?( t6 U
  43. {
    . A2 }4 N/ i$ ]- x! C
  44.   LCDDly = nCount ;1 H. x# Q1 M# `$ s
  45.   while ( LCDDly > 0 );5 p. s2 j: k# _5 i* W' i  U
  46. }4 y4 {/ H6 P: i3 A
  47. 4 p: S0 k6 |; z8 N
  48. //=============================================================- H8 d: d8 Z- w& D9 Q* X
  49. //传送数据
    4 \7 X% x. _& K" k( |0 S
  50. //=============================================================
    2 t! B& j6 W( ^$ a
  51. void LCD_WriteBus(unsigned char Value)  
    ' c9 o, z3 |& E' p2 u1 {
  52. {     unsigned char i;      # {! T4 @6 V2 E' T' B: q
  53.         LCD_SDA_1;   
    + G, h8 p8 E. H7 T( R' r. \
  54.         LCD_SCL_0;
    : m* q0 L. R  j" }
  55.     for(i=0;i<8;i++). t$ U9 Q4 P1 J* x  m; ?. U3 p
  56.     {       LCD_SCL_0;8 u( ^& y* L; i
  57.         if(Value&0x80) LCD_SDA_1; else LCD_SDA_0;
    . r4 B( q; R/ e+ e9 C+ \
  58.         LCD_SCL_1;           
    ' ~) x" Q3 y( y  W9 F9 ?# s# m
  59.          Value=Value<<1;             0 a; H) c7 Y$ D
  60.     }
    - d& \, n+ ?+ G& F) t* q* o
  61.     LCD_SCL_1;
    2 S* B) H  U% Q0 ?& y, H* M0 Q* c
  62.     LCD_SDA_1;
    9 P  e) y# i, W3 G2 ~
  63. }
    5 i! C8 h  u. ^

  64. 3 D4 `! J& ]3 V2 Q
  65. //=============================================================
    # o& C1 W3 ?. i* C( H9 }- V
  66. //写命令( W# {7 P2 d1 _/ e' c8 H/ {
  67. //=============================================================
      F: w' ?" A3 f. D& g
  68. void LCD_WriteCmd(unsigned char Cmd)     / A% C, n9 H- ?( _, O6 L& L
  69. {      c0 e& o! g6 ^% |3 O
  70.     LCD_CS_0;) b/ I2 Y! R1 [1 G; I. i& y
  71.     LCD_RS_0;
    3 z# d; x$ p) A8 h; G% h
  72.     LCD_WriteBus(Cmd);) X# j% P( Q7 F. @- z$ t" Y
  73.     LCD_CS_1;
    % M5 i, ~7 s" R2 @
  74. }
    . K, n9 U0 {. v7 ]' |6 N' v, D( o

  75. 9 S; g7 ]2 c3 m7 ?/ H0 y- X
  76. //=============================================================5 |4 y/ J% p; ~3 v$ L
  77. //写数据" C4 Z* Y& s. l. Q7 H1 e; I: m8 F
  78. //=============================================================
    8 B; H; F8 A( Q  _- C3 p
  79. void LCD_WriteDat(unsigned char Dat)     4 q" n, D/ J% I  }% H
  80. {
    # W+ S6 k* J* E* z5 H: [6 L- A
  81.     LCD_CS_0;
    / L: u2 z9 F. G" q4 s. V( g1 M
  82.     LCD_RS_1;
    & w  \7 Q" k. P/ l  _) W# I1 C( Y
  83.     LCD_WriteBus(Dat);
    ' M! U  ?0 ~+ x4 d, q
  84.     LCD_CS_1;4 ?, [) b1 A5 B, h. N# J' V1 R
  85. }2 a& X5 @* K4 D2 z' o- Y
  86. % `- K0 Y! H, Y8 G+ v
  87. /*******************************************************************************
    . T, C8 d$ T* S) U; z
  88. *函  数: LCD_SetXY(unsigned char x,unsigned char y)                            *
    * a# s! r% r% K% \5 P0 L
  89. *功  能: 移动显示指针到指定位置                                                *
    # v) x$ s  U# L, z  G, C
  90. *参  数: X,Y  座标值                                                           *
    / o  X0 M' H' K) R
  91. *******************************************************************************/ ) q  J8 E; `2 R6 u4 E( x! f
  92. void LCD_SetXY(unsigned char X,unsigned char Y)  R) H8 y" @6 ^& I- K
  93. {
    6 y" q" ]- b3 k9 v% o
  94.     LCD_WriteCmd(0x80 | X); // row
    + }" i) i+ p/ i+ y+ C4 H0 y, d- y2 E
  95.     LCD_WriteCmd(0x40 | Y); // column+ B5 E2 w9 m( h2 o
  96. }; {8 |5 N5 C  U3 b

  97. 6 W/ W" P1 l& q1 C0 K/ ?4 i
  98. /*******************************************************************************% H5 a4 T8 w) g+ S) n/ m8 S2 L
  99. *函  数: lcd_goto1(unsigned char x)                                            *
    , l6 }* n* R9 v7 K: w! @
  100. *功  能: 移动到第一行的指定位置                                                *
    8 G* m* B: C8 ^7 B, C  r$ \- m* h2 W
  101. *参  数: 字符在屏上的位置    ( 0 - 16 )                                        *
    + E  }- [& A% J/ V) u
  102. *******************************************************************************/ 7 u* ]& f. R8 ?% o2 W! S
  103. void lcd_goto1(unsigned char x){LCD_SetXY(x*6,7);} //第1行x位. }8 @9 k, W! f2 ^1 j/ o% T  {$ q
  104. void lcd_goto2(unsigned char x){LCD_SetXY(x*6,6);} //第2行x位
    8 k6 u* L% ~; D& x3 k
  105. void lcd_goto3(unsigned char x){LCD_SetXY(x*6,5);} //第3行x位
    5 {8 N" h% \. V8 e  ]
  106. void lcd_goto4(unsigned char x){LCD_SetXY(x*6,4);} //第4行x位
    / R/ B4 O9 T& P- a! T. G
  107. void lcd_goto5(unsigned char x){LCD_SetXY(x*6,3);} //第5行x位
    . u" o2 i5 L+ I3 w" u0 Y/ Z
  108. void lcd_goto6(unsigned char x){LCD_SetXY(x*6,2);} //第6行x位' e! x, q7 s  t: Z
  109. void lcd_goto7(unsigned char x){LCD_SetXY(x*6,1);} //第7行x位
    5 F9 U, Z5 _, L! d
  110. void lcd_goto8(unsigned char x){LCD_SetXY(x*6,0);} //第8行x位! J2 v2 p0 y/ @. J# }
  111. 3 o5 O; V1 r+ t) `8 {; D
  112. /*******************************************************************************) e6 [9 v7 s1 `+ A
  113. *函  数: lcd_cls(unsigned int Color)                                           *$ E' i. I* q3 a9 m
  114. *功  能: 清屏                                                                  *( k( s; R# G! v+ y/ Y. r8 v
  115. *参  数: Color                                                                 *
    7 Z. J9 W! ~3 D
  116. *******************************************************************************/
    + T0 y" n7 ?! a
  117. void lcd_cls(unsigned int Color)( |8 g0 w  u/ w* R# @& d
  118. {
    + ?* j6 r! {0 j0 Z7 w4 [- `4 g
  119.     unsigned char t;) k- q# _; M$ o1 \/ p8 x0 _
  120.     unsigned char k;  r" a( @  x; w. ^+ x
  121.     LCD_SetXY(0,0);
    0 O  T5 o  {' B+ r+ P, q" d
  122.     for(t=0;t<9;t++)) d' H) p7 E5 ]% ?- G5 g+ c/ j
  123.         { for(k=0;k<LCD_W;k++) { LCD_WriteDat(0x00); } } ! {. B7 ^$ G$ [- \
  124. }- r- ?- i1 W  Y( }' x+ X/ X

  125. # W' u% X" d% Z2 E5 s% a- k
  126. void lcd_putc(unsigned char asc)
    , D9 n) y. V+ s
  127. {
    ! ?* G0 @7 M, I  I
  128.     unsigned char line;
    . h  O% t5 R% i7 V2 t. o3 ~0 L: _
  129.     for (line=0; line<5; line++)
    . a+ t" A) O* u
  130.         LCD_WriteDat(Asc0508[(asc-32)*5+line]);
    $ V" K$ I5 r) z! h( g" D
  131.     LCD_WriteDat(0x00);
    4 V) K6 B' q  N8 ^. H( L
  132. }
    5 n9 U* U  u8 z1 a+ [; D6 [# w1 q
  133. " r: B: L; L& M. Z( r0 J/ N' D
  134. void lcd_puts(char *s)
    # z' j) Z2 S3 d% C5 K+ @
  135. { while (*s) { lcd_putc(*s++); } }8 W2 w: K/ H9 V. n( k) o$ l

  136. ! G- j+ }. z9 m! O1 s

  137. + b( p( V4 C- ?
  138. void LcdWriteHanzi(unsigned char row,unsigned char page,unsigned char c)
    # ^! R* B$ w# l$ q; _
  139. {
    / i: M; s/ R" e5 {8 P2 R
  140.     unsigned char i;      ) j- S9 n0 y; `* f; L
  141. " ^1 i+ B+ [5 H( ^$ n, @
  142.     LCD_SetXY(row*8, page);// 列,页* G; C0 M! j1 j6 G9 M
  143.     for(i=16; i<32;i++) { LCD_WriteDat(hanzi[c*32+i]); }   
    0 ~, u( u2 D9 ?7 _
  144.     LCD_SetXY(row*8, page+1);// 列,页 4 Z4 A* \; ?& r" B+ V$ Q; e( a, L
  145.     for(i=0; i<16;i++) { LCD_WriteDat(hanzi[c*32+i]);}9 R, z8 S* A: U9 e% ?; v

  146. & F+ `7 `: \& @# A
  147. }& h) [; P6 x9 E' a$ H2 t# g
  148. 0 G% W% Y4 P& S
  149. //=============================================================# n0 m. I, A7 p4 T
  150. //初始化LCD
    6 z/ `+ c2 w. w1 z: \& ~2 u
  151. //=============================================================& {; Q- d5 b7 `
  152. void lcd_init(void)7 t/ R5 R9 A0 `% q' t
  153. {
    # f, ?% g) n. d
  154. //LCD_AdjBacklight(255);  O1 b! V/ ?( X, L$ ^- l. u" P/ j
  155. /* Configure the LCD  pins --------------------------------------------*/
    - {6 S/ S, ]" j- S- Y$ D
  156. //  SET_BUS_OUTPUT();
    8 D  j  Z$ N( w: X! t/ g

  157. 6 s' e! q  o/ h, V6 W+ g
  158.   gpio_init(LCD_CS, 1, 0);, n  T; y9 w/ P4 H1 ~
  159.   gpio_init(LCD_RES, 1, 0);
    $ _  X' C  Z' T
  160.   gpio_init(LCD_RS, 1, 0);& r& D: Y* w( Y6 U
  161.   gpio_init(LCD_SDA, 1, 0);5 b7 O- E9 C/ [+ f. s1 B4 \  Q
  162.   gpio_init(LCD_SCL, 1, 0);1 J/ b4 R5 q5 W- @+ q% }

  163. % Q0 J" t5 C  k: N3 P3 r7 ~
  164.   DlyMs(MS10);
    & Y- o3 K8 G2 ~6 o9 ?5 ?4 L
  165.   LCD_CS_0;
    / V  _. ]6 {' G3 }, J# l8 i
  166.   LCD_RES_0;
    2 ]5 H1 B! A. P# \3 j$ j
  167.   DlyMs(MS10);7 u# r& q9 |% [1 o! k, x1 s% ?- k
  168.   LCD_RES_1;
    ( @- P) U/ U& A5 {0 L% B! ~4 h
  169.   DlyMs(MS10);. D* [. ~1 J5 C
  170.    
    / A( F8 h2 y, B# X" k
  171.   LCD_WriteCmd(0x21);//LCD功能设置:芯片活动,水平寻址,使用扩展指令
    ) ~' D; [& |! ?7 I% O) j' c9 k9 S
  172.   LCD_WriteCmd(0x9C);//设置VOP值,室温下的编程范围为3.00-10.68
    9 G: E8 f6 p2 T4 h6 m" p
  173.   LCD_WriteCmd(0x30);5 d- r: h# G2 @- z0 Q
  174.   DlyMs(MS50);
    # a" S1 u9 g  J# o- N4 I$ C; w2 u0 ]
  175. 9 P% Q3 X& p& O" u) c8 M. @
  176.   LCD_WriteCmd(0x20);//LCD功能设置:芯片活动,水平寻址,使用基本指令, ^$ `7 A8 T1 M4 {: D
  177.   LCD_WriteCmd(0x0C);//设定显示配置:普通模式6 }$ N2 G  X, T0 I
  178. }
      ]) a8 [, u) U5 U6 t. B

  179. : n3 }; R5 Q& F
  180. - T0 @' Y0 W  q/ r
  181. void LcdTest(void)
    ; d: @4 m9 z! U3 }
  182. {
    5 j  }, X$ l+ B0 ]5 L
  183.     lcd_init();          //初始化LCD模块 . K( i) U, g: `6 p6 n
  184.     lcd_cls(0x00);         //清屏幕
    9 d4 |- v& x/ W# ?

  185. ! q/ W  U( S& w+ S( t; A7 {4 q
  186.     LcdWriteHanzi(0,2,0);    //S
    2 a1 J1 h! {- [+ [3 Y8 C" s7 w
  187.     LcdWriteHanzi(1,2,1);    //T
    7 j# n1 r6 B, z  |' R: z" q
  188.     LcdWriteHanzi(2,2,2);    //M9 @1 r7 x/ g/ e) b% S
  189.     LcdWriteHanzi(3,2,3);    //8
    1 e% k9 W. r( z& `9 b7 S
  190.     LcdWriteHanzi(4,2,4);    //开: j( o  X( |9 ~5 M! p3 H0 `
  191.     LcdWriteHanzi(6,2,5);    //发
    ( X/ ]; C, [# D+ \$ o
  192.     LcdWriteHanzi(8,2,6);    //板
    : L( f9 M4 }9 G( }( C6 |

  193. 0 h+ q3 {' G3 C1 E
  194.     lcd_goto1(0);& d; Z; O& u/ F& R: k
  195.     lcd_puts("This is a demo."); 6 Z, z0 b6 A9 q4 P* N2 S' X
  196. % I# Q7 [8 z. k: F( G0 ]$ [" s5 w
  197.     lcd_goto2(0);4 Y9 @) A$ q6 D
  198.     lcd_puts("1234567890ABCDEFG");
    1 ?- ^' X3 A2 B8 s

  199. 2 V# t% X' n7 y7 i5 l
  200.     lcd_goto4(1);/ N# K. g# y3 J+ D8 R6 f
  201.     lcd_puts("1234567890ABCDEFG");* z3 q3 N1 A% O) i2 h8 x' U" w
  202. }
    # n4 h& _3 E; i7 K) Z

  203. ( q  [0 \, E. E" ?; T
复制代码
- I. _: l# i7 L; [6 }

2 T" C& z5 W  y  |+ C4 ^
收藏 评论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
我承认我没有看懂
% J, `+ p! t9 V+ C5 J* X; t8 R+ x只知道是串行口= =
# M; b- z* S2 d, j: l7 G
叶开-335763 回答时间:2018-5-31 15:52:29
顶一下

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版