#define DELAY 1000000
#define disnum0 0xbf
#define disnum1 0x86
#define disnum2 0xdb
#define disnum3 0xcf
#define disnum4 0xe6
#define disnum5 0xed
#define disnum6 0xfd
#define disnum7 0x87
#define disnum8 0xff
#define disnum9 0xef
#define switch0 0x01
#define switch1 0x02
#define switch2 0x04
#define switch3 0x08
#define switch4 0x10
#define switch5 0x20
#define switch6 0x40
#define switch7 0x80
#define switch8 0x01
#define switch9 0x02
volatile unsigned char dis_arr[8]={disnum0,disnum1,disnum2,disnum3,disnum4,disnum5,disnum6,disnum7};
void delay();
void buttonpress_displaynumber();
int first_one(char arr);
void setup() {
volatile char* dirf,*dirk, *dird;
dirf =(volatile char*) 0x30;
dirk=(volatile char*)0x107;
dird=(volatile char*)0x2a;
*dirf = 0xff;
*dirk=0x00;
*dird = 0x00;
}
void loop() {
volatile char *outf, *ink, *ind, x,y;
outf =(volatile char *)0x31;
ink= (volatile char *)0x106;
ind = (volatile char *)0x29;
buttonpress_displaynumber();
}
void delay(){
for(volatile long i =0; i<DELAY;i++);
}
int first_one(char arr)
{
for(int i = 0; i<8;i++)
{
if(arr[i]==1)
{
return i;
break;
}
}
}
void buttonpress_displaynumber(){
volatile char *outf, *ink, *ind, x,y;
outf = 0x31;
ink= 0x106;
ind = 0x29;
while(1){
x=*ink;
y=*ind;
if(x>0 && y==0)
{
int i = first_one(x);
*outf=dis_arr[i];
}
if(y>0 && x==0)
{
switch(y){
case(switch8):
*outf =disnum8;
break;
case(switch9):
*outf =disnum9;
break;
default:
*outf = 0x00;
break;
}
}
}
}