📄 lcd1604.c
字号:
//******************************************
// 1604lcd模块驱动程序
//
// 说明: 1.MPU :P89V51RD2FN
// 2.晶振:22.1184MHz 6周期
// 3.1604驱动器:ks0066
// 编辑: 温杰峰
// 日期: 2007-12-06
//******************************************
#define __DISPLAY__
#include "p89v51rd2.h"
#include "LCD1604.h"
#include <string.h>
#define LCM_DATA P0 //P0口传输数据
sbit LCM_RS = P1^0; //寄存器选择
sbit LCM_RW = P1^1; //读/写控制
sbit LCM_E = P1^2; //读/写使能
//sbit LCM_BLK = P1^3; //背光led 1.off 0.on
/***********************************
//函数名称: void LcmInit(void)
//传递参数: none
//返 回 值: none
//函数功能: LCM初始化
//函数说明:
***********************************/
void LcmInit(void)
{
LCM_DATA = 0;
LcmWriteCommand(0x38,0); //16*4显示,5*8点阵,8位数据接口,不检测忙
Delay(5);
LcmWriteCommand(0x38,0);
Delay(5);
LcmWriteCommand(0x38,0); //三次显示模式, 不检测忙
Delay(5);
LcmWriteCommand(0x38,1); //16*4显示,5*8点阵,8位数据接口,需要检测忙
LcmWriteCommand(0x80,1); //关闭显示
LcmWriteCommand(0x01,1); //clear显示
LcmWriteCommand(0x06,1); //指针和光标+1,不滚屏
LcmWriteCommand(0x0c,1); //开显示,不显示光标,不闪烁
}
/***********************************
//函数名称: void LcmClear(void)
//传递参数: none
//返 回 值: none
//函数功能: LCM清显示
//函数说明:
***********************************/
void LcmClear(void)
{
LcmWriteCommand(0x01,1); //clear显示
Delay(10);
}
/***********************************
//函数名称: unsigned char LcmReadStatus(void)
//传递参数: none
//返 回 值: unsigned char 判断是否空闲
//函数功能: 读lcm状态,等待lcm空闲
//函数说明: DB7=1,忙
***********************************/
unsigned char LcmReadStatus(void)
{
LCM_DATA=0xff;
LCM_RS=0;
LCM_RW=1;
LCM_E=0;
LCM_E=0;
LCM_E=1;
while(LCM_DATA & 0x80);
return LCM_DATA;
}
/***********************************
//函数名称: void LcmWriteData(unsigned char wd_lcm)
//传递参数: unsigned char wd_lcm 发送数据
//返 回 值: none
//函数功能: lcm写数据
//函数说明:
***********************************/
void LcmWriteData(unsigned char wd_lcm)
{
LcmReadStatus(); //判断lcm忙标志
LCM_DATA = wd_lcm;
LCM_RS = 1;
LCM_RW = 0;
LCM_E = 0;
LCM_E = 0;
LCM_E = 1;
}
/***********************************
//函数名称: void LcmWriteCommand(unsigned char wc_lcm, busy_c)
//传递参数: unsigned char wc_lcm, busy_c
//返 回 值: none
//函数功能: lcm写命令
//函数说明: busy_c=0是,不用检测忙信号
***********************************/
void LcmWriteCommand(unsigned char wc_lcm, busy_c)
{
if (busy_c)
LcmReadStatus();
LCM_DATA = wc_lcm;
LCM_RS=0;
LCM_RW = 0;
LCM_E = 0;
LCM_E = 0;
LCM_E = 1;
}
/***********************************
//函数名称: void DispOneChar(unsigned char x, unsigned char y,unsigned char dispdata)
//传递参数: unsigned char x, unsigned char y,unsigned char dispdata
//返 回 值: none
//函数功能: 指定位置显示一个字符
//函数说明:
***********************************/
void DispOneChar(unsigned char x,unsigned char y,unsigned dispdata)
{
y = y&0x03;
x = x&0x0f; //限制4行,每行可显示16个字符
switch(y)
{
case 0:
x += 0x00; //0x00 - 0x0f
break;
case 1:
x += 0x40; //0x40 - 0x4f
break;
case 2:
x += 0x10; //0x10 - 0x1f
break;
case 3:
x += 0x50; //0x50 - 0x5f
break;
default :
break;
}
x += 0x80;
LcmWriteCommand(x,0);
LcmWriteData(dispdata);
}
/***********************************
//函数名称: void DispOneString(unsigned char x, unsigned char y,unsigned char *dispdata)
//传递参数: unsigned char x, unsigned char y,unsigned char *disp_data
//返 回 值: none
//函数功能: 指定位置显示一串字符
//函数说明:
***********************************/
void DispOneString(unsigned char x,unsigned char y,unsigned char *dispdata)
{
unsigned char length,j;
length = strlen(dispdata);
for (j=0;j<length;j++)
{
DispOneChar( x,y,dispdata[j]); //显示一个字符
x++;
}
}
//**************************************************
// 函数名称: void Delay(unsigned int n)
// 传递参数: n 延时毫秒数
// 返回值 : none
// 函数功能: 延时n毫秒
// 函数说明: 延时毫秒函数
//**************************************************
void Delay(unsigned int n)
{
unsigned int i = 405;
while(n--)
{
while(i--);
i = 405;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -