//ESP - keypad - problems set1
//Use 4 x 4 Keypad and Quard 7 segment display
// 08- perform any digit division quotient only
//then display "EEEE" Display Negative result also // 16-12-22 to 18-12-23
//Ex: 1561/6=260,765/9=85
//*outa = 22 to 29
//*outc = 37 to 34
void setup() {
// put your setup code here, to run once:
volatile char *dirf,*dirk,*dira,*dirc;
volatile char *outf,*outa,*outc;
volatile char *ink;
volatile long i,j,x,y,y1=0,y2=0,flage1=0,t3=0;
volatile long a,t=0,t1=0,p=0,p1=0,v1,v2,v3,v4,qut=0,eq=0,flage=0;
volatile char numca[]={0xC0,0xF9,0xA4,0xB0,0X99,0X92,0X82,0xF8,0x80,0x98};
dirf = 0x30; dirk = 0x107; dira = 0x21; dirc = 0x27;
*dirf = 0x0f; *dirk = 0x00; *dira = 0xff; *dirf = 0x0f;
outa = 0x22; outf = 0x31; outc = 0x28;
ink = 0x106;
while(1)
{
for(i=0;i<4;i++)
{
*outf=1 << i;
x=*ink;
if(x!=0)
{
if(*outf == 1 && x == 1)
{
a=1;
}
if(*outf == 1 && x == 2)
{
a=2;
}
if(*outf == 1 && x == 4)
{
a=3;
}
if(*outf == 2 && x == 1)
{
a=4;
}
if(*outf == 2 && x == 2)
{
a=5;
}
if(*outf == 2 && x == 4)
{
a=6;
}
if(*outf == 4 && x == 1)
{
a=7;
}
if(*outf == 4 && x == 2)
{
a=8;
}
if(*outf == 4 && x == 4)
{
a=9;
}
if(*outf == 8 && x == 2)
{
a=0;
}
if(*outf== 8 && x == 8)
{
t=y;
qut=qut+1;
}
if(*outf == 8 && x == 4)
{
if(flage==2)
{
t1=y1%10;
}
if(flage==3)
{
t1=y1%100;
}
if(flage==4)
{
t1=y1%1000;
}
p=t/t1;
if(p<=9)
{
*outc=0x08;
*outa=numca[p];
for(j=0;j<500000;j++);
break;
}
if(p>=10 && p<=99)
{
v1=p/10;
v2=p%10;
*outc=0x02;
*outa=numca[v1];
for(j=0;j<500000;j++);
*outc=0x04;
*outa=numca[v2];
for(j=0;j<500000;j++);
break;
}
if(p>=100 && p<=999)
{
v1=p/100;
v2=p%100/10;
v3=p%10;
*outc=0x01;
*outa=numca[v1];
for(j=0;j<300000;j++);
*outc=0x02;
*outa=numca[v2];
for(j=0;j<300000;j++);
*outc=0x04;
*outa=numca[v3];
for(j=0;j<300000;j++);
break;
}
if(p>=1000 && p<=9999)
{
v1=p/1000;
v2=p%1000/100;
v3=p%100/10;
v4=p%10;
*outc=0x01;
*outa=numca[v1];
for(j=0;j<300000;j++);
*outc=0x02;
*outa=numca[v2];
for(j=0;j<300000;j++);
*outc=0x04;
*outa=numca[v3];
for(j=0;j<300000;j++);
*outc=0x08;
*outa=numca[v4];
for(j=0;j<300000;j++);
break;
}
}
*outc=0x01;
*outa=numca[a];
for(j=0;j<100000;j++);
y=(y*10)+(a*1);
if(qut == 1)
{
y1=(y1*10)+(a*1);
flage=flage+1;
}
}
}
}
}
void loop() {
// put your main code here, to run repeatedly:
}