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


    --------------------------------------------------控制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 ( '' == 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;

    }


    参考:

    http://bbs.elecfans.com/jishu_431223_1_1.html

  • 相关阅读:
    Scheduled定时任务的触发规则
    linux设置系统时间为当前网络时间
    idea控制台打印日志出现乱码
    Nginx配置高可用的集群
    Nginx实现负载均衡
    BigDecimal比较大小
    Java调用第三方系统接口获取数据
    sql中主要关键字的执行顺序
    ASP.NET.Core --Jenkins+Docker
    ASP.NET.Core --Swagger+Route
  • 原文地址:https://www.cnblogs.com/retacn-yue/p/6194252.html
Copyright © 2020-2023  润新知