volatile unsigned char read_port(volatile char*);
//volatile unsigned char number_decoder(volatile unsigned char);
void display(volatile char* out, char num, char decimal);
int main()
{
volatile unsigned char *dir;
volatile unsigned char *output,*input;
volatile char num = 9;
volatile char flag = 0;
dir = 0x107;
*dir = 0x00;
dir = 0x30;
*dir= 0xFF;
input = 0x106;
output = 0x31;
*output = 0x00;
while(1)
{
if((read_port(input) & 0x01) == 0x01)
{
flag = 1;
}
while(flag == 1)
{
display(output,num--,0);
for(volatile long i = 0;i<100000;i++);
if(num == -1)
{
num = 9;
}
if((read_port(input) & 0x02) == 0x02)
{
flag = 0;
}
}
display(output,num,0);
}
}
// volatile unsigned char number_decoder(volatile unsigned char input)
// {
// volatile unsigned char count=1;
// volatile unsigned char temp =0x01;
// if(input == 0x00)
// {
// return 0;
// }
// else
// {
// while(temp!=input)
// {
// temp = temp<<1;
// count++;
// }
// return (count);
// }
// // switch(input)
// // {
// // case 0x00:
// // return 0;
// // case 0x01:
// // return 1;
// // case 0x02:
// // return 2;
// // case 0x04:
// // return 3;
// // case 0x08:
// // return 4;
// // case 0x10:
// // return 5;
// // case 0x20:
// // return 6;
// // case 0x40:
// // return 7;
// // case 0x80:
// // return 8;
// // default:
// // return 0;
// // }
// }
volatile unsigned char read_port(volatile char* port_address)
{
for(volatile long i = 0;i<5000;i++);
volatile unsigned char input_data;
input_data = *port_address;
return input_data;
}
void display(volatile char* out, char num, char decimal)
{
char temp;
switch(num)
{
case 0:
temp = 0x3F;
break;
case 1:
temp = 0x06;
break;
case 2:
temp = 0x5B;
break;
case 3:
temp = 0x4F;
break;
case 4:
temp = 0x66;
break;
case 5:
temp = 0x6D;
break;
case 6:
temp = 0x7D;
break;
case 7:
temp = 0x07;
break;
case 8:
temp = 0X7F;
break;
case 9:
temp = 0x6F;
break;
}
if(decimal == 0)
{
*out = temp;
}
else if(decimal == 1)
{
*out = temp + 128;
}
}