tim008 tim008
/
Tim008_Grupa3_kalkulator
Adnan Kičin Armin Kečo
Revision 0:f32b917de198, committed 2014-05-26
- Comitter:
- tim008
- Date:
- Mon May 26 15:55:39 2014 +0000
- Commit message:
- Tim008_Grupa3_Kalkulator
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
mbed.bld | Show annotated file Show diff for this revision Revisions of this file |
diff -r 000000000000 -r f32b917de198 main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Mon May 26 15:55:39 2014 +0000 @@ -0,0 +1,339 @@ +#include "mbed.h" +#include "cmath" +#include "string" + + //tastatura +DigitalIn kolone[4]={dp9, dp10, dp11, dp13}; +DigitalOut redovi[4]={dp16, dp15, dp17, dp18}; +// . G F E D C B A +BusOut ekran(dp26,dp27,dp5,dp6,dp28, dp1, dp2, dp4); +// D2 D3 D4 +BusOut cifre(dp23, dp24, dp25); +DigitalOut enable(dp14); +DigitalOut taster1(dp1); // taster jedan +DigitalOut taster2(dp2); // taster dva +// Na 0 se ukljucuju ledice +// 0 1 ... +int brojevi[10]= {0x40, 0xf9, 0x24, 0x30, 0x19, 0x12, 0x02, 0xf8, 0x00, 0x10}; + +char br[] = {'0','0','0'}; +char op=' '; +int memori=0; + + +void taster(){ + int brojac=0; + op = 'X'; + while(brojac<2 || op != 'X'){ + for(int i=0; i<4; i++){ + redovi[i]=1; + if(i==0){ + if(kolone[0]==1) br[brojac]='1'; + if(kolone[1]==1) br[brojac]='2'; + if(kolone[2]==1) br[brojac]='3'; + if(kolone[3]==1) op='+'; + } + else if(i==1){ + if(kolone[0]==1) br[brojac]='4'; + if(kolone[1]==1) br[brojac]='5'; + if(kolone[2]==1) br[brojac]='6'; + if(kolone[3]==1) op='-'; + } + else if(i==2){ + if(kolone[0]==1) br[brojac]='7'; + if(kolone[1]==1) br[brojac]='8'; + if(kolone[2]==1) br[brojac]='9'; + if(kolone[3]==1) op='/'; + } + else if(i==3){ + if(kolone[0]==1) op='='; + if(kolone[1]==1) br[brojac]='0'; + if(kolone[2]==1) op=','; + if(kolone[3]==1) op='*'; + } + + redovi[i]=0; + } + brojac++; + } + +} + +char taster2nd(){ + int brojac=0; + op = 'X'; + while(brojac<2 || op != 'X'){ + for(int i=0; i<4; i++){ + redovi[i]=1; + if(i==0){ + if(kolone[0]==1) br[brojac]='1'; + if(kolone[1]==1) br[brojac]='2'; + if(kolone[2]==1) br[brojac]='3'; + if(kolone[3]==1) op = 'S'; + } + else if(i==1){ + if(kolone[0]==1) br[brojac]='4'; + if(kolone[1]==1) br[brojac]='5'; + if(kolone[2]==1) br[brojac]='6'; + if(kolone[3]==1) op='>'; + } + else if(i==2){ + if(kolone[0]==1) br[brojac]='7'; + if(kolone[1]==1) br[brojac]='8'; + if(kolone[2]==1) br[brojac]='9'; + if(kolone[3]==1) op='<'; + } + else if(i==3){ + if(kolone[0]==1) op='='; + if(kolone[1]==1) br[brojac]='0'; + if(kolone[2]==1) op='C'; + if(kolone[3]==1) op='P'; + } + + redovi[i]=0; + } + brojac++; + } +} + +char taster3rd(){ + int brojac=0; + op = 'X'; + while(brojac<2 || op != 'X'){ + for(int i=0; i<4; i++){ + redovi[i]=1; + if(i==0){ + if(kolone[0]==1) br[brojac]='1'; + if(kolone[1]==1) br[brojac]='2'; + if(kolone[2]==1) br[brojac]='3'; + if(kolone[3]==1) op = 'B'; + } + else if(i==1){ + if(kolone[0]==1) br[brojac]='4'; + if(kolone[1]==1) br[brojac]='5'; + if(kolone[2]==1) br[brojac]='6'; + if(kolone[3]==1) op = 'D'; + } + else if(i==2){ + if(kolone[0]==1) br[brojac]='7'; + if(kolone[1]==1) br[brojac]='8'; + if(kolone[2]==1) br[brojac]='9'; + if(kolone[3]==1) op = 'L'; + } + else if(i==3){ + if(kolone[0]==1) op='='; + if(kolone[1]==1) br[brojac]='0'; + if(kolone[3]==1) op = 'I'; + if(kolone[2]==1) op = 'T'; + } + + redovi[i]=0; + } + brojac++; + } +} + +int BinToDec(int broj[]){ + int sum=0; + int vel = sizeof(broj)/sizeof(int); + for(int i =0; i<vel; i++){ + sum = sum+ pow((float)2,i); + } + return sum; +} + +int dec_to_bin[2]; + +void DecToBin (int broj){ + int i=0; + while(broj>0 && broj<8){ + if(broj%2 == 0) + dec_to_bin[i] = 0; + else dec_to_bin[i] = 1; + i++; + broj = broj/2; + } + +} + + + +void show(char znak[]); +void operacija(char znak){ + int k = 0; + int i = br[0] - '0' + (br[1] - '0')*10 + (br[2] - '0')*100; + char slijedeci[3]; + if(znak=='S' || znak=='<' || znak=='>' || znak=='C' || znak=='P') taster2nd(); + else if(znak=='B' || znak=='D' || znak=='L' || znak=='I' || znak=='T') taster3rd(); + else taster(); + for(int i=0; i<3; i++) slijedeci[i] = br[i]; + int j = slijedeci[0] - '0' + (slijedeci[1] - '0')*10 + (slijedeci[2] - '0')*100; + + if(znak == '+') { + k = i+j; + slijedeci[0] = k%100 + '0'; + k/=100; + slijedeci[1] = k%10 + '0'; + k/=10; + slijedeci[2] = k + '0'; + } + if(znak == '-'){ + k = i-j; + slijedeci[0] = k%100 + '0'; + k/=100; + slijedeci[1] = k%10 + '0'; + k/=10; + slijedeci[2] = k + '0'; + } + if(znak == '/') { + k = (float)i/j; + slijedeci[0] = k%100 + '0'; + k/=100; + slijedeci[1] = k%10 + '0'; + k/=10; + slijedeci[2] = k + '0'; + } + if(znak == '*'){ + k = i*j; + slijedeci[0] = k%100 + '0'; + k/=100; + slijedeci[1] = k%10 + '0'; + k/=10; + slijedeci[2] = k + '0'; + } + if(znak == ','){ + k = i; + slijedeci[0] = k%100 + '0'; + k/=100; + slijedeci[1] = '.'; + k/=10; + slijedeci[2] = k + '0'; + } + + //2nd operacije : korjen, spasi u memoriju, dobavi iz memorije, x na y, clear + if(znak == 'S'){ + k = sqrt(float(i)); + slijedeci[0] = k%100 + '0'; + k/=100; + slijedeci[1] = k%10 + '0'; + k/=10; + slijedeci[2] = k + '0'; + } // korjen + if(znak == 'C') { + slijedeci[0] = ' '; + slijedeci[1] = ' '; + slijedeci[2] = '0'; + } // clear + if(znak == '>'){ + memori = i; + } // -> M tj. upis u memoriju + if(znak == '<'){ + k = memori; + slijedeci[0] = k%100 + '0'; + k/=100; + slijedeci[1] = k%10 + '0'; + k/=10; + slijedeci[2] = k + '0'; + } // <- M tj. upis iz memorije + if(znak == 'P'){ + k = pow((float)i,j); + slijedeci[0] = k%100 + '0'; + k/=100; + slijedeci[1] = k%10 + '0'; + k/=10; + slijedeci[2] = k + '0'; + } // x^y + + //3rd operacije: BinToDec, DecToBin, Ln, 1/x, sin + if(znak == 'B'){ + k = i*j; + slijedeci[0] = k%100 + '0'; + k/=100; + slijedeci[1] = k%10 + '0'; + k/=10; + slijedeci[2] = k + '0'; + } // Binarni u dekadni + if(znak == 'D'){{ + k = i*j; + slijedeci[0] = k%100 + '0'; + k/=100; + slijedeci[1] = k%10 + '0'; + k/=10; + slijedeci[2] = k + '0'; + } // Dekadni u binarni + if(znak == 'L'){ + k = log10(float(i)); + slijedeci[0] = k%100 + '0'; + k/=100; + slijedeci[1] = k%10 + '0'; + k/=10; + slijedeci[2] = k + '0'; + } // ln(x) + if(znak == 'I') { + k = 1/float(i); + slijedeci[0] = k%100 + '0'; + k/=100; + slijedeci[1] = k%10 + '0'; + k/=10; + slijedeci[2] = k + '0'; + } // 1/x + if(znak == 'T') { + k = sin(float(i)); + slijedeci[0] = k%100 + '0'; + k/=100; + slijedeci[1] = k%10 + '0'; + k/=10; + slijedeci[2] = k + '0'; + } // sin(x) + + if(znak == '='){ + k = i; + slijedeci[0] = k%100 + '0'; + k/=100; + slijedeci[1] = k%10 + '0'; + k/=10; + slijedeci[2] = k + '0'; + } + show(slijedeci); +} +} + +void show(char znak[]){ + for(int i=0; i<3; i++){ + + if(znak[i]>='0' && znak[i]<='9') + { + ekran = brojevi[znak[i] - '0']; + } + + else + { + operacija(znak[i]); + + } + } + +} + + +int main() { + enable = 1; + int t1=1, t2=1; + char pom[2]; + + while(1) { + if(taster1){ + if(t1==1) t1=0; + else t1=1; + } + if(taster2){ + if(t1==1) t1=0; + else t1=1; + } + if((t1==0 && t2==0) || t1==0) taster2nd(); + else if(t2==0) taster3rd(); + else taster(); + for(int i = 0; i<3; i++) pom[i] = br[i]; + show(pom); + } +}
diff -r 000000000000 -r f32b917de198 mbed.bld --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Mon May 26 15:55:39 2014 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/0b3ab51c8877 \ No newline at end of file