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

Program starts up with SSD = 0000 and Decimal mode Enter numbers 0 through 9 on

ID: 3803547 • Letter: P

Question

Program starts up with SSD = 0000 and Decimal mode

Enter numbers 0 through 9 on keypad and display on SSDs

Poll keypad, ignore A-F

Use timer (any - including CoreTimer) and interrupts to refresh displays (see SSDcounter example codes for ISRs) –

Always enter Decimal mode when character entered • Btn 1 Toggles between Hexadecimal display and Decimal mode – Hex: •

LED2 = ON/LED1 = OFF

convert decimal # to hex and display – Decimal:

LED1 = ON/LED2 = OFF, display as decimal

Btn 2 clears number and displays 0000 in mode Decimal

Programming with C on MPLAB using a PIC32 pro MX7 board.

using 2 dual 7 segment displays in bottom pins of JA JB and JC JD

and a 16 butoon key pad on JF

Explanation / Answer


void setup()
{
pinMode(1, OUTPUT);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6,_SEG, OUTPUT);
pinMode(7, OUTPUT);
pinMode(CA1, OUTPUT);
pinMode(CA2, OUTPUT);
}

void loop()
{
for (int digi1=0; digi1 < 10; digi1++)
{
for (int digt2=0; digi2 < 10; digi2++)
{
unsigned long strtTime = millis();
for (unsigned long elapsed=0; elapsed < 700; elapsed = millis() - strtTime)
{
lightDigi1(numbers[digi1]);
delay(6);
lightDigi2(numbers[digi2]);
delay(6);
}
}
}
}

void lightDigi1(byte num)
{
dgtalWrite(CA1, LOW);
dgtalWrite(CA2, HIGH);
lightSegments(num);
}

void lightDigit2(byte number)
{
dgtalWrite(CA1, HIGH);
dgtalWrite(CA2, LOW);
lightSegments(num);
}

void lightSegments(byte num)
{
for (int i = 0; i < 7; i++) {
int bit = bitRead(number, i);
dgtalWrite(segs[i], bit);
}
}