Created
November 3, 2018 15:26
-
-
Save jornvdmaat17/710356a598a3b0a5168b5428843b6396 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include "simlogic.h" | |
#include <Keypad.h> | |
#define buttonA 2 | |
#define buttonB 3 | |
#define buttonC 4 | |
#define ledSum 5 | |
#define ledC_out 6 | |
#define latchPin 12//Pin connected to ST_CP of 74HC595 | |
#define clockPin 10//Pin connected to SH_CP of 74HC595 | |
#define dataPin 11 //Pin connected to DS of 74HC595 | |
int datArray[10] = {3, 159, 37, 13, 153, 73, 65, 31, 1, 9}; | |
void writeDigit(int); | |
String decToBin(int); | |
int binToDec(String); | |
#define ROWS 4 | |
#define COLS 3 | |
char keys[ROWS][COLS] = { | |
{'1', '2', '3'}, | |
{'4', '5', '6'}, | |
{'7', '8', '9'}, | |
{'\0', '\0', '\0'} | |
}; | |
byte rowPins[ROWS] = {2, 3, 4, 5}; | |
byte colPins[COLS] = {6, 7, 8}; | |
Keypad keyp = Keypad(makeKeymap(keys), rowPins , colPins , ROWS , COLS); | |
#define createBit(i) \ | |
create(Input , inputA##i); \ | |
create(Input , inputB##i); \ | |
create(Input , inputCarry##i); \ | |
create(Xor, xorAB##i); \ | |
create(And, anAnd##i); \ | |
create(And, andAB##i); \ | |
create(Xor, sum##i); \ | |
create(Or, carry##i); \ | |
connect(inputA##i, xorAB##i.inA); \ | |
connect(inputB##i, xorAB##i.inB); \ | |
connect(inputA##i, andAB##i.inA); \ | |
connect(inputB##i, andAB##i.inB); \ | |
connect(xorAB##i, sum##i.inA); \ | |
connect(inputCarry##i, sum##i.inB); \ | |
connect(xorAB##i, anAnd##i.inA); \ | |
connect(inputCarry##i, anAnd##i.inB); \ | |
connect(anAnd##i, carry##i.inA); \ | |
connect(andAB##i, carry##i.inB); | |
int main() { | |
pinMode(latchPin, OUTPUT); | |
pinMode(clockPin, OUTPUT); | |
pinMode(dataPin, OUTPUT); | |
writeDigit(0); | |
char key0; | |
while (!(key0 = keyp.getKey())) { | |
} | |
int input0 = key0 - '0'; | |
char key1; | |
while (!(key1 = keyp.getKey())) { | |
} | |
int input1 = key1 - '0'; | |
String a = decToBin(input0); | |
String b = decToBin(input1); | |
while(a.length() < 3){ | |
a = '0' + a; | |
} | |
while(b.length() < 3) { | |
b = '0' + b; | |
} | |
create(False, aFalse); | |
createBit(0); | |
createBit(1); | |
createBit(2); | |
connect(aFalse, inputCarry0.in); | |
connect(carry0, inputCarry1.in); | |
connect(carry1, inputCarry2.in); | |
inputA0.value = a.charAt(2) - '0'; | |
inputA1.value = a.charAt(1) - '0'; | |
inputA2.value = a.charAt(0) - '0'; | |
inputB0.value = b.charAt(2) - '0'; | |
inputB1.value = b.charAt(1) - '0'; | |
inputB2.value = b.charAt(0) - '0'; | |
evaluate(); | |
String out = String(carry2.value) + String(sum2.value) + String(sum1.value) + String(sum0.value); | |
writeDigit(binToDec(out)); | |
delay(5000); | |
main(); | |
return 0; | |
} | |
void writeDigit(int i) { | |
digitalWrite(latchPin , LOW); | |
shiftOut(dataPin , clockPin , MSBFIRST , datArray[i]); | |
digitalWrite(latchPin , HIGH); | |
} | |
String decToBin(int dec) { //Functie voor decimaal naar binair | |
String bit; //Maak een lege bit string aan | |
while (dec > 0) { //Zolang de decimaal niet 0 is, voer dit uit | |
int binary = dec % 2; //Slaat de rest van decimaal gedeeld over 2 op, dit is 1 of 0 | |
dec /= 2; //Vervolgens delen we decimaal over 2 en slaan we dit op in dec | |
bit += String(binary); //Voeg de 0 of 1 aan de bit string toe | |
} | |
String out; //Maak een nieuwe string out aan, omdat de bits in de verkeerde volgorde staan | |
for (int i = bit.length(); i > 0; i--) { //Loop die ervoor zorgt dat de string omgedraaid wordt | |
out += bit[i - 1]; //Voeg de achterste char van de bin string aan out toe, totdat de bit string op is | |
} | |
return out; //Return de out string | |
} | |
int binToDec(String s) { //Functie voor binair naar decimaal | |
int decimal = 0; //Initaliseert decimal op 0 | |
for (int i = 0; i < s.length(); i++) { //Gaat alle bits langs uit de string | |
int b = s[s.length() - 1 - i] - '0' ; // haal bit uit string en converteer naar 0 of 1 | |
decimal += b * round(pow(2 , i)); //Vermedigvuldig de 1 of 0 met een macht van twee die bijgehouden is door middel van de for loop | |
} | |
return decimal; //Return de decimale waarde | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment