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

📄 lcd.c

📁 KeilC环境下
💻 C
字号:
#include "reg51.h"
#include "type.h"

#define LcdData P0

void LCDWCN(uchar tmp);
void WAITIDLE(void);
void LCDWC (uchar tmp123);
void LCDWD (uchar vData);
void LCDPOS (void);
void LCDWRITE(uchar wrData);
void LcdFill(char fData,char X,char Y);

sbit RSPIN	  = P2^6;					//SMC1602A的RS	   
sbit RWPIN	  = P2^5;					//SMC1602A的RW	  	
sbit EPIN	  = P2^7;					//SMC1602A的E	  

unsigned char XPOS;	
unsigned char YPOS;	

void LCDWCN(uchar tmp)	//送控制字子程序(不检测忙信号)
{
	RSPIN=0;
	RWPIN=0;
	LcdData=tmp;
    EPIN=1;	
	EPIN=1;	//NOP
    EPIN=0;
}

void WAITIDLE(void)
{
	uchar tmpw;
	LcdData=0xff;
   	RSPIN=0;
   	RWPIN=1;
    EPIN=1;
	do
	{
		tmpw=LcdData;
		tmpw=tmpw & 0x80;
	}while(tmpw==0x80);
   	EPIN=0;
}

void LCDWC (uchar tmp123)
{
	WAITIDLE();	
	
	RSPIN=0;
    RWPIN=0;
    LcdData=tmp123;
   	EPIN=1;
    EPIN=1;
    EPIN=0;
}

void LCDWD (uchar vData)
{
	WAITIDLE();	
      
  	RSPIN=1;
  	RWPIN=0;
   	LcdData=vData;
   	EPIN=1;
    EPIN=1;
    EPIN=0;
}
	
void LCDPOS ()				
{
	XPOS=XPOS & 0x0F; 		//X位置范围(0到15)
	YPOS=YPOS & 0x01; 		//Y位置范围(0到1)
	if (YPOS==0)
	{
	}
	else
	{
		XPOS=XPOS+0x40;
	}

	XPOS=XPOS | 0x80;
	LCDWC(XPOS);	
}

void LCDWRITE(uchar wrData)
{
	LCDPOS();			//定位显示地址
	LCDWD(wrData);		//写字符

}
	/*
void LcdFillAll(uchar vTemp[])
{
	unsigned char i,j;
	YPOS=0;

	for (i=0;i<2;i++)
	{
		XPOS=0;		
		for (j=0;j<16;j++)
		{
			LCDWRITE(vTemp[i*0x10+j]);
			XPOS++;
		}
		YPOS++;
	}
}
		*/
void LcdFillWill(char vTemp[],char length)
{
	unsigned char i;
	YPOS=0;

	if (length>16)
	{
		for (i=0;i<16;i++)
		{
			LcdFill(vTemp[i],i,0);
		}
		for (i=0;i<length-16;i++)
		{
			LcdFill(vTemp[i+16],i,1);
		}
	}
	else
	{
		for (i=0;i<length;i++)
		{
			LcdFill(vTemp[i],i,0);
		}
	}
}
void LcdFillXY(uchar vTemp[],uchar length,uchar x,uchar y)
{
	unsigned char i;
		
		for (i=0;i<length;i++)
		{
			LcdFill(vTemp[i],x,y);
			x++;
		}
		
}
		  


void LcdFill(uchar fData,uchar X,uchar Y)
{
	XPOS=X;
	YPOS=Y;
	LCDWRITE(fData);
}

void LcdClear(void)
{
	uchar i;
	for (i=0;i<16;i++)
	{
		LcdFill(' ',i,0);
	}
	for (i=0;i<16;i++)
	{
		LcdFill(' ',i,1);
	}
}

void LcdClearDown(void)
{
	uchar i;
	for (i=0;i<16;i++)
	{
		LcdFill(' ',i,1);
	}
}

void delay5ms(void)
{
	int i,j;
	for (i=0;i<25;i++)
	{for (j=0;j<100;j++);}
}


void LcdReset(void)
{
	EPIN=0;
	delay5ms();			//延时15MS
	delay5ms();
	delay5ms();

						//显示模式设置(不检测忙信号)
	LCDWCN(0x38);		//;共三次
	delay5ms();
	LCDWCN(0x38);	
	delay5ms();
	LCDWCN(0x38);
	delay5ms();
	LCDWC(0x38);		//显示模式设置(以后均检测忙信号)
	LCDWC(0x08);		//显示关闭
	LCDWC(0x01);		//显示清屏
	LCDWC(0x06);		//显示光标移动设置
	LCDWC(0x0c);		//显示开及光标设置
}

⌨️ 快捷键说明

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