学习12864 5*8

来源:互联网 发布:mac添加dock 编辑:程序博客网 时间:2024/05/20 15:11
 

第五节 LCD12864显示

标签: BLECC254x12864蓝牙4.0BLE通信
 337人阅读 评论(0) 收藏 举报
 分类:
第五节  LCD12864显示
上一节我们成功控制了LED和蜂鸣器,这一节我们马不停蹄接着LCD12864的控制。
为了系统能够稳定的工作,首先我们将系统时钟切换到32M的外部晶振,为了自由配置所需要的时钟,主要借助于CLKCONCMD.OSC选择系统主时钟,而借助于CLKCONCMD.OSC32K则用于选择芯片32K时钟源!而低功耗模式设置时,需要借助于SLEEPCMD寄存器,在《CC253x-CC2540-41Applications User's Guide.pdf》中并没有说明SLEEPCMD第二位功能,如下所示:


但是参考cc2430芯片的说明书可以发现,对应的SLEEP寄存器则有说明,如下所示,这个是TI有意隐藏芯片细节,当SLEEPCMD.OSC_PD为0时,32MHz晶振与16MHz RC振荡器都会起振:


对于SLEEPSTA寄存器中BIT6/BIT5说明在cc2530说明书中也并没有说明,可以参考cc2430说明书中内容,其中第6位XOSC_STB表明外部高速32M晶振是否上电并稳定起振,当稳定时该位为1;同样对于第5位HFRC_STB则表明内部16MHz高速RC振荡器是否起振,并是否稳定,当16MHz RC振荡器稳定时该位为1。

[cpp] view plain copy
  1. void SysStartXOSC(void)  
  2. {  
  3.     SLEEPCMD &= ~0x04;                      // 启动所有晶振  
  4.     while (!(SLEEPSTA & 0x40));             // 等待晶振稳定  
  5.   
  6.     CLKCONCMD = (CLKCONCMD & 0x80) | 0x49;  // 使用16M晶振作为主时钟  
  7.     while ((CLKCONSTA & ~0x80) != 0x49 );   // 等待主时钟切换到16M晶振  
  8.   
  9.     CLKCONCMD = (CLKCONCMD & ~0x80) ;       // 使用外部32K晶振作为休眠时钟  
  10.     while ( (CLKCONSTA & 0x80) != 0 );      // 等待睡眠时钟切换到外部32K晶振  
  11.   
  12.     CLKCONCMD = (CLKCONCMD & 0x80) ;        // 使用32M晶振作为主时钟  
  13.     while ( (CLKCONSTA & ~0x80) != 0 );     // 等待主时钟切换到32M晶振  
  14.   
  15.     SLEEPCMD |= 0x04;                       // 关闭未使用的晶振  
  16. }  

按照上述方式配置后,我们就可以工作在外部的32M晶振上了,配置好系统时钟和SPI后,剩下的工作只需要按照液晶屏的说明书发送相应的指令就可以将液晶屏驱动起来了,具体的驱动代码详见下一堂课程。这里使用的是ASCII的点阵表,所以只能显示英文,如果需要显示中文,就需要中文字库的支持了。
   
LCD12864的驱动程序:

[cpp] view plain copy
  1. /****************************************************************************** 
  2.  
  3.                   版权所有 (C), 2013-2020, 深圳市馒头科技有限公司 
  4.  
  5.  ****************************************************************************** 
  6.   文 件 名   : Lcd12864.c 
  7.   版 本 号   : V1.0 
  8.   作    者   : 朱兆祺 
  9.   生成日期   : 2014年6月18日 
  10.   功能描述   : LCD12864驱动 
  11.               //control 
  12.               P0.1 - LCD_MODE 
  13.               P1.2 - LCD_CS 
  14.  
  15.               //spi 
  16.               P1.5 - CLK 
  17.               P1.6 - MOSI 
  18.   函数列表   : 
  19.   修改历史   : 
  20.   1.日    期   : 2014年6月18日 
  21.     作    者   : 朱兆祺 
  22.     修改内容   : 创建文件 
  23.  
  24. ******************************************************************************/  
  25.   
  26. /*----------------------------------------------* 
  27.  * 包含头文件                                   * 
  28.  *----------------------------------------------*/  
  29. #include <ioCC2540.h>  
  30. #include "Lcd12864.h"  
  31. #include "common.h"  
  32.   
  33. /*----------------------------------------------* 
  34.  * 宏定义                                       * 
  35.  *----------------------------------------------*/  
  36.   
  37. /* LCD lines */  
  38. #define LCD12864_MAX_LINE                64  
  39. #define LCD12864_MAX_ROW                 128  
  40.   
  41. #define HAL_LCD_FONT_LINES                8  
  42. #define HAL_LCD_FONT_ROWS                 6  
  43.   
  44. /* LCD Max Chars and Buffer */  
  45. #define HAL_LCD_MAX_LINES            (LCD12864_MAX_LINE/HAL_LCD_FONT_LINES)       // 6*8点阵最大行数  
  46. #define HAL_LCD_MAX_CHARS            (LCD12864_MAX_ROW/HAL_LCD_FONT_ROWS)         // 6*8点阵最大列数  
  47.   
  48. /* LCD Control lines */  
  49. #define HAL_LCD_RS_PORT             0  
  50. #define HAL_LCD_RS_PIN              1  
  51.   
  52. #define HAL_LCD_CS_PORT             1  
  53. #define HAL_LCD_CS_PIN              2  
  54.   
  55. /* LCD SPI lines */  
  56. #define HAL_LCD_CLK_PORT            1  
  57. #define HAL_LCD_CLK_PIN             5  
  58.   
  59. #define HAL_LCD_MOSI_PORT           1  
  60. #define HAL_LCD_MOSI_PIN            6  
  61.   
  62. // 12864 命令  
  63. #define                LCD_CMD_DISPLAY_ON                                0xAF  
  64. #define                LCD_CMD_DISPLAY_OFF                                0xAE  
  65. #define                LCD_CMD_BEGIN_LINE                                0x40  
  66. #define                LCD_CMD_PAGE_LINE                                0xB0  
  67. #define                LCD_CMD_ROW_HIG                                        0x10  
  68. #define                LCD_CMD_ROW_LOW                                        0x00  
  69. #define                LCD_CMD_READ_STATE                                0x00  
  70. #define                LCD_CMD_ROW_ADDR_NORMAL                        0xA0                // 从左到右  
  71. #define                LCD_CMD_ROW_ADDR_REVERSE                 0xA1                // 从右到左  
  72. #define                LCD_CMD_DISPLAY_NORMAL                        0xA6  
  73. #define                LCD_CMD_DISPLAY_REVERSE                        0xA7  
  74. #define                LCD_CMD_DISPLAY_POINT_ALL                0xA5  
  75. #define                LCD_CMD_DISPLAY_POINT_NORMAL        0xA4  
  76. #define                LCD_CMD_BIAS_SET                    0xA2             // 0XA2:BIAS=1/9 (常用)  0XA3:BIAS=1/7  
  77. #define                LCD_CMD_SOFT_RESET                  0xE2  
  78. #define                LCD_CMD_LINE_NORMAL                 0xC0                // 从上到下  
  79. #define                LCD_CMD_LINE_REVERSE                0xC8                // 从下到上  
  80. #define                LCD_CMD_POWER_ONE                                0x2C  
  81. #define                LCD_CMD_POWER_TWO                                0x2E  
  82. #define                LCD_CMD_POWER_THREE                                0x2F  
  83. #define                LCD_CMD_CONTRAST_ONE_LEVEL                0x22  // 0x20-0x27  
  84. #define                LCD_CMD_CONTRAST_TWO_CMD                0x81  // 0x00-0x3F  
  85. #define                LCD_CMD_STATIC_PICTURE_ON                0xAD  
  86.   
  87.    /* SPI interface control */  
  88. #define LCD_SPI_BEGIN()     HAL_CONFIG_IO_OUTPUT(HAL_LCD_CS_PORT,  HAL_LCD_CS_PIN,  0); /* chip select */  
  89. #define LCD_SPI_END()                                                         \  
  90. {                                                                             \  
  91.   asm("NOP");                                                                 \  
  92.   asm("NOP");                                                                 \  
  93.   asm("NOP");                                                                 \  
  94.   asm("NOP");                                                                 \  
  95.   HAL_CONFIG_IO_OUTPUT(HAL_LCD_CS_PORT,  HAL_LCD_CS_PIN,  1); /* chip select */         \  
  96. }  
  97. /* clear the received and transmit byte status, write tx data to buffer, wait till transmit done */  
  98. #define LCD_SPI_TX(x)                   { U1CSR &= ~(BV(2) | BV(1)); U1DBUF = x; while( !(U1CSR & BV(1)) ); }  
  99.   
  100. /* Control macros */  
  101. #define LCD_DO_WRITE()        HAL_CONFIG_IO_OUTPUT(HAL_LCD_RS_PORT,  HAL_LCD_RS_PIN,  1);  
  102. #define LCD_DO_CONTROL()      HAL_CONFIG_IO_OUTPUT(HAL_LCD_RS_PORT,  HAL_LCD_RS_PIN,  0);  
  103.   
  104. /*全体ASCII 列表:5x7点阵库*/  
  105. const static uint8 aucAsciiTable5x7[][5]={  
  106. 0x00,0x00,0x00,0x00,0x00,//space  
  107. 0x00,0x00,0x4f,0x00,0x00,//!  
  108. 0x00,0x07,0x00,0x07,0x00,//"  
  109. 0x14,0x7f,0x14,0x7f,0x14,//#  
  110. 0x24,0x2a,0x7f,0x2a,0x12,//$  
  111. 0x23,0x13,0x08,0x64,0x62,//%  
  112. 0x36,0x49,0x55,0x22,0x50,//&  
  113. 0x00,0x05,0x07,0x00,0x00,//]  
  114. 0x00,0x1c,0x22,0x41,0x00,//(  
  115. 0x00,0x41,0x22,0x1c,0x00,//)  
  116. 0x14,0x08,0x3e,0x08,0x14,//*  
  117. 0x08,0x08,0x3e,0x08,0x08,//+  
  118. 0x00,0x50,0x30,0x00,0x00,//,  
  119. 0x08,0x08,0x08,0x08,0x08,//-  
  120. 0x00,0x60,0x60,0x00,0x00,//.  
  121. 0x20,0x10,0x08,0x04,0x02,///  
  122. 0x3e,0x51,0x49,0x45,0x3e,//0  
  123. 0x00,0x42,0x7f,0x40,0x00,//1  
  124. 0x42,0x61,0x51,0x49,0x46,//2  
  125. 0x21,0x41,0x45,0x4b,0x31,//3  
  126. 0x18,0x14,0x12,0x7f,0x10,//4  
  127. 0x27,0x45,0x45,0x45,0x39,//5  
  128. 0x3c,0x4a,0x49,0x49,0x30,//6  
  129. 0x01,0x71,0x09,0x05,0x03,//7  
  130. 0x36,0x49,0x49,0x49,0x36,//8  
  131. 0x06,0x49,0x49,0x29,0x1e,//9  
  132. 0x00,0x36,0x36,0x00,0x00,//:  
  133. 0x00,0x56,0x36,0x00,0x00,//;  
  134. 0x08,0x14,0x22,0x41,0x00,//<  
  135. 0x14,0x14,0x14,0x14,0x14,//=  
  136. 0x00,0x41,0x22,0x14,0x08,//>  
  137. 0x02,0x01,0x51,0x09,0x06,//?  
  138. 0x32,0x49,0x79,0x41,0x3e,//@  
  139. 0x7e,0x11,0x11,0x11,0x7e,//A  
  140. 0x7f,0x49,0x49,0x49,0x36,//B  
  141. 0x3e,0x41,0x41,0x41,0x22,//C  
  142. 0x7f,0x41,0x41,0x22,0x1c,//D  
  143. 0x7f,0x49,0x49,0x49,0x41,//E  
  144. 0x7f,0x09,0x09,0x09,0x01,//F  
  145. 0x3e,0x41,0x49,0x49,0x7a,//G  
  146. 0x7f,0x08,0x08,0x08,0x7f,//H  
  147. 0x00,0x41,0x7f,0x41,0x00,//I  
  148. 0x20,0x40,0x41,0x3f,0x01,//J  
  149. 0x7f,0x08,0x14,0x22,0x41,//K  
  150. 0x7f,0x40,0x40,0x40,0x40,//L  
  151. 0x7f,0x02,0x0c,0x02,0x7f,//M  
  152. 0x7f,0x04,0x08,0x10,0x7f,//N  
  153. 0x3e,0x41,0x41,0x41,0x3e,//O  
  154. 0x7f,0x09,0x09,0x09,0x06,//P  
  155. 0x3e,0x41,0x51,0x21,0x5e,//Q  
  156. 0x7f,0x09,0x19,0x29,0x46,//R  
  157. 0x46,0x49,0x49,0x49,0x31,//S  
  158. 0x01,0x01,0x7f,0x01,0x01,//T  
  159. 0x3f,0x40,0x40,0x40,0x3f,//U  
  160. 0x1f,0x20,0x40,0x20,0x1f,//V  
  161. 0x3f,0x40,0x38,0x40,0x3f,//W  
  162. 0x63,0x14,0x08,0x14,0x63,//X  
  163. 0x07,0x08,0x70,0x08,0x07,//Y  
  164. 0x61,0x51,0x49,0x45,0x43,//Z  
  165. 0x00,0x7f,0x41,0x41,0x00,//[  
  166. 0x02,0x04,0x08,0x10,0x20,// 斜杠  
  167. 0x00,0x41,0x41,0x7f,0x00,//]  
  168. 0x04,0x02,0x01,0x02,0x04,//^  
  169. 0x40,0x40,0x40,0x40,0x40,//_  
  170. 0x01,0x02,0x04,0x00,0x00,//`  
  171. 0x20,0x54,0x54,0x54,0x78,//a  
  172. 0x7f,0x48,0x48,0x48,0x30,//b  
  173. 0x38,0x44,0x44,0x44,0x44,//c  
  174. 0x30,0x48,0x48,0x48,0x7f,//d  
  175. 0x38,0x54,0x54,0x54,0x58,//e  
  176. 0x00,0x08,0x7e,0x09,0x02,//f  
  177. 0x48,0x54,0x54,0x54,0x3c,//g  
  178. 0x7f,0x08,0x08,0x08,0x70,//h  
  179. 0x00,0x00,0x7a,0x00,0x00,//i  
  180. 0x20,0x40,0x40,0x3d,0x00,//j  
  181. 0x7f,0x20,0x28,0x44,0x00,//k  
  182. 0x00,0x41,0x7f,0x40,0x00,//l  
  183. 0x7c,0x04,0x38,0x04,0x7c,//m  
  184. 0x7c,0x08,0x04,0x04,0x78,//n  
  185. 0x38,0x44,0x44,0x44,0x38,//o  
  186. 0x7c,0x14,0x14,0x14,0x08,//p  
  187. 0x08,0x14,0x14,0x14,0x7c,//q  
  188. 0x7c,0x08,0x04,0x04,0x08,//r  
  189. 0x48,0x54,0x54,0x54,0x24,//s  
  190. 0x04,0x04,0x3f,0x44,0x24,//t  
  191. 0x3c,0x40,0x40,0x40,0x3c,//u  
  192. 0x1c,0x20,0x40,0x20,0x1c,//v  
  193. 0x3c,0x40,0x30,0x40,0x3c,//w  
  194. 0x44,0x28,0x10,0x28,0x44,//x  
  195. 0x04,0x48,0x30,0x08,0x04,//y  
  196. 0x44,0x64,0x54,0x4c,0x44,//z  
  197. 0x08,0x36,0x41,0x41,0x00,//{  
  198. 0x00,0x00,0x77,0x00,0x00,//|  
  199. 0x00,0x41,0x41,0x36,0x08,//}  
  200. 0x04,0x02,0x02,0x02,0x01,//~  
  201. };  
  202. const uint8 asciiTableSize = sizeof( aucAsciiTable5x7 ) / sizeof( aucAsciiTable5x7[0]);  
  203.   
  204.   
  205. /*****************************************************************************  
  206.  函 数 名  : LCD12864_Cmd  
  207.  功能描述  : 发送控制命令  
  208.  输入参数  : uint8 cmd  
  209.  输出参数  : 无  
  210.  返 回 值  :  
  211.   
  212.  修改历史      :  
  213.   1.日    期   : 2014年5月28日  
  214.     作    者   : 朱兆祺  
  215.     修改内容   : 创建  
  216.   
  217. *****************************************************************************/  
  218. static void LCD12864_Cmd(uint8 cmd)  
  219. {  
  220.     LCD_SPI_BEGIN();  
  221.     LCD_DO_CONTROL();  
  222.     LCD_SPI_TX(cmd);  
  223.     LCD_SPI_END();  
  224. }  
  225.   
  226. /***************************************************************************** 
  227.  函 数 名  : LCD12864_Dat 
  228.  功能描述  : 发送数据 
  229.  输入参数  : uint8 data 
  230.  输出参数  : 无 
  231.  返 回 值  : 
  232.  
  233.  修改历史      : 
  234.   1.日    期   : 2014年5月28日 
  235.     作    者   : 朱兆祺 
  236.     修改内容   : 创建 
  237.  
  238. *****************************************************************************/  
  239. static void LCD12864_Dat(uint8 data)  
  240. {  
  241.     LCD_SPI_BEGIN();  
  242.     LCD_DO_WRITE();  
  243.     LCD_SPI_TX(data);  
  244.     LCD_SPI_END();  
  245. }  
  246.   
  247.   
  248. void LCD12864_Init(void)  
  249. {  
  250.     PERCFG |= 0x02;       // 设置UART alt2 为 SPI  
  251.     // 配置引脚为SPI功能  
  252.     HAL_CONFIG_IO_PERIPHERAL(HAL_LCD_CLK_PORT,  HAL_LCD_CLK_PIN);  
  253.     HAL_CONFIG_IO_PERIPHERAL(HAL_LCD_MOSI_PORT, HAL_LCD_MOSI_PIN);  
  254.   
  255.     /* Configure SPI */  
  256.     U1UCR  = 0x80;      // 清除原来的数据  
  257.     U1CSR  = 0x00;      // SPI 主机模式  
  258.     // 高位在前,第一个上升沿发送数据,波特率为2M  
  259.     U1GCR  = HAL_SPI_TRANSFER_MSB_FIRST | HAL_SPI_CLOCK_PHA_0 | HAL_SPI_CLOCK_POL_LO | 0x0F;  
  260.     U1BAUD = 0xFF;  
  261.   
  262.     // CS RS 配置为输出  
  263.     HAL_CONFIG_IO_OUTPUT(HAL_LCD_RS_PORT, HAL_LCD_RS_PIN, 1);  
  264.     HAL_CONFIG_IO_OUTPUT(HAL_LCD_CS_PORT, HAL_LCD_CS_PIN, 1);  
  265.   
  266.     SoftWaitUs(15000); // 15 ms  
  267.     LCD12864_Cmd(LCD_CMD_SOFT_RESET);        //软复位  
  268.         SoftWaitUs(15000); // 15 ms  
  269.         LCD12864_Cmd(LCD_CMD_POWER_ONE);        //升压步聚1  
  270.         SoftWaitUs(15); // 15 us  
  271.         LCD12864_Cmd(LCD_CMD_POWER_TWO);        //升压步聚2  
  272.         SoftWaitUs(15); // 15 us  
  273.         LCD12864_Cmd(LCD_CMD_POWER_THREE);        //升压步聚3  
  274.         SoftWaitUs(150); // 15 us  
  275.         LCD12864_Cmd(LCD_CMD_CONTRAST_ONE_LEVEL);        //粗调对比度,可设置范围0x20~0x27  
  276.         LCD12864_Cmd(LCD_CMD_CONTRAST_TWO_CMD);        //微调对比度  
  277.         LCD12864_Cmd(0x3a);        //0x1a,微调对比度的值,可设置范围0x00~0x3f  
  278.         LCD12864_Cmd(LCD_CMD_BIAS_SET);        // 1/9偏压比(bias)  
  279.         LCD12864_Cmd(LCD_CMD_LINE_NORMAL);        //行扫描顺序:从上到下  
  280.         LCD12864_Cmd(LCD_CMD_ROW_ADDR_REVERSE);        //列扫描顺序:从左到右  
  281.         LCD12864_Cmd(LCD_CMD_BEGIN_LINE);        //起始行:第一行开始  
  282.         LCD12864_Cmd(LCD_CMD_DISPLAY_ON);        //打开显示  
  283.     LCD12864_Cmd(LCD_CMD_DISPLAY_POINT_NORMAL);  
  284.     LCD12864_Cmd(LCD_CMD_DISPLAY_NORMAL);       //设置为正显模式  
  285.         SoftWaitUs(150); // 150 us  
  286. }  
  287.   
  288.   
  289. /***************************************************************************** 
  290.  函 数 名  : LCD12864_SetAddr 
  291.  功能描述  : 设置起始地址 
  292.  输入参数  : uint8 line 
  293.              uint8 col 
  294.  输出参数  : 无 
  295.  返 回 值  : 
  296.  
  297.  修改历史      : 
  298.   1.日    期   : 2014年6月1日 
  299.     作    者   : 朱兆祺 
  300.     修改内容   : 创建 
  301.  
  302. *****************************************************************************/  
  303. static void LCD12864_SetAddr(uint8 line, uint8 col)  
  304. {  
  305.     uint8 ucLine, ucRow;  
  306.     //line += 5;  
  307.     col  += 4;  
  308.     if((line >= LCD12864_MAX_LINE) || (col >= LCD12864_MAX_ROW))  
  309.     {  
  310.         return;  
  311.     }  
  312.   
  313.     ucLine = LCD_CMD_PAGE_LINE | (line&0x0f);  
  314.     LCD12864_Cmd(ucLine);  
  315.     SoftWaitUs(15);  
  316.   
  317.     ucRow = LCD_CMD_ROW_HIG | (col>>4);  
  318.     LCD12864_Cmd(ucRow);  
  319.     SoftWaitUs(15); // 15 us  
  320.   
  321.     ucRow = LCD_CMD_ROW_LOW | (col&0x0f);  
  322.     LCD12864_Cmd(ucRow);  
  323.     SoftWaitUs(15); // 15 us  
  324. }  
  325.   
  326. /***************************************************************************** 
  327.  函 数 名  : LCD12864_Dis5X8 
  328.  功能描述  : 将一个字符用5*8的点阵显示 
  329.  输入参数  : char ch 
  330.  输出参数  : 无 
  331.  返 回 值  : 
  332.  
  333.  修改历史      : 
  334.   1.日    期   : 2014年6月1日 
  335.     作    者   : 朱兆祺 
  336.     修改内容   : 创建 
  337.  
  338. *****************************************************************************/  
  339. static void LCD12864_Dis5X8(char ch)  
  340. {  
  341.     uint8 ucCnt;  
  342.     if((ch >= 0x20)&&(ch < 0x7f))  
  343.     {  
  344.         uint8 ucChar = ch - 0x20;  
  345.         for(ucCnt=0; ucCnt<5; ucCnt++)  
  346.         {  
  347.             LCD12864_Dat( aucAsciiTable5x7[ucChar][ucCnt]);  
  348.         }  
  349.         //LCD12864_Dat(0x00);  
  350.     }  
  351.     else if(ch==0x00)     //不需要显示,清空指定位置  
  352.     {  
  353.                 for(ucCnt=0; ucCnt<5; ucCnt++)  
  354.         {  
  355.             LCD12864_Dat(0x00);  
  356.         }  
  357.         }  
  358.     LCD12864_Dat(0x00);  
  359. }  
  360.   
  361.   
  362. /***************************************************************************** 
  363.  函 数 名  : LCD12864_Clear 
  364.  功能描述  : 清屏 
  365.  输入参数  : void 
  366.  输出参数  : 无 
  367.  返 回 值  : 
  368.  
  369.  修改历史      : 
  370.   1.日    期   : 2014年6月1日 
  371.     作    者   : 朱兆祺 
  372.     修改内容   : 创建 
  373.  
  374. *****************************************************************************/  
  375. void LCD12864_Clear(void)  
  376. {  
  377.     uint8 ucLine, ucRow;  
  378.     for(ucLine=0; ucLine<LCD12864_MAX_LINE; ucLine++)  
  379.     {  
  380.         LCD12864_SetAddr(ucLine, 0);  
  381.         for(ucRow=0; ucRow<LCD12864_MAX_ROW; ucRow++)  
  382.         {  
  383.                 LCD12864_Dat(0x00);  
  384.         }  
  385.     }  
  386. }  
  387.   
  388. /***************************************************************************** 
  389.  函 数 名  : LCD12864_DisChar 
  390.  功能描述  : 在指定位置显示一个字符 
  391.  输入参数  : uint8 line 
  392.              uint8 col 
  393.              char ch 
  394.  输出参数  : 无 
  395.  返 回 值  : 
  396.  
  397.  修改历史      : 
  398.   1.日    期   : 2014年6月1日 
  399.     作    者   : 朱兆祺 
  400.     修改内容   : 创建 
  401.  
  402. *****************************************************************************/  
  403. void LCD12864_DisChar(uint8 line, uint8 col, char ch)  
  404. {  
  405.     if (( line < HAL_LCD_MAX_LINES)&&(col < HAL_LCD_MAX_CHARS))  
  406.     {  
  407.         LCD12864_SetAddr(line, col*HAL_LCD_FONT_ROWS);  
  408.         LCD12864_Dis5X8(ch);  
  409.     }  
  410. }  
  411.   
  412. /***************************************************************************** 
  413.  函 数 名  : LCD12864_DisStr 
  414.  功能描述  : 将字符串显示到指定行 
  415.  输入参数  : uint8 line         显示的行 0~7 
  416.              char* pStr         显示的字符串首地址 
  417.  输出参数  : 无 
  418.  返 回 值  : 
  419.  
  420.  修改历史      : 
  421.   1.日    期   : 2014年6月2日 
  422.     作    者   : 朱兆祺 
  423.     修改内容   : 创建 
  424.  
  425. *****************************************************************************/  
  426. void LCD12864_DisStr(uint8 line, char* pStr)  
  427. {  
  428.     uint8 ucCnt = 0;  
  429.     for ( ucCnt = 0 ; ucCnt < HAL_LCD_MAX_CHARS; ucCnt++ )  
  430.     {  
  431.         if ( '\0' == *pStr )  
  432.         {  
  433.             break;  
  434.         }  
  435.         LCD12864_DisChar( line, ucCnt, pStr[ucCnt]);  
  436.     }  
  437.   
  438.     for (  ; ucCnt < HAL_LCD_MAX_CHARS; ucCnt++ )  
  439.     {  
  440.         LCD12864_DisChar( line, ucCnt, 0);  
  441.     }  
  442. }  
  443.   
  444. /*----------------------------------------------* 
  445.  *              end of file                     * 
  446.  *----------------------------------------------*/  
  447. /***************************************************************************** 
  448.  函 数 名  : main 
  449.  功能描述  : 主函数 
  450.  输入参数  : 无 
  451.  输出参数  : 无 
  452.  返 回 值  :  
  453.  
  454.  修改历史      : 
  455.   1.日    期   : 2014年6月6日 
  456.     作    者   :  朱兆祺 
  457.     修改内容   : 创建 
  458.  
  459. *****************************************************************************/  
  460.   
  461. int main(void)  
  462. {  
  463.     /* 启动外部晶振 */  
  464.     SysStartXOSC();  
  465.       
  466.     /* LCD12864的初始化 */  
  467.     LCD12864_Init();  
  468.       
  469.     /* 清屏 */  
  470.     LCD12864_Clear();  
  471.       
  472.       
  473.     while(1)  
  474.     {  
  475.         /* 显示字符 */  
  476.         LCD12864_DisStr(3, "ShenZhenShiManTouKeJi");  
  477.     }  
  478.       
  479.     return 0;  
  480. }  
0 0
原创粉丝点击