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

📄 lcmdrv.h

📁 ARM7 lpc2148通过DS18B20温度采集并通过1602显示
💻 H
字号:
/****************************************************************************
* 文件名:LCMDRV.C
* 功能:1602图形液晶模块驱动程序。使用LPC2148的GPIO口控制操作。
* 液晶模块与LPC2148的连接如下所示:
*	D0 (7)	--		P1.16
*	.		--		.
*	.		--		.
*	.		--		.
*	D7 (14)	--		P1.23

*	RW		--		P0.28
*	RS		--		P0.22
*	E		--		P0.29
*
*  R/W为0进行写操作,为1时进行读操作;
*  RS为1表示数据传送, 为0表示命令传送;
*  E读写脉冲;
*  
*  
*  作者:陈柱
*  日期:2007/11/4
****************************************************************************/
#include "config.h"


/* 定义总线起始的GPIO,即D0对应的GPIO值(P1.16) */
#define  BUS_NO		8

/* 输出总线数据宏定义 */
#define	 OutData(dat)	IO0CLR =IO0CLR|0xFF<<BUS_NO; IO0SET =IO0SET|(dat&0xff)<<BUS_NO

/* 定义RS控制 */
#define  LCM_RS	    21
#define  SRS()		IO1SET =IO1SET|1<<LCM_RS
#define  CRS()		IO1CLR =IO1CLR|1<<LCM_RS


/* 定义R/W控制 */
#define  LCM_RW	    22
#define  SRW()		IO1SET =IO1SET|1<<LCM_RW
#define  CRW()		IO1CLR =IO1CLR|1<<LCM_RW


/* 定义E控制 */
#define  LCM_E		23
#define  SE()		IO1SET = IO1SET|1<<LCM_E
#define  CE()		IO1CLR = IO1CLR|1<<LCM_E


/* 定义LCM操作的命令字 */
#define	LCM_DISPON			0x3f	/* 打开LCM显示												*/
#define LCM_STARTROW		0x02	/* 显示起始行0,可以用LCM_STARTROW+x设置起始行。(x<64) 		*/
#define	LCM_ADDRSTRX		0xb8	/* 页起始地址,可以用LCM_ADDRSTRX+x设置当前页(即X)。(x<8)	*/
#define	LCM_ADDRSTRY		0x40	/* 列起始地址,可以用LCM_ADDRSTRY+x设置当前列(即Y)。(x<64)	*/	


/*********************************************************************************
* 名称:DELAY5()
* 功能:软件延时函数。用于LCM显示输出时序控制。
* 入口参数:无
* 出口参数:无
**********************************************************************************/
//void DELAY5(void)
//{ int i;

//  for(i=0; i<100; i++);
//}

void DELAY5(void)
{
unsigned int TempCyc = 5552;
while(TempCyc--);
}


/***********************************************************************
* 名称:LCM_WrCommand()
* 功能:写命令子程序
* 入口参数:command  	要写入LCM的命令字
* 注:数据口为P0口(作IO口)
***********************************************************************/
void LCM_WrCommand(uint8 command) 
{ CE();				
  CRS();			// RS=0,表示发送命令		
  CRW();						
          
  OutData(command);           
  DELAY5();     
  SE();
  DELAY5();     
  CE();
  DELAY5();     
}


/***********************************************************************
* 名称:LCM_WrData()
* 功能:写数据子程序
* 入口参数:wrdata  	要写入LCM的数据
***********************************************************************/
void LCM_WrData(uint8 wrdata) 
{ CE();			
  SRS();     // RS=1,表示发送数据	
  CRW();		
          
  OutData(wrdata);       
  DELAY5();     
  SE();
  DELAY5();     
  CE();     
  DELAY5();  
            
}


/***********************************************************************
* 名称:LCM_WriteByte()
* 功能:向指定点写数据(一字节)。
* 入口参数:x 		x坐标值(0-15)
*	    	y       y坐标值(0-1)
*           wrdata	所要写的数据
* 说明:
***********************************************************************/
void LCM_WriteByte(uint8 x, uint8 y, uint8 wrdata) 
{ x = x&0x0f;				// 限制X不能大于15,Y不能大于1
  y = y&0x01;

if (y) x |= 0x40;       //当要显示第二行时地址码+0x40;
x |= 0x80;              // 算出指令码
LCM_WrCommand(x);  //这里不检测忙信号,发送地址码
LCM_WrData(wrdata);
}

/***********************************************************************
* 名称:LCM_WriteString()
* 功能:向指定点写数据(一字节)。
* 入口参数:x 		  x坐标值(0-15)
*	    	    y       y坐标值(0-1)
*           wrstring	所要写的数据
* 说明:
***********************************************************************/

void LCM_WriteString(uint8 x, uint8 y, char *wrstring)
{
unsigned char ListLength;
ListLength = 0;
y &= 0x01;
x &= 0x0f;                      //限制X不能大于15,Y不能大于1
while (wrstring[ListLength]>0x20) //若到达字串尾则退出,字符长度小于32
  {
   if (x <= 0x0f)                //X坐标应小于0xf(15)
    {
     LCM_WriteByte(x, y, wrstring[ListLength]); //显示单个字符
     ListLength++;
     x++;
    }
  }
}


/***********************************************************************
* 名称:LCM_DispIni()
* 功能:LCM显示初始化
* 入口参数:无
* 出口参数:无
* 注:
***********************************************************************/
void LCM_DispIni(void)
{ 

  PINSEL0 &= ~(0xffff<<(2*BUS_NO));
  
  PINSEL2 = PINSEL2 & (~0x08);
  // 设置I/O为输出方式
  IO0DIR = IO0DIR|(0xff<<BUS_NO);
  
  IO1DIR = IO1DIR|(1<<LCM_RW)|(1<<LCM_RS)|(1<<LCM_E);
  
  
  OutData(0);
  LCM_WrCommand(0x38); //三次显示模式设置,不检测忙信号
  DELAY5(); 
  LCM_WrCommand(0x38);
  DELAY5(); 
  LCM_WrCommand(0x38);
  DELAY5();  
  
  LCM_WrCommand(0x38); //显示模式设置,开始要求每次检测忙信号
  LCM_WrCommand(0x08); //关闭显示
  LCM_WrCommand(0x01); //显示清屏
  LCM_WrCommand(0x06); // 显示光标移动设置
  LCM_WrCommand(0x0C); // 显示开及光标设置
}

⌨️ 快捷键说明

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