// ETALVIS PROBLEM 7 SEGMENT SET3 PROBLEM 10
// DISPLAYING 0.000 TO 999.9
void delays(void);
void setup()
{
volatile char *porta_dir=0x21;
*porta_dir=0xFF;
volatile char *portb_dir=0x24;
*portb_dir=0x0F;
}
void loop()
{
volatile char *porta_out=0x22;
volatile char *portb_out=0x25;
volatile char ones,tens,hunds,thous;
const char seven[]=
{
0x3F, // 0
0x06,// 1
0x5B,// 2
0x4F,// 3
0x66,// 4
0x6D,// 5
0x7D,// 6
0x07,// 7
0x7F,// 8
0x6F // 9
};
char k,l;
while(1)
{
for(k=0;k<3;k++)
{
l=0;
if(k>l)
{
l=1;
}
for(thous=l;thous<10;thous++)
{
for(hunds=0;hunds<10;hunds++)
{
for(tens=0;tens<10;tens++)
{
for(ones=0;ones<10;ones++)
{
for(char r=0;r<30;r++) // KEEPING THE OUTPUT FOR SOME TIME
{
// DIGIT 1
*portb_out=0x07;
if(k==0)
{
*porta_out=seven[thous]|0x80;
delays();
*porta_out=0x00;
*portb_out=0x0F;
}
else
{
*porta_out=seven[thous];
delays();
*porta_out=0x00;
*portb_out=0x0F;
}
// DIGIT 2
*portb_out=0x0B;
if(k==1)
{
*porta_out=seven[hunds]|0x80;
delays();
*porta_out=0x00;
*portb_out=0x0F;
}
else
{
*porta_out=seven[hunds];
delays();
*porta_out=0x00;
*portb_out=0x0F;
}
// DIGIT 3
*portb_out=0x0D;
if(k==2)
{
*porta_out=seven[tens]|0x80;
delays();
*porta_out=0x00;
*portb_out=0x0F;
}
else
{
*porta_out=seven[tens];
delays();
*porta_out=0x00;
*portb_out=0x0F;
}
// DIGIT 4
*portb_out=0x0E;
*porta_out=seven[ones];
delays();
*porta_out=0x00;
*portb_out=0x0F;
}
}
}
}
}
}
}
}
void delays(void)
{
volatile long i;
for(i=0; i<100; i++); // small delay
}