// TinyC implementation for a standard HD44780 2x16 text LCD module #define ep 8 // i/o pin for Enable control #define rw 9 // i/o pin for Read/Write control #define rs 10 // i/o pin for Register Select control lcd_bz() { int result; pinlow(rs); pinhigh(rw); pinhigh(ep); result = pinstate(7); pinlow(ep); pinhigh(rs); pinhigh(rw); return(result); } lcd_wcmd(cmd) { while(lcd_bz()); // wait pinlow(rs); pinlow(rw); pinlow(ep); writeb(0, cmd, 0); pinhigh(ep); pinlow(ep); pinhigh(rs); pinhigh(rw); } lcd_pos(pos) { lcd_wcmd(pos | 0x80); } lcd_wdat(dat) { while(lcd_bz()); // wait pinhigh(rs); pinlow(rw); pinlow(ep); writeb(0, dat, 0); pinhigh(ep); pinlow(ep); pinhigh(rs); pinhigh(rw); } lcd_init() { lcd_wcmd(0x38); // set function, 8bits mode, 2 display lines, 5x7 dot matrix lcd_wcmd(0x0C); // display on, cursor off lcd_wcmd(0x06); // auto increment, right-shift lcd_wcmd(0x01); // clear display } main() { int i; lcd_init(); loop for(i=0; i < 11; i++) { lcd_wcmd(0x01); // clear display lcd_pos(i); // go to position 'i' on 1st line lcd_wdat('H'); lcd_wdat('e'); lcd_wdat('l'); lcd_wdat('l'); lcd_wdat('o'); lcd_pos(0x40+i); // go to position 'i' on 2nd line lcd_wdat('M'); lcd_wdat('a'); lcd_wdat('n'); delay(200); } }