Professional Documents
Culture Documents
#include
#include
#include
#include
"xparameters.h"
"xbasic_types.h"
"xgpio.h"
"xstatus.h"
"xtmrctr.h"
LCD_DB4
LCD_DB5
LCD_DB6
LCD_DB7
LCD_RW
LCD_RS
LCD_E
LCD_TEST
0x01
0x02
0x04
0x08
0x10
0x20
0x40
0x80
// Global variables
XGpio GpioOutput;
XTmrCtr DelayTimer;
// Function prototypes
void delay_us(Xuint32 time);
void delay_ms(Xuint32 time);
void gpio_write(Xuint32 c);
Xuint32 gpio_read(void);
void lcd_clk(void);
void lcd_set_test(void);
void lcd_reset_test(void);
void lcd_set_rs(void);
void lcd_reset_rs(void);
void lcd_set_rw(void);
void lcd_reset_rw(void);
void lcd_write(Xuint32 c);
void lcd_clear(void);
void lcd_puts(const char * s);
void lcd_putch(Xuint32 c);
void lcd_goto(Xuint32 line,Xuint32 pos);
void lcd_init(void);
// Main function
int main (void)
{
Xuint32 status;
// Clear the screen
xil_printf("%c[2J",27);
// Initialize the Timer
status = XTmrCtr_Initialize(&DelayTimer,
XPAR_XPS_TIMER_0_DEVICE_ID);
if (status != XST_SUCCESS){
xil_printf("Timer failed to initialize\r\n");
return XST_FAILURE;
}
XTmrCtr_SetOptions(&DelayTimer, 1, XTC_DOWN_COUNT_OPTION);
delay_us(1);
// Assert clock signal
gpio_write(c | LCD_E);
delay_us(1);
// Deassert the clock signal
gpio_write(c & (~LCD_E));
delay_us(1);
}
// Assert the RS signal
void lcd_set_rs()
{
Xuint32 c;
// Get existing outputs
c = gpio_read();
// Assert RS
gpio_write(c | LCD_RS);
delay_us(1);
}
// Deassert the RS signal
void lcd_reset_rs()
{
Xuint32 c;
// Get existing outputs
c = gpio_read();
// Assert RS
gpio_write(c & (~LCD_RS));
delay_us(1);
}
// Assert the RW signal
void lcd_set_rw()
{
Xuint32 c;
// Get existing outputs
c = gpio_read();
// Assert RS
gpio_write(c | LCD_RW);
delay_us(1);
}
// Deassert the RW signal
void lcd_reset_rw()
{
Xuint32 c;
// Get existing outputs
c = gpio_read();
// Assert RS
gpio_write(c & (~LCD_RW));
delay_us(1);
}
// Write a byte to LCD (4 bit mode)
void lcd_write(Xuint32 c)
{
Xuint32 temp;
// Get existing outputs
temp = gpio_read();
temp = temp & 0xF0;