C coded library to use 1Wire LCD

Dependencies:   mbed

This method allows you to control an lcd with a 74x595 shift register.

/media/uploads/ahmetunal/shift1.gif /media/uploads/ahmetunal/shift1b.gif /media/uploads/ahmetunal/shift1c.gif /media/uploads/ahmetunal/_scaled_one_wire_lcd.bmp.jpg

Import program1WireLcd

C coded library to use 1Wire LCD

1WireLcd/1WireLcd.cpp

Committer:
ahmetunal
Date:
2011-04-10
Revision:
0:fcd5b3044e79

File content as of revision 0:fcd5b3044e79:

#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);
}