原创 MicroBlaze 控制LCD1602

2010-8-13 19:08 2134 6 6 分类: FPGA/CPLD

 


 


/********************************************************************


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


       }


}    


 


 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
6
关闭 站长推荐上一条 /3 下一条