HD44780 液晶显示板的c语言驱动程序 #define _LCD44780_C #include #include "main.h" #include "lcd44780.h" #include "1306spi.h" #include "delays.h" #include "serial.h" #include "25cxxspi.h" #include "e2data.h" void lcd_send_byte(unsigned char address, unsigned char chr) { unsigned char rVal; LCDPORTDIR = LCD_READ; // set data/con port directions lcd_select_reg(CMD_REG); ); // select command register lcd_select_dir(READ_DIR); ); // set lcd to read do { // wait until lcd is ready lcd_set_clk_hi(); (); // toggle data clock rVal = lcd_get_data(); (); // read high nibble from data bus lcd_set_clk_lo(); delay_500ns(); lcd_toggle_clk(); (); // toggle data clock } while(!!(rVal & (HINIBBLE(LCD_BUSY)))); LCDPORTDIR = LCD_WRITE; // set data/con port directions lcd_select_reg(address); ); // select desired register lcd_select_dir(WRITE_DIR); ); // set to write lcd_set_data(HINIBBLE(chr)); )); // send the high nibble lcd_toggle_clk(); (); // toggle data clock lcd_set_data(chr); ); // send the low nibble lcd_toggle_clk(); (); // toggle data clock } // Procedure to initialise the lcd for 4 bit operation. // This procedure implements the "Initialisation by instruction" as described for // Philips PCF2116X void init_lcd() { unsigned char n; LCDPORTDIR = LCD_WRITE; // set data/con & enable port dir’ns lcd_set_clk_lo(); (); // set data clock low (enable pin) lcd_select_reg(CMD_REG); ); // select command register lcd_select_dir(WRITE_DIR); ); // set to write delay_ms(15); ); // wait > 15ms Vdd rises above Vpor lcd_set_data(HINIBBLE(LCD_FNSET | LCD_8BIT)); )); // put nibble on data bus for (n = 0; n < 3; ++n) { ) // set mode to 8 bit data 3 times lcd_toggle_clk(); (); // toggle data clock delay_ms(5); ); // 5ms delay } #ifdef LC...