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);
    }
}
Пример #2
0
/**
 * Переход в заданную позицию дисплея
 *
 * Функция для перевода курсора в заданные координаты.
 * Если они некорректны, то ничего не происходит.
 */
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;
}
Пример #3
0
/**
 * Вывод символа на дисплей
 */
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;
}
Пример #4
0
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);
        }
    }
}