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

终于弄明白怎么在TFT写字了,哈哈,分享,分享

[复制链接]
在路上11111111 发布时间:2017-3-31 20:38
终于弄明白怎么在TFT写字了,哈哈,不敢独自享受,分给那些还在玩TFT的同志们,咱们一起进步,嘿嘿。贴代码
  1. #include "stm32f10x.h"1 b: \* N' L$ N
  2. #include "stdio.h"
    ( P, V1 ^/ H4 R- ?% b, C

  3. : E& d' w# Y8 `/ C- ]# Y, G7 U0 F5 k: [
  4. /*******************
    2 o5 z# g' D: `2 X- X: w; [6 X
  5.     CS:片选信号;
    ( s' o/ q" h! O" F3 v# [  S
  6.                 WR:向TFTLCD写入信号;6 D4 j( k' @  q6 G7 V4 O0 g. v
  7.                 RD:从TFTLCD读出信号;: i: o" `: T5 Z" b" o# E
  8.                 RS:(0读写命令,1读写数据);) ^9 K) ?, m  Y( O: w* M8 X
  9.                 DB:16位双向数据线;*******/2 C/ ?# g) w: J2 [
  10. & }! {8 w( Z1 P8 ], Z& y0 l2 V- X/ _) V
  11. static uint32_t Time = 10;0 e. Y: V2 c5 U4 Z6 j* `
  12. 6 F7 `/ f1 A0 z4 f
  13. unsigned char ASCII_Table1[18*16] =              // ASCII
    # A' j3 ~) M$ S% i5 y
  14. {       
    + e( P) D/ R2 ^

  15. % F. t% r8 f8 k6 `7 Y
  16. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    # t' _7 ]$ g: R' X& p5 y+ n% f
  17. 0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x00,0x00,
    4 N- U0 H# q2 }" v+ X+ \9 d2 Y5 N* U) E6 T
  18. 0x1F,0xC0,0x00,0x00,0x00,0x00,0x7F,0xC0,0x00,0x00,0x00,0x00,0x81,0xC0,0x00,0x00,
    3 a) d3 W+ U! O; l" j
  19. 0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,0x01,0xC0,
    - B: h6 p" f: |1 x& _  q
  20. 0x00,0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,
    . Z( @' r' c  i+ F) s. _% V$ S' \
  21. 0x01,0xC0,0x00,0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xF8,: c) j! A) R5 z- @# @9 h
  22. 0x00,0x00,0x01,0xC0,0x01,0xF0,0x00,0x00,0x01,0xC0,0x00,0xE0,0x00,0x00,0x01,0xE0,5 F+ D( k) w( j5 T; a
  23. 0x00,0x40,0x00,0x00,0x01,0xE0,0x00,0x00,0x00,0x00,0x01,0xE0,0x00,0x00,0x00,0x00,
    # l* s) e! [' J5 _3 C7 f6 v+ x
  24. 0x01,0x38,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x00,0x18,0x00,0x00,0x07,0x80,0x00,) w. ^5 F9 K" O6 K( q
  25. 0x06,0x04,0x00,0x03,0xE0,0x00,0x03,0x8F,0xFF,0xFF,0xC3,0xC0,0x00,0xC0,0x00,0x01,
    ' J7 a- D' V* {+ D& j
  26. 0x87,0xF0,0x00,0x70,0x03,0x00,0x1F,0xF8,0x00,0x38,0x03,0x80,0x3F,0x80,0x00,0x1E,
    ' c2 Y4 n; h5 [
  27. 0x03,0x80,0xFC,0x00,0x00,0x07,0x03,0x81,0xF0,0x00,0x00,0x03,0x83,0x83,0xC0,0x00,
    + \; E2 s. S# G4 \
  28. 0x00,0x01,0xC3,0x87,0x00,0x00,0x00,0x01,0xE3,0x86,0x00,0x00,0x00,0x00,0xF3,0x8C,
    ( O1 e+ M$ Y3 O  n
  29. 0x00,0x00,0x00,0x00,0x7B,0x98,0x00,0x00,0x00,0x00,0x3B,0x90,0x00,0x00,0x00,0x00,
    7 t/ T9 ^! I! k! r' I: t' }8 h/ x
  30. 0x3F,0xB0,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xF8,0x1F,0xFF,0xFF,0xFF,0xFF,0xF0,# j1 F( ?# `6 Z3 W$ C# T
  31. 0x00,0x00,0x03,0x80,0x01,0xE0,0x00,0x00,0x03,0x80,0x00,0xC0,0x00,0x00,0x03,0x80,
    - X) ^1 h* d- v1 J0 h7 N
  32. 0x00,0x00,0x00,0x00,0x03,0xC0,0x00,0x00,0x00,0x00,0x03,0xC0,0x00,0x00,0x00,0x00,
    " V! \( t3 c6 [4 b! L* l' a6 h
  33. 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
    6 F3 H. }3 V8 A, m
  34. };* t6 ^3 I" c" q/ E8 r
  35. unsigned char ASCII_Table2[18*16] =' d6 w  l7 P( M8 b
  36. {
    ; A. P9 k2 ]1 g$ \8 ^5 Q( T5 Y
  37.        
    5 D% ^# X$ }" V$ T% k2 R

  38. 0 r! t) ?. g" M  ~% I) p
  39. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    " u5 F( _& s8 z3 S  h6 H! `
  40. 0x00,0x00,0x02,0x00,0x00,0x00,0x01,0x00,0x03,0x00,0x00,0x00,0x01,0xC0,0x03,0x00,
    2 `$ ^% \- P8 h4 u
  41. 0x00,0x00,0x01,0xC0,0x03,0xFF,0xFF,0xFF,0xFF,0xC0,0x03,0x00,0x00,0x00,0x01,0xC0,
    8 b4 B: `* M4 M8 U) `( j
  42. 0x03,0x00,0x00,0x00,0x01,0xC0,0x03,0x00,0x00,0x00,0x01,0xC0,0x03,0x10,0x00,0x00,  i; ~9 \( s  P5 R
  43. 0x01,0xC0,0x03,0x0C,0x00,0x00,0x01,0xC0,0x03,0x03,0x00,0x00,0xC1,0xC0,0x03,0x01,* H3 k6 c- P0 x$ O2 v
  44. 0x80,0x00,0xE1,0xC0,0x03,0x00,0xE0,0x01,0xE1,0xC0,0x03,0x00,0x70,0x01,0xE1,0xC0,
    5 g' [; b6 `9 h
  45. 0x03,0x00,0x30,0x03,0xC1,0xC0,0x03,0x00,0x18,0x03,0xC1,0xC0,0x03,0x00,0x1C,0x07,$ ~0 \( B6 ]- N  ~( f9 Q
  46. 0x81,0xC0,0x03,0x00,0x0C,0x0F,0x01,0xC0,0x03,0x00,0x0E,0x1E,0x01,0xC0,0x03,0x00,/ E; j1 S& b( j: ?) W  M0 v  H
  47. 0x06,0x38,0x01,0xC0,0x03,0x00,0x07,0x70,0x01,0xC0,0x03,0x00,0x07,0x40,0x01,0xC0,- |6 q# \# y- q# w5 L" Z
  48. 0x03,0x00,0x03,0x80,0x01,0xC0,0x03,0x00,0x03,0x00,0x01,0xC0,0x03,0x00,0x03,0x80,
    $ g9 O! r" Q% j0 [
  49. 0x01,0xC0,0x03,0x00,0x03,0x80,0x01,0xC0,0x03,0x00,0x03,0x80,0x01,0xC0,0x03,0x1F,1 \0 c( B+ n6 n5 x& j' o: U
  50. 0xFF,0xFF,0xF9,0xC0,0x03,0x00,0x03,0x81,0xF1,0xC0,0x03,0x00,0x03,0x80,0xE1,0xC0,( ]  x" z9 k( E/ a  q
  51. 0x03,0x00,0x03,0x80,0x41,0xC0,0x03,0x00,0x03,0x80,0x01,0xC0,0x03,0x00,0x03,0x80,
    ( c$ k. H2 c9 y, F
  52. 0x01,0xC0,0x03,0x00,0x03,0x80,0x01,0xC0,0x03,0x00,0x03,0x80,0x01,0xC0,0x03,0x00,7 v/ U' F, H5 y6 X( r  \. t& n* N
  53. 0x03,0xC0,0x01,0xC0,0x03,0x00,0x03,0xC0,0x01,0xC0,0x03,0x00,0x02,0x00,0x01,0xC0,
    - {3 X( W6 h1 P; \
  54. 0x03,0x00,0x00,0x00,0x01,0xC0,0x03,0x00,0x00,0x00,0x01,0xC0,0x03,0xFF,0xFF,0xFF,
      r+ j9 [/ O& K+ N- u, ]2 ~
  55. 0xFF,0xE0,0x03,0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,
    . R9 V3 U, j% O5 ?" Y2 u. U4 b
  56. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x007 D8 n( A" P- h! ]
  57. };) o3 D6 ~+ o2 }  k0 M5 i" P: M
  58. void STM_32_LCDInit(void);1 h3 ^8 |" R- U. K" l$ z
  59. void LCD_SetCursor(uint16_t Xpos,uint16_t Ypos);
    5 V; |' [% D2 V8 U# ?
  60. void LCD_Clear(uint16_t Color);
    * a9 q2 `4 b3 ~4 e. Q9 g

  61. / h+ u6 N: G, l% r
  62. void LCD_WriteRegIndex(uint8_t LCD_Reg);% H/ I$ p' u* ?0 @& W& a
  63. void LCD_WriteReg(uint8_t LCD_Reg,uint16_t LCD_RegValue);8 ~8 ^) R: @- b. Y) {
  64. void LCD_WriteRAM_Prepare(void);: _4 l0 p- O' \' Z$ V% J8 r
  65. void LCD_WriteRAMWord(uint16_t RGB_Code);! Z. s$ ^' M5 q! a; c5 g) D" M
  66. uint16_t LCD_ReadReg(uint8_t LCD_Reg);" i. B" l" G6 [/ X3 W/ F7 A+ ]  y
  67. void LCD_WriteRAM(uint16_t RGB_Code);
    $ ~3 x. y4 S. G* d. h1 Z# `
  68. void LCD_Pins_Config(void);
    + ~0 ^5 ~% w' D/ O; G0 C! w7 g. V
  69. ; e  }( g2 C9 t
  70. /* 别名区宏定义 bitband macro ------------------------------------------------*/' r; D. o  o9 F/ g# b
  71. /* 使用bitband可以提高设计bit操作的程序的效率,外设GPIO管脚的控制效果尤为明显 */
    3 ^% ]# W1 G+ S
  72. /* 外设别名区 对32MB外设别名区的访问映射为对1MB 外设bit-band区的访问(实际大小根据芯片有关) */- e- a2 N! J" ]: ]8 X  h9 y
  73. #define Periph_BASE         0x40000000  // 外设基地址 Peripheral
    # _- \2 d+ l% g6 X3 \4 O6 W( I$ _* Q
  74. #define Periph_BB_BASE      0x42000000  // 外设别名区基地址 Peripheral bitband
    $ C4 f' X9 [: r+ x1 X7 |
  75. ' N8 U0 G+ B' q. G/ d" x
  76. /* 注意:传入常量参数时,在编译时编译器会计算出别名区地址,这样能达到提升效率的目的(推荐)
    ' ?0 t- A7 G* t+ D! S' Z- E
  77.          如果传入变量参数,只能在运行时由STM32自己计算别名区地址,效率会大打折扣(不推荐) */3 M9 Z& s& J1 l) _8 ]0 j
  78. #define Periph_BB(PeriphAddr, BitNumber)    \0 s+ s! z9 W! e+ E0 x# M
  79.           *(__IO uint32_t *) (Periph_BB_BASE | ((PeriphAddr - Periph_BASE) << 5) | ((BitNumber) << 2))+ L4 p( e0 l9 |# q8 A9 v1 z1 }. d$ z
  80.          & g3 P: k' k5 B; H& k4 {
  81. #define Periph_ResetBit_BB(PeriphAddr, BitNumber)    \
    & w5 x6 f2 ~. l6 B9 D9 L
  82.           (*(__IO uint32_t *) (Periph_BB_BASE | ((PeriphAddr - Periph_BASE) << 5) | ((BitNumber) << 2)) = 0)
      y6 x; ]# @9 _, r
  83.    
    ; Q& e! `5 k$ ]4 W& v* x$ c
  84. #define Periph_SetBit_BB(PeriphAddr, BitNumber)       \2 N4 p( S/ b( X1 E/ C8 k
  85.           (*(__IO uint32_t *) (Periph_BB_BASE | ((PeriphAddr - Periph_BASE) << 5) | ((BitNumber) << 2)) = 1)9 b2 b/ d, `  S4 N
  86. ' Z0 y8 M& E, C! ~$ E: a
  87. #define Periph_GetBit_BB(PeriphAddr, BitNumber)       \) @$ a. }8 b/ z7 p0 B4 L8 k
  88.           (*(__IO uint32_t *) (Periph_BB_BASE | ((PeriphAddr - Periph_BASE) << 5) | ((BitNumber) << 2)))$ Y! p8 {. R7 V6 x) G. Q6 p% N

  89. . E) D9 R2 L5 r7 \
  90. /* 外设GPIO输入输出别名区定义,n为bit位置范围为0到15    *// u7 L* e  W; y7 e
  91. /* 我们对GPIOA.15操作,首先要初始化GPIO,然后使用方法: */2 F% F0 p" f9 P" g1 U$ P9 M$ k5 z; _7 H) d
  92. /* 对GPIOA.15输出低电平:   PAOutBit(15) = 0;           */
    5 h9 M$ N% j2 j% _) m
  93. /* 对GPIOA.15输出低电平:   PAOutBit(15) = 1;           */2 w3 H8 A8 M* _6 I( ]
  94. /* 读取GPIOA.15输入的电平: data = PAInBit(15);         */) {% P0 Z3 N8 U& M: k, L
  95. #define PAOutBit(n)     Periph_BB((uint32_t)&GPIOA->IDR,n)  //输出
    6 F7 K7 y* i& `, w' Z
  96. #define PASetBit(n)     (PAOutBit(n) = 1)                   //输出 高0 _! l' u; _$ |* h" b% y
  97. #define PAResetBit(n)   (PAOutBit(n) = 0)                   //输出 低
    * z- |2 R) K; a2 h0 u& k4 T
  98. #define PAInBit(n)      Periph_BB((uint32_t)&GPIOA->IDR,n)  //输入
    : N; b% M* r9 j" G. s
  99. & i* B& O, f7 r7 w1 c
  100. #define PBOutBit(n)     Periph_BB((uint32_t)&GPIOB->ODR,n)  //输出 9 D2 ]8 ~) w5 K: m
  101. #define PBSetBit(n)     (PBOutBit(n) = 1)                   //输出 高
    ; Q+ S. i! ?6 j; k1 O
  102. #define PBResetBit(n)   (PBOutBit(n) = 0)                   //输出 低, Z8 [: @9 F" _- H' K
  103. #define PBInBit(n)      Periph_BB((uint32_t)&GPIOB->IDR,n)  //输入
    3 a+ ]5 u) C3 P8 l

  104. 5 Q/ a: x# U1 G3 A; }0 a
  105. #define PCOutBit(n)     Periph_BB((uint32_t)&GPIOC->ODR,n)  //输出
    ( O4 }% V3 V% w9 S! B8 }
  106. #define PCSetBit(n)     (PCOutBit(n) = 1)                   //输出 高
    $ e1 u3 F. P6 ^: d% a- }, T& U
  107. #define PCResetBit(n)   (PCOutBit(n) = 0)                   //输出 低
    ' @1 u5 f3 |& g$ y% M3 [( ]) l
  108. #define PCInBit(n)      Periph_BB((uint32_t)&GPIOC->IDR,n)  //输入
    7 r% ?, b7 q* e
  109. + v6 R' h6 |- L, u$ t* C* V
  110. #define PDOutBit(n)     Periph_BB((uint32_t)&GPIOD->ODR,n)  //输出
      e$ W0 v% y9 l& H/ P) t
  111. #define PDSetBit(n)     (PDOutBit(n) = 1)                   //输出 高
    ) [" K) G0 H" Y- R
  112. #define PDResetBit(n)   (PDOutBit(n) = 0)                   //输出 低
    - [6 |1 A& p. u9 R8 b: u! G4 ]- F
  113. #define PDInBit(n)      Periph_BB((uint32_t)&GPIOD->IDR,n)  //输入 ) A4 c$ h9 E) i

  114. # f- V( v# g5 c8 a
  115. #define PEOutBit(n)     Periph_BB((uint32_t)&GPIOE->ODR,n)  //输出 + Q+ R7 m8 Y& n
  116. #define PESetBit(n)     (PEOutBit(n) = 1)                   //输出 高
    # `0 ^1 w+ [3 H$ i3 W5 ^" I% x
  117. #define PEResetBit(n)   (PEOutBit(n) = 0)                   //输出 低( v1 t- J3 m- e6 h
  118. #define PEInBit(n)      Periph_BB((uint32_t)&GPIOE->IDR,n)  //输入+ |/ i/ \* }3 r
  119. ! b6 ~% X+ G; b. I, z3 p0 \, [" n
  120. #define PFOutBit(n)     Periph_BB((uint32_t)&GPIOF->ODR,n)  //输出 % V9 l; d$ n6 [. s
  121. #define PFSetBit(n)     (PFOutBit(n) = 1)                   //输出 高: _" V+ w# J! S7 Y
  122. #define PFResetBit(n)   (PFOutBit(n) = 0)                   //输出 低
    / X- O4 A: Q; x7 x: V
  123. #define PFInBit(n)      Periph_BB((uint32_t)&GPIOF->IDR,n)  //输入" S; Q' A+ c9 n- S% c4 ~8 ?

  124. : i2 {' ^$ v' }% W) ^! H
  125. #define PGOutBit(n)     Periph_BB((uint32_t)&GPIOG->ODR,n)  //输出 ' B0 J* q4 k, w: N; z5 f8 |
  126. #define PGSetBit(n)     (PGOutBit(n) = 1)                   //输出 高
    , l' B4 a. q# L% [( d6 p
  127. #define PGResetBit(n)   (PGOutBit(n) = 0)                   //输出 低9 j8 Z3 r, X7 g& C
  128. #define PGInBit(n)      Periph_BB((uint32_t)&GPIOG->IDR,n)  //输入
      ?& R  }2 s' v0 p" k/ }

  129.   m: w, m1 _% T' \% T
  130. ; f! O5 L% W" z9 _3 v+ D- J0 s) }
  131. /* 内部SRAM别名区 对32MB SRAM别名区的访问映射为对1MB SRAMbit-band区的访问(实际大小根据芯片有关) */+ K7 k: }" E, {1 F: p: D
  132. #define RAM_BASE            0x20000000  // 内部SRAM基地址  ( q4 \# K: d3 k# S" f2 f! u; i5 v, i  i
  133. #define RAM_BB_BASE         0x22000000  // 内部SRAM别名区基地址- v$ h& E7 ]3 b  U
  134. 2 {0 o, Q6 j2 F9 W
  135. #define SRAM_ResetBit_BB(VarAddr, BitNumber)    \3 H2 N  \2 o5 J/ v7 @" y, s  Z$ }$ S# [
  136.           (*(__IO uint32_t *) (RAM_BB_BASE | ((VarAddr - RAM_BASE) << 5) | ((BitNumber) << 2)) = 0)
    3 A/ o1 E. [8 n3 J  A6 ]' t. @! K
  137.    ) ?9 ^# i3 O5 V" A( D0 H
  138. #define SRAM_SetBit_BB(VarAddr, BitNumber)       \% n1 a. M/ C- I" H
  139.           (*(__IO uint32_t *) (RAM_BB_BASE | ((VarAddr - RAM_BASE) << 5) | ((BitNumber) << 2)) = 1)$ n3 c; Q/ ]" y+ e6 Q0 @3 k. K
  140. 1 c) L$ K" D7 F8 X" q
  141. #define SRAM_GetBit_BB(VarAddr, BitNumber)       \
    7 z  J* f' E0 r) t+ g, f' N
  142.           (*(__IO uint32_t *) (RAM_BB_BASE | ((VarAddr - RAM_BASE) << 5) | ((BitNumber) << 2)))
    " g1 K/ V+ V0 S7 b

  143. ! h$ m& J, m& t9 K8 u2 F% K
  144. , h3 e( F+ b: {  t, C7 r
  145. - p6 C8 y& L) ]2 O. ^( n

  146. 8 ]& b9 w: |7 \
  147. /*****************这个是用来配置WR的引脚的*********/
    - Q, m7 k7 b: A5 f$ y( }2 j
  148. #define LCD_PinNum_WR 14" z9 ]8 y' }+ p! W9 o
  149. #define LCD_Pin_WR    GPIO_Pin_14
    5 P4 F5 X& I. O3 L, T
  150. #define LCD_PORT_WR   GPIOB4 |) a& I# F* u
  151. #define LCD_CLK_WR    RCC_APB2Periph_GPIOB
    # r: O. P$ e; @+ a
  152. /******************这个是用来配置LCD的CS的引脚**************/  |9 j5 T* O# n" g, l- H4 F
  153. #define LCD_PinNum_CS 8( X3 x4 ^6 V# y0 }: G
  154. #define LCD_Pin_CS    GPIO_Pin_89 g! u* g! k8 A: K4 H
  155. #define LCD_PORT_CS   GPIOC  ^+ A" E2 ~0 q  S( ^9 n  w( ?
  156. #define LCD_CLK_CS    RCC_APB2Periph_GPIOC# W5 {: j7 ]8 C7 b8 B. @+ T
  157. ! l7 R# {( f6 V7 Z7 u, O" u" ]9 C
  158. /*********这个是用来配置LCD的RS引脚的*************/' H6 }* s9 }( ]4 B9 y& E4 E3 z% D" Y, E
  159. #define LCD_PinNum_RS 13# i- Q* l8 u/ T5 i: D
  160. #define LCD_Pin_RS    GPIO_Pin_13
    * Y  W2 ]' _' v
  161. #define LCD_PORT_RS   GPIOD- V/ Z+ q2 T5 `' W$ _3 v
  162. #define LCD_CLK_RS    RCC_APB2Periph_GPIOD: V) X, r4 Y3 c7 d# Q! n9 o
  163. /**************这个是用来配置LCD的RD的引脚的**********/! W) c  F3 l$ ^$ _% O0 H
  164. #define LCD_PinNum_RD 15* F! n1 G+ y. p. v
  165. #define LCD_Pin_RD    GPIO_Pin_157 H$ V1 N1 p% A# K* I4 N+ D* i, e
  166. #define LCD_PORT_RD   GPIOD& k4 @9 I* J! g0 n
  167. #define LCD_CLK_RD    RCC_APB2Periph_GPIOD# f- \3 j5 T, N& B: F! M
  168. 7 }& ?% X8 q. q  I+ V  R* A
  169. #define LCD_PIN_DATA   GPIO_Pin_All;7 G- W! w8 A) @% l7 R
  170. #define LCD_PORT_DATA  GPIOE$ ?' U  u6 o0 Z4 d
  171. #define LCD_CLK_DATA   RCC_APB2Periph_GPIOE
    8 B$ \, ~2 h. o5 n
  172. # k1 a" ]4 r* Q+ D
  173. #define LCD_REG_0   0x00: O$ h7 R; s: ]) E: R6 s
  174. #define LCD_REG_1   0x01
    6 U, q0 l/ H1 V
  175. #define LCD_REG_2   0x02. s( `# r3 [; k
  176. #define LCD_REG_3   0x03. n$ Z. z- C, S) r
  177. #define LCD_REG_4   0x04
    $ a2 [0 w: e0 w
  178. #define LCD_REG_5   0x05
    8 B" y) `0 O- r" U! v1 k: Y# m5 K, P
  179. #define LCD_REG_6   0x06
    ) T8 w4 u. J4 M0 a" C/ l
  180. #define LCD_REG_7   0x07
    4 r% u" ~, v( I3 G' Q( a7 j( B! I2 l
  181. #define LCD_REG_8   0x085 E1 {6 e1 ^7 I4 Z/ ?9 G
  182. #define LCD_REG_9   0x09: c$ d( N+ i& Q3 Y: s
  183. #define LCD_REG_10  0x0A; U4 z0 |( k0 k- @, ?7 |
  184. #define LCD_REG_12  0x0C
    5 C: a( L$ I/ g0 u
  185. #define LCD_REG_13  0x0D
    * W: Y8 M; X: T% R
  186. #define LCD_REG_14  0x0E
    9 ]* L8 B2 }$ i* c$ J0 G
  187. #define LCD_REG_15  0x0F' D" Y* |# O3 o0 @  R# |  f4 Q
  188. #define LCD_REG_16  0x100 v/ @( b3 y" Q/ @0 b2 x
  189. #define LCD_REG_17  0x11+ s+ \* N3 O9 y, v
  190. #define LCD_REG_18  0x12
    / u2 h' ]7 k0 \& M9 D$ `
  191. #define LCD_REG_19  0x13
      i. p8 i# S* Y+ E9 F
  192. #define LCD_REG_20  0x14
    % Y0 B! }! [( N* [
  193. #define LCD_REG_21  0x15
    ) r3 K" T* N' r- E/ v0 g7 _
  194. #define LCD_REG_22  0x165 S5 ?6 @& |( s3 ]. H' y
  195. #define LCD_REG_23  0x17
    / |" {$ J" f; P, z8 {' H. F# a
  196. #define LCD_REG_24  0x18$ V4 J9 R+ T8 f
  197. #define LCD_REG_25  0x19* b4 R2 U# \2 S* M2 D8 p7 o" X
  198. #define LCD_REG_26  0x1A
    ( y9 p) ^  \' G* ~, Q2 j! q
  199. #define LCD_REG_27  0x1B4 E8 N* r& K( \  O& U
  200. #define LCD_REG_28  0x1C+ p$ k1 h5 U2 m9 a( n, \
  201. #define LCD_REG_29  0x1D
    9 N7 `, K& U- U  V& Y
  202. #define LCD_REG_30  0x1E
    # H! r  d7 x1 f  L/ ]$ U
  203. #define LCD_REG_31  0x1F
    6 e6 _1 U! @# J3 j4 @! f3 U
  204. #define LCD_REG_32  0x20
    * i' Y- _& N9 B6 ^" F
  205. #define LCD_REG_33  0x21$ W8 \1 M, W0 |! g$ B/ Q$ l
  206. #define LCD_REG_34  0x22* X  Y8 m( a0 K) y1 _
  207. #define LCD_REG_36  0x24  `% k8 z. P' i' c, [
  208. #define LCD_REG_37  0x25
    8 J6 W; {! L7 j" Q: L7 R9 ]4 |
  209. #define LCD_REG_40  0x28+ G5 I1 f, z: d! [/ k7 r- e% A2 `
  210. #define LCD_REG_41  0x29; u4 k  {/ q/ O% ?, @- z8 U0 Y' a
  211. #define LCD_REG_43  0x2B
    / x+ q0 E( W/ h6 V; e/ K8 X
  212. #define LCD_REG_45  0x2D
    7 H, m) l! d& y6 D; C. \4 a
  213. #define LCD_REG_48  0x30
    / s: G( w! q0 A) X! q4 C
  214. #define LCD_REG_49  0x31" \6 m4 V3 h7 |9 S6 M- \4 c' ~- G
  215. #define LCD_REG_50  0x32: S6 ^) q6 K) ?. u4 Y: q; @
  216. #define LCD_REG_51  0x33
    , K( X& S6 ?$ K
  217. #define LCD_REG_52  0x34
    1 p7 h, ^- V; V
  218. #define LCD_REG_53  0x35
    5 b  d3 Z/ i' J* A  N- v
  219. #define LCD_REG_54  0x36
    8 T: P& f0 R! F1 q7 K5 @- Q
  220. #define LCD_REG_55  0x37! U+ p  c0 `/ p5 a  m8 f) d& s5 K+ d
  221. #define LCD_REG_56  0x38! g' c) V# u) J6 N
  222. #define LCD_REG_57  0x392 @" ]% L% G1 D$ c# {, n! a: T" T
  223. #define LCD_REG_59  0x3B
    9 b- f- D6 \9 z  N6 E! Q9 ?. G
  224. #define LCD_REG_60  0x3C
    : P& A7 P1 P+ W- u7 j: {- F: S% L7 \
  225. #define LCD_REG_61  0x3D
    ( v  P. p& Q7 o
  226. #define LCD_REG_62  0x3E8 x! T5 i* g2 j" l5 h, H
  227. #define LCD_REG_63  0x3F
    . `; ^3 c+ \  X% y# G* M+ I% A6 T  N9 M6 e
  228. #define LCD_REG_64  0x40, l  t# v: k7 d8 z0 S# p# r
  229. #define LCD_REG_65  0x414 i5 L; `+ \, ~8 X, k' e
  230. #define LCD_REG_66  0x42
    : h' F+ Y3 {6 l$ h- V1 Y# I
  231. #define LCD_REG_67  0x43
    9 r& m/ x7 [' E+ A# ?! d5 r
  232. #define LCD_REG_68  0x44" A& K" C/ C* w9 j: ?& e: l
  233. #define LCD_REG_69  0x45
    ) J5 o7 F) W% V, p+ m% [
  234. #define LCD_REG_70  0x46
    2 \4 d+ p- \; m2 n' I
  235. #define LCD_REG_71  0x475 o* `- x. T+ L0 K/ E. X
  236. #define LCD_REG_72  0x48
    8 V. I$ \" i, ?5 Z
  237. #define LCD_REG_73  0x49  N3 X/ J% G2 C
  238. #define LCD_REG_74  0x4A5 z, {8 a+ c+ s- J
  239. #define LCD_REG_75  0x4B) s7 U. B, v1 X+ }! g
  240. #define LCD_REG_76  0x4C
    : d/ f/ Q3 y2 w  r, @8 v- h) D0 F
  241. #define LCD_REG_77  0x4D4 K4 y- l: C/ y- V1 |3 m' P
  242. #define LCD_REG_78  0x4E
    - E$ M' w! Q  n2 L
  243. #define LCD_REG_79  0x4F1 {: j; i" \- R
  244. #define LCD_REG_80  0x501 I# x! C/ Q- [! \
  245. #define LCD_REG_81  0x513 U- Y. x( t0 ]0 R
  246. #define LCD_REG_82  0x529 ?; }3 D. Z/ x- O
  247. #define LCD_REG_83  0x531 p, ]+ R: m: d! V- e/ d
  248. #define LCD_REG_96  0x60
    8 D% H- x* Y6 M& C5 M; v: V' |
  249. #define LCD_REG_97  0x61/ w* A% v: F* S( j7 J
  250. #define LCD_REG_106 0x6A# g% j0 {( [+ c5 {* u- J
  251. #define LCD_REG_118 0x76# l( W  s+ ]0 p0 h& |5 h
  252. #define LCD_REG_128 0x80
    : r# q5 V: c9 K' q3 E- F  n) W
  253. #define LCD_REG_129 0x81
    6 q, A& i+ u5 C; y
  254. #define LCD_REG_130 0x82& }2 O% q& B$ e5 i
  255. #define LCD_REG_131 0x831 D  C! d2 [* }2 g8 R
  256. #define LCD_REG_132 0x844 o! Z7 P0 v1 P' X! V& \' }
  257. #define LCD_REG_133 0x85' @/ |5 I7 P; [  N
  258. #define LCD_REG_134 0x86
    7 R+ h2 H& @- U" w  V& d7 e
  259. #define LCD_REG_135 0x87
    # X" X) |6 e2 l6 N0 j
  260. #define LCD_REG_136 0x88. A& q0 g7 F/ B+ U7 ^6 m0 A
  261. #define LCD_REG_137 0x89
    9 C- q: ]  ]" s( T- ]
  262. #define LCD_REG_139 0x8B/ I4 c8 {* E3 h- k6 [6 r5 H
  263. #define LCD_REG_140 0x8C0 B" L* {% ?9 S! V7 J& \( u$ F8 t
  264. #define LCD_REG_141 0x8C6 A4 P% a3 P: m8 G% s
  265. #define LCD_REG_143 0x8F
    0 m5 A& t0 s8 l, Y6 [- z" h
  266. #define LCD_REG_144 0x90
    : J9 ^1 I  j* m% n- c0 Z+ p
  267. #define LCD_REG_145 0x91( Q9 A. @1 S6 D* V% v; l
  268. #define LCD_REG_146 0x92
    % Z8 x3 G7 X0 P7 I+ U$ O
  269. #define LCD_REG_147 0x93& [- a5 T5 n- |: x. U7 {+ j: s
  270. #define LCD_REG_148 0x94
    : f) k# \. o% y% X+ K
  271. #define LCD_REG_149 0x95
    0 N, Y) ]$ [# G
  272. #define LCD_REG_150 0x96
    . Q1 ?9 B7 Z, S2 y3 ^
  273. #define LCD_REG_151 0x97! G0 P: s: O; l& E& }
  274. #define LCD_REG_152 0x98, b- Y6 W& }5 U7 z
  275. #define LCD_REG_153 0x99
    . @; I- e( l& j& R! ]
  276. #define LCD_REG_154 0x9A, a) l4 C- e. h% \5 n% o
  277. #define LCD_REG_157 0x9D' f: w- V# _, o* W, j
  278. #define LCD_REG_192 0xC0
    : ~# h( ~  r2 [: ^' s8 n) D
  279. #define LCD_REG_193 0xC16 |2 l6 @9 C9 l  Q# R! Z+ D( {. t
  280. #define LCD_REG_229 0xE5& z% n+ s4 Q1 D! E9 \8 }

  281. / K6 V1 o3 Y/ W0 D! Z! o& X
  282. #define WHITE 0xFFFF 0 ^6 M/ \3 D2 R4 q1 }
  283. #define BLACK 0x0000 . P0 o8 f/ T+ C5 m0 C: u( O
  284. #define BLUE 0x001F 1 M; v) K  Y' x8 m5 \# C9 o: A) y
  285. #define BRED 0XF81F
    ! u% }9 x. f6 ?1 c# n) x
  286. #define GRED 0XFFE0 1 s6 D! A7 }- q5 V
  287. #define GBLUE 0X07FF 9 ~9 G' G% S; v
  288. #define RED 0xF800 ! ^+ s) N' Z( G9 S# y
  289. #define MAGENTA 0xF81F 5 J- f! y3 G. j7 l2 D" I2 @
  290. #define GREEN 0x07E0 8 \1 ~. S6 m- C7 V6 R) v
  291. #define CYAN 0x7FFF - Q3 h. \& i0 A, f4 a$ G! F+ F
  292. #define YELLOW 0xFFE0
      Y5 j' p, T6 t( `% R) o  I$ @
  293. #define BROWN 0XBC400 ~: z( r. g0 j$ y* X! j* r- X
  294. #define BRRED 0XFC07
    , H( H! g4 a- M# z+ u/ Q
  295. #define GRAY 0X84307 [1 `" U) @! _; E, y
  296. #define DARKBLUE 0X01CF
    * D0 q8 [0 o, L! P0 I% W/ W
  297. #define LIGHTBLUE 0X7D7C * x% p2 f' C( {3 B' I6 q
  298. #define GRAYBLUE 0X5458
    5 z* E% o" k8 L+ ]$ t( {! \* R
  299. #define LIGHTGREEN 0X841F % F2 L7 w, p/ t( l+ M; Z& P
  300. #define LGRAY 0XC618
    ) Y* }" p1 J4 d) t# x" ?; O
  301. #define LGRAYBLUE 0XA651 / K/ T3 p' X# s' K- H9 c% P. e* f
  302. #define LBBLUE 0X2B12
    2 {, i! B$ Q! u8 D

  303. ! g; y! F1 B5 Q8 [- M! K

  304. ( z# z. u+ u+ H9 c, }8 |' B
  305. #define LCD_DIR_HORIZONTAL 0x0000
    0 i) B+ F) I% g& ]: D* V& j
  306. #define LCD_DIR_VERTICAL   0x0001
    " d' ]' S6 H: p* `, V3 J* @
  307. ' i5 M) H  t% H; {/ R. i
  308. #define LCD_PIXEL_WIDTH    0x01401 P% E5 Q* `& N' r# E
  309. #define LCD_PIXEL_HEIGHT   0x00F0
    , V3 P& x4 F- l; L' n8 M
  310. 4 f# i  n( K4 b  h
  311. , u3 Q" t8 M0 d6 S& r1 V( W
  312. #define SetCs Periph_BB((uint32_t)&LCD_PORT_CS->ODR,LCD_PinNum_CS) = 1;& f3 u2 s. Y6 E& D# y
  313. #define ClrCs Periph_BB((uint32_t)&LCD_PORT_CS->ODR,LCD_PinNum_CS) = 0;7 R) ?. y% c8 o$ X5 |, }

  314. 1 c) s# P* C; e- b8 t7 f
  315. + p% X- Y$ L+ t* v! G

  316. 9 h" l) b. N: c) s+ r! `; a7 u. j
  317. #define SetWr Periph_BB((uint32_t)&LCD_PORT_WR->ODR,LCD_PinNum_WR) = 1;$ K) a3 B7 q5 l5 d
  318. #define ClrWr Periph_BB((uint32_t)&LCD_PORT_WR->ODR,LCD_PinNum_WR) = 0;
    6 E. E0 P0 X* x! W6 s2 ~

  319. + z2 E& E& t' P( y7 t
  320. #define SetRs Periph_BB((uint32_t)&LCD_PORT_RS->ODR,LCD_PinNum_RS) = 1;
    ) G5 \6 {7 K+ H( k
  321. #define ClrRs Periph_BB((uint32_t)&LCD_PORT_RS->ODR,LCD_PinNum_RS) = 0;' d4 v4 {. _* l) C* p9 t* R
  322. & Y/ E+ W3 @& L
  323. #define SetRd Periph_BB((uint32_t)&LCD_PORT_RD->ODR,LCD_PinNum_RD) = 1;
      ?' g# D; O8 ^+ r  d2 `3 [
  324. #define ClrRd Periph_BB((uint32_t)&LCD_PORT_RD->ODR,LCD_PinNum_RD) = 0;
    2 n- M7 j+ _  @! m. z0 O4 C
  325. 9 r. S4 ^. t" E4 L9 k& j* ~
  326. #define LCD_Write(LCD_DATA)  LCD_PORT_DATA->ODR = LCD_DATA//ODR 是端口输出数据;5 R8 O  u$ R" Z8 M2 _8 F
  327. #define LCD_Read()           LCD_PORT_DATA->IDR//IDR 是端口输入数据;0 w- a0 ~' @$ y  E5 e

  328. / ^' K6 s+ j" K6 V3 p
  329. static __IO uint16_t DeviceIdCode;- }$ W0 r8 ^6 |" L

  330. ! `5 P6 I1 D, l$ T
  331. void SysTick_Handler(void)
    $ v: y: `/ V$ c+ _* ?
  332. {$ ^% g% S& L( w
  333.         Time--;' q- ?) B" U% W% D* o
  334.         if(Time==0)$ |/ Y: I8 [& @+ c
  335.         {. f1 k. S& h) f
  336.                 Time = 10;0 y; l8 W2 @8 b) m
  337.                 GPIOD->ODR ^= GPIO_Pin_2;
    0 F: B) A* V2 o' c) b! \- R
  338.         }
    & U! t$ R' o7 W" `
  339. }
    1 ]7 [7 b0 Y, z( z& Z

  340. 9 ^6 Q! v9 M9 c
  341. void Delay_us(__IO u32 us)/ ~. m3 O- n" X8 U
  342. {9 w& _' k% z; d/ f$ I* \; A
  343.         Time = us;
    / l. f. [3 j7 P4 n; R- Q3 b$ ^
  344.         SysTick->CTRL = 0x07;//Enable SysTick IT / F5 x# ]! V3 Q4 u3 X7 U
  345.         while(Time!=0);  L' Q8 A8 c1 Q2 Q* _
  346.         SysTick->CTRL = 0x00;; |0 T1 _" ]0 b1 G
  347. }
    + h3 P( A# B& Z* t( q9 ^
  348. void Delay_ms(__IO u32 ms)9 S3 o' _& [1 V6 i
  349. {
    & A6 g$ z  S- B6 [& g
  350.         Time = ms;
    ( W0 Z! e, `) J
  351.         Delay_us(ms*1000);2 _5 D- ]2 H; G" L
  352. }- K0 k& {  C  [6 P4 C$ t
  353. void Delay_s(__IO u32 s)/ q0 t5 }3 l+ q/ d. i9 T' Z/ M" a4 N
  354. {
    8 k+ p% q  S9 W
  355.         Time = s;# K; O! T0 Q# n) i
  356.         Delay_ms(s*1000);
    8 w' }1 M3 }; Z5 t  r
  357. }  p3 A9 x2 u& [1 j

  358. ( T; L6 w6 z4 z* s7 @. D0 x& j
  359. void LCD_DB_AS_InPut(void)//虚读的前面需要输入的数据& m0 x! _7 n5 @  h- H% ?$ A
  360. {
    7 z6 p% P  \0 P2 ~$ H/ B7 H3 G
  361.         GPIO_InitTypeDef GPIO_InitStructure;
    ' I, \; Q9 o% J# U" x. j
  362.         # d+ i" i/ v* I( P  K5 f
  363.         GPIO_InitStructure.GPIO_Pin = LCD_PIN_DATA;
    # s9 b' H0 C# n7 S3 H  }
  364.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;/ H! d( T5 @* K0 O
  365.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;* t; P+ n2 }, T8 _9 R. w
  366.   GPIO_Init(LCD_PORT_DATA,&GPIO_InitStructure);
    + N% [& e2 R$ [+ p% b: s  v6 N
  367. }
    % C  e6 y2 N0 ?
  368. void LCD_DB_AS_OutPut(void)//虚读读完之后输出的数据& G% }5 N5 A6 h" [
  369. {
    ; f  N* a2 R4 z% y5 Y2 v: a
  370.         GPIO_InitTypeDef  GPIO_InitStructure;
    % N2 r0 T: a$ |+ z7 Y! X/ m
  371.         % w' k; I+ I7 G' s* f
  372.         GPIO_InitStructure.GPIO_Pin = LCD_PIN_DATA;
    8 r4 v7 \9 t3 |' D
  373.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    , |' z/ r7 I8 u
  374.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;; R8 i2 p; _5 x) B7 ?
  375.         GPIO_Init(LCD_PORT_DATA,&GPIO_InitStructure);3 h; K6 d) G6 u6 p9 ^" ]: O6 ]& b
  376. }
    3 |$ P( W% Q& E; x
  377. void delay(__IO uint32_t nCount)
      X; T% ^5 u' U
  378. {1 Z$ a. b  I7 A
  379.     for (; nCount != 0; nCount--);
    7 O4 y9 M/ F7 b; ?
  380. }% \9 B) f9 V9 L& p
  381. void STM_32_LCDInit(void)//配置LCD,主要是配置LCD的指令# o3 B# t0 h; u) A
  382. {
    3 |0 P) q: Q. q3 t: d0 {
  383.         LCD_Pins_Config();
    - D; l5 G/ @) X) e* \' q8 D
  384.         + s1 M/ K; b; ~% a4 J" k- ?4 V
  385.         delay(12000);
    + s$ v9 c3 O3 J* g3 A% v2 @6 t  R
  386.         LCD_WriteReg(0X0000,0X0001);//打开振荡器
    - G7 G: u) P' ?; E  o& z# r7 p
  387.         delay(12000);
    ; O$ x3 a" Q! B7 E, [0 Y
  388.         DeviceIdCode = LCD_ReadReg(0X0000);//将芯片的ID读出来$ u/ r9 d) A( |  w
  389.         DeviceIdCode = LCD_ReadReg(0x0000);$ g. T. O( O7 O, ?
  390. 9 T1 r  U1 U3 Y0 B9 b4 C- U) N
  391.         delay(12000);
    ( S1 ~: u  u2 r$ i
  392.         if(DeviceIdCode == 0x9320||DeviceIdCode == 0x9300)% _7 ]! E1 }' Y' i
  393.         {
    0 y6 l: B& H9 S
  394.                 LCD_WriteReg(0x00,0x0001);//打开内部振荡器1 Y( Y$ D# M  d) n& s2 _1 {2 E
  395.                 LCD_WriteReg(0x01,0x0100);//这个额是配置ss
    7 b& @& I5 E# c' t4 D" ^7 @, {
  396.                 //SS和GS决定是从哪个角作为第一个顶点的从上到下是GS 1---320,从右到作是1--720;
    , K/ A  Y4 t6 ]: f# z* u
  397.                 LCD_WriteReg(0x02,0x0400);//这个配置的是是否需要画线倒置(这里只只是显示颜色所以不需要配置(B/C和EOF)& h. p  f5 i$ f- d2 K: c9 M1 p
  398.                 LCD_WriteReg(0x03,0x1010);//这个是配置的是AM和ID[1:0];这里的只要两个在同一个方向上显示的额数据就基本一直;
    $ p7 S$ T$ \; g5 ]3 b/ f
  399.                 6 o* \2 L! T( v5 Y  a- D
  400.                 LCD_WriteReg(0x04,0x0000);//
    ) C, d+ ?7 K$ f, h
  401.                 //这个是用来设置屏幕的大小的,
    # N. C1 l# Y& m% ?$ Q. o# @5 U0 K
  402.                 //RSZ[1:0] 是用来设置尺寸大小的,00是不设置,( |$ L' K7 E. Q+ B' Y7 R
  403.                 //RCH[1:0] 是用来设置横屏剩余的像素的多少3 G- t3 P' w- V! S: x2 q7 X
  404.                 //RCV[1:0] 是用来设置竖屏剩余的像素的多少
    + j5 x; P5 n/ O) I
  405.                 LCD_WriteReg(0x08,0x0202);
    8 L6 d8 P! ^# `" r( E
  406.                 //这个是设置的是指定前后的Line' P1 Y: e+ c. ?
  407.                 LCD_WriteReg(0x09,0x0000);. @6 ?5 _- R4 G9 s6 O! [+ k
  408.                 //
    9 ^6 }; F* c! u" U
  409.                 LCD_WriteReg(0x0a,0x0000);//这个配置的东西几乎没影响$ A( ?) O8 D4 u% y# b
  410.                 LCD_WriteReg(0x0c,0x0001);//这个选择的是配置的是interal System;) g0 C" ~7 Y3 l4 J/ U
  411.                 LCD_WriteReg(0x0d,0x0000);//这个是设置帧周期的输出位置
    & g$ k0 g# u/ C/ j
  412.                 LCD_WriteReg(0x0f,0x0000);//这个是设置的是/ ?% [+ f0 q' P
  413.                 $ r0 J/ X0 Q# j. _' L8 j8 j3 A
  414. //                 delay(5*12000);
    ' h) B2 c' P( t) Z( O7 K
  415. //                 LCD_WriteReg(0x07,0x0201);
      }6 f& B  B3 m4 ?" C7 f
  416. //                 delay(5*12000);& c; b  b& R+ L
  417.                 ' J8 `+ P) q7 Q' n: f# l9 l
  418.                 LCD_WriteReg(0x10,0x10E0);//这个是根据寄存器配置的//(1<<12)|(0<<8)|(1<<7)|(1<<6)|(0<<4));( V$ b: I8 e9 R0 j; @$ _
  419.                 LCD_WriteReg(0x11,0x0007);//0111$ B, u2 d+ V7 X" M0 V4 E% w- J( C
  420.                 LCD_WriteReg(0x12,0x011A);//(1<<8)|(1<<4)|(0<<0));
    0 }- m/ a- X! p5 S3 l" F: C. U" W5 ~
  421.                 LCD_WriteReg(0x13,0x0b00);//
    6 n7 u6 q6 g! f
  422.                 LCD_WriteReg(0x29,0x0000);
    + N1 w( _+ \) ?( o8 \# e& J' R0 a
  423.                 LCD_WriteReg(0x2b,(1<<14)|(1<<4));* a9 [; l( V0 @0 H' H* X7 ]
  424.                 LCD_WriteReg(0x50,0);//设置左边的位置
    ! N5 `/ j7 K( C1 P. B8 }# X
  425.                 LCD_WriteReg(0x51,239);//设置右边的位置  F/ q; I, D2 |* f& S* _6 R
  426.                 LCD_WriteReg(0x52,0);//设置上边的位置5 M( m+ c# k. Y5 d) U7 ~6 F6 l  @
  427.                 LCD_WriteReg(0x53,319);//设置下边的位置8 f+ H: c7 Z9 x+ |) w: i8 }
  428.                 LCD_WriteReg(0x60,0x2700);//这个必须得选择一个NL来配置) t) _3 w4 P  s& ?; c7 d
  429.                 LCD_WriteReg(0x61,0x0001);//这个主要是用灰色反转;
    , u/ [# J1 p5 q0 x" `
  430.                 LCD_WriteReg(0x6a,0x0000);//changdushi 0
    $ x& M8 q: B- E) B/ s
  431.                 LCD_WriteReg(0x80,0x0000);
    6 V* C: T8 |; B, z% \1 x) W
  432.                 LCD_WriteReg(0x81,0x0000);# ^8 O9 V2 u4 m. P, i. }3 D/ D
  433.                 LCD_WriteReg(0x82,0x0000);/ J$ i4 V( u; V! r2 a7 C
  434.                 LCD_WriteReg(0x83,0x0000);
    1 ^: r% r' _+ ]* y$ q
  435.                 LCD_WriteReg(0x84,0x0000);- [. G4 {6 F% D$ n7 |  M- A
  436.                 LCD_WriteReg(0x85,0x0000);, N9 Z* I' Y0 Z) E: Z
  437.                 LCD_WriteReg(0x90,0x0010);//
    + f9 O( s' R. y0 f) X
  438.                 LCD_WriteReg(0x92,0x0000);8 y- Q1 J" X: i2 h& v, i5 }5 b
  439.                 LCD_WriteReg(0x93,0x0000);
    ; {; @4 V: K( w9 e
  440.                 LCD_WriteReg(0x95,0x0000);0 e4 K9 H0 q+ f5 ]$ i, J# T
  441.                 LCD_WriteReg(0x97,0x0000);
    % Q' }" P8 W7 \
  442.                 LCD_WriteReg(0x98,0x0000);! K- [1 U0 U; e$ j$ }8 _
  443. //                 delay(5*12000);
    1 G% J. |& E' f
  444.                 LCD_WriteReg(0x07,0x0133);//BASSE位必须设为1! [# V" \( d0 I) Q# w; A6 T: @" N
  445. //                 delay(5*12000);
    , V" J& H3 z8 m
  446.         }1 o$ c" k; V& B1 U/ D" ?5 [$ d
  447.         else if(DeviceIdCode == 0x8989)( W. y8 s" D0 B  i- t2 l( W/ n" @
  448.         {% u5 Y- L, ?  ]: K$ w8 R. @
  449.                 LCD_WriteReg(0x0000,0x0001);( x( x& x; P8 X: |* G! ~  R
  450.                 LCD_WriteReg(0x0003,0xA8A4);
    & P0 v' q, V6 e* S0 s8 Y
  451.                 LCD_WriteReg(0x000c,0x0000);
      X9 B* h' X/ ~. g3 r- p  _
  452.                 LCD_WriteReg(0x000D,0x080c);
    , o% Q5 V% P7 a& F' g
  453.                 LCD_WriteReg(0x000E,0x2B00);, z# H2 }9 \0 m2 L& \  r  d
  454.                 LCD_WriteReg(0x001E,0x00B0);
    * G( ^. Q0 g7 |% E
  455.                 LCD_WriteReg(0x0001,0X293F);; J% C) _# V* }2 l
  456.                 LCD_WriteReg(0x0002,0x0600);
    5 E; w* a5 a3 E# U
  457.                 LCD_WriteReg(0x0010,0x0000);
    ! t" }1 n. }0 H
  458.                 LCD_WriteReg(0x0011,0x6078);& O- L5 `1 y7 F9 d( Z2 |9 h: x
  459.                 LCD_WriteReg(0x0005,0x0000);
    2 T# E0 _, B, b4 u. r
  460.                 LCD_WriteReg(0x0006,0x0000);4 x% }  S4 r6 f0 X$ H( g( {8 h
  461.                 LCD_WriteReg(0x0016,0xEF1C);
    ( u( I3 r1 ^6 [- |9 W0 O4 I; D
  462.                 LCD_WriteReg(0x0017,0x0003);
    8 n4 S4 L' D' I
  463.                 LCD_WriteReg(0x0007,0x0233);5 A0 A, k- ?/ {$ p# ]
  464.                 LCD_WriteReg(0x000B,0x0000);
    7 \1 K+ o! ?1 ?4 l
  465.                 LCD_WriteReg(0x000F,0x0000);' m) R5 _# I! Q7 b' O
  466.                 LCD_WriteReg(0x0041,0x0000);
    8 T% Q6 z- q$ ^6 M! H
  467.                 LCD_WriteReg(0x0042,0x0000);9 ]% ~+ B& g3 ]+ |" s+ A
  468.                 LCD_WriteReg(0x0048,0x0000);5 ^- p1 k0 q1 ^2 o! n
  469.                 LCD_WriteReg(0x0049,0x013F);
    6 h% f# X, r' D3 c! ?$ Q
  470.                 LCD_WriteReg(0x004A,0x0000);( e! E) N0 |  T5 i5 W. A7 |
  471.                 LCD_WriteReg(0x004B,0x0000);+ r$ s6 k$ A( F; B
  472.                 LCD_WriteReg(0x0044,0xEF00);$ z. T/ s; z2 k& L
  473.                 LCD_WriteReg(0x0045,0x0000);0 C( D# O7 C+ X* {! b
  474.                 LCD_WriteReg(0x0046,0x013F);
    3 o+ _, m: d% Q) H! |, c
  475.     LCD_WriteReg(0x0030,0x0707);
    6 h. F* M2 q! e! [
  476.     LCD_WriteReg(0x0031,0x0204);* j( r# I* P( z8 G7 o! ]3 w, m- l
  477.     LCD_WriteReg(0x0032,0x0204);
    , L, D; [. s  q7 M" @) F& i5 B
  478.     LCD_WriteReg(0x0033,0x0502);& A$ `) e2 Q6 N- I
  479.     LCD_WriteReg(0x0034,0x0507);
    $ r/ ?; m7 t* v5 N9 B
  480.     LCD_WriteReg(0x0035,0x0204);
      n% ]5 g  Y* b6 ]8 H
  481.     LCD_WriteReg(0x0036,0x0204);
    " O- i( W  E( G6 H2 D
  482.     LCD_WriteReg(0x0037,0x0502);
    + V' L4 S, v' x. }/ z
  483.                 LCD_WriteReg(0x003A,0x0302);; v: Z0 ~7 e' m1 j
  484.                 LCD_WriteReg(0x003B,0x0302);
    / a% ^2 m6 x3 H" L. ~- e
  485.                 LCD_WriteReg(0x0023,0x0000);
    % F! n1 M0 W$ b( I# i* n+ J* _+ t
  486.                 LCD_WriteReg(0x0024,0x0000);- T$ {! l" _$ {3 s$ ?* ?( s
  487.                 LCD_WriteReg(0x0025,0xC000);
    - B  w  ~! e7 V  q+ l7 {
  488.                 LCD_WriteReg(0x004e,0);
    ( ~% l. t( @, _
  489.                 LCD_WriteReg(0x004f,0);
    # t, r* \! T  o1 u
  490.         }- W* s& o+ x& F$ S6 _' q5 X6 r
  491.         else if(DeviceIdCode == 0x9325||DeviceIdCode==0x9328)7 \: V0 M. P; H1 s0 u# h2 A  S
  492.         {
    ) k+ B& Z: F  P7 z8 ^& E3 @$ ?/ H
  493.                 LCD_WriteReg(0x00e3,0x3008);
    4 p  h6 L0 K' m
  494.                 LCD_WriteReg(0x00e7,0x0012);; m  V5 ~- t0 P+ ?9 V
  495.                 LCD_WriteReg(0x00ef,0x1231);" j7 n, j$ i% z/ U1 f3 n9 C
  496.                 LCD_WriteReg(0x0000,0x0001);
    ( l( ^0 R4 l! a& _4 Z8 B
  497.                 LCD_WriteReg(0x0002,0x0700);: R: C- m8 x0 @; m: }
  498.                 LCD_WriteReg(0x0003,(1<<12)|(0<<5)|(1<<4)|(1<<3));* ]+ f  A& e" _& \8 ]7 m, ~
  499.                 LCD_WriteReg(0x0004,0x0000);3 `7 X8 S$ X5 B% V* S! a
  500.                 LCD_WriteReg(0x0008,0x0207);
    / e. a% P) n3 }4 G  [4 R
  501.                 LCD_WriteReg(0x0009,0x0000);
    ( H0 \# q% n: Y8 j* Y
  502.                 LCD_WriteReg(0x000a,0x0000);9 X& y# x& I- m: I9 ?- t0 h
  503.                 LCD_WriteReg(0x000c,0x0001);
    * q/ r" v& j6 ~. u0 C4 [6 s+ l
  504.                 LCD_WriteReg(0x000d,0x0000);1 I8 I/ k# T/ @
  505.                 LCD_WriteReg(0x000f,0x0000);
    / t' `& p5 N$ _1 \8 q( x+ j5 L
  506.                 LCD_WriteReg(0x0010,0x0000);- U. D# J8 ^% a$ F# }5 ?& Z
  507.                 LCD_WriteReg(0x0011,0x0007);
    9 _/ S3 x' Z0 `' W  q! [7 \; ?
  508.                 LCD_WriteReg(0x0012,0x0000);+ Q3 o* ~4 H) X9 U
  509.                 LCD_WriteReg(0x0013,0x0000);6 a0 _/ G2 _6 {( A* u
  510.                 Delay_ms(5);
    + B. X' ]6 z( W. j8 {
  511.                 Delay_ms(5);8 V) w" ^1 h4 ^" K$ R5 I" o' R
  512.                 LCD_WriteReg(0x0010,0x1590);
      _; \/ R& m" S- A! K( W
  513.                 LCD_WriteReg(0x0011,0x0227);9 k) u+ u9 L) m8 |( y* o
  514.                 Delay_ms(5);
    ( T) ?  f, g7 M' b+ {  h
  515.                 Delay_ms(5);: D" c3 W9 a; {9 Q5 r% b' M
  516.                 LCD_WriteReg(0x0012,0x009c);% |6 ~5 D5 c) Y7 R: N
  517.                 Delay_ms(5);' N. s) ?( J! w( X8 u  S2 b
  518.                 Delay_ms(5);, L, N; ~5 H8 q5 t8 t) Z/ T
  519.                 LCD_WriteReg(0x0013,0x1900);
    7 P4 ~! K+ r6 Q  z" c
  520.                 LCD_WriteReg(0x0029,0x0023);/ _, U/ d% W# ]: w
  521.                 LCD_WriteReg(0x002b,0x000e);
    ' c1 y$ A' l0 `+ k6 I
  522.                 Delay_ms(5);
    ! K: Q8 `3 {( O  K1 S/ X7 k
  523.                 Delay_ms(5);
    8 M2 O: Q8 q5 ]" C
  524.                 LCD_WriteReg(0x0020,0x0000);6 ~- R4 c& c4 ?, h3 u) S' ]
  525.                 LCD_WriteReg(0x0021,0x0000);
    5 R: _% K- {  E& k$ u# }1 a( K! @
  526.                 Delay_ms(5);
    ; x4 n) W7 G( [3 C$ [) m# V  T- F
  527.                 Delay_ms(5);
    " g& _2 d8 E6 o8 `" @7 T) d/ v9 N
  528.                 LCD_WriteReg(0x0030,0x0007);: b! E$ X+ S; _" `  l# G, F7 \
  529.                 LCD_WriteReg(0x0031,0x0707);2 l! Z/ }8 W* \! X" H' h: t
  530.                 LCD_WriteReg(0x0032,0x0006);
    # R+ o% W& H  T$ N2 K3 R' z
  531.                 LCD_WriteReg(0x0035,0x0704);
    ; ?9 h4 h# d2 T& @, [9 ?, C8 A
  532.                 LCD_WriteReg(0x0036,0x1f04);
    3 j# o! H: d  X7 n  r2 K$ ]; U! |
  533.                 LCD_WriteReg(0x0037,0x0004);
    2 @9 E/ n3 }- N% L0 `1 p+ w
  534.                 LCD_WriteReg(0x0038,0x0000);' v% c$ K" ~+ M+ W% b% `% R
  535.                 LCD_WriteReg(0x0039,0x0706);
    2 w4 [+ q; t4 t# ]* I, W0 P3 G2 B
  536.                 LCD_WriteReg(0x003c,0x0701);  r* s7 T, t4 f# O
  537.                 LCD_WriteReg(0x003d,0x000f);
    ; H  m+ B! [8 @  c
  538.                 Delay_ms(5);: Q* T/ A  \8 W( O
  539.                 Delay_ms(5);) {2 l; P4 m6 @3 ^. f6 c6 A
  540.                 LCD_WriteReg(0x0050,0x0000);
    5 y# c4 o  ]: |. y* r' v
  541.                 LCD_WriteReg(0x0051,0x00ef);0 a2 z, K8 v* l
  542.                 LCD_WriteReg(0x0052,0x0000);
    # u& O% R7 J, g! }
  543.                 LCD_WriteReg(0x0053,0x013f);
    # y5 S/ [# U" Z5 a, L4 U
  544.                 LCD_WriteReg(0x0060,0xa700);
    0 o: ^  E% x* c: R" y# V& b& g
  545.                 LCD_WriteReg(0x006a,0x0001);2 d1 ]( O* D' y. x  V* D
  546.                 LCD_WriteReg(0x0080,0x0000);9 q# d4 w$ M+ t) a3 |
  547.                 LCD_WriteReg(0x0081,0x0000);
    # P  v* |. Q/ Y/ ~( Y
  548.                 LCD_WriteReg(0x0082,0x0000);
    & t4 A, x, S+ m8 R$ e, f
  549.                 LCD_WriteReg(0x0083,0x0000);
    9 A$ U' z) x0 Q# j. z' f$ L0 _8 {3 W
  550.                 LCD_WriteReg(0x0084,0x0000);
    . t; O: c/ l' X( [6 ~  s' g
  551.                 LCD_WriteReg(0x0085,0x0000);8 t* s; |) ?3 G# b9 g
  552.                 LCD_WriteReg(0x0090,0x0010);" \+ G- |( \. q" R% _2 l9 W) _1 t- e* h
  553.                 LCD_WriteReg(0x0092,0x0600);: ^& l5 F0 L7 p) H
  554.                 if(DeviceIdCode == 0x9328); ?+ R7 u% g& \- v# l$ @0 |
  555.                 {1 a4 k1 H/ @7 o0 R! c
  556.                         LCD_WriteReg(0x0093,0x0003);( R8 I# |$ R/ ~+ L: r4 z+ v3 S& M
  557.                         LCD_WriteReg(0x0095,0x0110);" m3 ]' f6 }- c
  558.                         LCD_WriteReg(0x0097,0x0000);8 H& ~6 P' O1 F8 Z' S) R$ T  z( e
  559.                         LCD_WriteReg(0x0098,0x0000);" o. z5 X( k9 a% I! ]
  560.                 }' X6 T5 o1 Y' @  {* V) D
  561.                 LCD_WriteReg(0x0007,0x0133);
    , ]  A* U  p' w; t
  562.                 LCD_WriteReg(0x0020,0x0000);4 X# Q; @3 c% W' k  f; d  u/ M  P
  563.                 LCD_WriteReg(0x0021,0x0000);
    " B% }2 P7 F3 p
  564.         }0 Y, @( B' K( L$ m6 V
  565.         else if(DeviceIdCode==0x9331)
    , o/ V0 Y0 ^- Q1 d3 n
  566.         {
    * T$ I; Q% P$ B6 A7 G3 H- s
  567.                 LCD_WriteReg(0x00E7,0x1014);
      J' F+ x1 H# v7 T, w, I4 J  \
  568.                 LCD_WriteReg(0x0001,0x0000);2 z$ [) ?- T1 l
  569.                 LCD_WriteReg(0x0002,0x0200);
    / S/ j# Q5 W+ t' Y0 O& O
  570.                 LCD_WriteReg(0x0003,0x1030);% g0 Y( G$ P" e
  571.                 LCD_WriteReg(0x0008,0x0202);" E. [2 q0 ^) F. D* e
  572.                 LCD_WriteReg(0x0009,0x0000);8 ~6 d8 t/ w! ~6 p, Z8 v
  573.                 LCD_WriteReg(0x000A,0x0000);  a$ P0 s8 h4 k+ ?1 ^; j
  574.                 LCD_WriteReg(0x000C,0x0000);! R$ x$ R: N& c* n: E
  575.                 LCD_WriteReg(0x000D,0x0000);- v1 H6 o9 w& G6 c# X: d- L. b
  576.                 LCD_WriteReg(0x000F,0x0000);
    6 B% b! ]) B" P% J: K$ j( \( U
  577.                 LCD_WriteReg(0x0010,0x0000);
    9 l; x$ L7 Z- J( B5 a- C/ R
  578.                 LCD_WriteReg(0x0011,0x0007);
    ( \. _) `$ R4 m
  579.                 LCD_WriteReg(0x0012,0x0000);6 Z4 y1 f3 n! w  ^) T3 R  X: }
  580.                 LCD_WriteReg(0x0013,0x0000);5 V8 X3 R, b* s. F
  581.                 Delay_ms(5);
    " ?  N* H! G' F$ L( O% Z3 f5 Q
  582.                 LCD_WriteReg(0x0010,0x1690);
    " F4 B0 ~2 P* n9 r0 a! A
  583.                 LCD_WriteReg(0x0011,0x0227);
      ^+ L5 O3 K! G" Z7 k3 f5 s& k" e
  584.                 Delay_ms(2);
    . W( ?/ y" y8 k0 R+ d3 K
  585.                 LCD_WriteReg(0x0012,0x000c);
    # z* J; ^, I0 {' ^# p
  586.                 Delay_ms(2);
    8 B9 p" r" X. w6 r7 w5 F7 n/ n
  587.                 LCD_WriteReg(0x0013,0x0800);
    - ~4 M4 ]* ]7 i5 w8 q9 ]8 B
  588.                 LCD_WriteReg(0x0029,0x0011);
    " r6 P+ Z  U2 a
  589.                 LCD_WriteReg(0x002B,0x000B);
    3 v8 R* N  L1 g0 t' k
  590.                 Delay_ms(2);$ j: w$ y3 C6 k+ @% h6 R' r
  591.                 LCD_WriteReg(0x0020,0x0000);
    ! X. m- S' C- V" c& x( g4 u
  592.                 LCD_WriteReg(0x0021,0x0000);
      z* r, Y  x# Q& l! n2 }9 H
  593.                
    9 Q# u9 {- v/ C6 s
  594.                 LCD_WriteReg(0x0030,0x0000);8 n1 P; G# M+ W* |  M; v% h
  595.                 LCD_WriteReg(0x0031,0x0106);+ Y, W6 E5 u8 q7 z8 A
  596.                 LCD_WriteReg(0x0032,0x0000);, L! o  g, `! Y. }
  597.                 LCD_WriteReg(0x0035,0x0204);% L9 \" y( x0 P6 z6 _
  598.                 LCD_WriteReg(0x0036,0x160A);8 G0 S; }! H8 f# I: j+ E, ]7 E
  599.                 LCD_WriteReg(0x0037,0x0707);
    ; g3 R3 _; `0 T. B7 r' r& a
  600.                 LCD_WriteReg(0x0038,0x0106);8 L$ o3 L% e7 E1 R
  601.                 LCD_WriteReg(0x0039,0x0707);
    4 D; H. ^2 @  D  p/ [3 Y' H% }
  602.                 LCD_WriteReg(0x003c,0x0402);. s, D* C% V/ n4 o+ P' G  o
  603.                 LCD_WriteReg(0x003D,0x0C0F);
    % u6 I4 T" @1 u( N7 Q" D7 [$ `
  604.                 LCD_WriteReg(0x0050,0x0000);) W# O5 Z1 E, Z' I& @6 w4 _
  605.                 LCD_WriteReg(0x0051,0x00EF);, B7 N* W& D. X$ p/ x7 \% R
  606.                 LCD_WriteReg(0x0052,0x0000);
    ! Z4 z3 ]. r9 ^+ x
  607.                 LCD_WriteReg(0x0053,0x013F);
    , y& o9 {+ Y& N5 @/ w  g7 M
  608.                 LCD_WriteReg(0x0060,0x2700);
      y# s) g5 D) }7 r( Q
  609.                 LCD_WriteReg(0x0061,0x0001);
    9 b$ m2 R, c( b2 B' a2 B
  610.                 LCD_WriteReg(0x006A,0x0000);
    $ w1 @; G# ]2 V$ X4 i( A
  611.                 LCD_WriteReg(0x0080,0x0000);$ ^/ X' j4 |+ f4 R
  612.                 LCD_WriteReg(0x0081,0x0000);
    2 Z0 V$ I4 H; Q
  613.                 LCD_WriteReg(0x0082,0x0000);
    4 I' Y6 `# X. x# q0 B, w
  614.                 LCD_WriteReg(0x0083,0x0000);0 I5 C( l' L3 C0 s2 \3 ~
  615.                 LCD_WriteReg(0x0084,0x0000);3 |! a6 d, p9 \2 o- `: ]- g' W5 _
  616.                 LCD_WriteReg(0x0085,0x0000);) X2 y. v( i6 x/ E3 @( w
  617.                 LCD_WriteReg(0x0090,0x0010);
    % j5 v/ E! g# W* f. }: g( o8 J3 ]
  618.                 LCD_WriteReg(0x0092,0x0600);
    , ^1 O4 X" l0 f5 I# y7 ~& U! G
  619.                 LCD_WriteReg(0x0007,0x0021);
    4 l( d& d) E: f8 Q( ]' l3 k
  620.                 Delay_ms(2);
    ; k$ Z$ c& r) I5 v. g+ k1 W
  621.                 LCD_WriteReg(0x0007,0x0133);( X( e) k& T3 H. V& Y8 ?
  622.                 Delay_ms(2);
    $ a: _, G. _& ]
  623.         }
    4 T$ l, [" j+ o4 C* W, d; g
  624.         else if(DeviceIdCode==0x9919)
    ( I8 o! o5 e: [. _5 Q- @! P3 D/ Y' b1 C
  625.         {
    5 w# e& i+ x& g! h
  626.                 LCD_WriteReg(0x28,0x0006);
    ; c3 ?. I: x( E( P& Y
  627.                 LCD_WriteReg(0x00,0x0001);
    - [! K/ S  u6 p3 J- o4 o* s! J
  628.                 LCD_WriteReg(0x10,0x0000);
    9 h( _1 a! c8 ]/ S/ x/ a6 v0 Y" W
  629.                 LCD_WriteReg(0x01,0x72ef);! J3 y& M, {; `) o* E
  630.                 LCD_WriteReg(0x02,0x0600);
    " t  h5 V2 Z: n4 d) N  T
  631.                 LCD_WriteReg(0x03,0x6a38);2 j: C+ \5 J( \) S
  632.                 LCD_WriteReg(0x11,0x6874);
    ) ^" z: n# ]/ {/ N% ~# Q4 E2 z
  633.                 LCD_WriteReg(0x0f,0x0000);( n# k2 E7 Z( R( V
  634.                 LCD_WriteReg(0x0c,0x0003);
    2 L8 t! H3 b5 x
  635.                 LCD_WriteReg(0x0d,0x0003);5 d" C3 D- t! P8 X3 p: i
  636.                 LCD_WriteReg(0x0e,0x000a);5 y! U3 y6 C. t+ k8 |3 k. |
  637.                 LCD_WriteReg(0x1e,0x00be);5 z, l1 U$ N- g7 ?" K
  638.                 LCD_WriteReg(0x25,0x8000);- Z3 y3 d* q* I- f1 ~( d
  639.                 LCD_WriteReg(0x26,0x7800);
    ; s! [  e6 m4 i: D6 p* X/ V2 f
  640.                 LCD_WriteReg(0x27,0x0078);
    & o8 C# L6 `, J) t2 }" X# ?
  641.                 LCD_WriteReg(0x4e,0x0000);1 i7 o% S3 I) D9 Z. O
  642.                 LCD_WriteReg(0x4f,0x0000);
    8 P5 H$ X1 g0 _9 |2 t% S
  643.                 LCD_WriteReg(0x12,0x08d9);
    " h/ ]+ M# O; m6 A# g
  644.                 LCD_WriteReg(0x30,0x0000);
    : y; A. q& \5 l7 ]( i* D. s9 N
  645.                 LCD_WriteReg(0x31,0x0104);5 W$ D$ F) ?5 d
  646.                 LCD_WriteReg(0x32,0x0100);
    3 \" O! B: Q, s( w6 y7 ]' V& U
  647.                 LCD_WriteReg(0x33,0x0305);& B) A- p5 u# i! z
  648.                 LCD_WriteReg(0x34,0x0505);) T$ Q" W/ s' l! v! n) C9 n" i
  649.                 LCD_WriteReg(0x35,0x0305);
      _( \! }' i# j1 G' j! K
  650.                 LCD_WriteReg(0x36,0x0707);
    : Y- Y; c) j. ]
  651.                 LCD_WriteReg(0x37,0x0300);* i5 f; x/ b: }/ j% U4 i
  652.                 LCD_WriteReg(0x3a,0x1200);
    & E  [, x/ E7 }0 ]! m9 z. p
  653.                 LCD_WriteReg(0x3b,0x0800);
    ! v9 v$ T2 |, |/ c
  654.                 LCD_WriteReg(0x07,0x0033);3 w/ _( H" a: t; [. _3 G
  655.         }
    7 s6 J% c. B9 V1 t, u2 a6 n5 S* U
  656.         else if(DeviceIdCode==0x1505)* J0 h$ o0 Y( [  W. U
  657.         {
    # ?) V+ u" B) C: a/ i, r+ q4 X
  658.                 LCD_WriteReg(0x0007,0x0000);: {9 d9 N, R% H( M2 i
  659.                 Delay_ms(2);
    & e6 h- {- [2 h" `% C% j
  660.                 LCD_WriteReg(0x0012,0x011C);
    $ u) [0 k4 s6 O1 U. i
  661.                 LCD_WriteReg(0x00A4,0x0001);
    + [$ h, F8 ~" i' E) y1 n
  662.                 LCD_WriteReg(0x0008,0x000F);- O7 b6 V/ Q3 n6 j
  663.                 LCD_WriteReg(0x000A,0x0008);  t- x4 D5 H! Z6 ^
  664.                 LCD_WriteReg(0x000D,0x0008);
    : s0 F$ {5 @* ~# D/ C1 w4 ]
  665.                 LCD_WriteReg(0x0030,0x0707);' p! q5 y, }0 U. X6 W
  666.                 LCD_WriteReg(0x0031,0x0007);: v- i8 J! p. z8 Y; C
  667.                 LCD_WriteReg(0x0032,0x0603);% B1 J3 r4 b$ \3 b0 d* t' f* K
  668.                 LCD_WriteReg(0x0033,0x0700);& P4 c( g7 H, A- J; }% p
  669.                 LCD_WriteReg(0x0034,0x0202);1 Z* a' ?. k/ Z. ]+ l" k
  670.                 LCD_WriteReg(0x0035,0x0002);: \9 z- r. n5 K  G( ]6 [) ]
  671.                 LCD_WriteReg(0x0036,0x1F0F);) H' g* c. h" P& P" c0 S
  672.                 LCD_WriteReg(0x0037,0x0707);
    ; d+ q8 R; f0 C! t( O/ I
  673.                 LCD_WriteReg(0x0038,0x0000);
    : W  H9 L$ S) d
  674.                 LCD_WriteReg(0x0039,0x0000);
    7 g; d" @1 u/ M( ~
  675.                 LCD_WriteReg(0x003A,0x0707);# _% a1 W: i- r1 Q6 x
  676.                 LCD_WriteReg(0x003B,0x0000);" q. Y, N0 U1 ~* N* S$ \1 T
  677.                 LCD_WriteReg(0x003C,0x0007);% {& v) d! a. L$ }
  678.                 LCD_WriteReg(0x003D,0x0000);! e3 o; @6 Y6 i9 m& P
  679.                 Delay_ms(2);
    - C, r( @7 ~! c; E; n  i* }  u+ m. I% Y
  680.                 LCD_WriteReg(0x0007,0x0001);9 E1 P6 |- Q( A) R: Q, l
  681.                 LCD_WriteReg(0x0017,0x0001);6 G0 a9 p' `4 h* h9 A8 w& X
  682.                 Delay_ms(2);3 M' h: D' h/ G: K; L
  683.                 LCD_WriteReg(0x0010,0x17A0);& J( x+ v) h3 M7 T7 E& J7 q* b# c
  684.                 LCD_WriteReg(0x0011,0x0217);& n3 s" y  [! D( i" p% e8 B! ~6 c
  685.                 LCD_WriteReg(0x0012,0x011E);, ?3 Q! P' v" \' |7 Z
  686.                 LCD_WriteReg(0x0013,0x0F00);& q2 d, ~( g9 r' {8 r0 F
  687.                 LCD_WriteReg(0x002A,0x0000);
    ' R$ E' M' U& C( }
  688.                 LCD_WriteReg(0x0029,0x000A);  C6 I+ Z( }2 p1 D) ~: N
  689.                 LCD_WriteReg(0x0012,0x013E);7 u; K5 u/ w4 L5 P0 P  i+ `
  690.                 LCD_WriteReg(0x0050,0x0000);9 V' z' o( W; b1 @
  691.                 LCD_WriteReg(0x0051,0x00EF);
    : z! g% `9 C- t; U$ o) @
  692.                 LCD_WriteReg(0x0052,0x0000);0 R* S/ D3 P' [7 S3 T
  693.                 LCD_WriteReg(0x0053,0x013F);
    $ ~' H( M# R: z0 R$ r8 ^. B
  694.                 LCD_WriteReg(0x0060,0x013F);& V0 W; C  C) B
  695.                 LCD_WriteReg(0x0061,0x0001);
    4 e9 \6 J7 [% d9 t/ ^9 o4 ~% x; R
  696.                 LCD_WriteReg(0x006A,0x0000);. k. X- u. x9 i7 E. z
  697.                 LCD_WriteReg(0x0080,0x0000);+ r- X! G- n6 `' K% z6 |
  698.                 LCD_WriteReg(0x0081,0x0000);
    " ?, R; Z+ u  p' k+ _
  699.                 LCD_WriteReg(0x0082,0x0000);
    + a* {+ n5 F  q# m& Z  K
  700.                 LCD_WriteReg(0x0083,0x0000);
    & v- v2 o5 z2 H. z% N
  701.                 LCD_WriteReg(0x0084,0x0000);! }% C  j) h+ [6 @
  702.           LCD_WriteReg(0x0085,0x0000);
    * m: D; Z3 h9 d- ~+ J8 w
  703.                 LCD_WriteReg(0x0090,0x0000);
    " U0 b* {) D$ S- v+ c
  704.                 LCD_WriteReg(0x0092,0x0300);
    $ L4 {! _& O3 O
  705.                 LCD_WriteReg(0x0093,0x0005);- S+ E9 j) [8 e$ f9 t/ U; e
  706.                 LCD_WriteReg(0x0095,0x0000);
    % ?3 Y# ~# r9 ?
  707.                 LCD_WriteReg(0x0097,0x0000);
    / N  S4 X7 L# [6 ?' a
  708.                 LCD_WriteReg(0x0098,0x0000);
    . ?. r# t; M, p5 i1 G$ L
  709.                 LCD_WriteReg(0x0001,0x0100);" D+ Q- G) z2 ^; d0 D! l
  710.                 LCD_WriteReg(0x0002,0x0700);
    2 d1 G7 v" U! a
  711.                 LCD_WriteReg(0x0003,0x1030);6 [2 V7 g9 x2 G9 S
  712.                 LCD_WriteReg(0x0004,0x0000);
    8 c( D4 v* }! Z$ z7 H" p7 F
  713.                 LCD_WriteReg(0x000C,0x0000);
    2 `! ^0 ^8 u$ E1 g8 M' h0 v* B" q6 R
  714.                 LCD_WriteReg(0x000F,0x0000);' N& T; w  d! H( Z1 a
  715.                 LCD_WriteReg(0x0020,0x0000);
    8 I* t8 H6 p% G* G! K
  716.                 LCD_WriteReg(0x0020,0x0000);
    1 v/ T5 A" q3 g
  717.                 LCD_WriteReg(0x0021,0x0000);
    . B9 y8 D* [4 b0 Z3 G( _
  718.                 LCD_WriteReg(0x0007,0x0021);* W& o1 r6 v8 V) O8 f5 Z
  719.                 Delay_ms(2);1 l& j- [# T+ [0 ^
  720.                 LCD_WriteReg(0x0007,0x0061);% N3 N* f2 C) \' p( d
  721.                 Delay_ms(2);
    - T/ }. {2 ~/ ^3 E: ?4 D: b1 m; {
  722.                 LCD_WriteReg(0x0007,0x0173);
    ) T8 u- w3 B3 ~# o9 b  P8 a# ?
  723.                 Delay_ms(2);: Y* u4 n3 o: ?
  724.         }
    5 X+ w" S! Q& K* g9 `) m
  725.         else
    % z- i0 c7 }' ^9 z9 y! p. M8 w
  726.         {8 {2 ?1 U' t1 Y; X3 D0 i" X
  727.         }
    / H! ^; l1 F0 m) r3 G
  728. }1 v; _/ t) C5 y; \7 D: Y: H
  729. void LCD_Clear(uint16_t Color)( M6 w0 |1 K8 d+ S
  730. {5 v  `+ z) d9 h1 n$ {
  731.         uint32_t index = 0;
    0 r3 z5 W  |* ~' i) R! P- _7 B
  732.         LCD_SetCursor(0,0);! M# S) ]) d* }2 O
  733.         LCD_WriteRAM_Prepare();
    * X/ [% o  P/ S6 s1 z
  734.         ClrCs* W9 X# w7 z4 i  k
  735.         SetRs
    : g! s" z4 ?0 R, U! O1 u, p- @
  736.         for(index=0;index<(LCD_PIXEL_WIDTH*LCD_PIXEL_HEIGHT);index++)//这个是从屏幕上往下刷新数据的,' W9 i4 \! o2 P4 {: L" F
  737.         {
    # C. z) \( P: v4 Y
  738.                 ClrWr4 k$ L: t5 O) i
  739.                 LCD_Write(Color);
    7 m' n4 |# H1 i' o( e
  740.                 SetWr" v! a% Z. y1 J$ W* m( K# Z
  741.         }
    1 j6 U5 ]: t% Y3 f- L0 r
  742.         SetCs, Z6 r6 p% ^9 k8 t! G( q2 O
  743.        
    # P% `: W3 {( @- [
  744. }
    $ B- I* n" j( n( ^
  745. void LCD_SetCursor(uint16_t Xpos,uint16_t Ypos)//设置光标8 ]. a7 J8 M' h. s/ A
  746. {
    / C3 r3 {1 ~* y( v/ R* p5 Y4 h$ B# Y
  747. //         if(DeviceIdCode==0x8989)这个是用来驱动ID是0x8989的驱动装置6 g2 e7 o+ G( U
  748. //         {
    6 B6 U, U) f* J+ |
  749. //                 LCD_WriteReg(0x004e,Xpos);% m0 y5 ~- q& j( X% x5 ~
  750. //                 LCD_WriteReg(0x004f,Ypos);" l3 ?; \: J/ U- P& m2 i1 s
  751. //         }
    ( N) e$ X, j! S0 E
  752.         if(DeviceIdCode==0x9320): @( x& W( W# W: K5 M) M0 B
  753.         {+ N' o  T1 e# n4 G7 e6 D
  754.                 LCD_WriteReg(0x0020,Xpos);//行
    $ v7 m5 N& K4 M2 n. O0 y5 R) T
  755.                 LCD_WriteReg(0x0021,0x13f-Ypos);//列 + |/ U2 I9 v) p8 l
  756.         }
    8 x7 C- D$ e" g2 X& c- O! x; ?
  757. //         else if(DeviceIdCode==0x9919)//这个是用来驱动ID是0x9919的驱动的
    , B* Q- B& V1 z1 f
  758. //         {! T# _( i  l; G) p- _
  759. //                 LCD_WriteReg(0x004e,Xpos);- M7 L+ o4 j8 p9 I
  760. //                 LCD_WriteReg(0x004f,Ypos);
    6 c5 P% C: p4 ~  o
  761. //         }* u* d( A6 T$ X
  762. //         else- @# c0 |! ^1 N' w4 C' w# k4 z
  763. //         {
    1 f( ^( J1 N$ `
  764. //                 LCD_WriteReg(0x0020,Xpos);
    2 f8 T1 _1 @. @+ Y7 ?, Q: t. B3 N8 e
  765. //                 LCD_WriteReg(0x0021,0x13f-Ypos);
    # o  s2 a6 Z7 N) g* }- L9 {
  766. //         }- W7 z. u6 H/ o' Z" n
  767. }) x7 F6 f. w) O/ T& X! _
  768. // void LCD_WriteRegIndex(uint8_t LCD_Reg)//这个其实就是写寄存器的那个Index,在write_Reg前边已经写好了。
    & r$ B1 J9 S. w& l* V4 [
  769. // {" g, Y8 K* D4 h1 i
  770. //         ClrCs9 p% E2 ]! [8 Y. N# X
  771. //         ClrRs
    ' `) b0 N  V+ {; I+ c
  772. //         ClrWr
    / p; v1 [. h3 V( y
  773. //         LCD_Write(LCD_Reg);
    , j6 j; M4 q1 m, K7 B
  774. //         SetWr
    7 Y: {7 A/ ~" J! K4 k6 Q
  775. //         SetCs
    # o- v0 J, B8 ]
  776. // }. X" t* X5 D5 p; O: D5 }4 L* U
  777. uint16_t LCD_ReadReg(uint8_t LCD_Reg)" C5 S! I( i6 k2 N# ?, N5 Q
  778. {% F9 p" b9 h' y5 E. c. }: A
  779.         uint16_t data;8 W! g% f% b$ X& K+ G5 y9 E- L0 X
  780.         ClrCs
    : o( ]4 {- s! e- U; ~1 [
  781.         ClrRs  ~# h$ c) }+ C$ l
  782.         ClrWr. U9 E8 [4 x; e* C4 R5 H
  783.         LCD_Write(LCD_Reg);//xian xie ru ji cun qi # ?/ h( [0 f4 O( k
  784.         SetWr$ z3 c8 K) `. _# @* u4 r* C6 x
  785.         SetRs* v3 I+ J( t6 [
  786.         LCD_DB_AS_InPut();//shu ru shu ju ; N! }8 w- N4 ~: I* S+ K) ?* X
  787.         * @& v, z% g) g: `$ B
  788.         4 S( G$ p- e9 X: [* }' L8 [& ^- q
  789.         ClrRd
    6 F! f6 L: E* i8 {
  790.         data = LCD_Read();// ba shu ru de  shu ju du chu lai ) k, n' S2 R! b( t  u4 c9 x+ x
  791.         SetRd
    6 g% [; Y' J3 u( U9 _
  792.         , u5 L$ e- Y, y
  793.         SetCs
    % F% a. w  B$ z* P' s
  794.         LCD_DB_AS_OutPut();
    & [6 u5 c3 z- Y4 p- \( R
  795.         return data;
    0 Q- U5 ?, \, ~; }( x2 r6 }% W7 \
  796. }
    ' H! d+ q  [8 j, K- ^% T
  797. void LCD_WriteRAM_Prepare(void)//0x0022h这个是向GRAM写入数据的标志位;
    0 O1 a3 E: F' s$ I7 t( g) L8 V
  798. {) |* K. l6 F1 U. U9 }1 [7 r
  799.         ClrCs
    4 K; U+ @& J: @; ~5 p
  800.         ClrRs! _4 n5 |* X1 R
  801.         ClrWr& \2 Q0 g$ V0 o1 E
  802.         LCD_Write(LCD_REG_34);//xie ru shu ju de she zhi
    % @" P6 ?5 j! ^; [$ `  ^; m! |2 [
  803.         SetWr
    - ?, z$ G0 X0 m% C/ c- q- z- {' I
  804.         SetRs
      k  L: u1 q7 R* w' O! T
  805.         : d2 G6 D) R+ z2 }( {1 h* V
  806. }
    3 P$ d+ T4 H. v# X
  807. void LCD_WriteRAMWord(uint16_t RGB_Code)//写入一个完整数据的过程
    ! W' R# w+ C# ^% _# m
  808. {
    ! F/ M1 W7 j+ V4 S5 Q
  809.         LCD_WriteRAM_Prepare();
    ) ]; z: X5 g" o+ M, n" Z+ S6 N
  810.         LCD_WriteRAM(RGB_Code);
    ) P) X% @- Z7 O# F- V- b- `' Q
  811. }. o7 D1 a5 N, ]
  812. void LCD_WriteReg(uint8_t LCD_Reg,uint16_t LCD_RegValue)//这个是写write register
    ! B0 ?- j; S: w$ t% {$ l; |1 t
  813. {+ z" z* n0 [7 J! v
  814.         ClrCs
    4 U  K6 X- Y! \/ Q7 ?' Z, g$ [
  815.         ClrRs# _9 _: X, O4 n4 F
  816.         ClrWr
    - i% p7 a' j% A# j$ C8 a5 e
  817.         LCD_Write(LCD_Reg);//zhe ge  shi  xie ru  de cammand 7 _+ _  p" z* m+ g# d
  818.         SetWr
    8 _2 V  l: f% c2 o# s
  819.         SetRs
    $ V) Y* a" |2 g# X" o, \
  820.         ClrWr# [) @6 R# @/ I! M
  821.         LCD_Write(LCD_RegValue);//zhe ge  shi xie ru de shu ju
    / S+ J" F- Q; k: x+ V; L
  822.         SetWr2 B* d& R0 z  J1 V5 t+ I; o
  823.         SetCs9 ]  L+ q! ^! ?. w( P% H; A
  824.        
    2 ?" [8 w6 e# h& c# B8 n2 K/ C
  825.         5 ?* A! M/ c8 e/ I
  826. }# V  V; K6 \4 a, d1 H3 j4 N
  827. void LCD_WriteRAM(uint16_t RGB_Code)//Write data to GRAM; c$ X7 A7 q6 i8 ^
  828. {4 t: W4 s4 N2 |- @( {: u
  829.         ( [" b6 o1 G- N) X( E% O
  830.         ClrWr: p2 t" ~2 S2 O; z
  831.         LCD_Write(RGB_Code);//这个是写入数据
    $ b* ]  a; T" j  w
  832.         SetWr0 b" R6 Y+ ~7 Q1 [- Q: m, C; }
  833.        
    ' O& G" e2 J6 m! W, M) ~
  834. }
    2 }% h: L* S6 l# i; r& }# P
  835. /****************配置相应的引脚**************/! S7 v6 ^4 }; K5 R8 ]
  836. void LCD_Pins_Config(void)+ R4 E; ]4 p5 q5 {
  837. {
    8 \9 O! R2 F0 ]& P
  838.         GPIO_InitTypeDef    GPIO_InitStructure;( W  @4 g4 \: E5 s
  839.        
    * S4 T5 B. I1 `
  840.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE|RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOB,ENABLE);
    & F9 w: q0 @* N( |- V3 L
  841.        
    * h$ j3 u% L& {( r  \) A6 j
  842.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;1 I7 g3 Y5 v" R& j, _6 d$ D
  843.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    % U4 b' Y) M( m" T/ y2 c) f+ z
  844.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;. K- w! _" A" n; K* D) t
  845.         GPIO_Init(GPIOE,&GPIO_InitStructure);
    # V& T, `5 b, t& ^8 H& H
  846.        
    ' J! [% |: z% ~% D. m( [
  847.        
    + g9 w1 |( t0 s8 d2 \/ L
  848.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;' H7 _0 {: f9 d- F! e. F) Y* b
  849.         GPIO_Init(GPIOC,&GPIO_InitStructure);
    6 A7 I$ I! K( I# n7 n8 }6 a
  850.         5 C9 v7 W- ?* \2 H) d. i* S/ Z
  851.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;  }4 ?- P& C; o0 _5 \- P& R
  852.         GPIO_Init(GPIOB,&GPIO_InitStructure);/ s: Z* c! Q' j/ K7 b! P( \
  853.        
    1 B+ Z$ F/ V" c( K5 p2 }6 {+ R0 Z
  854.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
    $ {: e: b5 l' [, G- d
  855.         GPIO_Init(GPIOD,&GPIO_InitStructure);! W% `3 Y9 ~) K
  856.        
    4 k  E3 E5 d  s6 z% o1 O
  857.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;" `; E) d% F. f0 Y" C! n/ _! p
  858.         GPIO_Init(GPIOD,&GPIO_InitStructure);* Z5 W! g5 X! m& z* U
  859.        
    4 Z8 E  Y! v$ Y; F5 D& i
  860.        
    8 g' D; j9 ~' X) D2 R# _- q! Q
  861.        
    7 Q+ R- {7 n3 v/ }
  862.        
    . l* I5 O/ J7 B2 ^& c
  863.         SetCs9 \' D/ b- l9 V5 _
  864.         SetWr
    ( M8 \5 p! b& c) o0 p$ ^- Q
  865.         SetRd
    ) q0 _( l5 O0 d+ I' @, r, J1 ]
  866.         SetRs( |' a) p) {; Y. u8 }1 v& [8 l, N3 A
  867. }
    9 r! x: h0 J  D/ l! k
  868. void LED_Init(void)
    3 t1 r! D4 x* R8 }  }8 R) a* @( ?
  869. {0 u0 q6 S1 H, W1 K. q
  870.         GPIO_InitTypeDef GPIO_InitStructure;
      B, M! c) B0 y' i. z. i2 F$ m6 P+ m
  871.        
    ! T7 d* l4 X5 O% O
  872.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);( f7 k) A4 \! I$ d
  873.        
    1 c5 r! t5 f+ y
  874.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_7;
    / h5 }1 \4 F: w, G
  875.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    - j! |& R6 e7 C, ?# f8 k% Z$ j
  876.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    $ \1 b4 {4 Z; P' m1 f# c
  877.        
    : y' M) d/ T. N+ ~- _
  878.         GPIO_Init(GPIOD,&GPIO_InitStructure);
    ; Y9 s; }! v- ?/ T* v4 w
  879. }
    % L# R8 k) M( D

  880. $ B% F+ ^5 \8 [& j& E2 C  ?
  881. void STM32_USART_Configuration(void)' z/ U! h; N% ~. q/ t3 U+ ~1 W$ }
  882. {! @0 u- \9 W  B8 E
  883.         GPIO_InitTypeDef    GPIO_InitStructure;6 D! c7 e4 |* t9 J0 J# t
  884.         USART_InitTypeDef   USART_InitStructure;
    1 M; }. b1 x% `) i8 `8 W1 H
  885.        
    / [2 e2 k% X, s" w6 @+ j& {
  886.        
    * y; A/ A: j; u# `  Z
  887.         8 {6 _# t. m7 @1 d- L
  888.         USART_InitStructure.USART_BaudRate = 115200;
    , u: E: ~2 r& u( J9 p! L3 _
  889.         USART_InitStructure.USART_WordLength = USART_WordLength_8b;) b+ b6 Y8 c( P$ E4 U: N( W
  890.         USART_InitStructure.USART_StopBits = USART_StopBits_1;+ y" }8 M4 h$ y  I6 u
  891.         USART_InitStructure.USART_Parity = USART_Parity_No;& L( H4 t9 Q: V
  892.         USART_InitStructure.USART_Mode = USART_Mode_Tx|USART_Mode_Rx;7 y: N9 j, l+ `& Q+ T3 o* H0 A
  893.         USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
    0 b) J' s1 X! x  C4 ]: }& T+ h
  894.         6 s9 ^& x0 p  ~. n* x
  895.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO,ENABLE);5 K1 w' t! T0 X/ P
  896.         GPIO_PinRemapConfig(GPIO_Remap_USART2,ENABLE);- Y) |0 P5 @+ k& f1 o
  897.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);
    4 o. v. s+ K+ ~* A  m" J1 j: D1 E
  898.         ) h# Q3 d7 d3 \8 A( V6 ]8 ~
  899.         ( D$ U7 n, S9 E3 T: \  v1 a
  900.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
    % N% I! Z: ~5 f; T& h, b
  901.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;% c- {( z# R! P& Q
  902.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    ' Z5 I% B: y$ F$ V9 ?) l7 N
  903.         GPIO_Init(GPIOD,&GPIO_InitStructure);
      v7 n, J+ i9 e
  904.         6 o1 _2 ^& ^6 B1 g/ r# s& H; B3 [
  905.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;* k( o4 ^3 n8 {: X
  906.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;3 G: x3 D. e& y9 I) _1 K. o
  907.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;, j+ u4 Z2 _* L1 s3 l; J& @
  908.         GPIO_Init(GPIOD,&GPIO_InitStructure);
    % e* c1 p/ N- j$ p
  909.        
    * {( U/ ~/ P6 w, o+ e3 W
  910.         ( s& P6 i  H( J) k9 j& m
  911.         USART_Init(USART2,&USART_InitStructure);( K- }  c6 N: x
  912.         USART_Cmd(USART2,ENABLE);9 q1 d; \5 v) g, k* J: Y1 g& e- R
  913. }
    7 O6 W' |# q8 R5 t

  914. $ Q0 `; `1 Q; C  [4 g9 R
  915. #ifndef MicroLIB//没有在MDK中打上MicroLIB对勾的话     执行下面的数据2 Z$ h- P4 m7 ]: F' \1 A
  916. #pragma import(__use_no_semihosting)//这句话的意思是不调用半主机模式+ ~* }% m/ ~1 U! k$ Z  H
  917. struct  __FILE
    1 F, |4 t1 G! n3 x( s
  918. {
    $ G% x# J7 K  y  T* y5 O7 V
  919.     int handle;
    % }' b( p9 w/ w; A3 V
  920. };$ A, D0 n/ B0 a+ G+ _
  921. FILE  __stdout;( ~3 W5 v: ]) _5 s  y- G# p
  922. _sys_exit(int x)//避免使用半主机模式
    ; i1 u1 u9 |3 E9 {; h, j3 R. A
  923. {% t0 H1 a* ~. D8 j5 k
  924.   x = x;
      l* Y2 l2 G: {
  925. }
    : w& j3 a1 b  ~- i) t1 i& H
  926. int fputc(int ch,FILE *f)//重新定义fputc函数使其输出到串口上
    3 u0 c/ D0 o. l$ e8 [
  927. {, i) Y9 [9 K6 P) ~8 }, S, @
  928.    while(USART_GetFlagStatus(USART2,USART_FLAG_TC) == RESET)//等待发送成功
    : f9 W% E. Z# t! m( n9 M
  929.    {}* p3 v% k" w2 A
  930.    USART_SendData(USART2,(uint8_t) ch);//发送数据
    3 X, J/ B$ f4 c) D
  931.    return ch;
    1 a8 ^4 M. T) ^
  932. }$ z# C1 w# }. _( I. F" ?
  933. int ferror(FILE *f)
    ' [) a9 p8 z) ^8 a$ z8 e
  934. {
    ) N, t- m$ D. d8 c. ?- S( Z
  935.    return EOF;
    # |& U8 u3 U2 e  g" ?
  936. }* }) _, g1 d1 K% V1 k+ x  Q
  937. #endif* s: i/ v: {# v! L  |, b
  938. 7 n! K# v6 u7 v! {! E" `( S
  939. FILE  __stdin;
    ( q" ~5 D, j  a# ~! U: e% D& F
  940. 8 S/ p# y; F* i7 E
  941. int fgetc(FILE *fp)
    4 e) b& u4 c) l" a$ `9 S% H
  942. {$ \1 J/ P1 a. v$ `
  943.    int ch=0;! h6 m" u; E# Q% h
  944.    while(USART_GetFlagStatus(USART2,USART_FLAG_RXNE) == RESET)
    6 J/ s/ K% a9 T* m
  945.    {
    7 f! C* \% ]+ H) c; z% ?
  946.    
    4 N# N; ~% v" x  c( \) l
  947.    }: N# t2 Z% w8 T) U, t& y

  948. 0 i) }6 h4 [, ]  I% l- Y& r' X
  949.    ch = (int)USART2->DR & 0XFF;2 B* u3 z) Z8 D* e
  950. 4 Q* n) `4 V  z' B: j5 {
  951.    putchar(ch);//回显,就是输出你输入的数据
    3 U% c) w. E8 Y8 ]
  952.    return ch;
    $ D& @1 _, o* A+ G
  953. }- J( C3 M0 ?  U9 ~' o. n2 o; W+ i  f. ~
  954. #ifdef USE_FULL_ASSERT. s' o7 j9 U/ a* h
  955. /*************
    2 U* U8 z: e/ h1 i+ K9 X
  956. 如果你定义了USE_FULL_ASSERT
    , x" I$ m& T1 V$ e7 T% |" U+ m

  957. ) p# A8 Q3 g/ q8 D" I
  958. 就可以在assert_failed,加入:
      B# L% ]" `- M% F, H4 v/ F8 H' f
  959. printf("Wrong parameters value: file %s on line %d\r\n", file, line);( u1 v" a+ v0 S
  960. 就可以使用assert_param(expr) 来判断当前参数是够正确,如果不正确,就会打印出错的文件,以及出错的行。
    4 L  r6 G) H5 O) s( N5 ~2 X3 ~  A* }. V
  961. 这样就可以方面调试信息了。
    / g. z/ @6 G, b$ c9 N
  962. *********/. D  w  S  K( I: }. ~( N% t
  963. void assert_failed(uint8_t* file,uint32_t line)//输出错误信息0 y% D1 O1 b) l0 E. {
  964. {& j1 w+ `; `/ N% e# _
  965.     printf("Wrong parameters value: file %s on line %d\r\n",file,line);
    ; x# u5 g) O% t% h1 w
  966.         while(1)
    ) o- T* d$ G2 N6 s5 B5 A+ z
  967.         {# _6 O6 p9 W9 `$ Q: ?2 C. i! ~. J
  968.         }# c5 k' \- `& P& S% ^9 s: m
  969. }" t/ Z; X; ^3 u7 r
  970. #endif
    2 B6 @8 o$ E  j; g

  971. 8 M, L5 Z9 ^4 q: R7 o+ y) F
  972. void LCD_SetPoint(uint16_t Xpos,uint16_t Ypos,uint16_t color); R# U; i, D2 g
  973. {
    * P& l! A7 G5 U! b/ e0 ^
  974.         LCD_SetCursor(Xpos,Ypos);
    ' p' i+ [) [3 Y* H1 H! K7 O
  975.         LCD_WriteRAM_Prepare();
    , T% L; u1 Q# I& y/ b# ~7 P! o% Q
  976.         LCD_WriteRAM(color);
    9 Z/ y$ [) r# o+ K
  977. }
    ; P- E" o" {! _. ^2 Y- Z0 `
  978. void LCD_DrawPicture(uint16_t Xpos,uint16_t Ypos,unsigned char *shuju)* H, f% h, l& c. w
  979. {
    8 Z; P; o# z. w( R
  980.         uint16_t Index=0,X,Y,k;
    $ [1 {% |& [) d& y/ S7 Y8 ^; `
  981.         for(Y=0;Y<48;Y++)3 |" i! U% i5 s, A* N  x, [6 k2 A+ p
  982.         {3 n# \. f! i4 y; Z; H8 v- Q
  983.                 for(X=0;X<8;X++)/ a* H/ \. N& h+ a$ x9 E, m( N
  984.                 {
    ; {$ c& o! I4 r& E' L
  985.                         /*********************
    ; ]- C6 B4 U# b0 ?: @' m0 p
  986.                         这里找的字符的格式是48*48的像素,就是横着48个像素点(灰度),竖着是48个像素点(灰度)
    4 ^* O  ^% U' v9 k" E  [
  987.                   (这里是个关键点,注意的是1个unsigned char 字节代表的是8个bit(即8个像素点))
    4 m  A  F* b. m9 g: g( a! f/ q+ A
  988.                        
    ; V: H) o9 x. O! Y; j  C
  989.                         **********************************************
    : E* {# j  R& _- p( q
  990.                         **********************************************
    # U% c& a1 h% H5 ?# P0 J$ N8 i
  991.                         **********************************************, a5 T  K, ~3 ^% N8 q$ {
  992.                         **********************************************
    4 N7 V1 G4 R1 r
  993.                         **********************************************$ [, e( ]) A, F+ l
  994.                         **********************************************
    ) x$ _  s+ \% O$ P9 m  Y
  995.                         **********************************************
    * J# p2 ~6 B& T! G  k+ E  l
  996.                         **********************************************
    0 d; I  t$ m* J
  997.                         **********************************************/ b1 j" G% w* F: Q7 k
  998.                         **********************************************; ~- _( s9 J, B- W
  999.                         **********************************************
    . U8 R% `. O2 n0 h; v
  1000.                         *********************************************** S( B' x8 B1 T$ V2 Y
  1001.                         **********************************************
    2 @; F4 [& z" `2 N% c" c
  1002.                         **********************************************4 p) V; t6 Y: Y$ y! {3 m
  1003.                         **********************************************- P7 ~$ i  G% b( k+ q: s
  1004.                         **********************************************, T, K6 o: C, W
  1005.                         **********************************************
    9 B$ A' B1 V' ^% j8 {- E" W
  1006.                         **********************************************
    0 ^' G! W- x; V& w2 ~3 T
  1007.                         **********************************************
    , _6 ^  O9 K" Z; w
  1008.                         **********************************************8 E9 z9 J2 L1 m+ U; f9 [  O  ]2 P& ?! Y! G
  1009.                         **********************************************# W2 w/ U! B% t, Z2 N' J3 I
  1010.                         **********************************************
      q$ e8 M5 {4 F- L; ^. g
  1011.                         **********************************************
    ; G# Q& B7 f1 R7 Y" J' R4 d! X
  1012.                         **********************************************- H3 M. b; N( q
  1013.                         **********************************************1 ?$ B2 s/ |. O! m" ~0 c& |5 q; W) |
  1014.                         **********************************************
    . G1 m9 t3 H5 d* h0 l" W/ X
  1015.                         **********************************************$ N+ m& }7 c+ E' ~
  1016.                         **********************************************$ B7 I' C8 i3 o* ^* Z6 D
  1017.                         **********************************************- q/ `4 @5 x7 r* ~8 G2 l
  1018.                         **********************************************  n6 X) K, k8 {% C* g; ]3 r1 }
  1019.                         **********************************************
    / x4 P; |/ X8 c3 T) W& `
  1020.                         *********************************************** ~: ?# w& s7 ]/ C
  1021.                         **********************************************
    4 B6 j6 Y" t/ x& `6 Z5 `6 {, Q
  1022.                         **********************************************
      d/ `% ~2 [+ N
  1023.                         **********************************************  v  l5 h& v; b' {' i8 y4 W& Q
  1024.                         *********************************************** n1 }) a5 z+ Z( }& N8 V  C
  1025.                         **********************************************
    + o  M- m7 `0 y' l5 B+ m
  1026.                         **********************************************
    ( i7 X% n! Q+ D. z
  1027.                         **********************************************4 n& t* d/ q# h' R, z' p4 [
  1028.                         **********************************************
    ( G+ e. a' v) j. x- S
  1029.                         **********************************************3 W$ m$ S6 Y& l8 V. w
  1030.                         **********************************************$ ~# p1 c# ?6 Q! h/ p2 G
  1031.                         **********************************************9 W: F$ Q' C0 @% z: D
  1032.                         **********************************************
    ; a; _" j( o) O' o) C
  1033.                         **********************************************& p1 g$ `) y1 J2 q/ N2 W
  1034.                         **********************************************
      N" o7 C. W9 D! a3 M
  1035.                         **********************************************( H! M* R+ r4 Y
  1036.                         **********************************************
    6 ~+ y+ T4 t# t5 V4 I( A; u
  1037.                         **********************************************
    + R9 q$ g; F: y7 g
  1038.                         **********************************************3 r$ W: k$ b& x. P7 v9 y
  1039.                         **********************************************
    : ~7 b' ~( R# x+ @* P6 Y
  1040.                         **********************************************! v7 A) x% q6 d
  1041.                         **********************************************
    , y+ U& x! W* X, H8 I
  1042.                         **********************************************/ P/ R- n; q' a! p+ i
  1043.                         **********************************************+ Q" J0 Q( e- ^5 I" \  g
  1044.                         **********************************************. x1 j# [* m8 G& t' h" N
  1045.                         **********************************************% U" N4 }" t9 D. _
  1046.                         **********************************************( \& [  B/ U8 h0 U- C: c1 v' H+ t
  1047.                         **********************************************% _* s) m, E, v, i- d( \2 O
  1048.                         **********************************************
    / s' R: n% _2 w# Y8 e+ O
  1049.                         **********************************************
    ( A' H3 v2 Y# f5 a3 v' L! Z( H
  1050.                         **********************************************
    1 B; s! T5 l. B% ~9 j7 C2 _
  1051.                         **********************************************3 |$ H" r2 G/ e' i3 n% ^: o* f
  1052.                         **********************************************& m% F" a. z5 e3 i* b6 v( @
  1053.                         这个就是48*48,所以如果(0,0)的位置的话,右上角的坐标是(47,47),左上角是(0,47),右下角是(47,0);. x4 D3 Q$ w6 J7 Q) |
  1054.                         这里的K是横着的数据的个数(48/8)6个数据,为什么要除以8,这个在上边已经提示了,因为一个unsigned char( F; u; c3 G7 g9 q- T  v
  1055.                         类型的变量是8bit(8个像素点)所以只需要找6个unsigned char 的变量了,那么Y轴上需要48个unsigned char' h: P2 j3 r9 r& m- N. e
  1056.                         变量了,(这里的,Y就是Y轴,X是X轴),所以在这里你可以完全的完成自己的DIY屏幕了,(还有一点就是,如何测试自己的
    - Q' K1 ?" \3 T+ M, V% C) J
  1057.                         屏幕的(0,0)在哪,自己可以LCD_SetPoint(10,10,BLCAK),然后改变某个坐标的值在进行测试就可以了)8 w6 ?$ J4 f+ k6 S2 N9 i
  1058.                         ****************/
    6 d2 Y8 t. |' L( N
  1059.                         for(k=0;k<6;k++)
    - W2 i, z1 M+ C( y+ |
  1060.                         {
    ' ]4 \3 @9 G# [1 ]
  1061.                                 if((shuju[Index*6+k]>>(7-X))&0x01 == 0x01)//这个是第一个字节的第j位的状态( s, Q( B, ?/ _( j
  1062.                                 {
    - {2 a0 s: V2 E! B0 m: d: S
  1063.                                                 LCD_SetPoint(Xpos+X+(k*8),Ypos+Y,RED);
    0 t1 g) W" Y& T5 ]) q8 F5 G! a
  1064.                           }* u& u) B- V5 l. Y- e5 ]& ]
  1065.                          else
    ; w0 F  N" ]6 c) I
  1066.                          {
    % B5 Z3 T. u7 [. }
  1067.                                    LCD_SetPoint(Xpos+X+k*8,Ypos+Y,WHITE);
    9 t; z! u0 U0 B1 c  i; [. n
  1068.                          }
    2 \9 W7 h3 D* y* ]0 f; j% `6 k
  1069.                  }8 h# Q' }: |  C6 d
  1070.          }       
    1 P' e2 K$ ]- g- h/ k0 G/ ?; h3 }& \/ m
  1071.                 Index++;
    0 ]0 ?9 U( n: K6 x
  1072.         }
    ; [0 q, |8 Q, ?9 T6 O* z! Q5 t; H
  1073. }7 C9 S/ G* k6 W7 P& W
  1074.                                 3 n4 x$ A- S/ X& t
  1075. int main(void)
    4 c, H8 V' X  Q
  1076. {
    ! q3 X1 n# D' }. d7 d
  1077.         SysTick_Config(7200000);///这个最大的参数是2的24次方$ Y- J# Q3 x, N) [. }+ a
  1078.         SysTick->CTRL = 0x00;
      x" {, Y/ e" y* q' z, C' O1 b' I
  1079.         LED_Init();
    $ h/ x8 K/ b+ g7 R, J) [2 [
  1080.         STM_32_LCDInit();
    ' a) T" ?3 r/ ^, a/ P& J- B
  1081.         STM32_USART_Configuration();" W  Q( [# o- J! q2 b1 [
  1082.         LED_Init();
    0 r" o! L2 Y+ C* P8 U
  1083.   SysTick->CTRL = 0x07;//da kai ding shi qi zhong duan
    ; L3 |1 D; v' g3 Z3 b* d# T
  1084.         : ~5 \& V& x7 m0 a4 L
  1085.                 LCD_Clear(RED);//这个是显示颜色2 N( y, r/ _8 O; q5 a8 G
  1086.                 LCD_DrawPicture(0,100,ASCII_Table1);
    * ~( H7 M4 S0 x5 ]6 q
  1087.     LCD_DrawPicture(47,100,ASCII_Table2);
    7 W# V/ g7 c# ]
  1088.         while(1), h5 b8 b2 |0 I& t3 H7 q* E
  1089.         {
    8 x: G+ K- Q" r2 U: J
  1090.         }
    7 S3 w  W  |) c  b3 L! g$ l
  1091. }
    7 B/ {6 Q; b' @, j. M5 p2 h# ]1 C

  1092. 0 q/ b  ]1 B- V2 {% u6 s
复制代码
关键的部分在那个LCD_DrawPicture()函数中,取模软件在附件中,嘿嘿,高兴。/ G# D( O4 z: G- t) `9 X

3 J3 S. ~$ ]5 S: C! {% E: i# @( p* ]

PCtoLCD2002.rar

下载

703.63 KB, 下载次数: 20

取模软件

评分

参与人数 1 ST金币 +6 收起 理由
wofei1314 + 6 淡定

查看全部评分

赞 收藏 3 评论7 发布时间:2017-3-31 20:38

举报

7个回答
在路上11111111 回答时间:2017-3-31 21:11:12
忘了说了,取模的时候按着取出的模的长宽来赋值给X,Y,K(K是长/8,Y是宽)
fafa1 回答时间:2017-4-1 08:14:23
谢谢分享!
霹雳之火 回答时间:2017-4-1 08:23:43
恭喜楼主 谢谢分享
wtliu 回答时间:2017-4-1 08:33:33
贺喜!!!
wofei1314 回答时间:2017-4-1 09:23:41
顶一下~
asmhai 回答时间:2017-4-1 10:32:53
周末愉快,谢谢楼主的分享!
叶开-335763 回答时间:2018-5-31 14:21:28
感谢分享
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版