int main() { lcd_init(); stdout = lcd_file_out(); i2c_init(); // set max range cm i2c_transmit(ALAMAT_SENSOR, 2, MAX_RANGE_REGISTER); printf("SRF08"); while(1) { int16_t last_value; // probe dengan mode centimeter i2c_transmit(ALAMAT_SENSOR, 0, 81); // set delay 65ms, recomended dari // http://www.robot-electronics.co.uk/htm/srf08tech.shtml _delay_ms(65); // baca jarak, dan simpan ke last_value last_value = (i2c_read(ALAMAT_SENSOR, 2) << 8) | (i2c_read(ALAMAT_SENSOR, 3) << 0); lcd_set_ddram_addr(0x40); printf("%8d", last_value); _delay_ms(500); } }
/** * Переход в заданную позицию дисплея * * Функция для перевода курсора в заданные координаты. * Если они некорректны, то ничего не происходит. */ void lcd_movcur(const unsigned char x, const unsigned char y) { if ((x > 15) || (y > 1)) { return; } lcd_set_ddram_addr(x + 0x40 * y); return; }
/** * Вывод символа на дисплей */ void lcd_putchar(const char c) { unsigned char ddram_addr = lcd_acstate(); if ((ddram_addr > 0x0f) && (ddram_addr < 0x40)) { lcd_set_ddram_addr(0x40); } while(lcd_bfstate()) {} write_max(DATA_IND_ADDR, c); write_max(C_IND_ADDR, 0x05); write_max(C_IND_ADDR, 0x04); return; }
void lcd_display(unsigned char buf[][]) { unsigned char i, j; for(i = 0; i < 2; i++) { for(j = 0; j < 16; j++) { lcd_set_ddram_addr(j + 0x40 * i); while(lcd_bfstate()) {} write_max(DATA_IND_ADDR, buf[i][j]); write_max(C_IND_ADDR, 0x05); write_max(C_IND_ADDR, 0x04); } } }