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

📄 lcd.c

📁 收集到的一些常用功能模块
💻 C
字号:
/************************************************/
/*** this program depends on the LM044L  ********/
/*** make by:liaowenbing                 ********/
/*** make date:2006-12-22                ********/
/*** check date:2006-12-22               ********/
/************************************************/

#define _UseKeil_  
#define _Lcd_LM044L

#include"lcd.h"

void LcdDelay2us()
{
	LcdDelay1us();
}
static void LcdWaitFree(void)
{
	do
	{	
		LcdMAC_SetBitData(LcdEN , cnLcdENDisable);
		LcdMAC_SetBitData(LcdRS , cnLcdRSCmd);
		LcdMAC_SetBitData(LcdRW , cnLcdRWRead);
		LcdMAC_SetBitData(LcdEN , cnLcdENEnable);
		LcdMAC_SetDDR(LcdDA , cnAllPortIn);
		LcdDelay2us();
	}while((LcdMAC_GetData(LcdDA)&cnLcdBusyTestData) != cnLcdFreeData);
	LcdMAC_SetBitData(LcdEN , cnLcdENDisable);
	LcdMAC_SetBitData(LcdRS , cnLcdRSCmd);
	LcdMAC_SetBitData(LcdRW , cnLcdRWRead);
	LcdMAC_SetDDR(LcdDA , cnAllPortOut);
}

/**
***函数名称:LcdWriteCommand
***说明:写命令前面自己已经等待了lcd为空闲
**/
void LcdWriteCommand(unsigned char cmd)
{
	LcdWaitFree();
	//LcdMAC_SetDDR(LcdDA , cnAllPortOut);
  LcdMAC_SetBitData(LcdRS , cnLcdRSCmd);
	LcdMAC_SetBitData(LcdRW , cnLcdRWWrite);
	LcdMAC_SetBitData(LcdEN , cnLcdENEnable);
	LcdMAC_SetData(LcdDA , cmd);
	LcdDelay2us();
	LcdMAC_SetBitData(LcdEN , cnLcdENDisable);
	LcdMAC_SetBitData(LcdRS , cnLcdRSCmd);
	LcdMAC_SetBitData(LcdRW , cnLcdRWRead);
}

/**
***函数名称:LcdWriteData
***说明:调用前外部函数必须判断lcd状态是否空闲
**/
void LcdWriteData(unsigned char datavalue)
{
  LcdWaitFree();
  //LcdMAC_SetDDR(LcdDA , cnAllPortOut);
  LcdMAC_SetBitData(LcdRS , cnLcdRSData);
	LcdMAC_SetBitData(LcdRW , cnLcdRWWrite);
	LcdMAC_SetBitData(LcdEN , cnLcdENEnable);
	LcdMAC_SetData(LcdDA , datavalue);
	LcdDelay2us();
	LcdMAC_SetBitData(LcdEN , cnLcdENDisable);
	LcdMAC_SetBitData(LcdRS , cnLcdRSCmd);
	LcdMAC_SetBitData(LcdRW , cnLcdRWRead);
}

/**
***函数名称:LcdInit
***功能说明:清除显示,并地址归位,光标不显示
**/
void LcdInit(void)
{
	LcdMAC_SetBitDDR(LcdRS , cnBitPortOut);
	LcdMAC_SetBitDDR(LcdRW , cnBitPortOut);
	LcdMAC_SetBitDDR(LcdEN , cnBitPortOut);
	LcdMAC_SetBitData(LcdEN , cnLcdENDisable);
	LcdMAC_SetBitData(LcdRS , cnLcdRSCmd);
	LcdMAC_SetBitData(LcdRW , cnLcdRWRead);
	LcdMAC_SetDDR(LcdDA , cnAllPortOut);
  LcdWriteCommand(cmLcdCls);           //显示清屏
  LcdWriteCommand(cmLcdSetVisible);    //显示开
}

/**
***函数名称:LcdSetXY        
*** 功 能  : 设置LCD显示的起始位置
***输入参数:x、y : 显示字符串的位置, 0 <= X < cnLcdRowMaxCount,0 <= Y < cnLcdRowCount
*** 说 明  :LCD第一行显示寄存器地址:cnLcdAddrRow0 += cnLcdRowMaxCount,
***          LCD第二行显示寄存器地址:cnLcdAddrRow1 += cnLcdRowMaxCount
***          LCD第三行显示寄存器地址:cnLcdAddrRow2 += cnLcdRowMaxCount
***          LCD第四行显示寄存器地址:cnLcdAddrRow3 += cnLcdRowMaxCount
*** 注 意 : 只用在4行范围内的显示,且要看是中文还是英文的显示
**/
void LcdSetXY( unsigned char x, unsigned char y )
{
  unsigned char address;
  switch(y)
  {
    case 0: 
      {
  	    address = cnLcdAddrRow0 + x;
  	    break; 
      }
    case 1: 
      {
  	    address = cnLcdAddrRow1 + x;
  	    break; 
      }
    case 2: 
      {
  	    address = cnLcdAddrRow2 + x;
  	    break; 
      }
    case 3: 
      {
  	    address = cnLcdAddrRow3 + x;
  	    break; 
      }
   default:
     {
        address = cnLcdAddrRow0 + x; 
        break;
     }
  }
  LcdWriteCommand( address );
}

/**
***函数名称:LcdWriteString
*** 说 明  :连续写完一个字符串(用指针的时候务必用0结尾),自动换行调整行序功能
*** 注 意  :仅在中文显示位置
**/
void LcdWriteString(unsigned char x,unsigned char y,unsigned char *s)
{
  unsigned char thex,they;
  LcdSetXY( x, y );
  thex = x + x;    //只在中文字显示的时候
  they = y;
  while(*s) 
  {
    LcdWriteData( *s);
    s++;
    if(*s)
    {
      thex++;
      if(thex >= cnLcdRowMaxCount)
      {
        thex = 0;
        they++;
				if(they >= cnLcdRowCount)
	 				 they = 0;
				LcdSetXY( thex, they );
      }
    }
  }
}

/**
***函数名称:LcdWriteStr
***说明:此函数只做”在当前位置显示完一个字符串用,不做位置调整等操作
**/
void LcdWriteStr(unsigned char *s)
{
  while(*s != '\0') 
  {
    //LcdWriteData( *s++);
    LcdWriteData( *s);
    s++;
  }
}

/**
***函数名称:LcdWriteCountStr
***说明:此函数也只显示指定个数个数据,并不做位置和字符串结尾显示
**/
void LcdWriteCountStr(unsigned char count,unsigned char *s)
{
  while(count--)
  {
    //LcdWriteData( *s++);
    LcdWriteData( *s);
    s++;
  }
}

/**
***函数名称:LcdReadData
*** 说 明  :读出当前地址的值
**/
unsigned char LcdReadData(void)
{ 
//  unsigned char ret;
//  LcdMAC_SetData(LcdEN , cnLcdENDisable);
//	LcdMAC_SetData(LcdRS , cnLcdRSCmd);
//	LcdMAC_SetData(LcdRW , cnLcdRWRead);
//	LcdMAC_SetData(LcdEN , cnLcdENEnable);
//	LcdMAC_SetDDR(LcdDA , cnAllPortIn);
//	LcdDelay2us();
//  io_SetDir(LCD_Date_DDr,PortIn);  //设置输入
//  io_SetBit(RS,1);
//  io_SetBit(RW,1);
//  io_SetBit(EN,1);
//  macLcdDelay1Us();
//  ret = LCD_Data;
//  io_SetBit(EN,0);
//  io_SetDir(LCD_Date_DDr,PortOut);  //设置输出	
  return 0;
}

⌨️ 快捷键说明

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