📄 lcd12864_driver.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 + -