C coded library to use 1Wire LCD
This method allows you to control an lcd with a 74x595 shift register.
Quote:
Import program1WireLcd
C coded library to use 1Wire LCD
Diff: 1WireLcd/1WireLcd.cpp
- Revision:
- 0:fcd5b3044e79
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/1WireLcd/1WireLcd.cpp Sun Apr 10 08:38:02 2011 +0000 @@ -0,0 +1,118 @@ +#include "1WireLcd.h" +#include "mbed.h" + +DigitalOut wire(p21); + + + + +void lcd_putc(unsigned char c) +{ + unsigned char data; + data = 0x00; + data |=0x50; + one_wire(data); + data |= ((c & 0xF0)>>4); + one_wire(data); + data &= 0x1F; + one_wire(data); + wait_us(100); + + data = 0x00; + data |= 0x50; + one_wire(data); + data |= (((c & 0x0F) << 4) >> 4); + one_wire(data); + data &= 0x1F; + one_wire(data); + wait_us(100); + +} + +void lcd_command(unsigned char c) +{ + unsigned char data; + data = 0x00; + data |=0x40; + one_wire(data); + data |= ((c & 0xF0)>>4); + one_wire(data); + data &= 0x0F; + one_wire(data); + wait_us(100); + + data = 0x00; + data |= 0x40; + one_wire(data); + data |= (((c & 0x0F) << 4) >> 4); + one_wire(data); + data &= 0x0F; + one_wire(data); + wait_us(100); + +} + + +void lcd_init() +{ + one_wire(0); + wait_ms(15); + lcd_command(GoToFirst); + wait_ms(2); + lcd_command(TwoLine4Bit); + lcd_command(WriteRight); + lcd_command(HidePointer); + lcd_clear(); + + + lcd_command(FirstLine); +} + + +void lcd_clear(void) +{ + lcd_command(0x1); + wait_ms(2); +} + +void lcd_position(unsigned char x,unsigned char y) +{ + if(x==1) + lcd_command(0x80+((y-1)%20)); + else + lcd_command(0xC0+((y-1)%20)); +} + +void lcd_printf(const char * a) +{ + wait_us(100); + while(*a) + lcd_putc(*a++); +} + +void one_wire(unsigned char data) +{ + char i; + wire=1; + for(i=0;i < 8;i++) + { + if((data<<(i))&0x80) + { + wire=0; + wait_us(1); + wire=1; + } + else + { + wire=0; + wait_us(15); + wire=1; + wait_us(30); + } + } + wire=0; + wait_us(210); + wire=1; + wait_us(300); +} +