我来贴个12864LCD显示屏驱动程序来提提人气
这个驱动程序适合ARM7213x和214x开发板,用的是GPIO控制,没用SPI。仅供大家娱乐消遣,有更好的也请贴出来分享一下,见笑了各位~~~~.h文件是
#ifndef _LCD12864_H_
#define _LCD12864_H_
#define SCK 1<<1
#define SID 1<<0
extern void LCDData(unsigned char ucByte); //写数据
extern void LCDCmd(unsigned char ucCommand); //写命令
extern void LCDInit(void); //初始化
extern void LCDDisplayStr(unsigned char row, char *LcmDat,unsigned char length);
extern void LCDSendData(uint8 uiData);
extern void DelayNS (uint32 uiDly);
extern void DisplayStr(unsigned char row, char *LcmDat,unsigned char length);
#endif
.c文件是
#include "config.H"
#include "LCD12864.H"
/*********************************************************************************************************
** Function name: DelayNS
** Descriptions: 长软件延时
** input parameters: uiDly延时控制值,值越大,延时越长
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
void DelayNS (uint32 uiDly)
{
uint32 i;
for(; uiDly > 0; uiDly--){
for(i = 0; i < 50000; i++);
}
}
/*==============================================================================
函 数 名 : WriteDataToLcd()
函数功能 : 向LCD的数据RAM写一个字节的数据.
入口参数 : ucByte ---- 要写的字节.
返回参数 : 无
==============================================================================*/
void LCDData(unsigned char ucByte)
{
LCDSendData(0xFA); // 同步数据
LCDSendData(ucByte & 0xf0); // 高半字节
LCDSendData(ucByte << 4); // 低半字节
}
/*==============================================================================
函 数 名 : WriteCommandToLcd()
函数功能 : 向LCD写一条指令.
入口参数 : ucCommand ---- 要写的指令.
返回参数 : 无
==============================================================================*/
void LCDCmd(unsigned char ucCommand)
{
LCDSendData(0xF8); // 同步数据
LCDSendData(ucCommand & 0xf0); // 高半字节
LCDSendData(ucCommand << 4); // 低半字节
}
/*==============================================================================
函 数 名 : InitLcd()
函数功能 : 初始化LCD12864.
入口参数 : 无
返回参数 : 无
==============================================================================*/
void LCDInit(void)
{
PINSEL0 = PINSEL0&(~0x0F);
IO0DIR = IO0DIR|SCK|SID;
LCDCmd(0x01);
DelayNS(20);
LCDCmd(0x02);
DelayNS(20);
LCDCmd(0x06);
DelayNS(20);
LCDCmd(0x0C);
DelayNS(20);
LCDCmd(0x30);
DelayNS(20);
}
/*==============================================================================
函 数 名 : LCDDisplayStr()
函数功能 : 在LCD的某一行上显示汉字
入口参数 : row 第几行
*LcmDat 显示的汉字内容
length 内容长度
返回参数 : 无
==============================================================================*/
void LCDDisplayStr(unsigned char row, char *LcmDat,unsigned char length)
{
unsigned char i;
switch(row)
{
case 1 : LCDCmd(0x80);break;
case 2 : LCDCmd(0x90);break;
case 3 : LCDCmd(0x88);break;
case 4 : LCDCmd(0x98);break;
}
DelayNS(5);
for (i = 0 ; i< length ; i++)
{
LCDData( *LcmDat);
LcmDat++ ;
}
}
/*==============================================================================
函 数 名 : LCDDisplayStr()
函数功能 : 在LCD的某一行上显示汉字
入口参数 : row 位置
*LcmDat 显示的内容
length 内容长度
返回参数 : 无
==============================================================================*/
void DisplayStr(unsigned char rew, char *LcdDat,unsigned char lenth)
{
unsigned char i;
LCDCmd(rew);
DelayNS(5);
for (i = 0 ; i< lenth ; i++)
{
LCDData( *LcdDat);
LcdDat++ ;
}
}
/*==============================================================================
函 数 名 : LCDSendData()
函数功能 : 发送数据
入口参数 : 要发送地数据
返回参数 : 无
==============================================================================*/
void LCDSendData(uint8 uiData)
{
uint8 i;
for(i=0;i<8;i++)
{
IO0CLR = SCK;
if((uiData&0x80)==0x80)
IO0SET = SID;
else
IO0CLR = SID;
IO0SET = SCK;
uiData=uiData<<1;
}
}