I got this LCD too i've used the code that you posted, i tweaked it a little bit and i got into a very strange issue:
If i send to the display 910.8 it does display 910.7, if i send 10.8 it displays correctly 10.8 it's pretty weird, 0.8 shows correctly, 1.8 shows 1.7, souds like a rounding problem but i can't sort it out at all.
This display is pretty cheap i really hope that some of the gurus will write a library for this, i've implemented 2 functions, one
clears the lcd the seconds displays a positive floating point form 0 to 999.9.
The LCD is hooked to pin 8 and pin 12.
It's my forth or fith Arduino code so plase forgive me is is badly coded and uncommented.
void lcd_7s04_positive_disp(float number=0)
{
byte nums[] = {0b11101110, 0b00100010, 0b01111100, 0b01110110, 0b10110010, 0b11010110, 0b11011110, 0b01100010, 0b11111110, 0b11110010, 0b00000000};
byte dec[] = {0b11101111, 0b00100011, 0b01111101, 0b01110111, 0b10110011, 0b11010111, 0b11011111, 0b01100011, 0b11111111, 0b11110011, 0b00000000};
byte decimals,ones,tens,hundreds,thousands=0;
if ((number > 999.9) || (number < 0))
// if number is over 999.9 display shows Err.
{
ea_lcd7s04_write_data_byte(~(0b11011100));
ea_lcd7s04_write_data_byte(~(0b00011000));
ea_lcd7s04_write_data_byte(~(0b00011001));
ea_lcd7s04_write_data_byte(~(0b00000000));
}
if ((number <= 999.9) && (number > 99.9))
{
hundreds = number/100;
number = number-hundreds*100;
tens = number/10;
number = number-tens*10;
ones = number/1;
number = number-ones*1;
decimals = number*10;
ea_lcd7s04_write_data_byte(~(nums[hundreds]));
ea_lcd7s04_write_data_byte(~(nums[tens]));
ea_lcd7s04_write_data_byte(~(dec[ones]));
ea_lcd7s04_write_data_byte(~(nums[decimals]));
}
if ((number <= 99.9) && (number > 9.9))
{
tens = number/10;
number = number-tens*10;
ones = number/1;
number = number-ones*1;
// decimals = number*10-ones*10;
decimals = number*10;
ea_lcd7s04_write_data_byte(~(0b00000000));
ea_lcd7s04_write_data_byte(~(nums[tens]));
ea_lcd7s04_write_data_byte(~(dec[ones]));
ea_lcd7s04_write_data_byte(~(nums[decimals]));
}
if ((number <= 9.9) && (number > 0))
{
ones = number/1;
number = number-ones*1;
decimals = number*10;
ea_lcd7s04_write_data_byte(~(0b00000000));
ea_lcd7s04_write_data_byte(~(0b00000000));
ea_lcd7s04_write_data_byte(~(dec[ones]));
ea_lcd7s04_write_data_byte(~(nums[decimals]));
}
}
void setup()
{
pinMode(8, OUTPUT); //data
pinMode(12, OUTPUT); // clk
digitalWrite(8, LOW);
digitalWrite(12, LOW);
Serial.begin(9600);
}
void loop()
{
lcd_7s04_clr();
lcd_7s04_positive_disp(1.8);
delay(500);
}
void lcd_7s04_clr()
{
ea_lcd7s04_write_data_byte(~(0b00000000));
ea_lcd7s04_write_data_byte(~(0b00000000));
ea_lcd7s04_write_data_byte(~(0b00000000));
ea_lcd7s04_write_data_byte(~(0b00000000));
}
void ea_lcd7s04_write_data_byte(byte data)
{
for( int count = 0 ; count < 8 ; count++ )
{
digitalWrite(8, data & 0x80);
data = data << 1;
digitalWrite(12, LOW); // clk
delayMicroseconds(100);
digitalWrite(12, HIGH);
}
}