void lcdCharDef(fd, index, data) int fd int index unsigned char * data void lcdPutchar(fd, data) int fd unsigned char data #### extern void lcdCharDef(const int fd, int index, unsigned char data [8]); extern void lcdPutchar(const int fd, unsigned char data); #### sub lcd_char_def { shift if @_ == 4; my ($fd, $index, $data) = @_; my $unsigned_char = pack "V0C*", @$data; lcdCharDef($fd, $index, $unsigned_char); } sub lcd_put_char { shift if @_ == 3; my ($fd, $data) = @_; lcdPutchar($fd, $data); } #### #include #include #include int main (int argc, char *argv[]){ unsigned char newChar [8] = { 0b11111, 0b10001, 0b10001, 0b10101, 0b11111, 0b10001, 0b10001, 0b11111, }; wiringPiSetupGpio(); static int fd; fd = lcdInit(2, 16, 4, 23, 16, 5, 6, 13, 19, 0, 0, 0, 0); lcdClear(fd); lcdPosition(fd, 0, 0); lcdCharDef(fd, 2, newChar); lcdPutchar(fd, 2); sleep(1); return 0; } #### use warnings; use strict; use WiringPi::API qw(:all); setup_gpio(); my %args = ( cols => 16, rows => 2, bits => 4, rs => 23, strb => 16, d0 => 5, d1 => 6, d2 => 13, d3 => 19, d4 => 0, d5 => 0, d6 => 0, d7 => 0, ); my $fd = lcd_init(%args); my $def = [ 0b11111, 0b10001, 0b10001, 0b10101, 0b11111, 0b10001, 0b10001, 0b11111, ]; lcd_clear($fd); lcd_position($fd, 0, 0); lcd_char_def($fd, 2, $def); lcd_put_char($fd, 2); sleep 1;