?? lcd1602.c
字號:
/*********************************************************************************************************
** Small RTOS(51)
** The Real-Time Kernel(For Keil c51)
**
** (c) Copyright 2002-2002, chenmingji
** All Rights Reserved
**
** V1.12.1
**
**
**--------------文件信息--------------------------------------------------------------------------------
**文 件 名: lcd1602.c
**創 建 人: 陳明計
**最后修改日期: 2003年4月27日
**描 述: DP-51的液晶TC1602A的驅動程序
**
**--------------歷史版本信息----------------------------------------------------------------------------
** 修改人: 陳明計
** 版 本: V1.0
** 日 期: 2003年4月27日
** 描 述: 原始版本,應用于Small RTOS 51 v1.12.1
**------------------------------------------------------------------------------------------------------
**--------------當前版本修訂------------------------------------------------------------------------------
** 修改人:
** 日 期:
** 描 述:
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#define IN_LCD17602
#include "config.h"
/*********************************************************************************************************
** 函數名稱: Lcd1602Delay
** 功能描述: 等待lcd操作完畢
**
** 輸 入: 無
** 輸 出: 無
** 全局變量: 無
** 調用模塊: 無
**
** 作 者: 陳明計
** 日 期: 2003年4月27日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void Lcd1602Delay(void)
{
uint8 i;
i = 200;
do
{
if ((LCD1602_GET_FLAG() & 0x80) == 0)
{
break;
}
} while (--i != 0);
}
/*********************************************************************************************************
** 函數名稱: Lcd1602SendComm()
** 功能描述: 向lcd模塊發送命令
**
** 輸 入: Command: 給lcd模塊發送的命令
** 輸 出: 無
** 全局變量: 無
** 調用模塊: Lcd1602Delay()
**
** 作 者: 陳明計
** 日 期: 2003年4月27日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void Lcd1602SendComm(uint8 Command)
{
Lcd1602Delay();
LCD1602_SEND_COMMAND(Command);
}
/*********************************************************************************************************
** 函數名稱: Lcd1602SendDate()
** 功能描述: 向lcd模塊發送1字節數據
**
** 輸 入: Data: 給lcd模塊發送的命令
** 輸 出: 無
** 全局變量: 無
** 調用模塊: Lcd1602Delay()
**
** 作 者: 陳明計
** 日 期: 2003年4月27日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void Lcd1602SendDate(uint8 Data)
{
Lcd1602Delay();
LCD1602_SEND_DATA(Data);
}
/*********************************************************************************************************
** 函數名稱: Lcd1602DispStr()
** 功能描述: 在lcd指定位置顯示一個字符串,此函數可以自動換行。
**
** 輸 入: x,y : 顯示的開始坐(作上角為(1,1))
** Data: 將要顯示的字符串
** 輸 出: 無
** 全局變量: 無
** 調用模塊: Lcd1602SendComm(),Lcd1602SendDate()
**
** 作 者: 陳明計
** 日 期: 2003年4月27日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void Lcd1602DispStr(uint8 x, uint8 y, char *Data)
{
if (y == 1) /* 在第一行顯示 */
{
if (x < (16 + 1)) /* 有效的列號 */
{
Lcd1602SendComm(LCD1602_LINE1 - 1 + x); /* 設置顯示地址 */
for( ; x < (16 + 1) && *Data != '\0'; x++) /* 顯示到字符串結束 */
/* 或是行結束 */
{
Lcd1602SendDate(*Data++); /* 顯示一個字符 */
}
if (*Data != '\0') /* 字符串沒有結束 */
{
x = 1; /* 從第二行第一列 */
y = 2; /* 繼續顯示 */
}
}
}
if (y == 2) /* 在第二行顯示 */
{
Lcd1602SendComm(LCD1602_LINE2 - 1 + x); /* 設置顯示地址 */
for( ; x < (16 + 1) && *Data != '\0'; x++) /* 顯示到字符串結束 */
/* 或是行結束 */
{
Lcd1602SendDate(*Data++); /* 顯示一個字符 */
}
}
}
/*********************************************************************************************************
** 函數名稱: Lcd1602Clr()
** 功能描述: 清除lcd的指定行
**
** 輸 入: y : 清除的行號(最上方為1)
**
** 輸 出: 無
** 全局變量: 無
** 調用模塊: Lcd1602DispStr()
**
** 作 者: 陳明計
** 日 期: 2003年4月27日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void Lcd1602Clr(uint8 y)
{
uint8 i;
i = 0;
if (y == 1)
{
Lcd1602SendComm(LCD1602_LINE1);
i = 16;
}
else if (y == 2)
{
Lcd1602SendComm(LCD1602_LINE2);
i = 16;
}
if (i != 0)
{
do
{
Lcd1602SendDate(' ');
}while (--i != 0);
}
}
/*********************************************************************************************************
** 函數名稱: Lcd1602Init()
** 功能描述: lcd初始化
**
** 輸 入: 無
**
** 輸 出: 無
** 全局變量: 無
** 調用模塊: Lcd1602SendComm(),Lcd1602Clr()
**
** 作 者: 陳明計
** 日 期: 2003年4月27日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void Lcd1602Init(void)
{
Lcd1602SendComm(LCD1602_MODE); // 設置LCM模式(系統方式設置)
Lcd1602SendComm(LCD1602_NO_FLASH); // 打開LCM顯示,無光標
Lcd1602SendComm(LCD1602_NO_SHIFT); // 字符向地址遞增,光標移動
Lcd1602SendComm(LCD1602_SH); // 重新設為光標移動,向右移
Lcd1602Clr(1); // 清屏
Lcd1602Clr(2);
}
/*********************************************************************************************************
** 函數名稱: Lcd1602LoadC()
** 功能描述: 從lcd指定地址處寫多個字節數據
**
** 輸 入: Addr : 指定的地址
** Data : 將要寫入的數據開始地址
** NChar: 寫入的直接數
** 輸 出: 無
** 全局變量: 無
** 調用模塊: Lcd1602SendComm(),Lcd1602SendDate()
**
** 作 者: 陳明計
** 日 期: 2003年4月27日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void Lcd1602LoadC(uint8 Addr, uint8 *Data, uint8 NChar)
{
do
{
if((Addr<16)&&(Addr>=0))
{
Lcd1602SendComm(Addr | LCD1602_LINE1); // 設置地址
}
else if((Addr>15)&&(Addr<33))
{
Lcd1602SendComm((Addr-16) | LCD1602_LINE2); // 設置地址
}
// Lcd1602SendComm(Addr | 0x80); // 設置地址
Lcd1602SendDate(*Data++);
Addr++;
} while (--NChar != 0);
}
/**********************end****************************************/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -