#include "xparameters.h"
#include "stdio.h"
#include "xutil.h"
#include "xbasic_types.h"
#include "xstatus.h"
#include "xgpio.h"
#define CHANNEL 1
XGpio Lcd_Data,Lcd_Ctr;
Xuint8 table[]="timthorpe";
unsigned char number[]="0123456789";
/*******************************************************************/
/*延时time us*/
void delay(Xuint16 time)
{
Xuint16 i,j;
for(i=0;i for(j=0;j<26;j++); } void delay_ms(Xuint16 time) { Xuint16 i,j; for(i=0;i for(j=0;j<3785;j++); } /*短延时time */ void delay_s(time) { Xuint8 i; for(i=0;i } /*******************************************************************/ /*液?2864进行操作的一系列子函数 没什么可说的 按照时序图写褪橇? /*******************************************************************/ Xint8 lcd_busy() { Xuint16 nTimeOut=0; XGpio_DiscreteClear(&Lcd_Ctr,CHANNEL,0x1); XGpio_DiscreteSet(&Lcd_Ctr,CHANNEL,0x2); XGpio_DiscreteSet(&Lcd_Ctr,CHANNEL,0x4); delay(3); XGpio_SetDataDirection(&Lcd_Data,CHANNEL,0xffffffff); while((XGpio_DiscreteRead(&Lcd_Data,CHANNEL)&0x80)); XGpio_DiscreteClear(&Lcd_Ctr,CHANNEL,0x4); delay(1); // xil_printf("the value of result is %x\r\n",result); } /*******************************************************************/ /* */ /*写指令数据到LCD */ /*RS=L,RW=L,E=高脉冲,D0-D7=指令码。 */ /*******************************************************************/ void lcd_wcmd(Xuint8 cmd) { lcd_busy(); // delay_ms(20); //delay(1); XGpio_DiscreteClear(&Lcd_Ctr,CHANNEL,0x1); //delay(1); XGpio_DiscreteClear(&Lcd_Ctr,CHANNEL,0x2); //delay(1); XGpio_DiscreteClear(&Lcd_Ctr,CHANNEL,0x4); //delay(1); // XGpio_SetDataDirection(&Lcd_Data,CHANNEL,0x0); XGpio_DiscreteWrite(&Lcd_Data,CHANNEL,cmd); delay_ms(5); XGpio_DiscreteSet(&Lcd_Ctr,CHANNEL,0x4); delay_ms(5); XGpio_DiscreteClear(&Lcd_Ctr,CHANNEL,0x4); delay(1); XGpio_DiscreteSet(&Lcd_Ctr,CHANNEL,0x2); // delay(1); XGpio_DiscreteClear(&Lcd_Ctr,CHANNEL,0x1); //delay(1); xil_printf("command %x\r\n",cmd); } /*******************************************************************/ /* */ /*写显示数据到LCD */ /*RS=H,RW=L,E=高脉冲,D0-D7=数据。 */ /* */ /*******************************************************************/ void lcd_wdat(Xuint8 dat) { lcd_busy(); /* delay_ms(20); //delay(1); XGpio_DiscreteSet(&Lcd_Ctr,CHANNEL,0x1); XGpio_DiscreteClear(&Lcd_Ctr,CHANNEL,0x2); XGpio_DiscreteClear(&Lcd_Ctr,CHANNEL,0x4); //delay(100); //delay(1); XGpio_DiscreteWrite(&Lcd_Data,CHANNEL,dat); delay(5); XGpio_DiscreteSet(&Lcd_Ctr,CHANNEL,0x4); delay(5); // XGpio_SetDataDirection(&Lcd_Data,CHANNEL,0x0); XGpio_DiscreteClear(&Lcd_Ctr,CHANNEL,0x4); // delay(1); //XGpio_DiscreteSet(&Lcd_Ctr,CHANNEL,0x2); // delay(1); //XGpio_DiscreteClear(&Lcd_Ctr,CHANNEL,0x1); // delay(1); xil_printf("data %x\r\n",dat); delay_ms(1);*/ // delay_ms(20); //delay(1); XGpio_DiscreteSet(&Lcd_Ctr,CHANNEL,0x1); //delay(1); XGpio_DiscreteClear(&Lcd_Ctr,CHANNEL,0x2); //delay(1); XGpio_DiscreteClear(&Lcd_Ctr,CHANNEL,0x4); //delay(1); // XGpio_SetDataDirection(&Lcd_Data,CHANNEL,0x0); XGpio_DiscreteWrite(&Lcd_Data,CHANNEL,dat); delay_ms(5); XGpio_DiscreteSet(&Lcd_Ctr,CHANNEL,0x4); delay_ms(5); XGpio_DiscreteClear(&Lcd_Ctr,CHANNEL,0x4); delay(1); XGpio_DiscreteSet(&Lcd_Ctr,CHANNEL,0x2); // delay(1); XGpio_DiscreteClear(&Lcd_Ctr,CHANNEL,0x1); //delay(1); xil_printf("data %x\r\n",dat); } /****************************************************************** 设置在液晶中显疚? ********************************************************************/ void lcd_pos(Xuint8 x,Xuint8 y) { Xuint8 pos; if (x==0) {x=0x80;} else if (x==1) {x=0x90;} else if (x==2) {x=0x88;} else if (x==3) {x=0x98;} pos = x+y; lcd_wcmd(pos); //显示地址 } /******************************************************************* 在液晶中输出一串字? ******************************************************************** */ void print_string(Xuint8 x,Xuint8 y,Xuint8 * str) { Xuint8 lcd_temp; lcd_pos(x,y); lcd_temp=*str; while(lcd_temp != '\0') { lcd_wdat(lcd_temp); lcd_temp=*(++str); } } /*******************************************************************/ /* */ /* LCD初始化设定 */ /* */ /*******************************************************************/ void lcd_init() { delay_ms(50); lcd_wcmd(0x30); //基本指令 delay(1500); lcd_wcmd(0x30); //基本指令操作 delay(400); lcd_wcmd(0x0F); //显示开,关? delay(1500); lcd_wcmd(0x01); //清除LCD的允灸谌? delay_ms(15); xil_printf("lcd initialization done!\n\r"); } //********************************************上述为对液晶的操作 int main(void){ Xuint8 result; xil_printf("now begin\r\n"); XGpio_Initialize(&Lcd_Data,XPAR_LCD_DATA_DEVICE_ID); XGpio_SetDataDirection(&Lcd_Data,CHANNEL,0x0); //XGpio_SetDataDirection(&Lcd_Data,CHANNEL,0x0); XGpio_Initialize(&Lcd_Ctr,XPAR_LCD_CTR_DEVICE_ID); XGpio_SetDataDirection(&Lcd_Ctr,CHANNEL,0x0); lcd_init(); lcd_pos(1,3); lcd_wdat(0x35); /*delay_ms(10000); lcd_wcmd(0x87); lcd_wdat(0x2F); delay_ms(10000); print_string(2,0,number); delay_ms(10000); lcd_wcmd(0x01);*/ while(1); return 0; }
for(j=0;j<26;j++);
}
void delay_ms(Xuint16 time)
for(i=0;i for(j=0;j<3785;j++); } /*短延时time */ void delay_s(time) { Xuint8 i; for(i=0;i } /*******************************************************************/ /*液?2864进行操作的一系列子函数 没什么可说的 按照时序图写褪橇? /*******************************************************************/ Xint8 lcd_busy() { Xuint16 nTimeOut=0; XGpio_DiscreteClear(&Lcd_Ctr,CHANNEL,0x1); XGpio_DiscreteSet(&Lcd_Ctr,CHANNEL,0x2); XGpio_DiscreteSet(&Lcd_Ctr,CHANNEL,0x4); delay(3); XGpio_SetDataDirection(&Lcd_Data,CHANNEL,0xffffffff); while((XGpio_DiscreteRead(&Lcd_Data,CHANNEL)&0x80)); XGpio_DiscreteClear(&Lcd_Ctr,CHANNEL,0x4); delay(1); // xil_printf("the value of result is %x\r\n",result); } /*******************************************************************/ /* */ /*写指令数据到LCD */ /*RS=L,RW=L,E=高脉冲,D0-D7=指令码。 */ /*******************************************************************/ void lcd_wcmd(Xuint8 cmd) { lcd_busy(); // delay_ms(20); //delay(1); XGpio_DiscreteClear(&Lcd_Ctr,CHANNEL,0x1); //delay(1); XGpio_DiscreteClear(&Lcd_Ctr,CHANNEL,0x2); //delay(1); XGpio_DiscreteClear(&Lcd_Ctr,CHANNEL,0x4); //delay(1); // XGpio_SetDataDirection(&Lcd_Data,CHANNEL,0x0); XGpio_DiscreteWrite(&Lcd_Data,CHANNEL,cmd); delay_ms(5); XGpio_DiscreteSet(&Lcd_Ctr,CHANNEL,0x4); delay_ms(5); XGpio_DiscreteClear(&Lcd_Ctr,CHANNEL,0x4); delay(1); XGpio_DiscreteSet(&Lcd_Ctr,CHANNEL,0x2); // delay(1); XGpio_DiscreteClear(&Lcd_Ctr,CHANNEL,0x1); //delay(1); xil_printf("command %x\r\n",cmd); } /*******************************************************************/ /* */ /*写显示数据到LCD */ /*RS=H,RW=L,E=高脉冲,D0-D7=数据。 */ /* */ /*******************************************************************/ void lcd_wdat(Xuint8 dat) { lcd_busy(); /* delay_ms(20); //delay(1); XGpio_DiscreteSet(&Lcd_Ctr,CHANNEL,0x1); XGpio_DiscreteClear(&Lcd_Ctr,CHANNEL,0x2); XGpio_DiscreteClear(&Lcd_Ctr,CHANNEL,0x4); //delay(100); //delay(1); XGpio_DiscreteWrite(&Lcd_Data,CHANNEL,dat); delay(5); XGpio_DiscreteSet(&Lcd_Ctr,CHANNEL,0x4); delay(5); // XGpio_SetDataDirection(&Lcd_Data,CHANNEL,0x0); XGpio_DiscreteClear(&Lcd_Ctr,CHANNEL,0x4); // delay(1); //XGpio_DiscreteSet(&Lcd_Ctr,CHANNEL,0x2); // delay(1); //XGpio_DiscreteClear(&Lcd_Ctr,CHANNEL,0x1); // delay(1); xil_printf("data %x\r\n",dat); delay_ms(1);*/ // delay_ms(20); //delay(1); XGpio_DiscreteSet(&Lcd_Ctr,CHANNEL,0x1); //delay(1); XGpio_DiscreteClear(&Lcd_Ctr,CHANNEL,0x2); //delay(1); XGpio_DiscreteClear(&Lcd_Ctr,CHANNEL,0x4); //delay(1); // XGpio_SetDataDirection(&Lcd_Data,CHANNEL,0x0); XGpio_DiscreteWrite(&Lcd_Data,CHANNEL,dat); delay_ms(5); XGpio_DiscreteSet(&Lcd_Ctr,CHANNEL,0x4); delay_ms(5); XGpio_DiscreteClear(&Lcd_Ctr,CHANNEL,0x4); delay(1); XGpio_DiscreteSet(&Lcd_Ctr,CHANNEL,0x2); // delay(1); XGpio_DiscreteClear(&Lcd_Ctr,CHANNEL,0x1); //delay(1); xil_printf("data %x\r\n",dat); } /****************************************************************** 设置在液晶中显疚? ********************************************************************/ void lcd_pos(Xuint8 x,Xuint8 y) { Xuint8 pos; if (x==0) {x=0x80;} else if (x==1) {x=0x90;} else if (x==2) {x=0x88;} else if (x==3) {x=0x98;} pos = x+y; lcd_wcmd(pos); //显示地址 } /******************************************************************* 在液晶中输出一串字? ******************************************************************** */ void print_string(Xuint8 x,Xuint8 y,Xuint8 * str) { Xuint8 lcd_temp; lcd_pos(x,y); lcd_temp=*str; while(lcd_temp != '\0') { lcd_wdat(lcd_temp); lcd_temp=*(++str); } } /*******************************************************************/ /* */ /* LCD初始化设定 */ /* */ /*******************************************************************/ void lcd_init() { delay_ms(50); lcd_wcmd(0x30); //基本指令 delay(1500); lcd_wcmd(0x30); //基本指令操作 delay(400); lcd_wcmd(0x0F); //显示开,关? delay(1500); lcd_wcmd(0x01); //清除LCD的允灸谌? delay_ms(15); xil_printf("lcd initialization done!\n\r"); } //********************************************上述为对液晶的操作 int main(void){ Xuint8 result; xil_printf("now begin\r\n"); XGpio_Initialize(&Lcd_Data,XPAR_LCD_DATA_DEVICE_ID); XGpio_SetDataDirection(&Lcd_Data,CHANNEL,0x0); //XGpio_SetDataDirection(&Lcd_Data,CHANNEL,0x0); XGpio_Initialize(&Lcd_Ctr,XPAR_LCD_CTR_DEVICE_ID); XGpio_SetDataDirection(&Lcd_Ctr,CHANNEL,0x0); lcd_init(); lcd_pos(1,3); lcd_wdat(0x35); /*delay_ms(10000); lcd_wcmd(0x87); lcd_wdat(0x2F); delay_ms(10000); print_string(2,0,number); delay_ms(10000); lcd_wcmd(0x01);*/ while(1); return 0; }
for(j=0;j<3785;j++);
/*短延时time */
void delay_s(time)
{ Xuint8 i;
for(i=0;i } /*******************************************************************/ /*液?2864进行操作的一系列子函数 没什么可说的 按照时序图写褪橇? /*******************************************************************/ Xint8 lcd_busy() { Xuint16 nTimeOut=0; XGpio_DiscreteClear(&Lcd_Ctr,CHANNEL,0x1); XGpio_DiscreteSet(&Lcd_Ctr,CHANNEL,0x2); XGpio_DiscreteSet(&Lcd_Ctr,CHANNEL,0x4); delay(3); XGpio_SetDataDirection(&Lcd_Data,CHANNEL,0xffffffff); while((XGpio_DiscreteRead(&Lcd_Data,CHANNEL)&0x80)); XGpio_DiscreteClear(&Lcd_Ctr,CHANNEL,0x4); delay(1); // xil_printf("the value of result is %x\r\n",result); } /*******************************************************************/ /* */ /*写指令数据到LCD */ /*RS=L,RW=L,E=高脉冲,D0-D7=指令码。 */ /*******************************************************************/ void lcd_wcmd(Xuint8 cmd) { lcd_busy(); // delay_ms(20); //delay(1); XGpio_DiscreteClear(&Lcd_Ctr,CHANNEL,0x1); //delay(1); XGpio_DiscreteClear(&Lcd_Ctr,CHANNEL,0x2); //delay(1); XGpio_DiscreteClear(&Lcd_Ctr,CHANNEL,0x4); //delay(1); // XGpio_SetDataDirection(&Lcd_Data,CHANNEL,0x0); XGpio_DiscreteWrite(&Lcd_Data,CHANNEL,cmd); delay_ms(5); XGpio_DiscreteSet(&Lcd_Ctr,CHANNEL,0x4); delay_ms(5); XGpio_DiscreteClear(&Lcd_Ctr,CHANNEL,0x4); delay(1); XGpio_DiscreteSet(&Lcd_Ctr,CHANNEL,0x2); // delay(1); XGpio_DiscreteClear(&Lcd_Ctr,CHANNEL,0x1); //delay(1); xil_printf("command %x\r\n",cmd); } /*******************************************************************/ /* */ /*写显示数据到LCD */ /*RS=H,RW=L,E=高脉冲,D0-D7=数据。 */ /* */ /*******************************************************************/ void lcd_wdat(Xuint8 dat) { lcd_busy(); /* delay_ms(20); //delay(1); XGpio_DiscreteSet(&Lcd_Ctr,CHANNEL,0x1); XGpio_DiscreteClear(&Lcd_Ctr,CHANNEL,0x2); XGpio_DiscreteClear(&Lcd_Ctr,CHANNEL,0x4); //delay(100); //delay(1); XGpio_DiscreteWrite(&Lcd_Data,CHANNEL,dat); delay(5); XGpio_DiscreteSet(&Lcd_Ctr,CHANNEL,0x4); delay(5); // XGpio_SetDataDirection(&Lcd_Data,CHANNEL,0x0); XGpio_DiscreteClear(&Lcd_Ctr,CHANNEL,0x4); // delay(1); //XGpio_DiscreteSet(&Lcd_Ctr,CHANNEL,0x2); // delay(1); //XGpio_DiscreteClear(&Lcd_Ctr,CHANNEL,0x1); // delay(1); xil_printf("data %x\r\n",dat); delay_ms(1);*/ // delay_ms(20); //delay(1); XGpio_DiscreteSet(&Lcd_Ctr,CHANNEL,0x1); //delay(1); XGpio_DiscreteClear(&Lcd_Ctr,CHANNEL,0x2); //delay(1); XGpio_DiscreteClear(&Lcd_Ctr,CHANNEL,0x4); //delay(1); // XGpio_SetDataDirection(&Lcd_Data,CHANNEL,0x0); XGpio_DiscreteWrite(&Lcd_Data,CHANNEL,dat); delay_ms(5); XGpio_DiscreteSet(&Lcd_Ctr,CHANNEL,0x4); delay_ms(5); XGpio_DiscreteClear(&Lcd_Ctr,CHANNEL,0x4); delay(1); XGpio_DiscreteSet(&Lcd_Ctr,CHANNEL,0x2); // delay(1); XGpio_DiscreteClear(&Lcd_Ctr,CHANNEL,0x1); //delay(1); xil_printf("data %x\r\n",dat); } /****************************************************************** 设置在液晶中显疚? ********************************************************************/ void lcd_pos(Xuint8 x,Xuint8 y) { Xuint8 pos; if (x==0) {x=0x80;} else if (x==1) {x=0x90;} else if (x==2) {x=0x88;} else if (x==3) {x=0x98;} pos = x+y; lcd_wcmd(pos); //显示地址 } /******************************************************************* 在液晶中输出一串字? ******************************************************************** */ void print_string(Xuint8 x,Xuint8 y,Xuint8 * str) { Xuint8 lcd_temp; lcd_pos(x,y); lcd_temp=*str; while(lcd_temp != '\0') { lcd_wdat(lcd_temp); lcd_temp=*(++str); } } /*******************************************************************/ /* */ /* LCD初始化设定 */ /* */ /*******************************************************************/ void lcd_init() { delay_ms(50); lcd_wcmd(0x30); //基本指令 delay(1500); lcd_wcmd(0x30); //基本指令操作 delay(400); lcd_wcmd(0x0F); //显示开,关? delay(1500); lcd_wcmd(0x01); //清除LCD的允灸谌? delay_ms(15); xil_printf("lcd initialization done!\n\r"); } //********************************************上述为对液晶的操作 int main(void){ Xuint8 result; xil_printf("now begin\r\n"); XGpio_Initialize(&Lcd_Data,XPAR_LCD_DATA_DEVICE_ID); XGpio_SetDataDirection(&Lcd_Data,CHANNEL,0x0); //XGpio_SetDataDirection(&Lcd_Data,CHANNEL,0x0); XGpio_Initialize(&Lcd_Ctr,XPAR_LCD_CTR_DEVICE_ID); XGpio_SetDataDirection(&Lcd_Ctr,CHANNEL,0x0); lcd_init(); lcd_pos(1,3); lcd_wdat(0x35); /*delay_ms(10000); lcd_wcmd(0x87); lcd_wdat(0x2F); delay_ms(10000); print_string(2,0,number); delay_ms(10000); lcd_wcmd(0x01);*/ while(1); return 0; }
/*液?2864进行操作的一系列子函数 没什么可说的 按照时序图写褪橇?
Xint8 lcd_busy()
Xuint16 nTimeOut=0;
XGpio_DiscreteClear(&Lcd_Ctr,CHANNEL,0x1);
XGpio_DiscreteSet(&Lcd_Ctr,CHANNEL,0x2);
XGpio_DiscreteSet(&Lcd_Ctr,CHANNEL,0x4);
delay(3);
XGpio_SetDataDirection(&Lcd_Data,CHANNEL,0xffffffff);
while((XGpio_DiscreteRead(&Lcd_Data,CHANNEL)&0x80));
XGpio_DiscreteClear(&Lcd_Ctr,CHANNEL,0x4);
delay(1);
// xil_printf("the value of result is %x\r\n",result);
/* */
/*写指令数据到LCD */
/*RS=L,RW=L,E=高脉冲,D0-D7=指令码。 */
void lcd_wcmd(Xuint8 cmd)
lcd_busy();
// delay_ms(20);
//delay(1);
XGpio_DiscreteClear(&Lcd_Ctr,CHANNEL,0x2);
// XGpio_SetDataDirection(&Lcd_Data,CHANNEL,0x0);
XGpio_DiscreteWrite(&Lcd_Data,CHANNEL,cmd);
delay_ms(5);
// delay(1);
xil_printf("command %x\r\n",cmd);
/*写显示数据到LCD */
/*RS=H,RW=L,E=高脉冲,D0-D7=数据。 */
void lcd_wdat(Xuint8 dat)
/* delay_ms(20);
XGpio_DiscreteSet(&Lcd_Ctr,CHANNEL,0x1);
//delay(100);
XGpio_DiscreteWrite(&Lcd_Data,CHANNEL,dat);
delay(5);
//XGpio_DiscreteSet(&Lcd_Ctr,CHANNEL,0x2);
//XGpio_DiscreteClear(&Lcd_Ctr,CHANNEL,0x1);
xil_printf("data %x\r\n",dat);
delay_ms(1);*/
/******************************************************************
设置在液晶中显疚?
********************************************************************/
void lcd_pos(Xuint8 x,Xuint8 y)
Xuint8 pos;
if (x==0)
{x=0x80;}
else if (x==1)
{x=0x90;}
else if (x==2)
{x=0x88;}
else if (x==3)
{x=0x98;}
pos = x+y;
lcd_wcmd(pos); //显示地址
/*******************************************************************
在液晶中输出一串字?
********************************************************************
*/
void print_string(Xuint8 x,Xuint8 y,Xuint8 * str)
Xuint8 lcd_temp;
lcd_pos(x,y);
lcd_temp=*str;
while(lcd_temp != '\0')
lcd_wdat(lcd_temp);
lcd_temp=*(++str);
/* LCD初始化设定 */
void lcd_init()
{ delay_ms(50);
lcd_wcmd(0x30); //基本指令
delay(1500);
lcd_wcmd(0x30); //基本指令操作
delay(400);
lcd_wcmd(0x0F); //显示开,关?
lcd_wcmd(0x01); //清除LCD的允灸谌?
delay_ms(15);
xil_printf("lcd initialization done!\n\r");
//********************************************上述为对液晶的操作
int main(void){
Xuint8 result;
xil_printf("now begin\r\n");
XGpio_Initialize(&Lcd_Data,XPAR_LCD_DATA_DEVICE_ID);
XGpio_SetDataDirection(&Lcd_Data,CHANNEL,0x0);
//XGpio_SetDataDirection(&Lcd_Data,CHANNEL,0x0);
XGpio_Initialize(&Lcd_Ctr,XPAR_LCD_CTR_DEVICE_ID);
XGpio_SetDataDirection(&Lcd_Ctr,CHANNEL,0x0);
lcd_init();
lcd_pos(1,3);
lcd_wdat(0x35);
/*delay_ms(10000);
lcd_wcmd(0x87);
lcd_wdat(0x2F);
delay_ms(10000);
print_string(2,0,number);
lcd_wcmd(0x01);*/
while(1);
return 0;
Copyright © 2005-2020 kaiyun官方注册版权所有京ICP备10017138号