tim008 tim008
/
priprema
LV4_tim008_Z01 Sumejja Porča
main.cpp
- Committer:
- tim008
- Date:
- 2014-03-24
- Revision:
- 0:7347981f933d
File content as of revision 0:7347981f933d:
#include "mbed.h" // 0 1 2 3 4 5 6 7 8 9 a b c d e * # char lookup[17] = { 0x40, 0x79, 0x24, 0x30, 0x19, 0x12, 0x02, 0x78, 0x00, 0x10, 0x20, 0x03, 0x46, 0x21, 0x04, 0x09, 0x01}; DigitalOut displays[3] = { dp25, dp24, dp23 }; DigitalOut dec_p = dp4; AnalogIn ain(dp9); // Mapiranja su: // A - dp26 (bit 0) // B - dp27 (bit 1) // C - dp5 (bit 2) // D - dp6 (bit 3) // E - dp28 (bit 4) // F - dp1 (bit 5) // G - dp2 (bit 6) BusOut segments (dp26, dp27, dp5, dp6, dp28, dp1, dp2); /* * Funkcija treba pisati na segment displaya, argumenti su: * index - kaze na koji display treba pisati (moguce vrijednosti su 2 do 4) * value - vrijednost koja se treba zapisati (moguce vrijednosti su cifre od 0 do 9) * decimal_point - vrijednost koja kaze da li treba decimalnu tacku osvijetliti (moguce vrijednosti su 0 ili 1; 0 - iskljuceno, 1 - ukljuceno) */ void write_segment(int index, char value, int decimal_point) { if(value >= '0' && value <= '9') // Preslikavanje vrijednosti broja u kod segments = lookup[value - '0']; else segments = 0xff; // DP je spojen na dp4 dec_p = !(decimal_point & (1 << 0)); // Aktiviramo odgovarajuci display // D2 je spojen na dp23 // D3 je spojen na dp24 // D4 je spojen na dp25 switch (index) { case 2: displays[0] = 0; displays[1] = 1; displays[2] = 1; break; case 3: displays[0]= 1; displays[1] = 0; displays[2] = 1; break; case 4: displays[2] = 1; displays[2] = 1; displays[2] = 0; break; } } int main() { // Varijabla koja ce reci koji display je trenutno aktivan (ima vrijednosti od 2 do 4) int index = 2; float value, old_value(3.3 * ain); // Vrijednosti na pojedinim displayjima: char d2 = 'N', d3 = 'N', d4 = 'N'; while (true) { // Pisanje cifara na display switch (index) { case 2: write_segment(index, d2, 0); break; case 3: write_segment(index, d3, 0); break; case 4: write_segment(index, d4, 1); break; } // 1 ms cekanje // Ako je pauza izmedju pojedinih pisanja 1ms to znaci da je za 3 displaya potrebno 3ms // Sto ispadne 1s / 3ms = 333.33 osvjezavanja u sekundi wait(0.001); value = 3.3 * ain; if (value != old_value ) { d4 = int(value); d3 = int((value - int(value))*10); d2 = int(((value*10) - int(value*10))*10) ; } old_value = value; // Prelazimo na iduci display index++; if (index == 5) index = 2; } return 0; }