//===================== ОСНОВНАЯ ПРОГРАММА ==============================
int main(void)
{
DDRB=0b00000000; PORTB=0b00000000;
DDRC=0b00000000; PORTC=0b00000000;
DDRD=0b11110011; PORTD=0b00000000;
//инициализация I2C, скорость - 400 bps
twi_init(400);
lcd_init(); // инициализация ЖКИ (4 бит, 16x2)
lcd_com(0x0C); // делаем курсор невидимым
//i2c_init();
_delay_ms(1);
lcd_string(0x80, " GP2Y0E03 "); // Выводим строку на LCD
_delay_ms(950); // выдержка для чтения
lcd_string(0x80, " "); // стираем
_delay_ms(100);
//----------- ф-ция возвращает значение дистанции ----------------------
int8_t _ReadTemp(void)
{
int8_t MSByte;
uint8_t LSByte;
twi_start();
twi_write(R_WRITE);
twi_write(0x00); //pointer byte (0x00 - Temp)
twi_start();
twi_write(R_READ);
MSByte = twi_read(1); //ACK
LSByte = twi_read(0); //NACK
twi_stop();
if((LSByte>>5)>3) MSByte++; //округление до целых
return MSByte; //Возврат значения дистанции
}
while(1)
{
byte1 = R_ReadTemp(); // читаем из памяти согласно алгоритму для данного типа
_delay_ms(200);
byte2 = R_ReadTemp(); // читаем из памяти согласно алгоритму для данного типа
_delay_ms(200);
byte = byte1; //чтение младших 8 битов результата
byte+=((int) byte2 << 8); // плюс старшие биты
_delay_ms(250); //
lcd_com(0xC0);
lcd_dat(byte/100000+0x30);
lcd_dat((byte/100000)%10+0x30);
lcd_dat((byte/1000)%10+0x30);
lcd_dat((byte/100)%10+0x30);
lcd_dat((byte/10)%10+0x30);
lcd_dat(byte%10+0x30);
}
}
//Как-то так...