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

📄 lcd3.h

📁 1602LCD驱动程序
💻 H
字号:
/*****************************************************/
/*----                 1602驱动程序			     ----*/
/*----                   my1602.h				 ----*/
/*----                  2008_04_10				 ----*/
/*****************************************************/

#ifndef LCM_MY1602_H
#define LCM_MY1602_H
#include<intrins.h>
#define uchar  unsigned char
#define uint   unsigned int

/*---------数据口、端口定义------------*/
sbit RS=P2^6;			   //数据、命令端
sbit RW=P2^5;			   //读、写选择
sbit EN=P2^4;			   //使能端
#define Dataport P1		   //数据输入输出口
#define Busy 0x80		   //忙检测

/*----------------函数声明-------------*/
void lcm_delay(uint k);
void lcm_init(void);
void lcm_write_command(uchar command,uchar wait);
void lcm_write_data(uchar char_data);
void lcm_wait(void);
void display_char(uchar X,uchar Y,uchar char_data);
void display_string(uchar X,uchar Y,uchar str[]);
void display_stringyd(uchar X,uchar Y,uchar str[]);

/*----------延时1ms,11.0592MHz晶振--------*/
void delay_1ms(void)
{
	uint i;
	for(i=1;i<(uint)((11.0592*143-2)/12); ++i);
}

/*------------------延时K*ms--------------*/
void lcm_delay(uint k)
{
	uint i;
	for(i=0;i<k;i++)
		delay_1ms();
}


/**********液晶初始化**********/
void lcm_init(void)
{
	Dataport=0;
	lcm_delay(15);
	lcm_write_command(0x38,0);//三次显示模式设置
	lcm_delay(5);
	lcm_write_command(0x38,0);
	lcm_delay(5);
	lcm_write_command(0x38,0);
	lcm_delay(5);
	
	lcm_write_command(0x38,1);//8bit数据传送,2行显示,5*7字型
    lcm_write_command(0x08,1);//显示关闭
    lcm_write_command(0x01,1);//显示清屏
    lcm_write_command(0x06,1);//显示光标右移设置
    lcm_write_command(0x0c,1);//显示屏打开,光标不显示,不闪烁	
}

/***************液晶内部等待*******************/
void lcm_wait(void)
{
	Dataport=0xff;	
	EN=1;
    RS=0;   			
    RW=1;   			
    _nop_();
    while(Dataport&Busy)
	{
		EN=0;
	   	_nop_();
	   	_nop_();
	   	EN=1;
	   	_nop_();
	   	_nop_();
	}
   	EN=0;
}

/**********写指令函数**********/
void lcm_write_command(uchar command,uchar wait)
{
	if(wait)lcm_wait();
	Dataport=command;
    RS=0;                   // 选中指令寄存器
    RW=0;               	// 写模式	
    EN=1;
	_nop_();
	_nop_();
	_nop_();
    EN=0;	
}

/***************写数据函数*****************/
void lcm_write_data(uchar char_data)
{
	lcm_wait( );                //检测忙信号
	Dataport=char_data;
    RS=1;                   // 选中数据寄存器
    RW=0;           	    // 写模式
    EN=1;
    _nop_();
	_nop_();
	_nop_();
    EN=0;
}

/**************字符显示函数**************/
void display_char(uchar X,uchar Y,uchar char_data)
{
	X&=1;
    Y&=15;
    if(X)Y|=0x40;               //若y为1(显示第二行),地址码+0X40
    Y|=0x80;                    //指令码为地址码+0X80
    lcm_write_command(Y,0);
    lcm_write_data(char_data);	
}

/***************字符串显示函数******************/
void display_string(uchar X,uchar Y,uchar str[])
{
	uchar i=0;
    X&=0x01;
    Y&=0x0f;
    while(Y>=0&&Y<16&&str[i]!='\0')
    {
        display_char(X,Y,str[i]);
        i++;
        Y++;
    }	
}
void display_string_yd(uchar X,uchar Y,uchar str[])
{
	 uchar i=0;
    X&=0x01;
    Y&=0x0f;
    while(Y>=0&&Y<16&&str[i]!='\0')
    {
        display_char(X,Y,str[i]);
		lcm_delay(200);
        i++;
        Y++;
	 }
}
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -