📄 lcd.c
字号:
/*
*********************************************************************************************************
* 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 + -