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

📄 lcd12864_driver.c

📁 ARM LPC2103下的LCD12864驱动程序
💻 C
字号:
/****************************************Copyright (c)**************************************************
**                               Guangzou ZLG-MCU Development Co.,LTD.
**                                      graduate school
**                                 http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File name:			LCD12864_Driver.c
** Created by:			LiPeng
** Created date:		2008-09-07
** Version:				1.0
** Descriptions:		The Original Version
**
**------------------------------------------------------------------------------------------------------
** System Function:		LCD Driver------液晶驱动
**										液晶型号:12864
** 使用LPC2103连接方式:	(串行)
**						SID:P0.6(MOSI),SCLK:P0.4(SCK0)
**						PSB:GND(serial),/RST:VCC,CS:VCC
**						LEDA:VCC,LEDK:GND
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Descriptions:
**
********************************************************************************************************/

#include "config.h"

/*系统常量定义*/

/*PINSEL0 引脚功能选择寄存器常量*/
#define SCK0		(1<<8)		//P0.4定义位,01
#define MOSI0		(1<<12)		//P0.6定义位,01

/*SPI_SPCR SPI控制寄存器常量*/
#define CPHA		(1<<3)		//时钟相位控制
#define CPOL		(1<<4)		//时钟极性控制
#define MSTR		(1<<5)		//主模式选择
#define LSBF		(1<<6)		//字节的移动方向

#define SPI_MODE	MSTR		//选择SPI接口模式为主模式、SCK高有效空闲状态为0,上升沿采样,MSB传输在前

/*变量定义*/
uint8 uiDisp_Addr=0x00;//液晶显示ddram地址

/*********************************************************************************************************
** Function name:		delay
** Descriptions:		延时函数
** Input parameters:    uiDly
** Output parameters:   无
*********************************************************************************************************/
void delay(uint32 uiDly)
{
	uint32 i;
	for(;uiDly>0;uiDly--)
		for(i=0;i<5000;i++);
}  

/*********************************************************************************************************
** Function name:		LCD_SPI_Initial
** Descriptions:		SPI接口初始化
** Input parameters:    无  
** Output parameters:   无
*********************************************************************************************************/
void LCD_SPI_Initial()
{
	PINSEL0|=(SCK0|MOSI0);	//设置P0.4为SPI0串行时钟端,P0.6为SPI主出从入端
	SPI_SPCCR=8;			//SPI时钟计数寄存器
	SPI_SPCR=SPI_MODE;		//SPI控制寄存器
}


/*********************************************************************************************************
** Function name:		LCD_Serial_Send
** Descriptions:		主控CPU向LCD串行发送数据或指令
** Input parameters:    uidata		待发送数据或指令;uimark		数据或指令标志,1为指令,0为数据  
** Output parameters:   无
*********************************************************************************************************/
void LCD_Serial_Send(uint8 uidata,uint8 uimark)
{
    uint8 uiComorData;
	
	switch(uimark)
	{
		case 0:
			uiComorData=0xfa;
			break;
		case 1:
			uiComorData=0xf8;
			break;
	}
	
	SPI_SPDR=uiComorData;		//写入SPI数据寄存器,发送数据或指令判断控制字
	while((SPI_SPSR&0x80)==0);	//等待发送完毕(SPIF传输完成标志置位)
	delay(1);
	SPI_SPDR=(uidata&0xf0);		//写入SPI数据寄存器,启动发送高4位
    while((SPI_SPSR&0x80)==0);	//等待发送完毕(SPIF传输完成标志置位)
    delay(1);
    SPI_SPDR=((uidata&0x0f)<<4);//写入SPI数据寄存器,启动发送低4位
    while((SPI_SPSR&0x80)==0);	//等待发送完毕(SPIF传输完成标志置位)
    delay(1);
}

/*********************************************************************************************************
** Function name:		LCD_Initial
** Descriptions:		LCD初始化
** Input parameters:	无
** Output parameters:   无
*********************************************************************************************************/
void LCD_Initial()			//LCD初始化
{
	LCD_Serial_Send(0x30,1);//功能设置:基本指令集
	LCD_Serial_Send(0x04,1);//点设定:显示字符/光标从左到右移位,DDRAM地址加1
    LCD_Serial_Send(0x0c,1);//显示设定:开显示,不显示光标位置
    LCD_Serial_Send(0x01,1);//清DDRAM
    LCD_Serial_Send(0x02,1);//DDRAM地址归位
    LCD_Serial_Send(0x80,1);//显示地址设置
}

/*********************************************************************************************************
** Function name:		LCD_Erase
** Descriptions:		清LCD DDRAM寄存器
** Input parameters:	无
** Output parameters:   无
*********************************************************************************************************/
void LCD_Erase()
{
	LCD_Serial_Send(0x01,1);
}

/*********************************************************************************************************
** Function name:		LCD_Position_Select
** Descriptions:		选择LCD DDRAM地址
** Input parameters:	uiline,uirow	显示行和列的值
** Output parameters:   无
*********************************************************************************************************/
void LCD_Position_Select(uint8 uiline,uint8 uirow)
{
	if(uiline==1)
		uiDisp_Addr=0x80+uirow-1;
	else if(uiline==2)
		uiDisp_Addr=0x90+uirow-1;
	else if(uiline==3)
		uiDisp_Addr=0x88+uirow-1;
	else
		uiDisp_Addr=0x98+uirow-1;
}

/*********************************************************************************************************
** Function name:		LCD_Disp_Char
** Descriptions:		显示字符
** Input parameters:	uiline,uirow	显示行和列的值;uichar		所要显示字符
** Output parameters:   无
*********************************************************************************************************/
void LCD_Disp_Char(uint8 uiline,uint8 uirow,uint8 uichar)
{
	LCD_Position_Select(uiline,uirow);
	LCD_Serial_Send(uiDisp_Addr,1);
	LCD_Serial_Send(uichar,0);
}

/*********************************************************************************************************
** Function name:		LCD_Disp_Strs
** Descriptions:		显示字符串
** Input parameters:	uiline,uirow	显示行和列的值;*pchstrs		所要显示字符串
** Output parameters:   无
*********************************************************************************************************/
void LCD_Disp_Strs(uint8 uiline,uint8 uirow,char *pchstrs)
{
	uint8 uiNum;
	LCD_Position_Select(uiline,uirow);
	LCD_Serial_Send(uiDisp_Addr,1);
	for(uiNum=0;*(pchstrs+uiNum)!='\0';uiNum++)
		LCD_Serial_Send(*(pchstrs+uiNum),0);
}


/*********************************************************************************************************
** Function name:		LCD_Disp_Ascii
** Descriptions:		显示字符串
** Input parameters:	uiline,uirow	显示行和列的值;uisignal		所要显示字符的ASCII码
** Output parameters:   无
** Returned value:      无
*********************************************************************************************************/
void LCD_Disp_Ascii(uint8 uiline,uint8 uirow,uint8 uisignal)
{
	LCD_Position_Select(uiline,uirow);
	LCD_Serial_Send(uiDisp_Addr,1);
	LCD_Serial_Send(uisignal,0);
}

/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/



⌨️ 快捷键说明

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