Question: // when i pressed the key this code below displayed 4 digital numbers (1111, 2222, 3333, .. 9999). How can I fix this code to

// when i pressed the key this code below displayed 4 digital numbers (1111, 2222, 3333, .. 9999). How can I fix this code to count from 1 to 9 with single number ?

// This code is performed for microcontroller SAMD20J18

#include

// Void functions

void wait(int t);

void Simple_Clk_Init(void);

// Global Variables

volatile int count = 0; // important to keep volatile int main (void)

{

// Set micro-controller clock to 8Mhz

Simple_Clk_Init();

// Set the base address for the Port structure to PORT_INSTS or 0x41004400

Port *ports = PORT_INSTS;

// Set the group's offset for the structure PortGroup in this case it is for group[0] or groupA

// Group A offset of 0x00 // Group B offset of 0x80

PortGroup *portAs = &(ports->Group[0]); PortGroup *portBs = &(ports->Group[1]);

portAs ->DIRSET.reg = PORT_PA07 | PORT_PA06 | PORT_PA05| PORT_PA04; portAs ->DIRCLR.reg = PORT_PA19 | PORT_PA18 | PORT_PA17| PORT_PA16;

portBs->DIRSET.reg = PORT_PB00|PORT_PB05|PORT_PB04|PORT_PB03|PORT_PB06|PORT_PB07|PORT_PB01|PORT_PB02; portBs->OUTSET.reg = PORT_PB00|PORT_PB05|PORT_PB04|PORT_PB03|PORT_PB06|PORT_PB07;

portAs->PINCFG[19].reg = PORT_PINCFG_INEN | PORT_PINCFG_PULLEN; portAs->PINCFG[18].reg = PORT_PINCFG_INEN | PORT_PINCFG_PULLEN; portAs->PINCFG[17].reg = PORT_PINCFG_INEN | PORT_PINCFG_PULLEN; portAs->PINCFG[16].reg = PORT_PINCFG_INEN | PORT_PINCFG_PULLEN;

while(1)

{

portAs->OUTCLR.reg = PORT_PA07; //sets pa07 high portAs->OUTSET.reg = PORT_PA05|PORT_PA06|PORT_PA04;

if(portAs->IN.reg & PORT_PA19 ) //displays1

{ portBs->OUTSET.reg = PORT_PB00|PORT_PB05|PORT_PB04|PORT_PB03|PORT_PB06|PORT_PB07; portBs->OUTCLR.reg=PORT_PB02|PORT_PB01;

}

if (portAs->IN.reg&PORT_PA18) //displays 2

{ portBs->OUTSET.reg = PORT_PB07|PORT_PB05|PORT_PB02; portBs->OUTCLR.reg=PORT_PB00|PORT_PB01|PORT_PB06|PORT_PB04|PORT_PB03; } if (portAs->IN.reg & PORT_PA17) // displays 3 { portBs->OUTSET.reg = PORT_PB05|PORT_PB04|PORT_PB07; portBs->OUTCLR.reg=PORT_PB00|PORT_PB01|PORT_PB06|PORT_PB03|PORT_PB02; } if (portAs->IN.reg & PORT_PA16) //displays A

{ portBs->OUTSET.reg = PORT_PB03|PORT_PB07; portBs->OUTCLR.reg=PORT_PB00|PORT_PB05|PORT_PB01|PORT_PB06|PORT_PB04|PORT_PB02; } portAs->OUTCLR.reg = PORT_PA06; // sets pa06 high portAs->OUTSET.reg = PORT_PA04|PORT_PA05|PORT_PA07;

//series of if statements to check inputs

if(portAs->IN.reg & PORT_PA19 ) //displays 4

{ portBs->OUTSET.reg = PORT_PB07|PORT_PB00|PORT_PB04|PORT_PB03; portBs->OUTCLR.reg=PORT_PB05|PORT_PB06|PORT_PB01|PORT_PB02; } if (portAs->IN.reg&PORT_PA18) //displays 5

{

portBs->OUTSET.reg = PORT_PB07|PORT_PB01|PORT_PB04; portBs->OUTCLR.reg=PORT_PB00|PORT_PB05|PORT_PB06|PORT_PB02|PORT_PB03;

}

if (portAs->IN.reg & PORT_PA17) //displays 6

{

portBs->OUTSET.reg = PORT_PB07|PORT_PB00|PORT_PB01; portBs->OUTCLR.reg=PORT_PB05|PORT_PB04|PORT_PB03|PORT_PB02|PORT_PB06;

}

if (portAs->IN.reg & PORT_PA16) // displays 6

{

portBs->OUTSET.reg = PORT_PB07|PORT_PB00|PORT_PB01; portBs->OUTCLR.reg=PORT_PB05|PORT_PB04|PORT_PB03|PORT_PB02|PORT_PB06;

}

portAs->OUTCLR.reg = PORT_PA05; // sets pa05 high portAs->OUTSET.reg = PORT_PA04|PORT_PA06|PORT_PA07;

//series of if statements to check inputs

if(portAs->IN.reg & PORT_PA19 ) // displays 7

{

portBs->OUTSET.reg = PORT_PB07|PORT_PB06|PORT_PB05|PORT_PB04|PORT_PB03; portBs->OUTCLR.reg=PORT_PB00|PORT_PB01|PORT_PB02; }

if (portAs->IN.reg&PORT_PA18) // displays 8

{

portBs->OUTSET.reg = PORT_PB07; portBs->OUTCLR.reg=PORT_PB00|PORT_PB02|PORT_PB06|PORT_PB05|PORT_PB04|PORT_PB03|PORT_PB01;

}

if (portAs->IN.reg & PORT_PA17) //displays 9

{

portBs->OUTSET.reg = PORT_PB07|PORT_PB04|PORT_PB03; portBs->OUTCLR.reg=PORT_PB00|PORT_PB02|PORT_PB06|PORT_PB05|PORT_PB01;

}

if (portAs->IN.reg & PORT_PA16)// displays p

{

portBs->OUTSET.reg = PORT_PB07|PORT_PB04|PORT_PB03; portBs->OUTCLR.reg=PORT_PB00|PORT_PB02|PORT_PB06|PORT_PB05|PORT_PB01;

}

portAs->OUTCLR.reg = PORT_PA04; // sets pa04 high portAs->OUTSET.reg = PORT_PA05|PORT_PA06|PORT_PA07;

//if statements to check inputs

if(portAs->IN.reg & PORT_PA19 )

{ portBs->OUTSET.reg = PORT_PB07|PORT_PB04|PORT_PB03; portBs->OUTCLR.reg=PORT_PB00|PORT_PB02|PORT_PB06|PORT_PB05|PORT_PB01; } if (portAs->IN.reg&PORT_PA18)

{ portBs->OUTSET.reg = PORT_PB07|PORT_PB04|PORT_PB03; portBs->OUTCLR.reg=PORT_PB00|PORT_PB02|PORT_PB06|PORT_PB05|PORT_PB01; } if (portAs->IN.reg & PORT_PA17)

{ portBs->OUTSET.reg = PORT_PB07|PORT_PB04|PORT_PB03; portBs->OUTCLR.reg=PORT_PB00|PORT_PB02|PORT_PB06|PORT_PB05|PORT_PB01;

} if (portAs->IN.reg & PORT_PA16)

{ portBs->OUTSET.reg = PORT_PB07|PORT_PB04|PORT_PB03; portBs->OUTCLR.reg=PORT_PB00|PORT_PB02|PORT_PB06|PORT_PB05|PORT_PB01;

}

}

}

// Time delay function

void wait(int t)

{

count = 0; while (count < t*1000)

{ count++; }

}

// Simple Clock Initialization - Do Not Modify - //

void Simple_Clk_Init(void)

{

/* Various bits in the INTFLAG register can be set to one at startup. This will ensure that these bits are cleared */ SYSCTRL->INTFLAG.reg = SYSCTRL_INTFLAG_BOD33RDY | SYSCTRL_INTFLAG_BOD33DET |

SYSCTRL_INTFLAG_DFLLRDY; system_flash_set_waitstates(0); // Clock_flash wait state = 0 SYSCTRL_OSC8M_Type temp = SYSCTRL->OSC8M; // for OSC8M initialization temp.bit.PRESC = 0; // no divide, i.e., set clock=8Mhz (see page 170) temp.bit.ONDEMAND = 1; // On-demand is true temp.bit.RUNSTDBY = 0; // Standby is false SYSCTRL->OSC8M = temp; SYSCTRL->OSC8M.reg |= 0x1u << 1; // SYSCTRL_OSC8M_ENABLE bit = bit-1 (page 170) PM->CPUSEL.reg = (uint32_t)0; // CPU and BUS clocks Divide by 1 (see page 110) PM->APBASEL.reg = (uint32_t)0; // APBA clock 0= Divide by 1 (see page 110) PM->APBBSEL.reg = (uint32_t)0; // APBB clock 0= Divide by 1 (see page 110) PM->APBCSEL.reg = (uint32_t)0; // APBB clock 0= Divide by 1 (see page 110)

PM->APBAMASK.reg |= 01u<<3; // Enable Generic clock controller clock (page 127)

/* Software reset Generic clock to ensure it is re-initialized correctly */ GCLK->CTRL.reg = 0x1u << 0; // Reset gen. clock (see page 94) while (GCLK->CTRL.reg & 0x1u ) { /* Wait for reset to complete */ }

// Initialization and enable generic clock #0 *((uint8_t*)&GCLK->GENDIV.reg) = 0; // Select GCLK0 (page 104, Table 14-10) GCLK->GENDIV.reg = 0x0100; // Divide by 1 for GCLK #0 (page 104) GCLK->GENCTRL.reg = 0x030600; // GCLK#0 enable, Source=6(OSC8M), IDC=1 (page 101) }

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!