my dear friend @Rintin
Please take a look on this "disassembled" code of the
sendCommand(0b000000110); // LCD on
command line.
Please correct it where you see it's wrong.
This is my chance to learn a little bit more about shifting bits !!!
I never had the chance or the project for it.
Thank you.
//most basic segment driver
//HT1621B pin = Arduino pin
//dt=2, wr=3,rd=4,cs=5, ,irq=6
int _pin_data=2;
int _pin_wr=3;
int _pin_cs=5;
void BitByBit()
{
//config()
pinMode(_pin_cs, OUTPUT);
pinMode(_pin_wr, OUTPUT);
pinMode(_pin_data, OUTPUT);
digitalWrite(_pin_cs, HIGH);
digitalWrite(_pin_wr, HIGH);
digitalWrite(_pin_data, HIGH);
//sendCommand(0b000000110); // LCD on
digitalWrite(_pin_cs, LOW);
//shiftOutBits(3, 0b100);
//val = (bit(x - 1) & value) != 0;
//1
digitalWrite(_pin_wr, LOW);
digitalWrite(_pin_data, 0b010);
digitalWrite(_pin_wr, HIGH);
//2
digitalWrite(_pin_wr, LOW);
digitalWrite(_pin_data, 0b001);
digitalWrite(_pin_wr, HIGH);
//3
digitalWrite(_pin_wr, LOW);
digitalWrite(_pin_data, 0b000);
digitalWrite(_pin_wr, HIGH);
//shiftOutBits(9, cmd);
//1
digitalWrite(_pin_wr, LOW);
digitalWrite(_pin_data, 0b000000011);
digitalWrite(_pin_wr, HIGH);
//2
digitalWrite(_pin_wr, LOW);
digitalWrite(_pin_data, 0b000000001);
digitalWrite(_pin_wr, HIGH);
//3
digitalWrite(_pin_wr, LOW);
digitalWrite(_pin_data, 0b000000000);
digitalWrite(_pin_wr, HIGH);
//4
digitalWrite(_pin_wr, LOW);
digitalWrite(_pin_data, 0b000000000);
digitalWrite(_pin_wr, HIGH);
//5
digitalWrite(_pin_wr, LOW);
digitalWrite(_pin_data, 0b000000000);
digitalWrite(_pin_wr, HIGH);
//6
digitalWrite(_pin_wr, LOW);
digitalWrite(_pin_data, 0b000000000);
digitalWrite(_pin_wr, HIGH);
//7
digitalWrite(_pin_wr, LOW);
digitalWrite(_pin_data, 0b000000000);
digitalWrite(_pin_wr, HIGH);
//8
digitalWrite(_pin_wr, LOW);
digitalWrite(_pin_data, 0b000000000);
digitalWrite(_pin_wr, HIGH);
//9
digitalWrite(_pin_wr, LOW);
digitalWrite(_pin_data, 0b000000000);
digitalWrite(_pin_wr, HIGH);
digitalWrite(_pin_cs, HIGH);
//END of sendCommand()
}
void Clear()
{
for(uint8_t x=0; x<6; x++) //Im using only (0-5) 6 addr for this 3digit LCD
sendData(adr[x],seg[0]); //set to 0 each addr clearing the LCD segments
}
void setup()
{
BitByBit();
Clear();
//ADR DATA
sendData(0, 0b0011); //-,c,b,a
sendData(1, 0b0011); //d,e,g,f
}
void loop()
{
}
I believe it works !
I just made a test with this code:
LCDBitB.ino (4.5 KB)