--------------------------------------------------控制lcd
查看lcd12864手册
JLX12864G-086 可以显示 128 列*64 行点阵单色图片
查看原理图
对照以上两图可以得出以下对应
LCD指令表
查看指令表,整理指令
Lcd的一般操作
初始化
清屏
设置起始位置
写入数据显示图象
首先要将系统时钟切换到32M的处部晶振,为了自由配置所需要的时钟,借助CLKCONCMD.OSC选择系统主时钟,借助CLOKCONCMD.OSC32K用于选择芯片32K时钟源
低功耗模式设置时,需要SLEEPCMD寄存器
在《CC253x-CC2540-41ApplicationsUser's Guide.pdf》中并没有说明SLEEPCMD第二位功能
需下载cc2430芯片的说明书??
查看用户手册
需下载cc2430芯片的说明书??
其中第6位XOSC_STB表明外部高速32M晶振是否上电并稳定起振,当稳定时该位为1
第5位HFRC_STB则表明内部16MHz高速RC振荡器是否起振,并是否稳定,当16MHz RC振荡器稳定时该位为1
CLKCONCMD
CLKCONSTA
以上寄存器在iocc2540.h头文件中定义
创建工程,如同之前的创建方式,不同的有以下地方
创建公共函数头文件
/******************************************************************************
版权所有 (C), 2014-2020
******************************************************************************
文 件 名 : common.h
版 本 号 : V1.0
作 者 : retacn
生成日期 : 2014年9月13日
功能描述 : 公共头文件
函数列表 :
修改历史 :
1.日 期 : 2014年9月13日
作 者 : retacn
修改内容 : 创建文件
******************************************************************************/
#ifndef __COMMON_H__
#define __COMMON_H__
/*----------------------------------------------*
* 包含头文件 *
*----------------------------------------------*/
#include
#ifndef BV
#define BV(n) (1 <<(n))
#endif
#define st(x) do { x } while(__LINE__ == -1)
// IO控制
#define HAL_IO_SET(port, pin, val) HAL_IO_SET_PREP(port, pin, val)
#define HAL_IO_SET_PREP(port, pin,val) st( P##port##_##pin## = val;)
#define HAL_CONFIG_IO_OUTPUT(port, pin,val) HAL_CONFIG_IO_OUTPUT_PREP(port,pin, val)
#define HAL_CONFIG_IO_OUTPUT_PREP(port,pin, val) st( P##port##SEL &= ~BV(pin); \
P##port##_##pin## = val; \
P##port##DIR |= BV(pin); )
#define HAL_CONFIG_IO_PERIPHERAL(port,pin) HAL_CONFIG_IO_PERIPHERAL_PREP(port, pin)
#define HAL_CONFIG_IO_PERIPHERAL_PREP(port,pin) st( P##port##SEL |= BV(pin); )
/* SPI settings */
#define HAL_SPI_CLOCK_POL_LO 0x00
#define HAL_SPI_CLOCK_PHA_0 0x00
#define HAL_SPI_TRANSFER_MSB_FIRST 0x20
//#define NULL (void*)0
/*----------------------------------------------*
* 数据类型 *
*----------------------------------------------*/
typedef signed char int8; //! typedef unsigned char uint8; //! typedef signed short int16; //! typedef unsigned short uint16; //! typedef signed long int32; //! typedef unsigned long uint32; //! typedef unsigned char bool; //! #ifdef __cplusplus #if __cplusplus extern "C"{ #endif #endif /* __cplusplus */ /*软件延时*/ extern void SoftWaitUs(uint32 microSecs); /*启动外部延时*/ extern void SysStartXOSC(void); #ifdef __cplusplus #if __cplusplus } #endif #endif /* __cplusplus */ #endif /* __COMMON_H__ */ /****************************************************************************** 版权所有 (C), 2014-2020 ****************************************************************************** 文 件 名 : common.c 版 本 号 : V1.0 作 者 : retacn 生成日期 : 2014年9月13日 功能描述 : 公共函数实现 函数列表 : SoftWaitUs 修改历史 : 1.日 期 : 2014年9月13日 作 者 : retacn 修改内容 : 创建文件 ******************************************************************************/ /*----------------------------------------------* * 包含头文件 * *----------------------------------------------*/ #include #include "common.h" /***************************************************************************** 函 数 名 : SoftWaitUs 功能描述 : 软件延时,us为单位, 系统时钟在32M时 输入参数 : uint16 microSecs 延时时长 输出参数 : 无 返 回 值 : 修改历史 : 1.日 期 : 2014年9月13日 作 者 : retacn 修改内容 : 创建 *****************************************************************************/ void SoftWaitUs(uint32 microSecs) { while(microSecs--) { /* 32 NOPs == 1 usecs */ asm("nop"); asm("nop"); asm("nop");asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop");asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop");asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop");asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop");asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop");asm("nop"); asm("nop"); asm("nop"); asm("nop"); } } /***************************************************************************** 函 数 名 : SysStartXOSC 功能描述 : 启动外部晶振 输入参数 : void 输出参数 : 无 返 回 值 : 修改历史 : 1.日 期 : 2014年9月13日 作 者 : retacn 修改内容 : 创建 *****************************************************************************/ void SysStartXOSC(void) { SLEEPCMD &= ~0x04; // 启动所有晶振 while(!(SLEEPSTA & 0x40)); // 等待晶振稳定 CLKCOnCMD= (CLKCONCMD & 0x80) | 0x49; // 使用16M晶振作为主时钟 while((CLKCONSTA & ~0x80) != 0x49 ); // 等待主时钟切换到16M晶振 CLKCOnCMD= (CLKCONCMD & ~0x80) ; // 使用外部32K晶振作为休眠时钟 while( (CLKCONSTA & 0x80) != 0 ); // 等待睡眠时钟切换到外部32K晶振 CLKCOnCMD= (CLKCONCMD & 0x80) ; // 使用32M晶振作为主时钟 while( (CLKCONSTA & ~0x80) != 0 ); // 等待主时钟切换到32M晶振 SLEEPCMD|= 0x04; // 关闭未使用的晶振 } /****************************************************************************** 版权所有 (C), 2014-2020 ****************************************************************************** 文 件 名 : Lcd12864.h 版 本 号 : V1.0 作 者 : retacn 生成日期 : 2014年9月13日 功能描述 : Lcd12864.c 的头文件 函数列表 : 修改历史 : 1.日 期 : 2014年9月13日 作 者 : retacn 修改内容 : 创建文件 ******************************************************************************/ #ifndef __LCD12864_H__ #define __LCD12864_H__ #include "common.h" #ifdef __cplusplus #if __cplusplus extern "C"{ #endif #endif /* __cplusplus */ /*清屏*/ extern void LCD12864_Clear(void); /*显示字符*/ extern void LCD12864_DisChar(uint8 line,uint8 col, char ch); /*显示字符串*/ extern void LCD12864_DisStr(uint8 line,char* pStr); /*屏幕初始化*/ extern void LCD12864_Init(void); #ifdef __cplusplus #if __cplusplus } #endif #endif /* __cplusplus */ #endif /* __LCD12864_H__ */ /****************************************************************************** 版权所有 (C), 2014-2020 ****************************************************************************** 文 件 名 : Lcd12864.c 版 本 号 : V1.0 作 者 : retacn 生成日期 : 2014年9月13日 功能描述 : LCD12864驱动 //control P0.1 - LCD_MODE P1.2 - LCD_CS //spi P1.5 - CLK P1.6 - MOSI 函数列表 : 修改历史 : 1.日 期 : 2014年9月13日 作 者 : retacn 修改内容 : 创建文件 ******************************************************************************/ /*----------------------------------------------* * 包含头文件 * *----------------------------------------------*/ #include #include "Lcd12864.h" #include "common.h" /*----------------------------------------------* * 宏定义 * *----------------------------------------------*/ /* LCD lines */ /*显示屏的最大行数*/ #define LCD12864_MAX_LINE 64 /*显示屏的最大列数*/ #define LCD12864_MAX_ROW 128 /*一个字符所占行数*/ #define HAL_LCD_FONT_LINES 8 /*一个字符所占列数*/ #define HAL_LCD_FONT_ROWS 6 /* LCD Max Chars and Buffer */ /*最大行数*/ #define HAL_LCD_MAX_LINES (LCD12864_MAX_LINE/HAL_LCD_FONT_LINES) // 6*8点阵最大行数 /*最大列数*/ #define HAL_LCD_MAX_CHARS (LCD12864_MAX_ROW/HAL_LCD_FONT_ROWS) // 6*8点阵最大列数 /* LCD Control lines */ /*寄存器选择*/ #define HAL_LCD_RS_PORT 0 #define HAL_LCD_RS_PIN 1 /*片选*/ #define HAL_LCD_CS_PORT 1 #define HAL_LCD_CS_PIN 2 /* LCD SPI lines */ #define HAL_LCD_CLK_PORT 1 #define HAL_LCD_CLK_PIN 5 #define HAL_LCD_MOSI_PORT 1 #define HAL_LCD_MOSI_PIN 6 // 定义LCD12864显示屏 命令 /*显示开关*/ #define LCD_CMD_DISPLAY_ON 0xAF #define LCD_CMD_DISPLAY_OFF 0xAE /*显示开始行*/ #define LCD_CMD_BEGIN_LINE 0x40 /*页地址*/ #define LCD_CMD_PAGE_LINE 0xB0 /*列地址高四位和低四位*/ #define LCD_CMD_ROW_HIG 0x10 #define LCD_CMD_ROW_LOW 0x00 #define LCD_CMD_READ_STATE 0x00 /*显示列地址增减*/ #define LCD_CMD_ROW_ADDR_NORMAL 0xA0 // 从左到右 #define LCD_CMD_ROW_ADDR_REVERSE 0xA1 //从右到左 /*显示正显或反显*/ #define LCD_CMD_DISPLAY_NORMAL 0xA6 #define LCD_CMD_DISPLAY_REVERSE 0xA7 /*显示全部点阵*/ #define LCD_CMD_DISPLAY_POINT_ALL 0xA5 #define LCD_CMD_DISPLAY_POINT_NORMAL 0xA4 /*LCD偏压比设置*/ #define LCD_CMD_BIAS_SET 0xA2 //0XA2:BIAS=1/9 (常用) 0XA3:BIAS=1/7 /*软件复位*/ #define LCD_CMD_SOFT_RESET 0xE2 /*行扫描顺序*/ #define LCD_CMD_LINE_NORMAL 0xC0 //从上到下 #define LCD_CMD_LINE_REVERSE 0xC8 // 从下到上 /*电源控制*/ #define LCD_CMD_POWER_ONE 0x2C #define LCD_CMD_POWER_TWO 0x2E #define LCD_CMD_POWER_THREE 0x2F /*设置vLCD电阻比例*/ #define LCD_CMD_CONTRAST_ONE_LEVEL 0x22 // 0x20-0x27 /*内部设置液晶电压模式*/ #define LCD_CMD_CONTRAST_TWO_CMD 0x81 // 0x00-0x3F /*静态图标显示*/ #define LCD_CMD_STATIC_PICTURE_ON 0xAD /*SPI interface control */ #define LCD_SPI_BEGIN() HAL_CONFIG_IO_OUTPUT(HAL_LCD_CS_PORT, HAL_LCD_CS_PIN, 0); /* chip select */ #define LCD_SPI_END() \ { \ asm("NOP"); \ asm("NOP"); \ asm("NOP"); \ asm("NOP"); \ HAL_CONFIG_IO_OUTPUT(HAL_LCD_CS_PORT, HAL_LCD_CS_PIN, 1); /* chipselect */ \ } /* clear the received and transmit bytestatus, write tx data to buffer, wait till transmit done */ #define LCD_SPI_TX(x) { U1CSR &= ~(BV(2) |BV(1)); U1DBUF = x; while( !(U1CSR & BV(1)) ); } /* Control macros */ #define LCD_DO_WRITE() HAL_CONFIG_IO_OUTPUT(HAL_LCD_RS_PORT, HAL_LCD_RS_PIN, 1); #define LCD_DO_CONTROL() HAL_CONFIG_IO_OUTPUT(HAL_LCD_RS_PORT, HAL_LCD_RS_PIN, 0); static void LCD12864_Dat(uint8 data); static void LCD12864_Cmd(uint8 cmd); /*全体ASCII 列表:5x7点阵库*/ const static uint8 aucAsciiTable5x7[][5]={ 0x00,0x00,0x00,0x00,0x00,//space 0x00,0x00,0x4f,0x00,0x00,//! 0x00,0x07,0x00,0x07,0x00,//" 0x14,0x7f,0x14,0x7f,0x14,//# 0x24,0x2a,0x7f,0x2a,0x12,//$ 0x23,0x13,0x08,0x64,0x62,//% 0x36,0x49,0x55,0x22,0x50,//& 0x00,0x05,0x07,0x00,0x00,//] 0x00,0x1c,0x22,0x41,0x00,//( 0x00,0x41,0x22,0x1c,0x00,//) 0x14,0x08,0x3e,0x08,0x14,//* 0x08,0x08,0x3e,0x08,0x08,//+ 0x00,0x50,0x30,0x00,0x00,//, 0x08,0x08,0x08,0x08,0x08,//- 0x00,0x60,0x60,0x00,0x00,//. 0x20,0x10,0x08,0x04,0x02,/// 0x3e,0x51,0x49,0x45,0x3e,//0 0x00,0x42,0x7f,0x40,0x00,//1 0x42,0x61,0x51,0x49,0x46,//2 0x21,0x41,0x45,0x4b,0x31,//3 0x18,0x14,0x12,0x7f,0x10,//4 0x27,0x45,0x45,0x45,0x39,//5 0x3c,0x4a,0x49,0x49,0x30,//6 0x01,0x71,0x09,0x05,0x03,//7 0x36,0x49,0x49,0x49,0x36,//8 0x06,0x49,0x49,0x29,0x1e,//9 0x00,0x36,0x36,0x00,0x00,//: 0x00,0x56,0x36,0x00,0x00,//; 0x08,0x14,0x22,0x41,0x00,//< 0x14,0x14,0x14,0x14,0x14,//= 0x00,0x41,0x22,0x14,0x08,//> 0x02,0x01,0x51,0x09,0x06,//? 0x32,0x49,0x79,0x41,0x3e,//@ 0x7e,0x11,0x11,0x11,0x7e,//A 0x7f,0x49,0x49,0x49,0x36,//B 0x3e,0x41,0x41,0x41,0x22,//C 0x7f,0x41,0x41,0x22,0x1c,//D 0x7f,0x49,0x49,0x49,0x41,//E 0x7f,0x09,0x09,0x09,0x01,//F 0x3e,0x41,0x49,0x49,0x7a,//G 0x7f,0x08,0x08,0x08,0x7f,//H 0x00,0x41,0x7f,0x41,0x00,//I 0x20,0x40,0x41,0x3f,0x01,//J 0x7f,0x08,0x14,0x22,0x41,//K 0x7f,0x40,0x40,0x40,0x40,//L 0x7f,0x02,0x0c,0x02,0x7f,//M 0x7f,0x04,0x08,0x10,0x7f,//N 0x3e,0x41,0x41,0x41,0x3e,//O 0x7f,0x09,0x09,0x09,0x06,//P 0x3e,0x41,0x51,0x21,0x5e,//Q 0x7f,0x09,0x19,0x29,0x46,//R 0x46,0x49,0x49,0x49,0x31,//S 0x01,0x01,0x7f,0x01,0x01,//T 0x3f,0x40,0x40,0x40,0x3f,//U 0x1f,0x20,0x40,0x20,0x1f,//V 0x3f,0x40,0x38,0x40,0x3f,//W 0x63,0x14,0x08,0x14,0x63,//X 0x07,0x08,0x70,0x08,0x07,//Y 0x61,0x51,0x49,0x45,0x43,//Z 0x00,0x7f,0x41,0x41,0x00,//[ 0x02,0x04,0x08,0x10,0x20,// 斜杠 0x00,0x41,0x41,0x7f,0x00,//] 0x04,0x02,0x01,0x02,0x04,//^ 0x40,0x40,0x40,0x40,0x40,//_ 0x01,0x02,0x04,0x00,0x00,//` 0x20,0x54,0x54,0x54,0x78,//a 0x7f,0x48,0x48,0x48,0x30,//b 0x38,0x44,0x44,0x44,0x44,//c 0x30,0x48,0x48,0x48,0x7f,//d 0x38,0x54,0x54,0x54,0x58,//e 0x00,0x08,0x7e,0x09,0x02,//f 0x48,0x54,0x54,0x54,0x3c,//g 0x7f,0x08,0x08,0x08,0x70,//h 0x00,0x00,0x7a,0x00,0x00,//i 0x20,0x40,0x40,0x3d,0x00,//j 0x7f,0x20,0x28,0x44,0x00,//k 0x00,0x41,0x7f,0x40,0x00,//l 0x7c,0x04,0x38,0x04,0x7c,//m 0x7c,0x08,0x04,0x04,0x78,//n 0x38,0x44,0x44,0x44,0x38,//o 0x7c,0x14,0x14,0x14,0x08,//p 0x08,0x14,0x14,0x14,0x7c,//q 0x7c,0x08,0x04,0x04,0x08,//r 0x48,0x54,0x54,0x54,0x24,//s 0x04,0x04,0x3f,0x44,0x24,//t 0x3c,0x40,0x40,0x40,0x3c,//u 0x1c,0x20,0x40,0x20,0x1c,//v 0x3c,0x40,0x30,0x40,0x3c,//w 0x44,0x28,0x10,0x28,0x44,//x 0x04,0x48,0x30,0x08,0x04,//y 0x44,0x64,0x54,0x4c,0x44,//z 0x08,0x36,0x41,0x41,0x00,//{ 0x00,0x00,0x77,0x00,0x00,//| 0x00,0x41,0x41,0x36,0x08,//} 0x04,0x02,0x02,0x02,0x01,//~ }; const uint8 asciiTableSize = sizeof(aucAsciiTable5x7 ) / sizeof( aucAsciiTable5x7[0]); /***************************************************************************** 函 数 名 : LCD12864_Cmd 功能描述 : 发送控制命令 输入参数 : uint8 cmd 输出参数 : 无 返 回 值 : 修改历史 : 1.日 期 : 2014年9月13日 作 者 : retacn 修改内容 : 创建 *****************************************************************************/ static void LCD12864_Cmd(uint8 cmd) { LCD_SPI_BEGIN(); LCD_DO_CONTROL(); LCD_SPI_TX(cmd); //LCD_SPI_WAIT_RXRDY(); LCD_SPI_END(); } /***************************************************************************** 函 数 名 : LCD12864_Dat 功能描述 : 发送数据 输入参数 : uint8 data 输出参数 : 无 返 回 值 : 修改历史 : 1.日 期 : 2014年9月13日 作 者 : retacn 修改内容 : 创建 *****************************************************************************/ static void LCD12864_Dat(uint8 data) { LCD_SPI_BEGIN(); LCD_DO_WRITE(); LCD_SPI_TX(data); // LCD_SPI_WAIT_RXRDY(); LCD_SPI_END(); } /************************************************************************************************** *@fn HalLcd_HW_Init * *@brief Initilize HW LCD Driver. * *@param None * *@return None **************************************************************************************************/ void LCD12864_Init(void) { PERCFG |= 0x02; // 设置UART alt2 为 SPI // 配置引脚为SPI功能 HAL_CONFIG_IO_PERIPHERAL(HAL_LCD_CLK_PORT, HAL_LCD_CLK_PIN); HAL_CONFIG_IO_PERIPHERAL(HAL_LCD_MOSI_PORT, HAL_LCD_MOSI_PIN); /* Configure SPI */ U1UCR = 0x80; // 清除原来的数据 U1CSR = 0x00; // SPI 主机模式 // 高位在前,第一个上升沿发送数据,波特率为2M U1GCR =HAL_SPI_TRANSFER_MSB_FIRST | HAL_SPI_CLOCK_PHA_0 | HAL_SPI_CLOCK_POL_LO | 0x0F; U1BAUD = 0xFF; // CS RS 配置为输出 HAL_CONFIG_IO_OUTPUT(HAL_LCD_RS_PORT, HAL_LCD_RS_PIN, 1); HAL_CONFIG_IO_OUTPUT(HAL_LCD_CS_PORT, HAL_LCD_CS_PIN, 1); SoftWaitUs(15000); // 15 ms LCD12864_Cmd(LCD_CMD_SOFT_RESET); //软复位 SoftWaitUs(15000);// 15 ms LCD12864_Cmd(LCD_CMD_POWER_ONE); //升压步聚1 SoftWaitUs(15);// 15 us LCD12864_Cmd(LCD_CMD_POWER_TWO); //升压步聚2 SoftWaitUs(15);// 15 us LCD12864_Cmd(LCD_CMD_POWER_THREE); //升压步聚3 SoftWaitUs(150);// 15 us LCD12864_Cmd(LCD_CMD_CONTRAST_ONE_LEVEL); //粗调对比度,可设置范围0x20~0x27 LCD12864_Cmd(LCD_CMD_CONTRAST_TWO_CMD); //微调对比度 LCD12864_Cmd(0x3a); //0x1a,微调对比度的值,可设置范围0x00~0x3f LCD12864_Cmd(LCD_CMD_BIAS_SET); // 1/9偏压比(bias) LCD12864_Cmd(LCD_CMD_LINE_NORMAL); //行扫描顺序:从上到下 LCD12864_Cmd(LCD_CMD_ROW_ADDR_REVERSE); //列扫描顺序:从左到右 LCD12864_Cmd(LCD_CMD_BEGIN_LINE); //起始行:第一行开始 LCD12864_Cmd(LCD_CMD_DISPLAY_ON); //打开显示 LCD12864_Cmd(LCD_CMD_DISPLAY_POINT_NORMAL); LCD12864_Cmd(LCD_CMD_DISPLAY_NORMAL); //设置为正显模式 SoftWaitUs(150);// 150 us LCD12864_Clear(); } /***************************************************************************** 函 数 名 : LCD12864_SetAddr 功能描述 : 设置起始地址 输入参数 : uint8 line uint8 col 输出参数 : 无 返 回 值 : 修改历史 : 1.日 期 : 2014年9月13日 作 者 : retacn 修改内容 : 创建 *****************************************************************************/ static void LCD12864_SetAddr(uint8 line,uint8 col) { uint8 ucLine, ucRow; //line += 5; col += 4; if((line >= LCD12864_MAX_LINE) || (col >= LCD12864_MAX_ROW)) { return; } ucLine = LCD_CMD_PAGE_LINE | (line&0x0f); LCD12864_Cmd(ucLine); SoftWaitUs(15); ucRow = LCD_CMD_ROW_HIG | (col>>4); LCD12864_Cmd(ucRow); SoftWaitUs(15); // 15 us ucRow = LCD_CMD_ROW_LOW | (col&0x0f); LCD12864_Cmd(ucRow); SoftWaitUs(15); // 15 us } /***************************************************************************** 函 数 名 : LCD12864_Dis5X8 功能描述 : 将一个字符用5*8的点阵显示 输入参数 : char ch 输出参数 : 无 返 回 值 : 修改历史 : 1.日 期 : 2014年9月13日 作 者 : retacn 修改内容 : 创建 *****************************************************************************/ static void LCD12864_Dis5X8(char ch) { uint8ucCnt; if((ch >= 0x20)&&(ch <0x7f)) { uint8 ucChar = ch - 0x20; for(ucCnt=0; ucCnt<5; ucCnt++) { LCD12864_Dat( aucAsciiTable5x7[ucChar][ucCnt]); } //LCD12864_Dat(0x00); } else if(ch==0x00) //不需要显示,清空指定位置 { for(ucCnt=0; ucCnt<5; ucCnt++) { LCD12864_Dat(0x00); } } LCD12864_Dat(0x00); } /***************************************************************************** 函 数 名 : LCD12864_Clear 功能描述 : 清屏 输入参数 : void 输出参数 : 无 返 回 值 : 修改历史 : 1.日 期 : 2014年9月13日 作 者 : retacn 修改内容 : 创建 *****************************************************************************/ void LCD12864_Clear(void) { uint8 ucLine, ucRow; for(ucLine=0; ucLine { LCD12864_SetAddr(ucLine, 0); for(ucRow=0; ucRow { LCD12864_Dat(0x00); } } } /***************************************************************************** 函 数 名 : LCD12864_DisChar 功能描述 : 在指定位置显示一个字符 输入参数 : uint8 line uint8 col char ch 输出参数 : 无 返 回 值 : 修改历史 : 1.日 期 : 2014年9月13日 作 者 : retacn 修改内容 : 创建 *****************************************************************************/ void LCD12864_DisChar(uint8 line, uint8col, char ch) { if (( line { LCD12864_SetAddr(line, col*HAL_LCD_FONT_ROWS); LCD12864_Dis5X8(ch); } } /***************************************************************************** 函 数 名 : LCD12864_DisStr 功能描述 : 将字符串显示到指定行 输入参数 : uint8 line 显示的行 0~7 char* pStr 显示的字符串首地址 输出参数 : 无 返 回 值 : 修改历史 : 1.日 期 : 2014年9月13日 作 者 : retacn 修改内容 : 创建 *****************************************************************************/ void LCD12864_DisStr(uint8 line, char*pStr) { uint8 ucCnt = 0; for ( ucCnt = 0 ; ucCnt { if ( '\0' == pStr[ucCnt]) { break; } LCD12864_DisChar( line, ucCnt, pStr[ucCnt]); } for ( ; ucCnt { LCD12864_DisChar( line, ucCnt, 0); } } /*----------------------------------------------* * end of file * *----------------------------------------------*/’ /****************************************************************************** 版权所有 (C), 2014-2020 ****************************************************************************** 文 件 名 : LCD.c 版 本 号 : V1.0 作 者 : retacn 生成日期 : 2014年9月13日 功能描述 : LCD12864驱动测试 函数列表 : 修改历史 : 1.日 期 : 2014年9月13日 作 者 : retacn 修改内容 : 创建文件 ******************************************************************************/ /*----------------------------------------------* * 包含头文件 * *----------------------------------------------*/ #include #include "Lcd12864.h" int main(void) { SysStartXOSC(); // 启动外部晶振 LCD12864_Init(); // LCD初始化 //最大显示列数 LCD12864_DisStr(0, "hello retacn this the"); // 行最多显示字符 LCD12864_DisStr(1, "hello retacn"); // 显示字符 LCD12864_DisStr(2, "hello retacn"); // 显示字符 LCD12864_DisStr(3, "hello retacn"); // 显示字符 LCD12864_DisStr(4, "hello retacn"); // 显示字符 LCD12864_DisStr(5, "hello retacn"); // 显示字符 LCD12864_DisStr(6, "hello retacn"); // 显示字符 LCD12864_DisStr(7, "hello retacn"); // 显示字符 LCD12864_DisStr(8, "hello retacn"); // 显示字符 while(1); return 0; } 参考: http://bbs.elecfans.com/jishu_431223_1_1.html