博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ble学习笔记四---------------------控制lcd
阅读量:5248 次
发布时间:2019-06-14

本文共 18260 字,大约阅读时间需要 60 分钟。

--------------------------------------------------控制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;

}

 

参考:

 

转载于:https://www.cnblogs.com/retacn-yue/p/6194252.html

你可能感兴趣的文章
java定时器的使用(Timer)
查看>>
ef codefirst VS里修改数据表结构后更新到数据库
查看>>
boost 同步定时器
查看>>
[ROS] Chinese MOOC || Chapter-4.4 Action
查看>>
简单的数据库操作
查看>>
iOS-解决iOS8及以上设置applicationIconBadgeNumber报错的问题
查看>>
亡灵序曲-The Dawn
查看>>
Redmine
查看>>
帧的最小长度 CSMA/CD
查看>>
xib文件加载后设置frame无效问题
查看>>
编程算法 - 左旋转字符串 代码(C)
查看>>
IOS解析XML
查看>>
Python3多线程爬取meizitu的图片
查看>>
树状数组及其他特别简单的扩展
查看>>
zookeeper适用场景:分布式锁实现
查看>>
110104_LC-Display(液晶显示屏)
查看>>
httpd_Vhosts文件的配置
查看>>
php学习笔记
查看>>
普通求素数和线性筛素数
查看>>
React Router 4.0 基本使用
查看>>