From 72836e52e1e386c2f4f5dd70553914a3c8feb325 Mon Sep 17 00:00:00 2001 From: Jonas Gunz Date: Sun, 19 Oct 2014 22:35:32 +0200 Subject: Uploaded --- Tacho_screen.c | 189 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 189 insertions(+) create mode 100644 Tacho_screen.c (limited to 'Tacho_screen.c') diff --git a/Tacho_screen.c b/Tacho_screen.c new file mode 100644 index 0000000..df8d34c --- /dev/null +++ b/Tacho_screen.c @@ -0,0 +1,189 @@ +/* + * Tacho.c + * + * Created: 19.06.2014 15:33:40 + * Author: Jonas + */ + +#define F_CPU 1000000 +#include +#include +#include + +#define _PRIM PORTC +#define _SEC PORTD + +#define _WHEEL_SIZE 207 + +//Define characters (negative) +#define _C1 0b10101111//0b01010000 +#define _C2 0b11001000//0b00110111 +#define _C3 0b10101000//0b00000000 +#define _C4 0b10100101//0b00000000 +#define _C5 0b10110000//0b00000000 +#define _C6 0b10010001//0b00000000 +#define _C7 0b10101110//0b00000000 +#define _C8 0b10000000//0b00000000 +#define _C9 0b10100000//0b00000000 +#define _C0 0b10000010//0b00000000 +#define _C_ 0b11111101 +#define _CCLEAR 255 + +uint32_t cntr; +unsigned int speed; + +ISR(TIMER0_OVF_vect) +{ + cntr++; +} + +inline void calcSpeed(void) +{ + float tmrSpeed = F_CPU / 256; + float tmrTime = 1 / tmrSpeed; + float comTime = tmrTime * cntr; + + float mps = (_WHEEL_SIZE / 100) / comTime; + + float kmph = mps * 3.6; + + speed = (int)kmph; +}//calcSpeed() + +inline void render(int _screen) +{ + char cNr[16]; + + int i1, i2; + + itoa(_screen, cNr, 10); //convert int to string for rendering + + if(_screen < 10) + { + i1 = 0; + i2 = 1; + cNr[1] = '0'; + } + else + { + i1 = 1; + i2 = 0; + } + + if(_screen > 99 || _screen < 0) + { + _SEC = _PRIM = _C_; + } + else + { + switch (cNr[i1]) //first character + { + case '0': + _PRIM = _C0; + PORTB &= ~(1<