Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Need help show a 2-digit loop counter using two 7-segment displays and two 74LS4

ID: 3677876 • Letter: N

Question

Need help show a 2-digit loop counter using two 7-segment displays and two 74LS47 chips using Arduino. The loop counter counts from 00 to 59 and back to 00. Set the counting delay to be 1000 ms.

This is what I have so far but it only count by 11

example

00, 11, 22, 33, 44, 55, 66, 77, 88, 99, then back to 00.

// Output pins.
static int output[] = {0,1,2,3};
static int output2[] = {4,5,6,7};
// 8421 code lookup table.
static int segs_encoding[][4] =
{{0,0,0,0},
    {0,0,0,1},
    {0,0,1,0},
    {0,0,1,1},
    {0,1,0,0},
    {0,1,0,1},
    {0,1,1,0},
    {0,1,1,1},
    {1,0,0,0},
    {1,0,0,1},
    {1,0,1,0},
    {1,0,1,1},
    {1,1,0,0},
    {1,1,0,1},
    {1,1,1,0},
    {1,1,1,1}};
// Outputs an 8421 decimal digit on the output pins from
// base to base + 3 in big endian order.
void show(int base, int num) {
for (int i = 0; i < 4; ++i) {
    if(segs_encoding[num][i] == 1) {
      digitalWrite(base + 3 - i , HIGH);
    } else {
      digitalWrite(base + 3 - i , LOW);
    }
}
}


// Output a decimal value.
void show_decimal(int num) {
show(4, num);
show(0, num);
}

// the setup routine runs once when you press reset:
void setup()
{ for (int i = 0; i < 4; ++i)
    pinMode(i, OUTPUT);
for (int j = 4; j < 8; ++j)
    pinMode(j, OUTPUT);
}

// the loop routine runs over and over again forever:
void loop() {
static int i = 0;
show_decimal(i);
delay(1000);
// Increases the counter.
++i;
if (i == 10)
    i = 0;
}

Explanation / Answer

Please find below the code for a 2-digit loop counter using two 7-segment displays and two 74LS47 chips using Arduino:


static int output[] = {0,1,2,3};
static int segs_encoding[][4] ={
{0,0,0,0},
{0,0,0,1},
{0,0,1,0},
{0,0,1,1},
{0,1,0,0},
{0,1,0,1},
{0,1,1,0},
{0,1,1,1},
{1,0,0,0},
{1,0,0,1}
};
void show(int base, int num) {
for (int i = 0; i < 4; ++i) {
if(segs_encoding[num][i] == 1) {
digitalWrite(base + 3 - i , HIGH);
}
else {
digitalWrite(base + 3 - i , LOW);
}
}
}
void show_decimal(int num) {
show(0, num);
}

#include <Keypad.h>
const byte ROWS = 3;
const byte COLS = 3;
char keys[ROWS][COLS] ={
{'1','2','3'},
{'4','5','6'},
{'7','8','9'}
};

byte rowPins[ROWS] = {6, 5, 4};
byte colPins[COLS] = {9, 8, 7};
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
int rand1,rand2,statestart,stateujicoba,a,c,d,e,i;
int mkaki1 = 10,mkaki2 = 11,mkaki3 = 12,mkaki4 = 13;
int m2kaki1 = 14,m2kaki2 = 15,m2kaki3 = 16,m2kaki4 = 17;
int ujicoba = 18,start = 19;
int val = 0,b = 0,dly = 50;
void setup() {
randomSeed(analogRead(5));
pinMode(mkaki1, OUTPUT);
pinMode(mkaki2, OUTPUT);
pinMode(mkaki3, OUTPUT);
pinMode(mkaki4, OUTPUT);
pinMode(m2kaki1, OUTPUT);
pinMode(m2kaki2, OUTPUT);
pinMode(m2kaki3, OUTPUT);
pinMode(m2kaki4, OUTPUT);
for (c = 0; c < 4; ++c)
pinMode(c, OUTPUT);
pinMode(start, INPUT);
digitalWrite(start, HIGH);
pinMode(ujicoba, INPUT);
digitalWrite(ujicoba, HIGH);
}
void loop() {
statestart = digitalRead(start);
stateujicoba = digitalRead(ujicoba);
if(stateujicoba == LOW){
for(a = 0; a < 9; a++){
rand1 = random(3);
rand2 = random(3);
if(rand1 == 0 && rand2 == 0){
motor1();

motor12();
delay(3000);
motor3();
motor32();
}
if(rand1 == 0 && rand2 == 1){
motor1();
motor22();
delay(3000);
motor3();
motor22();
}
if(rand1 == 0 && rand2 == 2){
motor1();
motor32();
delay(3000);
motor3();
motor12();
}
if(rand1 == 1 && rand2 == 0){
motor2();
motor12();
delay(3000);
motor2();
motor32();
}
if(rand1 == 1 && rand2 == 1){
motor2();
motor22();
delay(3000);
motor2();
motor22();
}
if(rand1 == 1 && rand2 == 2){

motor2();
motor32();
delay(3000);
motor2();
motor12();
}
if(rand1 == 2 && rand2 == 0){
motor3();
motor12();
delay(3000);
motor1();
motor32();
}
if(rand1 == 2 && rand2 == 1){
motor3();
motor22();
delay(3000);
motor1();
motor22();
}
if(rand1 == 2 && rand2 == 2){
motor3();
motor32();
delay(3000);
motor1();
motor12();
}
}
}
if(statestart == LOW){
static int i = 0;
show_decimal(0);
for(a = 0; a < 9; a++){
rand1 = random(3);

rand2 = random(3);
if(rand1 == 0 && rand2 == 0 && val == 0){
motor1();
motor12();
++e;
val = 1;
b=0;
while(val == 1 && b < 300){
char key = keypad.getKey();
if( key == '1'){
++i;
b=300;
val=0;
show_decimal(i);
if (e == 9){
i = 0;
e = 0;
}
}
b++;
delay(10);
}
motor3();
motor32();
val = 0;
}
if(rand1 == 0 && rand2 == 1 && val == 0){
motor1();
motor22();
++e;
val = 1;
b=0;
while(val == 1 && b < 300){
char key = keypad.getKey();

if( key == '2'){
++i;
b=300;
val=0;
show_decimal(i);
if (e == 9){
i = 0;
e = 0;
}
}
b++;
delay(10);
}
motor3();
motor22();
val = 0;
}
if(rand1 == 0 && rand2 == 2 && val == 0){
motor1();
motor32();
++e;
val = 1;
b=0;
while(val == 1 && b < 300){
char key = keypad.getKey();
if( key == '3'){
++i;
b=300;
val=0;
show_decimal(i);
if (e == 9){
i = 0;
e = 0;
}

}
b++;
delay(10);
}
motor3();
motor12();
val = 0;
}
if(rand1 == 1 && rand2 == 0 && val == 0){
motor2();
motor12();
++e;
val = 1;
b=0;
while(val == 1 && b < 300){
char key = keypad.getKey();
if( key == '4'){
++i;
b=300;
val=0;
show_decimal(i);
if (e == 9){
i = 0;
e = 0;
}
}
b++;
delay(10);
}
motor2();
motor32();
val = 0;
}
if(rand1 == 1 && rand2 == 1 && val == 0){

motor2();
motor22();
++e;
val = 1;
b=0;
while(val == 1 && b < 300){
char key = keypad.getKey();
if( key == '5'){
++i;
b=300;
val=0;
show_decimal(i);
if (e == 9){
i = 0;
e = 0;
}
}
b++;
delay(10);
}
motor2();
motor22();
val = 0;
}
if(rand1 == 1 && rand2 == 2 && val == 0){
motor2();
motor32();
++e;
val = 1;
b=0;
while(val == 1 && b < 300){
char key = keypad.getKey();
if( key == '6'){
++i;

b=300;
val=0;
show_decimal(i);
if (e == 9){
i = 0;
e = 0;
}
}
b++;
delay(10);
}
motor2();
motor12();
val = 0;
}
if(rand1 == 2 && rand2 == 0 && val == 0){
motor3();
motor12();
++e;
val = 1;
b=0;
while(val == 1 && b < 300){
char key = keypad.getKey();
if( key == '7'){
++i;
b=300;
val=0;
show_decimal(i);
if (e == 9){
i = 0;
e = 0;
}
}
b++;

delay(10);
}
motor1();
motor32();
val = 0;
}
if(rand1 == 2 && rand2 == 1 && val == 0){
motor3();
motor22();
++e;
val = 1;
b=0;
while(val == 1 && b < 300){
char key = keypad.getKey();
if( key == '8'){
++i;
b=300;
val=0;
show_decimal(i);
if (e == 9){
i = 0;
e = 0;
}
}
b++;
delay(10);
}
motor1();
motor22();
val = 0;
}
if(rand1 == 2 && rand2 == 2 && val == 0){
motor3();
motor32();

++e;
val = 1;
b=0;
while(val == 1 && b < 300){
char key = keypad.getKey();
if( key == '9'){
++i;
b=300;
val=0;
show_decimal(i);
if (e == 9){
i = 0;
e = 0;
}
}
b++;
delay(10);
}
motor1();
motor12();
val = 0;
}
}
}
}
void motor1(){
for(d = 0; d < 3; d++){
digitalWrite(mkaki1, LOW);
digitalWrite(mkaki2, LOW);
digitalWrite(mkaki3, HIGH);
digitalWrite(mkaki4, LOW);
delay(dly);
digitalWrite(mkaki1, LOW);
digitalWrite(mkaki2, LOW);
digitalWrite(mkaki3, LOW);
digitalWrite(mkaki4, HIGH);
delay(dly);
digitalWrite(mkaki1, HIGH);
digitalWrite(mkaki2, LOW);
digitalWrite(mkaki3, LOW);
digitalWrite(mkaki4, LOW);
delay(dly);
digitalWrite(mkaki1, LOW);
digitalWrite(mkaki2, HIGH);
digitalWrite(mkaki3, LOW);
digitalWrite(mkaki4, LOW);
delay(dly);
}
}
void motor2(){
for(d = 0; d < 6; d++){
digitalWrite(mkaki1, LOW);
digitalWrite(mkaki2, LOW);
digitalWrite(mkaki3, HIGH);
digitalWrite(mkaki4, LOW);
delay(dly);
digitalWrite(mkaki1, LOW);
digitalWrite(mkaki2, LOW);
digitalWrite(mkaki3, LOW);
digitalWrite(mkaki4, HIGH);
delay(dly);
digitalWrite(mkaki1, HIGH);
digitalWrite(mkaki2, LOW);
digitalWrite(mkaki3, LOW);
digitalWrite(mkaki4, LOW);
delay(dly);
digitalWrite(mkaki1, LOW);
digitalWrite(mkaki2, HIGH);
digitalWrite(mkaki3, LOW);
digitalWrite(mkaki4, LOW);
delay(dly);
}
}
void motor3(){
for(d = 0; d < 9; d++){
digitalWrite(mkaki1, LOW);
digitalWrite(mkaki2, LOW);
digitalWrite(mkaki3, HIGH);
digitalWrite(mkaki4, LOW);
delay(dly);
digitalWrite(mkaki1, LOW);
digitalWrite(mkaki2, LOW);
digitalWrite(mkaki3, LOW);
digitalWrite(mkaki4, HIGH);
delay(dly);
digitalWrite(mkaki1, HIGH);
digitalWrite(mkaki2, LOW);
digitalWrite(mkaki3, LOW);
digitalWrite(mkaki4, LOW);
delay(dly);
digitalWrite(mkaki1, LOW);
digitalWrite(mkaki2, HIGH);
digitalWrite(mkaki3, LOW);
digitalWrite(mkaki4, LOW);
delay(dly);
}
}
void motor12(){
for(d = 0; d < 6; d++){
digitalWrite(m2kaki1, HIGH);
digitalWrite(m2kaki2, LOW);
digitalWrite(m2kaki3, LOW);
digitalWrite(m2kaki4, LOW);
delay(dly);
digitalWrite(m2kaki1, LOW);
digitalWrite(m2kaki2, LOW);
digitalWrite(m2kaki3, HIGH);
digitalWrite(m2kaki4, LOW);
delay(dly);
digitalWrite(m2kaki1, LOW);
digitalWrite(m2kaki2, HIGH);
digitalWrite(m2kaki3, LOW);
digitalWrite(m2kaki4, LOW);
delay(dly);
digitalWrite(m2kaki1, LOW);
digitalWrite(m2kaki2, LOW);
digitalWrite(m2kaki3, LOW);
digitalWrite(m2kaki4, HIGH);
delay(dly);
}
}
void motor22(){
for(d = 0; d < 12; d++){
digitalWrite(m2kaki1, HIGH);
digitalWrite(m2kaki2, LOW);
digitalWrite(m2kaki3, LOW);
digitalWrite(m2kaki4, LOW);
delay(dly);
digitalWrite(m2kaki1, LOW);
digitalWrite(m2kaki2, LOW);
digitalWrite(m2kaki3, HIGH);
digitalWrite(m2kaki4, LOW);
delay(dly);
digitalWrite(m2kaki1, LOW);
digitalWrite(m2kaki2, HIGH);
digitalWrite(m2kaki3, LOW);
digitalWrite(m2kaki4, LOW);
delay(dly);
digitalWrite(m2kaki1, LOW);
digitalWrite(m2kaki2, LOW);
digitalWrite(m2kaki3, LOW);
digitalWrite(m2kaki4, HIGH);
delay(dly);
}
}
void motor32(){
for(d = 0; d < 18; d++){
digitalWrite(m2kaki1, HIGH);
digitalWrite(m2kaki2, LOW);
digitalWrite(m2kaki3, LOW);
digitalWrite(m2kaki4, LOW);
delay(dly);
digitalWrite(m2kaki1, LOW);
digitalWrite(m2kaki2, LOW);
digitalWrite(m2kaki3, HIGH);
digitalWrite(m2kaki4, LOW);
delay(dly);
digitalWrite(m2kaki1, LOW);
digitalWrite(m2kaki2, HIGH);
digitalWrite(m2kaki3, LOW);
digitalWrite(m2kaki4, LOW);
delay(dly);
digitalWrite(m2kaki1, LOW);
digitalWrite(m2kaki2, LOW);
digitalWrite(m2kaki3, LOW);
digitalWrite(m2kaki4, HIGH);
delay(dly);
}
}

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote