文件

来源网络
bsp_ST7033.h
bsp_ST7033.c
ST7033.pdf
点亮及显示.zip

bsp_ST7033.h

  1. /******************************************************************************
  2. Copyright (C), 2014-2016, 西安XX技研电子科技有限公司
  3. File name: ST7033.h
  4. Author:
  5. Version:
  6. Date:
  7. Platform: Stm32F103VET6
  8. Tools: keilMDK
  9. OS Version: UCOS-II v2.86
  10. Description: // 用于详细说明此程序文件完成的主要功能,与其他模块
  11. // 或函数的接口,输出值、取值范围、含义及参数间的控
  12. // 制、顺序、独立或依赖等关系
  13. Others: // 其它内容的说明
  14. Function List: // 主要函数列表,每条记录应包括函数名及功能简要说明
  15. 1. ....
  16. History: // 修改历史记录列表,每条修改记录应包括修改日期、修改
  17. // 者及修改内容简述
  18. 1. Date:
  19. Author:
  20. Modification:
  21. 2. ...
  22. ******************************************************************************/
  23. #include "stm32f10x.h"
  24. #include "ucos_ii.h"
  25. #include "string.h"
  26. #include "xprintf.h"
  27. #define GPIO_ST7033_CS_PORT GPIOC
  28. #define GPIO_ST7033_CS_PIN GPIO_Pin_4
  29. #define GPIO_ST7033_A0_PORT GPIOC
  30. #define GPIO_ST7033_A0_PIN GPIO_Pin_5
  31. #define GPIO_ST7033_RST_PORT GPIOB
  32. #define GPIO_ST7033_RST_PIN GPIO_Pin_0
  33. #define GPIO_ST7033_BL_PORT GPIOB
  34. #define GPIO_ST7033_BL_PIN GPIO_Pin_1
  35. #define GPIO_ST7033_SCLK_PORT GPIOA
  36. #define GPIO_ST7033_SCLK_PIN GPIO_Pin_5
  37. #define GPIO_ST7033_MISO_PORT GPIOA
  38. #define GPIO_ST7033_MISO_PIN GPIO_Pin_6
  39. #define GPIO_ST7033_MOSI_PORT GPIOA
  40. #define GPIO_ST7033_MOSI_PIN GPIO_Pin_7
  41. void LcdInit(void);
  42. void LcdBacklightOn(void);
  43. void LcdBacklightOff(void);
  44. void LcdDisplayAll(void);
  45. void LcdClearAll(void);

bsp_ST7033.c

  1. /******************************************************************************
  2. Copyright (C), 2014-2016, 西安XX技研电子科技有限公司
  3. File name: ST7033.c
  4. Author:
  5. Version:
  6. Date:
  7. Platform: Stm32F103VET6
  8. Tools: keilMDK
  9. OS Version: UCOS-II v2.86
  10. Description: // 用于详细说明此程序文件完成的主要功能,与其他模块
  11. // 或函数的接口,输出值、取值范围、含义及参数间的控
  12. // 制、顺序、独立或依赖等关系
  13. Others: // 其它内容的说明
  14. Function List: // 主要函数列表,每条记录应包括函数名及功能简要说明
  15. 1. ....
  16. History: // 修改历史记录列表,每条修改记录应包括修改日期、修改
  17. // 者及修改内容简述
  18. 1. Date:
  19. Author:
  20. Modification:
  21. 2. ...
  22. ******************************************************************************/
  23. #include "ST7033.h"
  24. unsigned char LcdBuf[96];
  25. /*******************************************************************************
  26. ST7033: 3-line SPI, GPIO模拟
  27. *******************************************************************************/
  28. /*
  29. *********************************************************************************************************
  30. * 函 数 名: ST7033_GPIO_init
  31. * 功能说明: MCU和ST7033连接的管脚初始化
  32. * 形 参:
  33. * 返 回 值:
  34. *********************************************************************************************************
  35. */
  36. void ST7033_GPIO_init(void)
  37. {
  38. GPIO_InitTypeDef GPIO_InitStructure;
  39. /* enable GPIO clock */
  40. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  41. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
  42. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
  43. //ST7033_CS - PC4
  44. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
  45. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  46. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  47. GPIO_Init(GPIOC, &GPIO_InitStructure);
  48. //ST7033_RESET - PB0
  49. //ST7033_BL_CTRL - PB1
  50. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;
  51. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  52. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  53. GPIO_Init(GPIOB, &GPIO_InitStructure);
  54. //ST7033_SCLK - PA5
  55. //ST7033_MOSI - PA7
  56. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_7;
  57. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  58. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  59. GPIO_Init(GPIOA, &GPIO_InitStructure);
  60. }
  61. void ST7033_CS_OUT(unsigned char status)
  62. {
  63. if(status > 0)
  64. {
  65. GPIO_ST7033_CS_PORT->BSRR = GPIO_ST7033_CS_PIN;
  66. }
  67. else
  68. {
  69. GPIO_ST7033_CS_PORT->BRR = GPIO_ST7033_CS_PIN;
  70. }
  71. }
  72. void ST7033_BL_OUT(unsigned char status)
  73. {
  74. if(status > 0)
  75. {
  76. GPIO_ST7033_BL_PORT->BSRR = GPIO_ST7033_BL_PIN;
  77. }
  78. else
  79. {
  80. GPIO_ST7033_BL_PORT->BRR = GPIO_ST7033_BL_PIN;
  81. }
  82. }
  83. void ST7033_A0_OUT(unsigned char status)
  84. {
  85. if(status > 0)
  86. {
  87. GPIO_ST7033_A0_PORT->BSRR = GPIO_ST7033_A0_PIN;
  88. }
  89. else
  90. {
  91. GPIO_ST7033_A0_PORT->BRR = GPIO_ST7033_A0_PIN;
  92. }
  93. }
  94. void ST7033_RST_OUT(unsigned char status)
  95. {
  96. if(status > 0)
  97. {
  98. GPIO_ST7033_RST_PORT->BSRR = GPIO_ST7033_RST_PIN;
  99. }
  100. else
  101. {
  102. GPIO_ST7033_RST_PORT->BRR = GPIO_ST7033_RST_PIN;
  103. }
  104. }
  105. void ST7033_SCLK_OUT(unsigned char status)
  106. {
  107. if(status > 0)
  108. {
  109. GPIO_ST7033_SCLK_PORT->BSRR = GPIO_ST7033_SCLK_PIN;
  110. }
  111. else
  112. {
  113. GPIO_ST7033_SCLK_PORT->BRR = GPIO_ST7033_SCLK_PIN;
  114. }
  115. }
  116. void ST7033_MOSI_OUT(unsigned char status)
  117. {
  118. if(status > 0)
  119. {
  120. GPIO_ST7033_MOSI_PORT->BSRR = GPIO_ST7033_MOSI_PIN;
  121. }
  122. else
  123. {
  124. GPIO_ST7033_MOSI_PORT->BRR = GPIO_ST7033_MOSI_PIN;
  125. }
  126. }
  127. void Delay1(int dly)
  128. {
  129. int tmp;
  130. tmp = dly;
  131. while(tmp--);
  132. }
  133. /*
  134. *********************************************************************************************************
  135. * 函 数 名: ST7033_wr_cmd
  136. * 功能说明: 向ST7033发送命令
  137. * 形 参:
  138. * 返 回 值:
  139. *********************************************************************************************************
  140. */
  141. void ST7033_wr_cmd(unsigned char cmd)
  142. {
  143. unsigned char i = 0;
  144. ST7033_CS_OUT(0);
  145. Delay1(2);
  146. //A0
  147. ST7033_SCLK_OUT(0);
  148. ST7033_MOSI_OUT(0);
  149. Delay1(2);
  150. ST7033_SCLK_OUT(1);
  151. Delay1(2);
  152. //cmd
  153. while(i < 8)
  154. {
  155. ST7033_SCLK_OUT(0);
  156. if(cmd & 0x80)
  157. {
  158. ST7033_MOSI_OUT(1);
  159. }
  160. else
  161. {
  162. ST7033_MOSI_OUT(0);
  163. }
  164. Delay1(2);
  165. ST7033_SCLK_OUT(1);
  166. Delay1(2);
  167. cmd = cmd << 1;
  168. i++;
  169. }
  170. ST7033_CS_OUT(1);
  171. Delay1(2);
  172. }
  173. /*
  174. *********************************************************************************************************
  175. * 函 数 名: ST7033_wr_data
  176. * 功能说明: 向ST7033发送断码数据
  177. * 形 参:
  178. * 返 回 值:
  179. *********************************************************************************************************
  180. */
  181. void ST7033_wr_data(unsigned char data)
  182. {
  183. unsigned char i = 0;
  184. ST7033_CS_OUT(0);
  185. Delay1(2);
  186. //A0
  187. ST7033_SCLK_OUT(0);
  188. ST7033_MOSI_OUT(1);
  189. Delay1(2);
  190. ST7033_SCLK_OUT(1);
  191. Delay1(2);
  192. //cmd
  193. while(i < 8)
  194. {
  195. ST7033_SCLK_OUT(0);
  196. if(data & 0x80)
  197. {
  198. ST7033_MOSI_OUT(1);
  199. }
  200. else
  201. {
  202. ST7033_MOSI_OUT(0);
  203. }
  204. Delay1(2);
  205. ST7033_SCLK_OUT(1);
  206. Delay1(2);
  207. data = data << 1;
  208. i++;
  209. }
  210. ST7033_CS_OUT(1);
  211. Delay1(2);
  212. }
  213. /*
  214. *********************************************************************************************************
  215. * 函 数 名: ST7033_init
  216. * 功能说明: ST7033上电初始化
  217. * 形 参:
  218. * 返 回 值:
  219. *********************************************************************************************************
  220. */
  221. void ST7033_init(void)
  222. {
  223. ST7033_RST_OUT(0);
  224. OSTimeDly(50);
  225. ST7033_RST_OUT(1);
  226. OSTimeDly(30);
  227. ST7033_wr_cmd(0xE2);
  228. ST7033_wr_cmd(0x2F);
  229. ST7033_wr_cmd(0xB0);
  230. ST7033_wr_cmd(0x10);
  231. ST7033_wr_cmd(0x00);
  232. ST7033_wr_cmd(0xF1);
  233. ST7033_wr_cmd(0xAC);
  234. ST7033_wr_cmd(0xF0);
  235. ST7033_wr_cmd(0xA4);
  236. ST7033_wr_cmd(0xAF);
  237. ST7033_wr_cmd(0xA1);
  238. ST7033_wr_cmd(0xC8);
  239. }
  240. /*
  241. *********************************************************************************************************
  242. * 函 数 名: ST7033_clear
  243. * 功能说明: 清除全部断码内容,然后清除屏幕
  244. * 形 参:
  245. * 返 回 值:
  246. *********************************************************************************************************
  247. */
  248. void ST7033_clear(void)
  249. {
  250. unsigned char i;
  251. ST7033_wr_cmd(0xB0);
  252. ST7033_wr_cmd(0x10);
  253. ST7033_wr_cmd(0x00);
  254. for(i = 0; i < 96; i++)
  255. {
  256. ST7033_wr_data(0x00);
  257. }
  258. }
  259. /*
  260. *********************************************************************************************************
  261. * 函 数 名: ST7033_display_all
  262. * 功能说明: 置位全部断码,然后显示全部元素
  263. * 形 参:
  264. * 返 回 值:
  265. *********************************************************************************************************
  266. */
  267. void ST7033_display_all(void)
  268. {
  269. unsigned char i;
  270. ST7033_wr_cmd(0xB0);
  271. ST7033_wr_cmd(0x10);
  272. ST7033_wr_cmd(0x00);
  273. for(i = 0; i < 96; i++)
  274. {
  275. ST7033_wr_data(0x0F);
  276. }
  277. }
  278. /*
  279. *********************************************************************************************************
  280. * 函 数 名: ST7033_display_data
  281. * 功能说明: 对全部断码进行修改,然后刷新
  282. * 形 参:
  283. * 返 回 值:
  284. *********************************************************************************************************
  285. */
  286. void ST7033_display_data(unsigned char *data)
  287. {
  288. unsigned char i;
  289. ST7033_wr_cmd(0xB0);
  290. ST7033_wr_cmd(0x10);
  291. ST7033_wr_cmd(0x00);
  292. for(i = 0; i < 96; i++)
  293. {
  294. ST7033_wr_data(*data);
  295. data++;
  296. }
  297. }
  298. /*
  299. *********************************************************************************************************
  300. * 函 数 名: ST7033_display_specified
  301. * 功能说明: 对特定位置(location)的total个字节的断码进行修改,然后刷新
  302. * 形 参:
  303. * 返 回 值:
  304. *********************************************************************************************************
  305. */
  306. void ST7033_display_specified(unsigned char location, unsigned char *data, unsigned char total)
  307. {
  308. unsigned char i;
  309. unsigned char high, low;
  310. if(location >= 96)
  311. {
  312. return;
  313. }
  314. low = location & 0x0F;
  315. high = location >> 4;
  316. high |= 0x10;
  317. //xprintf("0x%2x:0x%2x \r\n", high, low);
  318. ST7033_wr_cmd(0xB0);
  319. ST7033_wr_cmd(high);
  320. ST7033_wr_cmd(low);
  321. for(i = 0; i < total; i++)
  322. {
  323. //xprintf("data:0x%2x \r\n", *data);
  324. ST7033_wr_data(*data);
  325. data++;
  326. }
  327. }
  328. /*
  329. *********************************************************************************************************
  330. * 函 数 名: LcdInit
  331. * 功能说明: LCD初始化,因为用到了OSTimeDly(),所以此函数的调用必须在UC0S-II的 systick 初始化之后
  332. * 形 参:
  333. * 返 回 值:
  334. *********************************************************************************************************
  335. */
  336. void LcdInit(void)
  337. {
  338. LcdBacklightOn();
  339. ST7033_GPIO_init();
  340. ST7033_init();
  341. //ST7033_clear();
  342. ST7033_display_all();
  343. }
  344. /*
  345. *********************************************************************************************************
  346. * 函 数 名: LcdBacklightOn
  347. * 功能说明: 打开LCD背光
  348. * 形 参:
  349. * 返 回 值:
  350. *********************************************************************************************************
  351. */
  352. void LcdBacklightOn(void)
  353. {
  354. ST7033_BL_OUT(1);
  355. }
  356. /*
  357. *********************************************************************************************************
  358. * 函 数 名: LcdBacklightOff
  359. * 功能说明: 关闭LCD背光
  360. * 形 参:
  361. * 返 回 值:
  362. *********************************************************************************************************
  363. */
  364. void LcdBacklightOff(void)
  365. {
  366. ST7033_BL_OUT(0);
  367. }
  368. /*
  369. *********************************************************************************************************
  370. * 函 数 名: LcdDisplayAll
  371. * 功能说明: 显示LCD的全部元素
  372. * 形 参:
  373. * 返 回 值:
  374. *********************************************************************************************************
  375. */
  376. void LcdDisplayAll(void)
  377. {
  378. ST7033_display_all();
  379. }
  380. /*
  381. *********************************************************************************************************
  382. * 函 数 名: LcdClearAll
  383. * 功能说明: 清除LCD的全部元素
  384. * 形 参:
  385. * 返 回 值:
  386. *********************************************************************************************************
  387. */
  388. void LcdClearAll(void)
  389. {
  390. ST7033_clear();
  391. }