📄 use_1602_driver.c
字号:
/*****************************************************************
* 函数库名称:1602液晶驱动函数库 *
* 版本: v0.01 *
* 作者: I ROBOT *
* 创建日期: Copyright (C) 2008年10月24日 *
*----------------------------------------------------------------*
* [支持库] *
* 支持库名称:USE_1602_Driver.h(1602液晶驱动配置库) *
* 支持库版本:v0.01 *
* 支持库说明:与本文件相应的函数声明 *
*----------------------------------------------------------------*
* [版本更新] *
* 更新: I ROBOT *
* 更新日期: *
* 版本: *
*----------------------------------------------------------------*
* [版本历史] *
* v0.01 创建版本,1602基本驱动函数 *
*----------------------------------------------------------------*
* [使用说明] *
* 1.直接调用驱动函数 *
*****************************************************************/
/********************
* 头 文 件 配 置 区 *
********************/
# include "USE_1602_Driver.h"
/********************
* 系 统 宏 定 义 *
********************/
/*------------------*
* 常 数 宏 定 义 *
*------------------*/
/*------------------*
* 动 作 宏 定 义 *
*------------------*/
/********************
* 模块结构体定义区 *
********************/
/********************
* 函 数 声 明 区 *
********************/
void _1602_Hardware_Configure(void);
static void MCU_Register_Configure(void);
static void MCU_Port_Configure(void);
UINT8 Read_State_1602(void);
void Write_CMD_1602(UINT8 chCommand,UINT8 chDetect_Busy);
void Write_Data_1602(UINT8 chData,UINT8 chDetect_Busy);
void LCD_Init_1602(void);
UINT8 Read_Data_1602(UINT8 chDetect_Busy);
void Is_Busy_1602(void);
void CLEAR_LCD_1602(void);
void Write_String_1602(UINT8 chx,UINT8 chy,char *chStr_Data,UINT8 chStr_Length);
/********************
* 模块函数声明区 *
********************/
/********************
* 模块变量声明区 *
********************/
/********************
* 全局变量声明区 *
********************/
/******************************************************************
* 函 数 定 义 区 *
******************************************************************/
/****************************************
* 函数说明: 1602硬件配置函数 *
* 输入 :无 *
* 输出 :无 *
* 调用函数: 无 *
****************************************/
void _1602_Hardware_Configure(void)
{
//TODO:在这里添加1602硬件配置代码
MCU_Register_Configure();
MCU_Port_Configure();
}
/****************************************
* 函数说明: MCU寄存器配置函数 *
* 输入 :无 *
* 输出 :无 *
* 调用函数: 无 *
****************************************/
static void MCU_Register_Configure(void)
{
//TODO:在这里添加MCU寄存器配置代码
}
/****************************************
* 函数说明: MCU端口配置函数 *
* 输入 :无 *
* 输出 :无 *
* 调用函数: 无 *
****************************************/
static void MCU_Port_Configure(void)
{
//TODO:在这里添加MCU端口配置代码
}
/****************************************
* 函数说明: 1602读状态函数 *
* 输入 :无 *
* 输出 :1602的状态 *
* 调用函数: NO_DELAY *
****************************************/
UINT8 Read_State_1602(void)
{
AVR_READ_1602;
NOP_DELAY;
_1602_RS_LOW;
_1602_RW_HIGH;
_1602_E_HIGH;
NOP_DELAY;
return _1602_STATE;
}
/****************************************
* 函数说明: 1602写指令函数 *
* 输入 :1602指令和是否检测忙状态 *
* 输出 :无 *
* 调用函数: Is_Busy_1602() NOP_DELAY *
****************************************/
void Write_CMD_1602(UINT8 chCommand,UINT8 chDetect_Busy)
{
if (chDetect_Busy)
{
Is_Busy_1602();
}
AVR_WRITE_1602;
NOP_DELAY;
INPUT_TO_1602 = chCommand;
_1602_RS_LOW;
_1602_RW_LOW;
_1602_E_LOW;
NOP_DELAY;
_1602_E_HIGH;
}
/****************************************
* 函数说明: 1602写数据函数 *
* 输入 :1602数据和是否检测忙状态 *
* 输出 :无 *
* 调用函数: Is_Busy_1602() NOP_DELAY *
****************************************/
void Write_Data_1602(UINT8 chData,UINT8 chDetect_Busy)
{
if (chDetect_Busy)
{
Is_Busy_1602();
}
AVR_WRITE_1602;
NOP_DELAY;
INPUT_TO_1602 = chData;
_1602_RS_HIGH;
_1602_RW_LOW;
_1602_E_LOW;
NOP_DELAY;
_1602_E_HIGH;
}
/****************************************
* 函数说明: 1602初始化函数 *
* 输入 :无 *
* 输出 :无 *
* 调用函数: Write_CMD_1602() *
* Delay_MS(15) *
****************************************/
void LCD_Init_1602(void)
{
Delay_MS(15);
Write_CMD_1602(_1602_MODE_SETTING,FALSE);
Delay_MS(5);
Write_CMD_1602(_1602_MODE_SETTING,FALSE);
Delay_MS(5);
Write_CMD_1602(_1602_MODE_SETTING,FALSE);
Write_CMD_1602(_1602_MODE_SETTING,TRUE);
Write_CMD_1602(_1602_OFF,TRUE);
Write_CMD_1602(_1602_CLEAR,TRUE);
Write_CMD_1602(_1602_PSTR_INCREASE,TRUE);
Write_CMD_1602(_1602_ON,TRUE);
}
/****************************************
* 函数说明: 1602读数据函数 *
* 输入 :无 *
* 输出 :1602数据 *
* 调用函数: Is_Busy_1602 NOP_DELAY *
****************************************/
UINT8 Read_Data_1602(UINT8 chDetect_Busy)
{
if (chDetect_Busy)
{
Is_Busy_1602();
}
AVR_READ_1602;
NOP_DELAY;
_1602_RS_HIGH;
_1602_RW_HIGH;
_1602_E_HIGH;
NOP_DELAY;
return DATA_FROM_1602;
}
/****************************************
* 函数说明: 1602忙状态检测函数 *
* 输入 :无 *
* 输出 :无 *
* 调用函数: Read_State_1602() *
****************************************/
void Is_Busy_1602(void)
{
while (Read_State_1602()&0X80);
}
/****************************************
* 函数说明: 1602清屏函数 *
* 输入 :无 *
* 输出 :无 *
* 调用函数: Write_CMD_1602() *
****************************************/
void CLEAR_LCD_1602(void)
{
Write_CMD_1602(_1602_CLEAR,TRUE);
}
/****************************************
* 函数说明: 1602写字符串函数 *
* 输入 :起始坐标(chx,chy) *
* 数据指针 *chStr_Data *
* 字符串长度chStr_Length *
* 输出 :无 *
* 调用函数: Write_CMD_1602() *
* Write_Data_1602() *
****************************************/
void Write_String_1602(UINT8 chx,UINT8 chy,char *chStr_Data,UINT8 chStr_Length)
{
UINT8 chCurrent_Ptr = chx;
UINT8 chStr_Counter = 0;
for (chStr_Counter = 0;chStr_Counter < chStr_Length;chStr_Counter++)
{
Write_CMD_1602(_1602_PTR+_1602_ROW*(1-chy)+chCurrent_Ptr,TRUE);
Write_Data_1602(chStr_Data[chStr_Counter],TRUE);
chCurrent_Ptr++;
if (chCurrent_Ptr == 16)
{
chCurrent_Ptr = 0;
chy = 1-chy;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -