热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ble学习笔记四---------------------控制lcd

--------------------------------------------------控制lcd查看lcd12864手册JLX12864G-086可以显示128列*

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

 


推荐阅读
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • 配置IPv4静态路由实现企业网内不同网段用户互访
    本文介绍了通过配置IPv4静态路由实现企业网内不同网段用户互访的方法。首先需要配置接口的链路层协议参数和IP地址,使相邻节点网络层可达。然后按照静态路由组网图的操作步骤,配置静态路由。这样任意两台主机之间都能够互通。 ... [详细]
  • 【shell】网络处理:判断IP是否在网段、两个ip是否同网段、IP地址范围、网段包含关系
    本文介绍了使用shell脚本判断IP是否在同一网段、判断IP地址是否在某个范围内、计算IP地址范围、判断网段之间的包含关系的方法和原理。通过对IP和掩码进行与计算,可以判断两个IP是否在同一网段。同时,还提供了一段用于验证IP地址的正则表达式和判断特殊IP地址的方法。 ... [详细]
  • ***byte(字节)根据长度转成kb(千字节)和mb(兆字节)**parambytes*return*publicstaticStringbytes2kb(longbytes){ ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • 纠正网上的错误:自定义一个类叫java.lang.System/String的方法
    本文纠正了网上关于自定义一个类叫java.lang.System/String的错误答案,并详细解释了为什么这种方法是错误的。作者指出,虽然双亲委托机制确实可以阻止自定义的System类被加载,但通过自定义一个特殊的类加载器,可以绕过双亲委托机制,达到自定义System类的目的。作者呼吁读者对网上的内容持怀疑态度,并带着问题来阅读文章。 ... [详细]
  • Java SE从入门到放弃(三)的逻辑运算符详解
    本文详细介绍了Java SE中的逻辑运算符,包括逻辑运算符的操作和运算结果,以及与运算符的不同之处。通过代码演示,展示了逻辑运算符的使用方法和注意事项。文章以Java SE从入门到放弃(三)为背景,对逻辑运算符进行了深入的解析。 ... [详细]
  • 合并列值-合并为一列问题需求:createtabletab(Aint,Bint,Cint)inserttabselect1,2,3unionallsel ... [详细]
  • 本文整理了Java面试中常见的问题及相关概念的解析,包括HashMap中为什么重写equals还要重写hashcode、map的分类和常见情况、final关键字的用法、Synchronized和lock的区别、volatile的介绍、Syncronized锁的作用、构造函数和构造函数重载的概念、方法覆盖和方法重载的区别、反射获取和设置对象私有字段的值的方法、通过反射创建对象的方式以及内部类的详解。 ... [详细]
author-avatar
浅笑那段情2502918773
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有