--------------------------------------------------控制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 <stdio.h>
#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; //!< Signed 8 bitinteger
typedef unsigned char uint8; //!< Unsigned 8 bit integer
typedef signed short int16; //!< Signed 16 bitinteger
typedef unsigned short uint16; //!< Unsigned 16 bit integer
typedef signed long int32; //!< Signed 32 bitinteger
typedef unsigned long uint32; //!< Unsigned 32 bit integer
typedef unsigned char bool; //!< Boolean data type
#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 <ioCC2540.h>
#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 <ioCC2540.h>
#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_MAX_LINE; ucLine++)
{
LCD12864_SetAddr(ucLine, 0);
for(ucRow=0; ucRow<LCD12864_MAX_ROW; 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 < HAL_LCD_MAX_LINES)&&(col <HAL_LCD_MAX_CHARS))
{
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 < HAL_LCD_MAX_CHARS; ucCnt++ )
{
if ( '\0' == pStr[ucCnt])
{
break;
}
LCD12864_DisChar( line, ucCnt, pStr[ucCnt]);
}
for ( ; ucCnt <HAL_LCD_MAX_CHARS; 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 <ioCC2540.h>
#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;
}
参考: