Crazy Harry
mit deinem Controllbyte für den Segment Test leuchten jetzt an Segment 1 a,c,e,g und punkt und an Segment 3 b,e,f und punkt
Irgenwie passt das alles Absolut nicht zu einander wenn ich alle Segmente mit voller Helligkeit und komplett anhaben möchte muss ich beim Controllbyte 0b01111111 angeben das habe ich aber auch nur mit probieren heraus gefunden wenn ich 0b01111011 angebe leuchtet Segment 1/3 voll und bei ob01110111 leuchten Segment 2/4 voll
- - - Aktualisiert - - -
Das ist der Code der die Daten über den I2C Bus sendet
Code:#define SDA T1 /* Set P3.5 = SDA */ #define SCL T0 /* Set P3.4 = SCL */ #define I2C_DELAY 0x0F /* For delay I2C bus */ void I2C_delay(void) { unsigned char i; for(i=0; i<I2C_DELAY; i++); } void I2C_clock(void) { I2C_delay(); SCL = 1; /* Start clock */ I2C_delay(); SCL = 0; /* Clear SCL */ } void I2C_start(void) { if(SCL) SCL = 0; /* Clear SCL */ SDA = 1; /* Set SDA */ SCL = 1; /* Set SCL */ I2C_delay(); SDA = 0; /* Clear SDA */ I2C_delay(); SCL = 0; /* Clear SCL */ } void I2C_stop(void) { if(SCL) SCL = 0; /* Clear SCL */ SDA = 0; /* Clear SDA */ I2C_delay(); SCL = 1; /* Set SCL */ I2C_delay(); SDA = 1; /* Set SDA */ } bit I2C_write(unsigned char dat) { bit data_bit; unsigned char i; for(i=0;i<8;i++) /* For loop 8 time(send data 1 byte) */ { data_bit = dat & 0x80; /* Filter MSB bit keep to data_bit */ SDA = data_bit; /* Send data_bit to SDA */ I2C_clock(); /* Call for send data to I2C bus */ dat = dat<<1; } SDA = 1; /* Set SDA */ I2C_delay(); SCL = 1; /* Set SCL */ I2C_delay(); data_bit = SDA; /* Check acknowledge */ SCL = 0; /* Clear SCL */ I2C_delay(); return data_bit; /* If send_bit = 0 I2C is valid */ } unsigned char I2C_read(void) { bit rd_bit; unsigned char i, dat; dat = 0x00; for(i=0;i<8;i++) /* For loop read data 1 byte */ { I2C_delay(); SCL = 1; /* Set SCL */ I2C_delay(); rd_bit = SDA; /* Keep for check acknowledge */ dat = dat<<1; dat = dat | rd_bit; /* Keep bit data in dat */ SCL = 0; /* Clear SCL */ } return dat; } void I2C_ack() { SDA = 0; /* Clear SDA */ I2C_delay(); I2C_clock(); /* Call for send data to I2C bus */ SDA = 1; /* Set SDA */ } void I2C_noack() { SDA = 1; /* Set SDA */ I2C_delay(); I2C_clock(); /* Call for send data to I2C bus */ SCL = 1; /* Set SCL */ }
Lesezeichen