#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include "lcd.h"
volatile uint32_t ovfs = 0;
ISR(TIMER1_OVF_vect) {
++ovfs;
}
int main(void) {
DDRB = 0xffu;
TIMSK1 |= 1<<TOIE1;
lcd_init(LCD_DISP_ON);
sei();
for (;;) {
uint32_t us = 0, cm = 0;
char buf[17] = {0}, tmp;
uint8_t i, j, len;
lcd_clrscr();
DDRD |= 1<<PD0;
PORTD &= ~(1<<PD0);
_delay_us(2);
PORTD |= 1<<PD0;
_delay_us(5);
PORTD &= ~(1<<PD0);
DDRD &= ~(1<<PD0);
while (!(PIND & (1<<PD0)));
TCNT1 = 0;
TCCR1B |= 1<<CS10;
while (PIND & (1<<PD0));
TCCR1B &= ~(1<<CS10);
us = TCNT1 + (65536lu * ovfs);
ovfs = 0;
cm = us * 17 / 100;
for (i = 0; i < 12 && (cm != 0 || i == 0 || i == 1); ++i) {
buf[i] = cm % 10 + '0';
cm /= 10;
}
len = j = i;
for (--j, i = 0; i < j; ++i, --j) {
tmp = buf[i];
buf[i] = buf[j];
buf[j] = tmp;
}
i = len;
tmp = buf[--i];
buf[i++] = '.';
buf[i++] = tmp;
buf[i++] = ' ';
buf[i++] = 'c';
buf[i++] = 'm';
lcd_puts(buf);
_delay_ms(1000);
}
return 0;
}
I2luY2x1ZGUgPGF2ci9pby5oPgojaW5jbHVkZSA8YXZyL2ludGVycnVwdC5oPgojaW5jbHVkZSA8dXRpbC9kZWxheS5oPgoKI2luY2x1ZGUgImxjZC5oIgoKdm9sYXRpbGUgdWludDMyX3Qgb3ZmcyA9IDA7CgpJU1IoVElNRVIxX09WRl92ZWN0KSB7CiAgKytvdmZzOwp9CgppbnQgbWFpbih2b2lkKSB7CiAgRERSQiA9IDB4ZmZ1OwogIFRJTVNLMSB8PSAxPDxUT0lFMTsKICBsY2RfaW5pdChMQ0RfRElTUF9PTik7CiAgc2VpKCk7CiAgZm9yICg7OykgewogICAgdWludDMyX3QgdXMgPSAwLCBjbSA9IDA7CiAgICBjaGFyIGJ1ZlsxN10gPSB7MH0sIHRtcDsKICAgIHVpbnQ4X3QgaSwgaiwgbGVuOwogICAgbGNkX2NscnNjcigpOwogICAgRERSRCB8PSAxPDxQRDA7CiAgICBQT1JURCAmPSB+KDE8PFBEMCk7CiAgICBfZGVsYXlfdXMoMik7CiAgICBQT1JURCB8PSAxPDxQRDA7CiAgICBfZGVsYXlfdXMoNSk7CiAgICBQT1JURCAmPSB+KDE8PFBEMCk7CiAgICBERFJEICY9IH4oMTw8UEQwKTsKICAgIHdoaWxlICghKFBJTkQgJiAoMTw8UEQwKSkpOwogICAgVENOVDEgPSAwOwogICAgVENDUjFCIHw9IDE8PENTMTA7CiAgICB3aGlsZSAoUElORCAmICgxPDxQRDApKTsKICAgIFRDQ1IxQiAmPSB+KDE8PENTMTApOwogICAgdXMgPSBUQ05UMSArICg2NTUzNmx1ICogb3Zmcyk7CiAgICBvdmZzID0gMDsKICAgIGNtID0gdXMgKiAxNyAvIDEwMDsKICAgIGZvciAoaSA9IDA7IGkgPCAxMiAmJiAoY20gIT0gMCB8fCBpID09IDAgfHwgaSA9PSAxKTsgKytpKSB7CiAgICAgIGJ1ZltpXSA9IGNtICUgMTAgKyAnMCc7CiAgICAgIGNtIC89IDEwOwogICAgfQogICAgbGVuID0gaiA9IGk7CiAgICBmb3IgKC0taiwgaSA9IDA7IGkgPCBqOyArK2ksIC0taikgewogICAgICB0bXAgPSBidWZbaV07CiAgICAgIGJ1ZltpXSA9IGJ1ZltqXTsKICAgICAgYnVmW2pdID0gdG1wOwogICAgfQogICAgaSA9IGxlbjsKICAgIHRtcCA9IGJ1ZlstLWldOwogICAgYnVmW2krK10gPSAnLic7CiAgICBidWZbaSsrXSA9IHRtcDsKICAgIGJ1ZltpKytdID0gJyAnOwogICAgYnVmW2krK10gPSAnYyc7CiAgICBidWZbaSsrXSA9ICdtJzsKICAgIGxjZF9wdXRzKGJ1Zik7CiAgICBfZGVsYXlfbXMoMTAwMCk7CiAgfQogIHJldHVybiAwOwp9Cg==