LV4_tim008_Z01 Sumejja Porča
Embed:
(wiki syntax)
Show/hide line numbers
main.cpp
00001 #include "mbed.h" 00002 // 0 1 2 3 4 5 6 7 8 9 a b c d e * # 00003 char lookup[17] = { 0x40, 0x79, 0x24, 0x30, 0x19, 0x12, 0x02, 0x78, 0x00, 0x10, 0x20, 0x03, 0x46, 0x21, 0x04, 0x09, 0x01}; 00004 DigitalOut displays[3] = { dp25, dp24, dp23 }; 00005 DigitalOut dec_p = dp4; 00006 AnalogIn ain(dp9); 00007 00008 // Mapiranja su: 00009 // A - dp26 (bit 0) 00010 // B - dp27 (bit 1) 00011 // C - dp5 (bit 2) 00012 // D - dp6 (bit 3) 00013 // E - dp28 (bit 4) 00014 // F - dp1 (bit 5) 00015 // G - dp2 (bit 6) 00016 00017 BusOut segments (dp26, dp27, dp5, dp6, dp28, dp1, dp2); 00018 /* 00019 * Funkcija treba pisati na segment displaya, argumenti su: 00020 * index - kaze na koji display treba pisati (moguce vrijednosti su 2 do 4) 00021 * value - vrijednost koja se treba zapisati (moguce vrijednosti su cifre od 0 do 9) 00022 * decimal_point - vrijednost koja kaze da li treba decimalnu tacku osvijetliti (moguce vrijednosti su 00023 0 ili 1; 0 - iskljuceno, 1 - ukljuceno) 00024 */ 00025 void write_segment(int index, char value, int decimal_point) 00026 { 00027 if(value >= '0' && value <= '9') 00028 // Preslikavanje vrijednosti broja u kod 00029 segments = lookup[value - '0']; 00030 00031 else 00032 segments = 0xff; 00033 00034 // DP je spojen na dp4 00035 dec_p = !(decimal_point & (1 << 0)); 00036 00037 // Aktiviramo odgovarajuci display 00038 // D2 je spojen na dp23 00039 // D3 je spojen na dp24 00040 // D4 je spojen na dp25 00041 switch (index) 00042 { 00043 case 2: 00044 displays[0] = 0; 00045 displays[1] = 1; 00046 displays[2] = 1; 00047 break; 00048 case 3: 00049 displays[0]= 1; 00050 displays[1] = 0; 00051 displays[2] = 1; 00052 break; 00053 case 4: 00054 displays[2] = 1; 00055 displays[2] = 1; 00056 displays[2] = 0; 00057 break; 00058 } 00059 } 00060 00061 int main() 00062 { 00063 // Varijabla koja ce reci koji display je trenutno aktivan (ima vrijednosti od 2 do 4) 00064 int index = 2; 00065 00066 float value, old_value(3.3 * ain); 00067 // Vrijednosti na pojedinim displayjima: 00068 char d2 = 'N', d3 = 'N', d4 = 'N'; 00069 00070 while (true) 00071 { 00072 // Pisanje cifara na display 00073 switch (index) 00074 { 00075 case 2: 00076 write_segment(index, d2, 0); 00077 break; 00078 00079 case 3: 00080 write_segment(index, d3, 0); 00081 break; 00082 case 4: 00083 write_segment(index, d4, 1); 00084 break; 00085 } 00086 // 1 ms cekanje 00087 // Ako je pauza izmedju pojedinih pisanja 1ms to znaci da je za 3 displaya potrebno 3ms 00088 // Sto ispadne 1s / 3ms = 333.33 osvjezavanja u sekundi 00089 wait(0.001); 00090 00091 value = 3.3 * ain; 00092 00093 if (value != old_value ) 00094 { 00095 d4 = int(value); 00096 00097 d3 = int((value - int(value))*10); 00098 00099 d2 = int(((value*10) - int(value*10))*10) ; 00100 } 00101 00102 00103 old_value = value; 00104 // Prelazimo na iduci display 00105 index++; 00106 if (index == 5) 00107 index = 2; 00108 } 00109 return 0; 00110 } 00111
Generated on Fri Jul 29 2022 14:10:34 by
1.7.2