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

📄 lcd1604.c

📁 LCD1604驱动程序,将扩展名改为.c就可以
💻 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 + -