⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd.c

📁 ucosii的源代码希望能给予学习嵌入式系统的朋友一定的帮助
💻 C
📖 第 1 页 / 共 2 页
字号:
/*
*********************************************************************************************************
*                                   Embedded Systems Building Blocks
*                                Complete and Ready-to-Use Modules in C
*
*                                        LCD Display Module Driver
*
*                            (c) Copyright 1999, Jean J. Labrosse, Weston, FL
*                                           All Rights Reserved
*
* Filename   : LCD.C
* Programmer : Jean J. Labrosse
* Translated by : Won-Ho, Sung
*********************************************************************************************************
*                                                 汲疙
*
*
* 捞 葛碘篮 舅颇邯苞 箭磊甫 叼胶敲饭捞 且荐 乐绰 葛碘狼 牢磐其捞胶甫 力傍茄促
*
* 靛扼捞滚 泅犁 滚傈篮 促澜 抹阑 扁馆栏肺 窍绰 葛电 舅颇春皋腐 LCD葛碘阑 瘤盔茄促:
*     洒促骂 HD44780 档飘 概飘腐胶 LCD 牧飘费矾
*
* 捞 靛扼捞滚绰 促澜苞 鞍篮 备己阑 啊瘤绰 LCD 叼胶敲饭捞甫 瘤盔茄促:
*
*     1 扼牢  x 16 巩磊     2 扼牢 x 16 巩磊     4 扼牢 x 16 巩磊
*     1 扼牢  x 20 巩磊     2 扼牢 x 20 巩磊     4 扼牢 x 20 巩磊
*     1 扼牢  x 24 巩磊     2 扼牢 x 24 巩磊
*     1 扼牢  x 40 巩磊     2 扼牢 x 40 巩磊
*********************************************************************************************************
*/

/*$PAGE*/
/*
*********************************************************************************************************
*                                              牢农风靛 颇老
*********************************************************************************************************
*/

#include "c:\\IC96\\Work\\ucos_ii\\includes.h"
#include "lcd.h"

/*
*********************************************************************************************************
*                                               瘤开惑荐
*********************************************************************************************************
*/

                                       /* ----------------------  HD44780 疙飞绢  -------------------- */
#define  DISP_CMD_CLS            0x01  /* Clr display : 叼胶敲饭捞 努府绢, 目辑甫 权栏肺 困摹矫挪促    */
#define  DISP_CMD_FNCT           0x3B  /* Function Set: 单捞磐 辨捞 8厚飘, 1/16 掂萍, 5x8 档飘         */
#define  DISP_CMD_MODE           0x06  /* Entry mode  : 单捞磐 扁废 矫 磊悼栏肺 绢靛饭胶 刘啊          */
#define  DISP_CMD_ON_OFF         0x0C  /* Disp ON/OFF : 叼胶敲饭捞 柯, 目辑 坷橇, 巩磊痢戈 坷橇        */

/*
*********************************************************************************************************
*                                               瘤开函荐
*********************************************************************************************************
*/

static  INT8U       *dataPtr;
static  INT8U       DispMaxCols;       /* 凯狼 弥措 箭磊 (1扼牢寸 巩磊狼 俺荐)                         */
static  INT8U       DispMaxRows;       /* 青狼 弥措 箭磊                                               */
static  OS_EVENT   *DispSem;           /* LCD侩 技付器绢                                               */


const  INT8U       DispBar1[] = {0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10};
const  INT8U       DispBar2[] = {0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18};
const  INT8U       DispBar3[] = {0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C};
const  INT8U       DispBar4[] = {0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E};
const  INT8U       DispBar5[] = {0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F};

/*
*********************************************************************************************************
*                                             瘤开窃荐 盔屈
*********************************************************************************************************
*/

static  void        DispCursorSet(INT8U row, INT8U col);

/*$PAGE*/
/*
*********************************************************************************************************
*                                            巩磊 叼胶敲饭捞
*
* 汲疙     : 钎矫厘摹俊 茄 俺狼 巩磊甫 叼胶敲饭捞 茄促
* 傈崔牢磊 : 'row' 绰 LCD俊辑 目辑狼 青 困摹
*                  'row'绰 0俊辑 'DispMaxRows - 1'鳖瘤狼 蔼阑 爱绰促
*            'col' 绰 LCD俊辑 目辑狼 凯 困摹
*                  'col'篮 0俊辑 'DispMaxCols - 1'鳖瘤狼 蔼阑 爱绰促
*            'c'   绰 泅犁 青苞 凯狼 困摹俊辑 钎矫瞪 巩磊狼 蔼
* 府畔蔼   : 绝澜
*********************************************************************************************************
*/

void  DispChar (INT8U row, INT8U col, char c)
{
    INT8U err;


    if (row < DispMaxRows && col < DispMaxCols) {
        OSSemPend(DispSem, 0, &err);        /* 钎矫厘摹狼 硅鸥利 咀技胶甫 掘绰促                       */
        DispCursorSet(row, col);            /* 目辑甫 ROW/COL俊 困摹矫挪促                             */
        DispSel(DISP_SEL_DATA_REG);
        DispDataWr(c);                      /* 钎矫厘摹俊 巩磊甫 敬促                                  */
        OSSemPost(DispSem);                 /* 咀技胶甫 副府令茄促                                     */
    }
}

/*$PAGE*/
/*
*********************************************************************************************************
*                                               扼牢 瘤快扁
*
* 汲疙     : 茄 俺狼 扼牢阑 瘤快绊 目辑甫 扼牢狼 贸澜 困摹肺 焊辰促
*
* 傈崔牢磊 : 'line' 篮 瘤匡 扼牢 逞滚
*            0俊辑 'DispMaxRows - 1'鳖瘤狼 蔼阑 爱绰促
* 府畔蔼   : 绝澜
*********************************************************************************************************
*/

void  DispClrLine (INT8U line)
{
    INT8U i;
    INT8U err;


    if (line < DispMaxRows) {
        OSSemPend(DispSem, 0, &err);             /* 钎矫厘摹狼 硅鸥利 咀技胶甫 掘绰促                  */
        DispCursorSet(line, 0);                  /* 瘤匡 扼牢狼 贸澜 困摹肺 目辑甫 焊辰促              */
        DispSel(DISP_SEL_DATA_REG);              /* LCD狼 单捞磐 饭瘤胶磐甫 急琶茄促                   */
        for (i = 0; i < DispMaxCols; i++) {      /* 泅犁 扼牢狼 困摹肺 何磐 葛电 青俊 ' '阑 敬促       */
            DispDataWr(' ');                     /* 泅犁 困摹俊 ASCII space 蔼阑 敬促                  */
        }
        DispCursorSet(line, 0);                  /* 目辑甫 扼牢狼 贸澜 困摹肺 焊辰促                   */
        OSSemPost(DispSem);                      /* 咀技胶甫 副府令茄促                                */
    }
}

/*$PAGE*/
/*
*********************************************************************************************************
*                                              胶农赴 瘤快扁
*
* 汲疙 : 叼胶敲饭捞 傈眉甫 努府绢茄促
* 傈崔牢磊   : 绝澜
* 府畔蔼     : 绝澜
*********************************************************************************************************
*/

void  DispClrScr (void)
{
    INT8U err;


    OSSemPend(DispSem, 0, &err);       /* 钎矫厘摹狼 硅鸥利 咀技胶甫 掘绰促                            */
    DispSel(DISP_SEL_CMD_REG);         /* LCD狼 疙飞 饭瘤胶磐甫 急琶茄促                               */
    DispDataWr(DISP_CMD_CLS);          /* 努府绢 疙飞阑 敬促                                           */
    OSTimeDly(2);                      /* 2msec捞惑 扁促赴促(滴俺狼 平捞搁 面盒窃)                     */
    OSSemPost(DispSem);                /* 咀技胶甫 副府令茄促                                          */
}

/*$PAGE*/
/*
*********************************************************************************************************
*                                     目辑 烙狼 困摹肺 焊郴扁 (郴何侩)
*
* 汲疙     : 目辑甫 LCD滚欺狼 烙狼 困摹肺 焊郴促
* 傈崔牢磊 : 'row' 绰 LCD俊辑 目辑狼 青 困摹
*                  'row'绰 0俊辑 'DispMaxRows - 1'鳖瘤狼 蔼阑 爱绰促
*            'col' 绰 LCD俊辑 目辑狼 凯 困摹
*                  'col'篮 0俊辑 'DispMaxCols - 1'鳖瘤狼 蔼阑 爱绰促
* 府畔蔼   : 绝澜
*********************************************************************************************************
*/

static  void  DispCursorSet (INT8U row, INT8U col)
{
    DispSel(DISP_SEL_CMD_REG);                             /* 疙飞绢 饭瘤胶磐 急琶                     */
    switch (row) {
        case 0:
             if (DispMaxRows == 1) {                       /* 1 扼牢 LCD牢 版快 抗寇利栏肺 贸府茄促    */
                 if (col < (DispMaxCols >> 1)) {
                     DispDataWr(0x80 + col);               /* 扼牢狼 霉 锅掳 馆篮 0x80俊辑 矫累        */
                 } else {                                  /* 扼牢狼 滴 锅掳 馆篮 0xC0俊辑 矫累        */
                     DispDataWr(0xC0 + col - (DispMaxCols >> 1));
                 }
             } else {
                 DispDataWr(0x80 + col);                   /* LCD 扼牢1阑 急琶                         */
             }
             break;

        case 1:
             DispDataWr(0xC0 + col);                       /* LCD 扼牢2阑 急琶                         */
             break;

        case 2:
             DispDataWr(0x80 + DispMaxCols + col);         /* LCD 扼牢3阑 急琶                         */
             break;

        case 3:
             DispDataWr(0xC0 + DispMaxCols + col);         /* LCD 扼牢4阑 急琶                         */
             break;
    }
}

/*$PAGE*/
/*
*********************************************************************************************************
*                                               巩磊 沥狼
*
* 汲疙     : 荤侩磊 巩磊俊 措茄 档飘 菩畔阑 沥狼茄促
* 傈崔牢磊 : 'id'  荤侩窍绊磊 窍绰 档飘 菩畔俊 措茄 id
*            'pat' 档飘 菩畔阑 啊瘤绊 乐绰 8官捞飘 青纺狼 器牢磐
* 府畔蔼   : 绝澜
*********************************************************************************************************
*/

void  DispDefChar (INT8U id, INT8U *pat)
{
    INT8U err;
    INT8U i;


    OSSemPend(DispSem, 0, &err);            /* 钎矫厘摹狼 硅鸥利 咀技胶甫 掘绰促                       */
    DispSel(DISP_SEL_CMD_REG);              /* 疙飞绢 饭瘤胶磐甫 急琶茄促                              */
    DispDataWr(0x40 + (id << 3));           /* CG RAM狼 绢靛饭胶甫 技飘茄促                            */
    DispSel(DISP_SEL_DATA_REG);             /* 单捞磐 饭瘤胶磐甫 急琶茄促                              */
    for (i = 0; i < 8; i++) {
        DispDataWr(*pat++);                 /* CG RAM俊 菩畔阑 结 持绰促                               */
    }
    OSSemPost(DispSem);                     /* 咀技胶甫 副府令茄促                                     */
}

/*$PAGE*/
/*
*********************************************************************************************************
*                                                 歹固 窃荐
*
* 汲疙     : 捞 窃荐绰 酒公 老档 窍瘤 臼绰促.  割 俺狼 NOP(No Operation)苞 鞍篮 悼累阑 窍绊
*            窜瘤 割 荤捞努狼 CPU 鸥烙阑 家厚窍骨肺 陋篮 掉饭捞 窃荐肺 荤侩等促

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -