From e5b1cd4c7e653be92e1dc66c692c73ef4930e450 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20V=C3=ADtek?= <fotomartinkv@gmail.com> Date: Thu, 14 Jul 2016 12:17:02 +0200 Subject: [PATCH] =?UTF-8?q?Aktualizov=C3=A1no=20zobrazovan=C3=AD=20na=20di?= =?UTF-8?q?spleji?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SW/digitalni_teplomer.c | 50 +++++++++++++++++++++++++++++++---------- 1 file changed, 38 insertions(+), 12 deletions(-) diff --git a/SW/digitalni_teplomer.c b/SW/digitalni_teplomer.c index bb9a25d..62525a0 100644 --- a/SW/digitalni_teplomer.c +++ b/SW/digitalni_teplomer.c @@ -44,9 +44,10 @@ volatile int temp; //PromÄ›nná pro teplotu //V tomto pĹ™erušenĂ se zobrazuje na despleji ISR(TIMER1_COMPA_vect) { - static int temp_1=0; + static int temp_1=0; //sloužà k zobrazenĂ celoÄŤĂselnĂ© části + static int temp_2=0; //sloužà k zobrazenĂ desetinnĂ© části teploty static unsigned char disp=0; - unsigned char dec; + static unsigned char desitky, stovky; disp++; @@ -64,27 +65,52 @@ ISR(TIMER1_COMPA_vect) { switch(disp) { - case 0://1.cifra - znamďż˝nko - if (temp>>15) //pokud je nejvyššà bit 1 (zápornĂ© ÄŤĂslo) + case 0: //1.cifra - znamĂ©nko + temp_1=temp; //uloženĂ aktuálnĂ teploty + temp_2=temp%16; //desetinná část teploty (šestnáctiny stupnÄ›) + + if (temp_1<0) //pokud je teplota záporná + { + temp_1 /= 16; //pĹ™evedenĂ na teplotu ve °C + temp_1 *= (-1); + temp_2 *= (-1); //pĹ™evedenĂ zápornĂ© teploty na kladnou + PORTD=(~segs[10]); //zobrazenĂ mĂnus + } + else { - temp_1=temp*(-1); //pĹ™evedenĂ zápornĂ© teploty na kladnou - PORTD=(~segs[10]); //zobrazenĂ mĂnus + temp_1 /= 16; //pĹ™evedenĂ na teplotu ve °C + stovky = temp_1 / 100; + if (stovky) //pokud je teplota vyššà než 99°C + { + PORTD=(~segs[stovky]);//zobrazit stovky + } } - else temp_1=temp/16; //pĹ™evedenĂ kladnĂ© teploty + temp_1 %= 100; break; - case 1://2.cifra - desĂtky - dec = temp_1 / 10; + case 1: //2.cifra - desĂtky + desitky = temp_1 / 10; + + if(desitky>0) + { + PORTD=(~segs[desitky]);//zobrazit desĂtky + } + else + { + if (stovky)//pokud je teplota vyššà než 99°C + { + PORTD=(~segs[0]);//zobraz nulu + } + } - if(dec>0) PORTD=(~segs[dec]);//zobrazit desĂtky break; case 2://3.cifra - jednotky - PORTD=(~segs[temp_1 % 10]) & ~_BV(_s_dot); //zobrazit jednotky a desetinnou teÄŤku + PORTD=(~segs[temp_1 % 10]) & ~_BV(_s_dot); //zobrazit jednotky a teÄŤku break; case 3://4.cifra - desetiny - PORTD = (~segs[((temp % 16)*625)/1000]); //zobrazit desetiny + PORTD = (~segs[((temp_2)*625)/1000]); //zobrazit desetiny break; }//switch(disp) }//else (temp==0x5fff) -- GitLab