?? 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 + -