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

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

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

  3. /*******************
  4.     CS:片选信号;
  5.                 WR:向TFTLCD写入信号;
  6.                 RD:从TFTLCD读出信号;
  7.                 RS:(0读写命令,1读写数据);
  8.                 DB:16位双向数据线;*******/

  9. static uint32_t Time = 10;

  10. unsigned char ASCII_Table1[18*16] =              // ASCII
  11. {       

  12. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  13. 0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x00,0x00,
  14. 0x1F,0xC0,0x00,0x00,0x00,0x00,0x7F,0xC0,0x00,0x00,0x00,0x00,0x81,0xC0,0x00,0x00,
  15. 0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,0x01,0xC0,
  16. 0x00,0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,
  17. 0x01,0xC0,0x00,0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xF8,
  18. 0x00,0x00,0x01,0xC0,0x01,0xF0,0x00,0x00,0x01,0xC0,0x00,0xE0,0x00,0x00,0x01,0xE0,
  19. 0x00,0x40,0x00,0x00,0x01,0xE0,0x00,0x00,0x00,0x00,0x01,0xE0,0x00,0x00,0x00,0x00,
  20. 0x01,0x38,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x00,0x18,0x00,0x00,0x07,0x80,0x00,
  21. 0x06,0x04,0x00,0x03,0xE0,0x00,0x03,0x8F,0xFF,0xFF,0xC3,0xC0,0x00,0xC0,0x00,0x01,
  22. 0x87,0xF0,0x00,0x70,0x03,0x00,0x1F,0xF8,0x00,0x38,0x03,0x80,0x3F,0x80,0x00,0x1E,
  23. 0x03,0x80,0xFC,0x00,0x00,0x07,0x03,0x81,0xF0,0x00,0x00,0x03,0x83,0x83,0xC0,0x00,
  24. 0x00,0x01,0xC3,0x87,0x00,0x00,0x00,0x01,0xE3,0x86,0x00,0x00,0x00,0x00,0xF3,0x8C,
  25. 0x00,0x00,0x00,0x00,0x7B,0x98,0x00,0x00,0x00,0x00,0x3B,0x90,0x00,0x00,0x00,0x00,
  26. 0x3F,0xB0,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xF8,0x1F,0xFF,0xFF,0xFF,0xFF,0xF0,
  27. 0x00,0x00,0x03,0x80,0x01,0xE0,0x00,0x00,0x03,0x80,0x00,0xC0,0x00,0x00,0x03,0x80,
  28. 0x00,0x00,0x00,0x00,0x03,0xC0,0x00,0x00,0x00,0x00,0x03,0xC0,0x00,0x00,0x00,0x00,
  29. 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
  30. };
  31. unsigned char ASCII_Table2[18*16] =
  32. {
  33.        

  34. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  35. 0x00,0x00,0x02,0x00,0x00,0x00,0x01,0x00,0x03,0x00,0x00,0x00,0x01,0xC0,0x03,0x00,
  36. 0x00,0x00,0x01,0xC0,0x03,0xFF,0xFF,0xFF,0xFF,0xC0,0x03,0x00,0x00,0x00,0x01,0xC0,
  37. 0x03,0x00,0x00,0x00,0x01,0xC0,0x03,0x00,0x00,0x00,0x01,0xC0,0x03,0x10,0x00,0x00,
  38. 0x01,0xC0,0x03,0x0C,0x00,0x00,0x01,0xC0,0x03,0x03,0x00,0x00,0xC1,0xC0,0x03,0x01,
  39. 0x80,0x00,0xE1,0xC0,0x03,0x00,0xE0,0x01,0xE1,0xC0,0x03,0x00,0x70,0x01,0xE1,0xC0,
  40. 0x03,0x00,0x30,0x03,0xC1,0xC0,0x03,0x00,0x18,0x03,0xC1,0xC0,0x03,0x00,0x1C,0x07,
  41. 0x81,0xC0,0x03,0x00,0x0C,0x0F,0x01,0xC0,0x03,0x00,0x0E,0x1E,0x01,0xC0,0x03,0x00,
  42. 0x06,0x38,0x01,0xC0,0x03,0x00,0x07,0x70,0x01,0xC0,0x03,0x00,0x07,0x40,0x01,0xC0,
  43. 0x03,0x00,0x03,0x80,0x01,0xC0,0x03,0x00,0x03,0x00,0x01,0xC0,0x03,0x00,0x03,0x80,
  44. 0x01,0xC0,0x03,0x00,0x03,0x80,0x01,0xC0,0x03,0x00,0x03,0x80,0x01,0xC0,0x03,0x1F,
  45. 0xFF,0xFF,0xF9,0xC0,0x03,0x00,0x03,0x81,0xF1,0xC0,0x03,0x00,0x03,0x80,0xE1,0xC0,
  46. 0x03,0x00,0x03,0x80,0x41,0xC0,0x03,0x00,0x03,0x80,0x01,0xC0,0x03,0x00,0x03,0x80,
  47. 0x01,0xC0,0x03,0x00,0x03,0x80,0x01,0xC0,0x03,0x00,0x03,0x80,0x01,0xC0,0x03,0x00,
  48. 0x03,0xC0,0x01,0xC0,0x03,0x00,0x03,0xC0,0x01,0xC0,0x03,0x00,0x02,0x00,0x01,0xC0,
  49. 0x03,0x00,0x00,0x00,0x01,0xC0,0x03,0x00,0x00,0x00,0x01,0xC0,0x03,0xFF,0xFF,0xFF,
  50. 0xFF,0xE0,0x03,0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,
  51. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
  52. };
  53. void STM_32_LCDInit(void);
  54. void LCD_SetCursor(uint16_t Xpos,uint16_t Ypos);
  55. void LCD_Clear(uint16_t Color);

  56. void LCD_WriteRegIndex(uint8_t LCD_Reg);
  57. void LCD_WriteReg(uint8_t LCD_Reg,uint16_t LCD_RegValue);
  58. void LCD_WriteRAM_Prepare(void);
  59. void LCD_WriteRAMWord(uint16_t RGB_Code);
  60. uint16_t LCD_ReadReg(uint8_t LCD_Reg);
  61. void LCD_WriteRAM(uint16_t RGB_Code);
  62. void LCD_Pins_Config(void);

  63. /* 别名区宏定义 bitband macro ------------------------------------------------*/
  64. /* 使用bitband可以提高设计bit操作的程序的效率,外设GPIO管脚的控制效果尤为明显 */
  65. /* 外设别名区 对32MB外设别名区的访问映射为对1MB 外设bit-band区的访问(实际大小根据芯片有关) */
  66. #define Periph_BASE         0x40000000  // 外设基地址 Peripheral
  67. #define Periph_BB_BASE      0x42000000  // 外设别名区基地址 Peripheral bitband

  68. /* 注意:传入常量参数时,在编译时编译器会计算出别名区地址,这样能达到提升效率的目的(推荐)
  69.          如果传入变量参数,只能在运行时由STM32自己计算别名区地址,效率会大打折扣(不推荐) */
  70. #define Periph_BB(PeriphAddr, BitNumber)    \
  71.           *(__IO uint32_t *) (Periph_BB_BASE | ((PeriphAddr - Periph_BASE) << 5) | ((BitNumber) << 2))
  72.          
  73. #define Periph_ResetBit_BB(PeriphAddr, BitNumber)    \
  74.           (*(__IO uint32_t *) (Periph_BB_BASE | ((PeriphAddr - Periph_BASE) << 5) | ((BitNumber) << 2)) = 0)
  75.    
  76. #define Periph_SetBit_BB(PeriphAddr, BitNumber)       \
  77.           (*(__IO uint32_t *) (Periph_BB_BASE | ((PeriphAddr - Periph_BASE) << 5) | ((BitNumber) << 2)) = 1)

  78. #define Periph_GetBit_BB(PeriphAddr, BitNumber)       \
  79.           (*(__IO uint32_t *) (Periph_BB_BASE | ((PeriphAddr - Periph_BASE) << 5) | ((BitNumber) << 2)))

  80. /* 外设GPIO输入输出别名区定义,n为bit位置范围为0到15    */
  81. /* 我们对GPIOA.15操作,首先要初始化GPIO,然后使用方法: */
  82. /* 对GPIOA.15输出低电平:   PAOutBit(15) = 0;           */
  83. /* 对GPIOA.15输出低电平:   PAOutBit(15) = 1;           */
  84. /* 读取GPIOA.15输入的电平: data = PAInBit(15);         */
  85. #define PAOutBit(n)     Periph_BB((uint32_t)&GPIOA->IDR,n)  //输出
  86. #define PASetBit(n)     (PAOutBit(n) = 1)                   //输出 高
  87. #define PAResetBit(n)   (PAOutBit(n) = 0)                   //输出 低
  88. #define PAInBit(n)      Periph_BB((uint32_t)&GPIOA->IDR,n)  //输入

  89. #define PBOutBit(n)     Periph_BB((uint32_t)&GPIOB->ODR,n)  //输出
  90. #define PBSetBit(n)     (PBOutBit(n) = 1)                   //输出 高
  91. #define PBResetBit(n)   (PBOutBit(n) = 0)                   //输出 低
  92. #define PBInBit(n)      Periph_BB((uint32_t)&GPIOB->IDR,n)  //输入

  93. #define PCOutBit(n)     Periph_BB((uint32_t)&GPIOC->ODR,n)  //输出
  94. #define PCSetBit(n)     (PCOutBit(n) = 1)                   //输出 高
  95. #define PCResetBit(n)   (PCOutBit(n) = 0)                   //输出 低
  96. #define PCInBit(n)      Periph_BB((uint32_t)&GPIOC->IDR,n)  //输入

  97. #define PDOutBit(n)     Periph_BB((uint32_t)&GPIOD->ODR,n)  //输出
  98. #define PDSetBit(n)     (PDOutBit(n) = 1)                   //输出 高
  99. #define PDResetBit(n)   (PDOutBit(n) = 0)                   //输出 低
  100. #define PDInBit(n)      Periph_BB((uint32_t)&GPIOD->IDR,n)  //输入

  101. #define PEOutBit(n)     Periph_BB((uint32_t)&GPIOE->ODR,n)  //输出
  102. #define PESetBit(n)     (PEOutBit(n) = 1)                   //输出 高
  103. #define PEResetBit(n)   (PEOutBit(n) = 0)                   //输出 低
  104. #define PEInBit(n)      Periph_BB((uint32_t)&GPIOE->IDR,n)  //输入

  105. #define PFOutBit(n)     Periph_BB((uint32_t)&GPIOF->ODR,n)  //输出
  106. #define PFSetBit(n)     (PFOutBit(n) = 1)                   //输出 高
  107. #define PFResetBit(n)   (PFOutBit(n) = 0)                   //输出 低
  108. #define PFInBit(n)      Periph_BB((uint32_t)&GPIOF->IDR,n)  //输入

  109. #define PGOutBit(n)     Periph_BB((uint32_t)&GPIOG->ODR,n)  //输出
  110. #define PGSetBit(n)     (PGOutBit(n) = 1)                   //输出 高
  111. #define PGResetBit(n)   (PGOutBit(n) = 0)                   //输出 低
  112. #define PGInBit(n)      Periph_BB((uint32_t)&GPIOG->IDR,n)  //输入


  113. /* 内部SRAM别名区 对32MB SRAM别名区的访问映射为对1MB SRAMbit-band区的访问(实际大小根据芯片有关) */
  114. #define RAM_BASE            0x20000000  // 内部SRAM基地址  
  115. #define RAM_BB_BASE         0x22000000  // 内部SRAM别名区基地址

  116. #define SRAM_ResetBit_BB(VarAddr, BitNumber)    \
  117.           (*(__IO uint32_t *) (RAM_BB_BASE | ((VarAddr - RAM_BASE) << 5) | ((BitNumber) << 2)) = 0)
  118.    
  119. #define SRAM_SetBit_BB(VarAddr, BitNumber)       \
  120.           (*(__IO uint32_t *) (RAM_BB_BASE | ((VarAddr - RAM_BASE) << 5) | ((BitNumber) << 2)) = 1)

  121. #define SRAM_GetBit_BB(VarAddr, BitNumber)       \
  122.           (*(__IO uint32_t *) (RAM_BB_BASE | ((VarAddr - RAM_BASE) << 5) | ((BitNumber) << 2)))




  123. /*****************这个是用来配置WR的引脚的*********/
  124. #define LCD_PinNum_WR 14
  125. #define LCD_Pin_WR    GPIO_Pin_14
  126. #define LCD_PORT_WR   GPIOB
  127. #define LCD_CLK_WR    RCC_APB2Periph_GPIOB
  128. /******************这个是用来配置LCD的CS的引脚**************/
  129. #define LCD_PinNum_CS 8
  130. #define LCD_Pin_CS    GPIO_Pin_8
  131. #define LCD_PORT_CS   GPIOC
  132. #define LCD_CLK_CS    RCC_APB2Periph_GPIOC

  133. /*********这个是用来配置LCD的RS引脚的*************/
  134. #define LCD_PinNum_RS 13
  135. #define LCD_Pin_RS    GPIO_Pin_13
  136. #define LCD_PORT_RS   GPIOD
  137. #define LCD_CLK_RS    RCC_APB2Periph_GPIOD
  138. /**************这个是用来配置LCD的RD的引脚的**********/
  139. #define LCD_PinNum_RD 15
  140. #define LCD_Pin_RD    GPIO_Pin_15
  141. #define LCD_PORT_RD   GPIOD
  142. #define LCD_CLK_RD    RCC_APB2Periph_GPIOD

  143. #define LCD_PIN_DATA   GPIO_Pin_All;
  144. #define LCD_PORT_DATA  GPIOE
  145. #define LCD_CLK_DATA   RCC_APB2Periph_GPIOE

  146. #define LCD_REG_0   0x00
  147. #define LCD_REG_1   0x01
  148. #define LCD_REG_2   0x02
  149. #define LCD_REG_3   0x03
  150. #define LCD_REG_4   0x04
  151. #define LCD_REG_5   0x05
  152. #define LCD_REG_6   0x06
  153. #define LCD_REG_7   0x07
  154. #define LCD_REG_8   0x08
  155. #define LCD_REG_9   0x09
  156. #define LCD_REG_10  0x0A
  157. #define LCD_REG_12  0x0C
  158. #define LCD_REG_13  0x0D
  159. #define LCD_REG_14  0x0E
  160. #define LCD_REG_15  0x0F
  161. #define LCD_REG_16  0x10
  162. #define LCD_REG_17  0x11
  163. #define LCD_REG_18  0x12
  164. #define LCD_REG_19  0x13
  165. #define LCD_REG_20  0x14
  166. #define LCD_REG_21  0x15
  167. #define LCD_REG_22  0x16
  168. #define LCD_REG_23  0x17
  169. #define LCD_REG_24  0x18
  170. #define LCD_REG_25  0x19
  171. #define LCD_REG_26  0x1A
  172. #define LCD_REG_27  0x1B
  173. #define LCD_REG_28  0x1C
  174. #define LCD_REG_29  0x1D
  175. #define LCD_REG_30  0x1E
  176. #define LCD_REG_31  0x1F
  177. #define LCD_REG_32  0x20
  178. #define LCD_REG_33  0x21
  179. #define LCD_REG_34  0x22
  180. #define LCD_REG_36  0x24
  181. #define LCD_REG_37  0x25
  182. #define LCD_REG_40  0x28
  183. #define LCD_REG_41  0x29
  184. #define LCD_REG_43  0x2B
  185. #define LCD_REG_45  0x2D
  186. #define LCD_REG_48  0x30
  187. #define LCD_REG_49  0x31
  188. #define LCD_REG_50  0x32
  189. #define LCD_REG_51  0x33
  190. #define LCD_REG_52  0x34
  191. #define LCD_REG_53  0x35
  192. #define LCD_REG_54  0x36
  193. #define LCD_REG_55  0x37
  194. #define LCD_REG_56  0x38
  195. #define LCD_REG_57  0x39
  196. #define LCD_REG_59  0x3B
  197. #define LCD_REG_60  0x3C
  198. #define LCD_REG_61  0x3D
  199. #define LCD_REG_62  0x3E
  200. #define LCD_REG_63  0x3F
  201. #define LCD_REG_64  0x40
  202. #define LCD_REG_65  0x41
  203. #define LCD_REG_66  0x42
  204. #define LCD_REG_67  0x43
  205. #define LCD_REG_68  0x44
  206. #define LCD_REG_69  0x45
  207. #define LCD_REG_70  0x46
  208. #define LCD_REG_71  0x47
  209. #define LCD_REG_72  0x48
  210. #define LCD_REG_73  0x49
  211. #define LCD_REG_74  0x4A
  212. #define LCD_REG_75  0x4B
  213. #define LCD_REG_76  0x4C
  214. #define LCD_REG_77  0x4D
  215. #define LCD_REG_78  0x4E
  216. #define LCD_REG_79  0x4F
  217. #define LCD_REG_80  0x50
  218. #define LCD_REG_81  0x51
  219. #define LCD_REG_82  0x52
  220. #define LCD_REG_83  0x53
  221. #define LCD_REG_96  0x60
  222. #define LCD_REG_97  0x61
  223. #define LCD_REG_106 0x6A
  224. #define LCD_REG_118 0x76
  225. #define LCD_REG_128 0x80
  226. #define LCD_REG_129 0x81
  227. #define LCD_REG_130 0x82
  228. #define LCD_REG_131 0x83
  229. #define LCD_REG_132 0x84
  230. #define LCD_REG_133 0x85
  231. #define LCD_REG_134 0x86
  232. #define LCD_REG_135 0x87
  233. #define LCD_REG_136 0x88
  234. #define LCD_REG_137 0x89
  235. #define LCD_REG_139 0x8B
  236. #define LCD_REG_140 0x8C
  237. #define LCD_REG_141 0x8C
  238. #define LCD_REG_143 0x8F
  239. #define LCD_REG_144 0x90
  240. #define LCD_REG_145 0x91
  241. #define LCD_REG_146 0x92
  242. #define LCD_REG_147 0x93
  243. #define LCD_REG_148 0x94
  244. #define LCD_REG_149 0x95
  245. #define LCD_REG_150 0x96
  246. #define LCD_REG_151 0x97
  247. #define LCD_REG_152 0x98
  248. #define LCD_REG_153 0x99
  249. #define LCD_REG_154 0x9A
  250. #define LCD_REG_157 0x9D
  251. #define LCD_REG_192 0xC0
  252. #define LCD_REG_193 0xC1
  253. #define LCD_REG_229 0xE5

  254. #define WHITE 0xFFFF
  255. #define BLACK 0x0000
  256. #define BLUE 0x001F
  257. #define BRED 0XF81F
  258. #define GRED 0XFFE0
  259. #define GBLUE 0X07FF
  260. #define RED 0xF800
  261. #define MAGENTA 0xF81F
  262. #define GREEN 0x07E0
  263. #define CYAN 0x7FFF
  264. #define YELLOW 0xFFE0
  265. #define BROWN 0XBC40
  266. #define BRRED 0XFC07
  267. #define GRAY 0X8430
  268. #define DARKBLUE 0X01CF
  269. #define LIGHTBLUE 0X7D7C
  270. #define GRAYBLUE 0X5458
  271. #define LIGHTGREEN 0X841F
  272. #define LGRAY 0XC618
  273. #define LGRAYBLUE 0XA651
  274. #define LBBLUE 0X2B12


  275. #define LCD_DIR_HORIZONTAL 0x0000
  276. #define LCD_DIR_VERTICAL   0x0001

  277. #define LCD_PIXEL_WIDTH    0x0140
  278. #define LCD_PIXEL_HEIGHT   0x00F0


  279. #define SetCs Periph_BB((uint32_t)&LCD_PORT_CS->ODR,LCD_PinNum_CS) = 1;
  280. #define ClrCs Periph_BB((uint32_t)&LCD_PORT_CS->ODR,LCD_PinNum_CS) = 0;



  281. #define SetWr Periph_BB((uint32_t)&LCD_PORT_WR->ODR,LCD_PinNum_WR) = 1;
  282. #define ClrWr Periph_BB((uint32_t)&LCD_PORT_WR->ODR,LCD_PinNum_WR) = 0;

  283. #define SetRs Periph_BB((uint32_t)&LCD_PORT_RS->ODR,LCD_PinNum_RS) = 1;
  284. #define ClrRs Periph_BB((uint32_t)&LCD_PORT_RS->ODR,LCD_PinNum_RS) = 0;

  285. #define SetRd Periph_BB((uint32_t)&LCD_PORT_RD->ODR,LCD_PinNum_RD) = 1;
  286. #define ClrRd Periph_BB((uint32_t)&LCD_PORT_RD->ODR,LCD_PinNum_RD) = 0;

  287. #define LCD_Write(LCD_DATA)  LCD_PORT_DATA->ODR = LCD_DATA//ODR 是端口输出数据;
  288. #define LCD_Read()           LCD_PORT_DATA->IDR//IDR 是端口输入数据;

  289. static __IO uint16_t DeviceIdCode;

  290. void SysTick_Handler(void)
  291. {
  292.         Time--;
  293.         if(Time==0)
  294.         {
  295.                 Time = 10;
  296.                 GPIOD->ODR ^= GPIO_Pin_2;
  297.         }
  298. }

  299. void Delay_us(__IO u32 us)
  300. {
  301.         Time = us;
  302.         SysTick->CTRL = 0x07;//Enable SysTick IT
  303.         while(Time!=0);
  304.         SysTick->CTRL = 0x00;
  305. }
  306. void Delay_ms(__IO u32 ms)
  307. {
  308.         Time = ms;
  309.         Delay_us(ms*1000);
  310. }
  311. void Delay_s(__IO u32 s)
  312. {
  313.         Time = s;
  314.         Delay_ms(s*1000);
  315. }

  316. void LCD_DB_AS_InPut(void)//虚读的前面需要输入的数据
  317. {
  318.         GPIO_InitTypeDef GPIO_InitStructure;
  319.        
  320.         GPIO_InitStructure.GPIO_Pin = LCD_PIN_DATA;
  321.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  322.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  323.   GPIO_Init(LCD_PORT_DATA,&GPIO_InitStructure);
  324. }
  325. void LCD_DB_AS_OutPut(void)//虚读读完之后输出的数据
  326. {
  327.         GPIO_InitTypeDef  GPIO_InitStructure;
  328.        
  329.         GPIO_InitStructure.GPIO_Pin = LCD_PIN_DATA;
  330.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  331.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  332.         GPIO_Init(LCD_PORT_DATA,&GPIO_InitStructure);
  333. }
  334. void delay(__IO uint32_t nCount)
  335. {
  336.     for (; nCount != 0; nCount--);
  337. }
  338. void STM_32_LCDInit(void)//配置LCD,主要是配置LCD的指令
  339. {
  340.         LCD_Pins_Config();
  341.        
  342.         delay(12000);
  343.         LCD_WriteReg(0X0000,0X0001);//打开振荡器
  344.         delay(12000);
  345.         DeviceIdCode = LCD_ReadReg(0X0000);//将芯片的ID读出来
  346.         DeviceIdCode = LCD_ReadReg(0x0000);

  347.         delay(12000);
  348.         if(DeviceIdCode == 0x9320||DeviceIdCode == 0x9300)
  349.         {
  350.                 LCD_WriteReg(0x00,0x0001);//打开内部振荡器
  351.                 LCD_WriteReg(0x01,0x0100);//这个额是配置ss
  352.                 //SS和GS决定是从哪个角作为第一个顶点的从上到下是GS 1---320,从右到作是1--720;
  353.                 LCD_WriteReg(0x02,0x0400);//这个配置的是是否需要画线倒置(这里只只是显示颜色所以不需要配置(B/C和EOF)
  354.                 LCD_WriteReg(0x03,0x1010);//这个是配置的是AM和ID[1:0];这里的只要两个在同一个方向上显示的额数据就基本一直;
  355.                
  356.                 LCD_WriteReg(0x04,0x0000);//
  357.                 //这个是用来设置屏幕的大小的,
  358.                 //RSZ[1:0] 是用来设置尺寸大小的,00是不设置,
  359.                 //RCH[1:0] 是用来设置横屏剩余的像素的多少
  360.                 //RCV[1:0] 是用来设置竖屏剩余的像素的多少
  361.                 LCD_WriteReg(0x08,0x0202);
  362.                 //这个是设置的是指定前后的Line
  363.                 LCD_WriteReg(0x09,0x0000);
  364.                 //
  365.                 LCD_WriteReg(0x0a,0x0000);//这个配置的东西几乎没影响
  366.                 LCD_WriteReg(0x0c,0x0001);//这个选择的是配置的是interal System;
  367.                 LCD_WriteReg(0x0d,0x0000);//这个是设置帧周期的输出位置
  368.                 LCD_WriteReg(0x0f,0x0000);//这个是设置的是
  369.                
  370. //                 delay(5*12000);
  371. //                 LCD_WriteReg(0x07,0x0201);
  372. //                 delay(5*12000);
  373.                
  374.                 LCD_WriteReg(0x10,0x10E0);//这个是根据寄存器配置的//(1<<12)|(0<<8)|(1<<7)|(1<<6)|(0<<4));
  375.                 LCD_WriteReg(0x11,0x0007);//0111
  376.                 LCD_WriteReg(0x12,0x011A);//(1<<8)|(1<<4)|(0<<0));
  377.                 LCD_WriteReg(0x13,0x0b00);//
  378.                 LCD_WriteReg(0x29,0x0000);
  379.                 LCD_WriteReg(0x2b,(1<<14)|(1<<4));
  380.                 LCD_WriteReg(0x50,0);//设置左边的位置
  381.                 LCD_WriteReg(0x51,239);//设置右边的位置
  382.                 LCD_WriteReg(0x52,0);//设置上边的位置
  383.                 LCD_WriteReg(0x53,319);//设置下边的位置
  384.                 LCD_WriteReg(0x60,0x2700);//这个必须得选择一个NL来配置
  385.                 LCD_WriteReg(0x61,0x0001);//这个主要是用灰色反转;
  386.                 LCD_WriteReg(0x6a,0x0000);//changdushi 0
  387.                 LCD_WriteReg(0x80,0x0000);
  388.                 LCD_WriteReg(0x81,0x0000);
  389.                 LCD_WriteReg(0x82,0x0000);
  390.                 LCD_WriteReg(0x83,0x0000);
  391.                 LCD_WriteReg(0x84,0x0000);
  392.                 LCD_WriteReg(0x85,0x0000);
  393.                 LCD_WriteReg(0x90,0x0010);//
  394.                 LCD_WriteReg(0x92,0x0000);
  395.                 LCD_WriteReg(0x93,0x0000);
  396.                 LCD_WriteReg(0x95,0x0000);
  397.                 LCD_WriteReg(0x97,0x0000);
  398.                 LCD_WriteReg(0x98,0x0000);
  399. //                 delay(5*12000);
  400.                 LCD_WriteReg(0x07,0x0133);//BASSE位必须设为1
  401. //                 delay(5*12000);
  402.         }
  403.         else if(DeviceIdCode == 0x8989)
  404.         {
  405.                 LCD_WriteReg(0x0000,0x0001);
  406.                 LCD_WriteReg(0x0003,0xA8A4);
  407.                 LCD_WriteReg(0x000c,0x0000);
  408.                 LCD_WriteReg(0x000D,0x080c);
  409.                 LCD_WriteReg(0x000E,0x2B00);
  410.                 LCD_WriteReg(0x001E,0x00B0);
  411.                 LCD_WriteReg(0x0001,0X293F);
  412.                 LCD_WriteReg(0x0002,0x0600);
  413.                 LCD_WriteReg(0x0010,0x0000);
  414.                 LCD_WriteReg(0x0011,0x6078);
  415.                 LCD_WriteReg(0x0005,0x0000);
  416.                 LCD_WriteReg(0x0006,0x0000);
  417.                 LCD_WriteReg(0x0016,0xEF1C);
  418.                 LCD_WriteReg(0x0017,0x0003);
  419.                 LCD_WriteReg(0x0007,0x0233);
  420.                 LCD_WriteReg(0x000B,0x0000);
  421.                 LCD_WriteReg(0x000F,0x0000);
  422.                 LCD_WriteReg(0x0041,0x0000);
  423.                 LCD_WriteReg(0x0042,0x0000);
  424.                 LCD_WriteReg(0x0048,0x0000);
  425.                 LCD_WriteReg(0x0049,0x013F);
  426.                 LCD_WriteReg(0x004A,0x0000);
  427.                 LCD_WriteReg(0x004B,0x0000);
  428.                 LCD_WriteReg(0x0044,0xEF00);
  429.                 LCD_WriteReg(0x0045,0x0000);
  430.                 LCD_WriteReg(0x0046,0x013F);
  431.     LCD_WriteReg(0x0030,0x0707);
  432.     LCD_WriteReg(0x0031,0x0204);
  433.     LCD_WriteReg(0x0032,0x0204);
  434.     LCD_WriteReg(0x0033,0x0502);
  435.     LCD_WriteReg(0x0034,0x0507);
  436.     LCD_WriteReg(0x0035,0x0204);
  437.     LCD_WriteReg(0x0036,0x0204);
  438.     LCD_WriteReg(0x0037,0x0502);
  439.                 LCD_WriteReg(0x003A,0x0302);
  440.                 LCD_WriteReg(0x003B,0x0302);
  441.                 LCD_WriteReg(0x0023,0x0000);
  442.                 LCD_WriteReg(0x0024,0x0000);
  443.                 LCD_WriteReg(0x0025,0xC000);
  444.                 LCD_WriteReg(0x004e,0);
  445.                 LCD_WriteReg(0x004f,0);
  446.         }
  447.         else if(DeviceIdCode == 0x9325||DeviceIdCode==0x9328)
  448.         {
  449.                 LCD_WriteReg(0x00e3,0x3008);
  450.                 LCD_WriteReg(0x00e7,0x0012);
  451.                 LCD_WriteReg(0x00ef,0x1231);
  452.                 LCD_WriteReg(0x0000,0x0001);
  453.                 LCD_WriteReg(0x0002,0x0700);
  454.                 LCD_WriteReg(0x0003,(1<<12)|(0<<5)|(1<<4)|(1<<3));
  455.                 LCD_WriteReg(0x0004,0x0000);
  456.                 LCD_WriteReg(0x0008,0x0207);
  457.                 LCD_WriteReg(0x0009,0x0000);
  458.                 LCD_WriteReg(0x000a,0x0000);
  459.                 LCD_WriteReg(0x000c,0x0001);
  460.                 LCD_WriteReg(0x000d,0x0000);
  461.                 LCD_WriteReg(0x000f,0x0000);
  462.                 LCD_WriteReg(0x0010,0x0000);
  463.                 LCD_WriteReg(0x0011,0x0007);
  464.                 LCD_WriteReg(0x0012,0x0000);
  465.                 LCD_WriteReg(0x0013,0x0000);
  466.                 Delay_ms(5);
  467.                 Delay_ms(5);
  468.                 LCD_WriteReg(0x0010,0x1590);
  469.                 LCD_WriteReg(0x0011,0x0227);
  470.                 Delay_ms(5);
  471.                 Delay_ms(5);
  472.                 LCD_WriteReg(0x0012,0x009c);
  473.                 Delay_ms(5);
  474.                 Delay_ms(5);
  475.                 LCD_WriteReg(0x0013,0x1900);
  476.                 LCD_WriteReg(0x0029,0x0023);
  477.                 LCD_WriteReg(0x002b,0x000e);
  478.                 Delay_ms(5);
  479.                 Delay_ms(5);
  480.                 LCD_WriteReg(0x0020,0x0000);
  481.                 LCD_WriteReg(0x0021,0x0000);
  482.                 Delay_ms(5);
  483.                 Delay_ms(5);
  484.                 LCD_WriteReg(0x0030,0x0007);
  485.                 LCD_WriteReg(0x0031,0x0707);
  486.                 LCD_WriteReg(0x0032,0x0006);
  487.                 LCD_WriteReg(0x0035,0x0704);
  488.                 LCD_WriteReg(0x0036,0x1f04);
  489.                 LCD_WriteReg(0x0037,0x0004);
  490.                 LCD_WriteReg(0x0038,0x0000);
  491.                 LCD_WriteReg(0x0039,0x0706);
  492.                 LCD_WriteReg(0x003c,0x0701);
  493.                 LCD_WriteReg(0x003d,0x000f);
  494.                 Delay_ms(5);
  495.                 Delay_ms(5);
  496.                 LCD_WriteReg(0x0050,0x0000);
  497.                 LCD_WriteReg(0x0051,0x00ef);
  498.                 LCD_WriteReg(0x0052,0x0000);
  499.                 LCD_WriteReg(0x0053,0x013f);
  500.                 LCD_WriteReg(0x0060,0xa700);
  501.                 LCD_WriteReg(0x006a,0x0001);
  502.                 LCD_WriteReg(0x0080,0x0000);
  503.                 LCD_WriteReg(0x0081,0x0000);
  504.                 LCD_WriteReg(0x0082,0x0000);
  505.                 LCD_WriteReg(0x0083,0x0000);
  506.                 LCD_WriteReg(0x0084,0x0000);
  507.                 LCD_WriteReg(0x0085,0x0000);
  508.                 LCD_WriteReg(0x0090,0x0010);
  509.                 LCD_WriteReg(0x0092,0x0600);
  510.                 if(DeviceIdCode == 0x9328)
  511.                 {
  512.                         LCD_WriteReg(0x0093,0x0003);
  513.                         LCD_WriteReg(0x0095,0x0110);
  514.                         LCD_WriteReg(0x0097,0x0000);
  515.                         LCD_WriteReg(0x0098,0x0000);
  516.                 }
  517.                 LCD_WriteReg(0x0007,0x0133);
  518.                 LCD_WriteReg(0x0020,0x0000);
  519.                 LCD_WriteReg(0x0021,0x0000);
  520.         }
  521.         else if(DeviceIdCode==0x9331)
  522.         {
  523.                 LCD_WriteReg(0x00E7,0x1014);
  524.                 LCD_WriteReg(0x0001,0x0000);
  525.                 LCD_WriteReg(0x0002,0x0200);
  526.                 LCD_WriteReg(0x0003,0x1030);
  527.                 LCD_WriteReg(0x0008,0x0202);
  528.                 LCD_WriteReg(0x0009,0x0000);
  529.                 LCD_WriteReg(0x000A,0x0000);
  530.                 LCD_WriteReg(0x000C,0x0000);
  531.                 LCD_WriteReg(0x000D,0x0000);
  532.                 LCD_WriteReg(0x000F,0x0000);
  533.                 LCD_WriteReg(0x0010,0x0000);
  534.                 LCD_WriteReg(0x0011,0x0007);
  535.                 LCD_WriteReg(0x0012,0x0000);
  536.                 LCD_WriteReg(0x0013,0x0000);
  537.                 Delay_ms(5);
  538.                 LCD_WriteReg(0x0010,0x1690);
  539.                 LCD_WriteReg(0x0011,0x0227);
  540.                 Delay_ms(2);
  541.                 LCD_WriteReg(0x0012,0x000c);
  542.                 Delay_ms(2);
  543.                 LCD_WriteReg(0x0013,0x0800);
  544.                 LCD_WriteReg(0x0029,0x0011);
  545.                 LCD_WriteReg(0x002B,0x000B);
  546.                 Delay_ms(2);
  547.                 LCD_WriteReg(0x0020,0x0000);
  548.                 LCD_WriteReg(0x0021,0x0000);
  549.                
  550.                 LCD_WriteReg(0x0030,0x0000);
  551.                 LCD_WriteReg(0x0031,0x0106);
  552.                 LCD_WriteReg(0x0032,0x0000);
  553.                 LCD_WriteReg(0x0035,0x0204);
  554.                 LCD_WriteReg(0x0036,0x160A);
  555.                 LCD_WriteReg(0x0037,0x0707);
  556.                 LCD_WriteReg(0x0038,0x0106);
  557.                 LCD_WriteReg(0x0039,0x0707);
  558.                 LCD_WriteReg(0x003c,0x0402);
  559.                 LCD_WriteReg(0x003D,0x0C0F);
  560.                 LCD_WriteReg(0x0050,0x0000);
  561.                 LCD_WriteReg(0x0051,0x00EF);
  562.                 LCD_WriteReg(0x0052,0x0000);
  563.                 LCD_WriteReg(0x0053,0x013F);
  564.                 LCD_WriteReg(0x0060,0x2700);
  565.                 LCD_WriteReg(0x0061,0x0001);
  566.                 LCD_WriteReg(0x006A,0x0000);
  567.                 LCD_WriteReg(0x0080,0x0000);
  568.                 LCD_WriteReg(0x0081,0x0000);
  569.                 LCD_WriteReg(0x0082,0x0000);
  570.                 LCD_WriteReg(0x0083,0x0000);
  571.                 LCD_WriteReg(0x0084,0x0000);
  572.                 LCD_WriteReg(0x0085,0x0000);
  573.                 LCD_WriteReg(0x0090,0x0010);
  574.                 LCD_WriteReg(0x0092,0x0600);
  575.                 LCD_WriteReg(0x0007,0x0021);
  576.                 Delay_ms(2);
  577.                 LCD_WriteReg(0x0007,0x0133);
  578.                 Delay_ms(2);
  579.         }
  580.         else if(DeviceIdCode==0x9919)
  581.         {
  582.                 LCD_WriteReg(0x28,0x0006);
  583.                 LCD_WriteReg(0x00,0x0001);
  584.                 LCD_WriteReg(0x10,0x0000);
  585.                 LCD_WriteReg(0x01,0x72ef);
  586.                 LCD_WriteReg(0x02,0x0600);
  587.                 LCD_WriteReg(0x03,0x6a38);
  588.                 LCD_WriteReg(0x11,0x6874);
  589.                 LCD_WriteReg(0x0f,0x0000);
  590.                 LCD_WriteReg(0x0c,0x0003);
  591.                 LCD_WriteReg(0x0d,0x0003);
  592.                 LCD_WriteReg(0x0e,0x000a);
  593.                 LCD_WriteReg(0x1e,0x00be);
  594.                 LCD_WriteReg(0x25,0x8000);
  595.                 LCD_WriteReg(0x26,0x7800);
  596.                 LCD_WriteReg(0x27,0x0078);
  597.                 LCD_WriteReg(0x4e,0x0000);
  598.                 LCD_WriteReg(0x4f,0x0000);
  599.                 LCD_WriteReg(0x12,0x08d9);
  600.                 LCD_WriteReg(0x30,0x0000);
  601.                 LCD_WriteReg(0x31,0x0104);
  602.                 LCD_WriteReg(0x32,0x0100);
  603.                 LCD_WriteReg(0x33,0x0305);
  604.                 LCD_WriteReg(0x34,0x0505);
  605.                 LCD_WriteReg(0x35,0x0305);
  606.                 LCD_WriteReg(0x36,0x0707);
  607.                 LCD_WriteReg(0x37,0x0300);
  608.                 LCD_WriteReg(0x3a,0x1200);
  609.                 LCD_WriteReg(0x3b,0x0800);
  610.                 LCD_WriteReg(0x07,0x0033);
  611.         }
  612.         else if(DeviceIdCode==0x1505)
  613.         {
  614.                 LCD_WriteReg(0x0007,0x0000);
  615.                 Delay_ms(2);
  616.                 LCD_WriteReg(0x0012,0x011C);
  617.                 LCD_WriteReg(0x00A4,0x0001);
  618.                 LCD_WriteReg(0x0008,0x000F);
  619.                 LCD_WriteReg(0x000A,0x0008);
  620.                 LCD_WriteReg(0x000D,0x0008);
  621.                 LCD_WriteReg(0x0030,0x0707);
  622.                 LCD_WriteReg(0x0031,0x0007);
  623.                 LCD_WriteReg(0x0032,0x0603);
  624.                 LCD_WriteReg(0x0033,0x0700);
  625.                 LCD_WriteReg(0x0034,0x0202);
  626.                 LCD_WriteReg(0x0035,0x0002);
  627.                 LCD_WriteReg(0x0036,0x1F0F);
  628.                 LCD_WriteReg(0x0037,0x0707);
  629.                 LCD_WriteReg(0x0038,0x0000);
  630.                 LCD_WriteReg(0x0039,0x0000);
  631.                 LCD_WriteReg(0x003A,0x0707);
  632.                 LCD_WriteReg(0x003B,0x0000);
  633.                 LCD_WriteReg(0x003C,0x0007);
  634.                 LCD_WriteReg(0x003D,0x0000);
  635.                 Delay_ms(2);
  636.                 LCD_WriteReg(0x0007,0x0001);
  637.                 LCD_WriteReg(0x0017,0x0001);
  638.                 Delay_ms(2);
  639.                 LCD_WriteReg(0x0010,0x17A0);
  640.                 LCD_WriteReg(0x0011,0x0217);
  641.                 LCD_WriteReg(0x0012,0x011E);
  642.                 LCD_WriteReg(0x0013,0x0F00);
  643.                 LCD_WriteReg(0x002A,0x0000);
  644.                 LCD_WriteReg(0x0029,0x000A);
  645.                 LCD_WriteReg(0x0012,0x013E);
  646.                 LCD_WriteReg(0x0050,0x0000);
  647.                 LCD_WriteReg(0x0051,0x00EF);
  648.                 LCD_WriteReg(0x0052,0x0000);
  649.                 LCD_WriteReg(0x0053,0x013F);
  650.                 LCD_WriteReg(0x0060,0x013F);
  651.                 LCD_WriteReg(0x0061,0x0001);
  652.                 LCD_WriteReg(0x006A,0x0000);
  653.                 LCD_WriteReg(0x0080,0x0000);
  654.                 LCD_WriteReg(0x0081,0x0000);
  655.                 LCD_WriteReg(0x0082,0x0000);
  656.                 LCD_WriteReg(0x0083,0x0000);
  657.                 LCD_WriteReg(0x0084,0x0000);
  658.           LCD_WriteReg(0x0085,0x0000);
  659.                 LCD_WriteReg(0x0090,0x0000);
  660.                 LCD_WriteReg(0x0092,0x0300);
  661.                 LCD_WriteReg(0x0093,0x0005);
  662.                 LCD_WriteReg(0x0095,0x0000);
  663.                 LCD_WriteReg(0x0097,0x0000);
  664.                 LCD_WriteReg(0x0098,0x0000);
  665.                 LCD_WriteReg(0x0001,0x0100);
  666.                 LCD_WriteReg(0x0002,0x0700);
  667.                 LCD_WriteReg(0x0003,0x1030);
  668.                 LCD_WriteReg(0x0004,0x0000);
  669.                 LCD_WriteReg(0x000C,0x0000);
  670.                 LCD_WriteReg(0x000F,0x0000);
  671.                 LCD_WriteReg(0x0020,0x0000);
  672.                 LCD_WriteReg(0x0020,0x0000);
  673.                 LCD_WriteReg(0x0021,0x0000);
  674.                 LCD_WriteReg(0x0007,0x0021);
  675.                 Delay_ms(2);
  676.                 LCD_WriteReg(0x0007,0x0061);
  677.                 Delay_ms(2);
  678.                 LCD_WriteReg(0x0007,0x0173);
  679.                 Delay_ms(2);
  680.         }
  681.         else
  682.         {
  683.         }
  684. }
  685. void LCD_Clear(uint16_t Color)
  686. {
  687.         uint32_t index = 0;
  688.         LCD_SetCursor(0,0);
  689.         LCD_WriteRAM_Prepare();
  690.         ClrCs
  691.         SetRs
  692.         for(index=0;index<(LCD_PIXEL_WIDTH*LCD_PIXEL_HEIGHT);index++)//这个是从屏幕上往下刷新数据的,
  693.         {
  694.                 ClrWr
  695.                 LCD_Write(Color);
  696.                 SetWr
  697.         }
  698.         SetCs
  699.        
  700. }
  701. void LCD_SetCursor(uint16_t Xpos,uint16_t Ypos)//设置光标
  702. {
  703. //         if(DeviceIdCode==0x8989)这个是用来驱动ID是0x8989的驱动装置
  704. //         {
  705. //                 LCD_WriteReg(0x004e,Xpos);
  706. //                 LCD_WriteReg(0x004f,Ypos);
  707. //         }
  708.         if(DeviceIdCode==0x9320)
  709.         {
  710.                 LCD_WriteReg(0x0020,Xpos);//行
  711.                 LCD_WriteReg(0x0021,0x13f-Ypos);//列
  712.         }
  713. //         else if(DeviceIdCode==0x9919)//这个是用来驱动ID是0x9919的驱动的
  714. //         {
  715. //                 LCD_WriteReg(0x004e,Xpos);
  716. //                 LCD_WriteReg(0x004f,Ypos);
  717. //         }
  718. //         else
  719. //         {
  720. //                 LCD_WriteReg(0x0020,Xpos);
  721. //                 LCD_WriteReg(0x0021,0x13f-Ypos);
  722. //         }
  723. }
  724. // void LCD_WriteRegIndex(uint8_t LCD_Reg)//这个其实就是写寄存器的那个Index,在write_Reg前边已经写好了。
  725. // {
  726. //         ClrCs
  727. //         ClrRs
  728. //         ClrWr
  729. //         LCD_Write(LCD_Reg);
  730. //         SetWr
  731. //         SetCs
  732. // }
  733. uint16_t LCD_ReadReg(uint8_t LCD_Reg)
  734. {
  735.         uint16_t data;
  736.         ClrCs
  737.         ClrRs
  738.         ClrWr
  739.         LCD_Write(LCD_Reg);//xian xie ru ji cun qi
  740.         SetWr
  741.         SetRs
  742.         LCD_DB_AS_InPut();//shu ru shu ju
  743.        
  744.        
  745.         ClrRd
  746.         data = LCD_Read();// ba shu ru de  shu ju du chu lai
  747.         SetRd
  748.        
  749.         SetCs
  750.         LCD_DB_AS_OutPut();
  751.         return data;
  752. }
  753. void LCD_WriteRAM_Prepare(void)//0x0022h这个是向GRAM写入数据的标志位;
  754. {
  755.         ClrCs
  756.         ClrRs
  757.         ClrWr
  758.         LCD_Write(LCD_REG_34);//xie ru shu ju de she zhi
  759.         SetWr
  760.         SetRs
  761.        
  762. }
  763. void LCD_WriteRAMWord(uint16_t RGB_Code)//写入一个完整数据的过程
  764. {
  765.         LCD_WriteRAM_Prepare();
  766.         LCD_WriteRAM(RGB_Code);
  767. }
  768. void LCD_WriteReg(uint8_t LCD_Reg,uint16_t LCD_RegValue)//这个是写write register
  769. {
  770.         ClrCs
  771.         ClrRs
  772.         ClrWr
  773.         LCD_Write(LCD_Reg);//zhe ge  shi  xie ru  de cammand
  774.         SetWr
  775.         SetRs
  776.         ClrWr
  777.         LCD_Write(LCD_RegValue);//zhe ge  shi xie ru de shu ju
  778.         SetWr
  779.         SetCs
  780.        
  781.        
  782. }
  783. void LCD_WriteRAM(uint16_t RGB_Code)//Write data to GRAM
  784. {
  785.        
  786.         ClrWr
  787.         LCD_Write(RGB_Code);//这个是写入数据
  788.         SetWr
  789.        
  790. }
  791. /****************配置相应的引脚**************/
  792. void LCD_Pins_Config(void)
  793. {
  794.         GPIO_InitTypeDef    GPIO_InitStructure;
  795.        
  796.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE|RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOB,ENABLE);
  797.        
  798.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
  799.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  800.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  801.         GPIO_Init(GPIOE,&GPIO_InitStructure);
  802.        
  803.        
  804.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
  805.         GPIO_Init(GPIOC,&GPIO_InitStructure);
  806.        
  807.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;
  808.         GPIO_Init(GPIOB,&GPIO_InitStructure);
  809.        
  810.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
  811.         GPIO_Init(GPIOD,&GPIO_InitStructure);
  812.        
  813.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
  814.         GPIO_Init(GPIOD,&GPIO_InitStructure);
  815.        
  816.        
  817.        
  818.        
  819.         SetCs
  820.         SetWr
  821.         SetRd
  822.         SetRs
  823. }
  824. void LED_Init(void)
  825. {
  826.         GPIO_InitTypeDef GPIO_InitStructure;
  827.        
  828.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);
  829.        
  830.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_7;
  831.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  832.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  833.        
  834.         GPIO_Init(GPIOD,&GPIO_InitStructure);
  835. }

  836. void STM32_USART_Configuration(void)
  837. {
  838.         GPIO_InitTypeDef    GPIO_InitStructure;
  839.         USART_InitTypeDef   USART_InitStructure;
  840.        
  841.        
  842.        
  843.         USART_InitStructure.USART_BaudRate = 115200;
  844.         USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  845.         USART_InitStructure.USART_StopBits = USART_StopBits_1;
  846.         USART_InitStructure.USART_Parity = USART_Parity_No;
  847.         USART_InitStructure.USART_Mode = USART_Mode_Tx|USART_Mode_Rx;
  848.         USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  849.        
  850.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_AFIO,ENABLE);
  851.         GPIO_PinRemapConfig(GPIO_Remap_USART2,ENABLE);
  852.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);
  853.        
  854.        
  855.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
  856.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  857.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  858.         GPIO_Init(GPIOD,&GPIO_InitStructure);
  859.        
  860.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
  861.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  862.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  863.         GPIO_Init(GPIOD,&GPIO_InitStructure);
  864.        
  865.        
  866.         USART_Init(USART2,&USART_InitStructure);
  867.         USART_Cmd(USART2,ENABLE);
  868. }

  869. #ifndef MicroLIB//没有在MDK中打上MicroLIB对勾的话     执行下面的数据
  870. #pragma import(__use_no_semihosting)//这句话的意思是不调用半主机模式
  871. struct  __FILE
  872. {
  873.     int handle;
  874. };
  875. FILE  __stdout;
  876. _sys_exit(int x)//避免使用半主机模式
  877. {
  878.   x = x;
  879. }
  880. int fputc(int ch,FILE *f)//重新定义fputc函数使其输出到串口上
  881. {
  882.    while(USART_GetFlagStatus(USART2,USART_FLAG_TC) == RESET)//等待发送成功
  883.    {}
  884.    USART_SendData(USART2,(uint8_t) ch);//发送数据
  885.    return ch;
  886. }
  887. int ferror(FILE *f)
  888. {
  889.    return EOF;
  890. }
  891. #endif

  892. FILE  __stdin;

  893. int fgetc(FILE *fp)
  894. {
  895.    int ch=0;
  896.    while(USART_GetFlagStatus(USART2,USART_FLAG_RXNE) == RESET)
  897.    {
  898.    
  899.    }

  900.    ch = (int)USART2->DR & 0XFF;

  901.    putchar(ch);//回显,就是输出你输入的数据
  902.    return ch;
  903. }
  904. #ifdef USE_FULL_ASSERT
  905. /*************
  906. 如果你定义了USE_FULL_ASSERT

  907. 就可以在assert_failed,加入:
  908. printf("Wrong parameters value: file %s on line %d\r\n", file, line);
  909. 就可以使用assert_param(expr) 来判断当前参数是够正确,如果不正确,就会打印出错的文件,以及出错的行。
  910. 这样就可以方面调试信息了。
  911. *********/
  912. void assert_failed(uint8_t* file,uint32_t line)//输出错误信息
  913. {
  914.     printf("Wrong parameters value: file %s on line %d\r\n",file,line);
  915.         while(1)
  916.         {
  917.         }
  918. }
  919. #endif

  920. void LCD_SetPoint(uint16_t Xpos,uint16_t Ypos,uint16_t color)
  921. {
  922.         LCD_SetCursor(Xpos,Ypos);
  923.         LCD_WriteRAM_Prepare();
  924.         LCD_WriteRAM(color);
  925. }
  926. void LCD_DrawPicture(uint16_t Xpos,uint16_t Ypos,unsigned char *shuju)
  927. {
  928.         uint16_t Index=0,X,Y,k;
  929.         for(Y=0;Y<48;Y++)
  930.         {
  931.                 for(X=0;X<8;X++)
  932.                 {
  933.                         /*********************
  934.                         这里找的字符的格式是48*48的像素,就是横着48个像素点(灰度),竖着是48个像素点(灰度)
  935.                   (这里是个关键点,注意的是1个unsigned char 字节代表的是8个bit(即8个像素点))
  936.                        
  937.                         **********************************************
  938.                         **********************************************
  939.                         **********************************************
  940.                         **********************************************
  941.                         **********************************************
  942.                         **********************************************
  943.                         **********************************************
  944.                         **********************************************
  945.                         **********************************************
  946.                         **********************************************
  947.                         **********************************************
  948.                         **********************************************
  949.                         **********************************************
  950.                         **********************************************
  951.                         **********************************************
  952.                         **********************************************
  953.                         **********************************************
  954.                         **********************************************
  955.                         **********************************************
  956.                         **********************************************
  957.                         **********************************************
  958.                         **********************************************
  959.                         **********************************************
  960.                         **********************************************
  961.                         **********************************************
  962.                         **********************************************
  963.                         **********************************************
  964.                         **********************************************
  965.                         **********************************************
  966.                         **********************************************
  967.                         **********************************************
  968.                         **********************************************
  969.                         **********************************************
  970.                         **********************************************
  971.                         **********************************************
  972.                         **********************************************
  973.                         **********************************************
  974.                         **********************************************
  975.                         **********************************************
  976.                         **********************************************
  977.                         **********************************************
  978.                         **********************************************
  979.                         **********************************************
  980.                         **********************************************
  981.                         **********************************************
  982.                         **********************************************
  983.                         **********************************************
  984.                         **********************************************
  985.                         **********************************************
  986.                         **********************************************
  987.                         **********************************************
  988.                         **********************************************
  989.                         **********************************************
  990.                         **********************************************
  991.                         **********************************************
  992.                         **********************************************
  993.                         **********************************************
  994.                         **********************************************
  995.                         **********************************************
  996.                         **********************************************
  997.                         **********************************************
  998.                         **********************************************
  999.                         **********************************************
  1000.                         **********************************************
  1001.                         这个就是48*48,所以如果(0,0)的位置的话,右上角的坐标是(47,47),左上角是(0,47),右下角是(47,0);
  1002.                         这里的K是横着的数据的个数(48/8)6个数据,为什么要除以8,这个在上边已经提示了,因为一个unsigned char
  1003.                         类型的变量是8bit(8个像素点)所以只需要找6个unsigned char 的变量了,那么Y轴上需要48个unsigned char
  1004.                         变量了,(这里的,Y就是Y轴,X是X轴),所以在这里你可以完全的完成自己的DIY屏幕了,(还有一点就是,如何测试自己的
  1005.                         屏幕的(0,0)在哪,自己可以LCD_SetPoint(10,10,BLCAK),然后改变某个坐标的值在进行测试就可以了)
  1006.                         ****************/
  1007.                         for(k=0;k<6;k++)
  1008.                         {
  1009.                                 if((shuju[Index*6+k]>>(7-X))&0x01 == 0x01)//这个是第一个字节的第j位的状态
  1010.                                 {
  1011.                                                 LCD_SetPoint(Xpos+X+(k*8),Ypos+Y,RED);
  1012.                           }
  1013.                          else
  1014.                          {
  1015.                                    LCD_SetPoint(Xpos+X+k*8,Ypos+Y,WHITE);
  1016.                          }
  1017.                  }
  1018.          }       
  1019.                 Index++;
  1020.         }
  1021. }
  1022.                                
  1023. int main(void)
  1024. {
  1025.         SysTick_Config(7200000);///这个最大的参数是2的24次方
  1026.         SysTick->CTRL = 0x00;
  1027.         LED_Init();
  1028.         STM_32_LCDInit();
  1029.         STM32_USART_Configuration();
  1030.         LED_Init();
  1031.   SysTick->CTRL = 0x07;//da kai ding shi qi zhong duan
  1032.        
  1033.                 LCD_Clear(RED);//这个是显示颜色
  1034.                 LCD_DrawPicture(0,100,ASCII_Table1);
  1035.     LCD_DrawPicture(47,100,ASCII_Table2);
  1036.         while(1)
  1037.         {
  1038.         }
  1039. }

复制代码
关键的部分在那个LCD_DrawPicture()函数中,取模软件在附件中,嘿嘿,高兴。

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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版