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

📄 lcd.c

📁 采用四端法测试欧姆电阻
💻 C
字号:
#ifndef _LCD_C_
#define _LCD_C_


#include "c8051f000.h"
#include "typedef.h"
#include "lcd.h"
#include "chinese.h"
	
void LCM_INIT(void) //*LCM 初始化
{

/*
  LCM_INIT_DIR |=  LCM_RST + LCM_PSB;         //定义输出端口
  LCM_INST_DIR |=  LCM_E + LCM_RW + LCM_RS;  //定义输出端口

  LCM_INIT_OUT |= LCM_PSB;      //设置为并行输出
  LCM_INIT_OUT |= LCM_RST;     //LCM复位
*/

	LCM_PSB = 1;
	LCM_RST = 1;




  //  *LCM初始化
  	LCM_WRITE_INST(LCM_CLS);
  	LCM_WRITE_INST(LCM_FUNCTION_BASE);
  	LCM_WRITE_INST(LCM_ORIGIN);
  	LCM_WRITE_INST(LCM_CURSOR_SETUP);
 	LCM_WRITE_INST(LCM_CURSOR + LCM_CURSOR_ALL);
  	LCM_WRITE_INST(LCM_CLS);
  	LCM_WRITE_INST(LCM_DDRAM);
  
  	fTurnOnLCDBackLight();
}

 


void LCM_WRITE_INST(unsigned char _code) //*写指令实现
{
   char s = 1;
   while(s)
  {
    if (LCM_READ_BF())
    s = TRUE;
    else
    {
    /*
    LCM_INST_OUT &= ~LCM_RW;  //  写指令  RW = L, RS = L;
    LCM_INST_OUT &= ~LCM_RS;

    LCM_DATA_DIR |= LCM_ALL_DB;   //数据端口初始化

    LCM_DATA_OUT = _code;    //写代码

    LCM_INST_OUT |= LCM_E;    //开启写指令
    LCM_DELAY_100US();
    LCM_INST_OUT &= ~LCM_E;   //关闭写指令

    LCM_INST_OUT |= LCM_RW;   //复位
    LCM_INST_OUT |= LCM_RS;
    */

	LCM_RW = 0;
	LCM_RS = 0;
	LCM_DATA = _code;
	LCM_E = 1;
	LCM_DELAY_100US();
	LCM_E = 0;
	LCM_RW  =1;
	LCM_RS  =1;

   	s = FALSE;
    }
    }
}


void LCM_WRITE_DATA(unsigned char _data) //*写数据实现
{
   char s = 1;
   while(s)
  {
    if (LCM_READ_BF())
    s = TRUE;
    else
    {
 /*
    LCM_INST_OUT &= ~LCM_RW;    //写数据  RW = L, RS = H;
    LCM_INST_OUT |= LCM_RS;

    LCM_DATA_DIR |= LCM_ALL_DB;   //数据端口初始化

    LCM_DATA_OUT = _data;    //写数据

    LCM_INST_OUT |= LCM_E;    //开启写数据
    LCM_DELAY_100US();
    LCM_INST_OUT &= ~LCM_E;   //关闭写数据
*/
	LCM_RW = 0;
 	LCM_RS = 1;

 	LCM_DATA = _data;
	LCM_E = 1;
	LCM_DELAY_100US(); 
 	LCM_E = 0;
 
  	s = FALSE;
    }
    }
}

unsigned int LCM_READ_DATA(void)    //*读数据实现  (!!未测试)
{
  unsigned int _io_data;
 /*
  LCM_INST_OUT |= LCM_RW;   //读数据  RW = H, RS = H;
  LCM_INST_OUT |= LCM_RS;

  LCM_DATA_DIR &= ~LCM_ALL_DB;    //数据端口初始化

  LCM_INST_OUT |= LCM_E;      //开启读数据
  LCM_DELAY_100US();
  LCM_INST_OUT &= ~LCM_E;   //关闭读数据

  _io_data = LCM_DATA_IN;
 */

	LCM_RW = 1;
	LCM_RS = 1;
	LCM_E  = 1;
	LCM_DELAY_100US();
	_io_data = LCM_DATA;
	LCM_E  = 0;
  	return _io_data;          //完成读数据,返回数据
}

char LCM_READ_BF(void)//*读忙标志
{
  	bit k;
//  LCM_INST_OUT |= LCM_RW;   //读数据  RW = H, RS = L;
	LCM_RW = 1;

//  LCM_INST_OUT &= ~LCM_RS;
	LCM_RS = 0;
  
//  LCM_DATA_DIR &= ~LCM_ALL_DB;
//  LCM_INST_OUT |= LCM_E;      //开启读标志
  	LCM_E = 1;
  
  	LCM_DELAY_100US();

  	k = LCM_BUSY;
//  LCM_INST_OUT &= ~LCM_E;   //关闭读数据
  	LCM_E = 0;
  	if (k) return TRUE; else return FALSE;
}



void LCM_DELAY_100US(void) //*100 us
{
  	unsigned int j;
  	for(j=0;j<_DELAY_100US;j++);
}



void LCM_fresh(void)
{
	unsigned char i;

	LCM_WRITE_INST(LCM_DDRAM);
	
	for(i=0;i<=0x0f;i++)
	LCM_WRITE_DATA(LCMDisplayBuffer1[i]);
	
	for(i=0;i<=0x0f;i++)
	LCM_WRITE_DATA(LCMDisplayBuffer2[i]);
	
	for(i=0;i<=0x0f;i++)
	LCM_WRITE_DATA(LCMDisplayBuffer3[i]);
	
	for(i=0;i<=0x0f;i++)
	LCM_WRITE_DATA(LCMDisplayBuffer4[i]);
}

void fShowWelcome(void)
{
	unsigned char i;
   	LCM_WRITE_INST(LCM_DDRAM);
//clear display buffer
	for(i=0;i<=0x0f;i++)
	{
		LCMDisplayBuffer1[i] = 0x20;
		LCMDisplayBuffer2[i] = 0x20;
		LCMDisplayBuffer3[i] = 0x20;
		LCMDisplayBuffer4[i] = 0x20;
	}



//copy chinese characters to display buffers.
	XDATA_ptr = Memu_Welcome1;
	for(i=0;i<=0x0f;i++)
	LCMDisplayBuffer1[i] = *XDATA_ptr++;


	XDATA_ptr = Memu_Welcome2;
	for(i=0;i<=0x0f;i++)
	LCMDisplayBuffer2[i] = *XDATA_ptr++;
  

//fresh the buffer for display.	
	LCM_fresh();

}



void fShowResult(void)
{
	unsigned char i;
   	LCM_WRITE_INST(LCM_CLS);
//clear display buffer
	for(i=0;i<=0x0f;i++)
	{
		LCMDisplayBuffer1[i] = 0x20;
		LCMDisplayBuffer2[i] = 0x20;
		LCMDisplayBuffer3[i] = 0x20;
		LCMDisplayBuffer4[i] = 0x20;
	}



//copy chinese characters to display buffers.
	XDATA_ptr = Memu_Resistor1;
	for(i=0;i<=0x0f;i++)
	LCMDisplayBuffer1[i] = *XDATA_ptr++;


	XDATA_ptr = Memu_Resistor2;
	for(i=0;i<=0x0f;i++)
	LCMDisplayBuffer3[i] = *XDATA_ptr++;
  



	XDATA_ptr = Memu_Resistor3;
	for(i=0;i<=0x0f;i++)
	LCMDisplayBuffer2[i] = *XDATA_ptr++;


	XDATA_ptr = Memu_Resistor4;
	for(i=0;i<=0x0f;i++)
	LCMDisplayBuffer4[i] = *XDATA_ptr++;
  

//fresh the buffer for display.	
	LCM_fresh();

}


void fDisplayResult(unsigned char vLine,unsigned int vIntData)
{
	xdata unsigned char vOffAddress,vAddress;
 	unsigned char j;

	switch (vLine)
	{
	case 1:	vOffAddress = 0x05;break;	
	case 2:	vOffAddress = 0x15;break;
	case 3:	vOffAddress = 0x25;break;
	case 4:	vOffAddress = 0x35;break;
	}

	vAddress = LCM_DDRAM+vOffAddress;
	LCM_WRITE_INST(vAddress);

//	if(vIntData<10000)
	{
		LCM_WRITE_DATA(0x20);
		LCM_WRITE_DATA(0x20);
		vAddress =vAddress - 2;
	}
 


	vAddress =vAddress - 1;
	LCM_WRITE_INST(vAddress);


	j = vIntData/10000;
	LCM_WRITE_DATA(Number_Table[j]);

    vIntData = vIntData-j*10000;


	j = vIntData/1000;
	LCM_WRITE_DATA(Number_Table[j]);

    vIntData = vIntData-j*1000;

	j = vIntData/100;
	LCM_WRITE_DATA(Number_Table[j]);

    vIntData = vIntData-j*100;

	j = vIntData/10;
	LCM_WRITE_DATA(Number_Table[j]);

    vIntData = vIntData-j*10;
 	j = vIntData;
 	LCM_WRITE_DATA(Number_Table[j]);


}

void fDisplayBlank(unsigned char Blank)
{
	unsigned char i;
	for(i=1;i<=Blank;i++)
	LCM_WRITE_DATA(0x20);	
}


void fDisplayNumber(unsigned int Number)
{
	unsigned char Alfa[5];
	unsigned char i,j;

	for(i=0;i<5;i++)
	{
		Alfa[i] = Number%10;
		Number /= 10;
	}
	
	for(i=5;i>0;i--)
	if(Alfa[i])
	{
		
		break;
	}
	else
	{
		LCM_WRITE_DATA(0x20);
	}
	
	for(j= i;j>0;j--)
	{
		LCM_WRITE_DATA(	Alfa[j]);
	}
}


void fDisplayCharacter(void)
{
	while(1)
	if(*XDATA_ptr == "\n")
	LCM_WRITE_DATA(*XDATA_ptr++);
}


void fChangeLine(unsigned char Line)
{
	
	xdata unsigned char vOffAddress;
	
	switch (Line)
	{
	case 1:	vOffAddress = 0x00;break;	
	case 2:	vOffAddress = 0x20;break;
	case 3:	vOffAddress = 0x10;break;
	case 4:	vOffAddress = 0x30;break;
	}	
	LCM_WRITE_INST(LCM_DDRAM+vOffAddress);
}	


void fClearScreen(void)
{
	LCM_WRITE_INST(LCM_CLS);
}



void fInitialChinese(void)
{
	 
}




#endif

⌨️ 快捷键说明

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