/********************************************************************
Copyright(C) 柏兆来
All
rights reserved
文件名称: LCD1602.C file
文件标识: 见配置管理计划书
摘
要:
版
本: V1.1
作
者: 柏兆来
建立日期: 2009 -8 -17 21:03:53
版权所有,盗版必究。
********************************************************************/
//#include < stdio.h>
#include "xgpio_l.h"
#include "xparameters.h"
#include "xgpio.h"
#define
XPAR_LCD_DEVICE_ID
XPAR_GENERIC_GPIO_DEVICE_ID
XGpio
lcd;
///////////////////////////////////////////////////////////////////////
//
// 函数名 : delayus
// 功能描述 : 延时2us
// 参数 : Xuint16 delay
// 返回值 : void
//
///////////////////////////////////////////////////////////////////////
static void delayus(Xuint16 delay)
{
volatile Xuint16 i, j;
for (i = 0; i < delay; i++)
for
(j = 0; j < 10; j++)
;
}
///////////////////////////////////////////////////////////////////////
//
// 函数名 : WaitForEnable
// 功能描述 : 忙状态检测
// 返回值 : void
//
///////////////////////////////////////////////////////////////////////
static void WaitForEnable(void)
{
XGpio_SetDataDirection(&lcd, 1,0x000000ff);
XGpio_DiscreteClear(&lcd, 1, 0x00000200); //RS=0
XGpio_DiscreteSet(&lcd, 1,
0x00000100); // RW=1
delayus(1);
XGpio_DiscreteSet(&lcd, 1, 0x00000400); // EN=1
delayus(1);
//
delayus(1);
while(XGpio_DiscreteRead(&lcd,
1)&0x00000080);
XGpio_DiscreteClear(&lcd, 1, 0x00000400); //EN=0
XGpio_SetDataDirection(&lcd,
1,0x00000000);
}
///////////////////////////////////////////////////////////////////////
//
// 函数名 : XromWriteCmd
// 功能描述 : 写命令
// 参数 : Xuint32 Command
// 返回值 : void
//
///////////////////////////////////////////////////////////////////////
static void XromWriteCmd(Xuint8 Command,Xuint8 Attribc)
{
Xuint32 Current;
Current = 0x00000400 | Command;
if(Attribc)
WaitForEnable();
XGpio_DiscreteClear(&lcd, 1, 0x00000200); // RS=0
XGpio_DiscreteClear(&lcd, 1, 0x00000100); //
RW=0
delayus(1);
XGpio_DiscreteWrite(&lcd, 1, Command);
delayus(1);
XGpio_DiscreteWrite(&lcd, 1, Current);
delayus(1);
delayus(1);
XGpio_DiscreteWrite(&lcd, 1, Command);
}
///////////////////////////////////////////////////////////////////////
//
// 函数名 : XromWriteData
// 功能描述 : 写数据
// 参数 : Xuint32 data
// 返回值 : void
//
///////////////////////////////////////////////////////////////////////
static void XromWriteData(Xuint8 data)
{
Xuint32 rs_data, enable_rs_data;
rs_data = 0x00000200 | data;
enable_rs_data = 0x00000600 | data;
WaitForEnable();
XGpio_DiscreteSet(&lcd, 1, 0x00000200); // RS=1
XGpio_DiscreteClear(&lcd, 1, 0x00000100); // RW=0
delayus(1);
XGpio_DiscreteWrite(&lcd, 1, rs_data);
delayus(1);
XGpio_DiscreteWrite(&lcd, 1, enable_rs_data);
delayus(1);
delayus(1);
XGpio_DiscreteWrite(&lcd, 1, rs_data);
}
///////////////////////////////////////////////////////////////////////
//
// 函数名 : XromLCDInit
// 功能描述 : 液晶初始化
// 返回值 : void
//
///////////////////////////////////////////////////////////////////////
void XromLCDInit()
{
XGpio_Initialize(&lcd,
XPAR_LCD_DEVICE_ID);
XGpio_SetDataDirection(&lcd, 1, 0x00000000);
XGpio_DiscreteWrite(&lcd, 1, 0x00000000);
XromWriteCmd(0x00000038,1);
XromWriteCmd(0x00000008,1);
XromWriteCmd(0x00000001,1);
XromWriteCmd(0x00000006,1);
XromWriteCmd(0x0000000c,1);
}
///////////////////////////////////////////////////////////////////////
//
// 函数名 : DisplayOneChar
// 功能描述 : 显示一个字符
// 参数 : Xuint8 x
// 参数 : Xuint8 y
// 参数 : Xuint8 DData
// 返回值 : void
//
///////////////////////////////////////////////////////////////////////
void DisplayOneChar(Xuint8 x, Xuint8 y,
Xuint8 DData)
{
y&=1;
x&=15;
if (y)
x|=0x40;
x|=0x80;
XromWriteCmd(x,0);
XromWriteData(DData);
}
///////////////////////////////////////////////////////////////////////
//
// 函数名 : DisplayString
// 功能描述 : 显示字符串
// 参数 : Xuint8 X
// 参数 : Xuint8 Y
// 参数 : Xuint8 *String
// 返回值 : void
//
///////////////////////////////////////////////////////////////////////
void DisplayString(Xuint8 X, Xuint8 Y,
Xuint8 *String)
{
Xuint8
StringLength = 0;
Y&=0x1;
X&=0xF;
while
(String[StringLength] != '\0')
{
DisplayOneChar(X,
Y, String[StringLength]);
StringLength++;
X++;
}
}
///////////////////////////////////////////////////////////////////////
//
// 函数名 : DisplayNum
// 功能描述 : 显示十进制数
// 参数 : Xuint8 X
// 参数 : Xuint8 Y
// 参数 : Xuint32 DecNum
// 返回值 : void
//
///////////////////////////////////////////////////////////////////////
void DisplayNum(Xuint8 X, Xuint8 Y,
Xuint32 DecNum)
{
Xint8
i;
Xuint8 display_buf[10];
Y&=0x1;
X&=0xF;
for
(i = 9; i >= 0; i--)
{
display_buf
= '0'+DecNum%10;
DecNum
/=10;
}
for
(i = 0; i < 9; i++)
{
if
(display_buf != '0')
break;
}
for
(; i < 10; i++)
{
DisplayOneChar(X,
Y, display_buf);
X++;
}
}
文章评论(0条评论)
登录后参与讨论