#define Delay 900000
void setup() {
// put your setup code here, to run once:
volatile unsigned char *sevenSeg=(unsigned char*)0x30,*keyPad=(unsigned char*)0x27,*digits=(unsigned char*)0x107;
*sevenSeg=0xFF;
*keyPad=0x0F;
*digits=0xFF;
}
boolean read_pad(unsigned char i,unsigned char j){
volatile unsigned char *padIP=(unsigned char*)0x26,*padOP=(unsigned char*)0x28;
*padOP=(0x01<<i);
return (((*padIP)&(0x10<<j))>0);
}
unsigned char data_pad(unsigned char row,unsigned char col){
unsigned char pad[4][4]={
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
return pad[row][col];
}
unsigned char readData(){
volatile unsigned long i;
for(unsigned char i=0;i<4;i++){
for(unsigned char j=0;j<4;j++){
if(read_pad(i,j)){
while(read_pad(i,j));
return data_pad(i,j);
}
}
}
return 0;
}
unsigned char extraChars(unsigned char item){
switch(item){
case '-': return 0x40;
case 'E': return 0x79;
}
}
unsigned char getValue(unsigned char numb,bool decimal){
if(numb>9){
return extraChars(numb);
}
unsigned char arr[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
if(decimal){
return arr[numb]|(0x80);
}else{
return arr[numb];
}
}
void dig_write(unsigned char data,unsigned char digNumb){
volatile unsigned char *seg=(unsigned char*)0x31,*dig=(unsigned char*)0x108;
*dig=~(0x00);
*seg=data;
*dig=~((1<<(digNumb-1)));
// volatile unsigned long i;
// for(i=0;i<Delay;i++);
}
void displayError(){
for(int i=0;i<4;i++){
dig_write(getValue('E',false),i+1);
}
}
void allDig(unsigned int n){
if(n>9999U){
displayError();
return;
}
for(int i=0;i<4;i++){
if((n%10U)>0||i==0)
dig_write(getValue((n%10U),false),4-i);
n/=10U;
}
}
void loop() {
// put your main code here, to run repeatedly:
volatile unsigned char *seg=(unsigned char*)0x31,*dig=(unsigned char*)0x108;
volatile unsigned long i;
// *dig=~(0x01);
// *seg=getValue(readData()-'0',false);
// for(i=0;i<Delay;i++);
// //2nd
// unsigned int temp=0;
// i=0;
// while(i<4){
// unsigned char n1=readData();
// if(n1>0){
// temp=temp*10+(n1-'0');
// i++;
// }
// }
// while(readData()!='C'){
// allDig(temp);
// }
// allDig(0U);
////3rd.4th,5th--> using # as equals and 'A' as add
// unsigned int temp=0;
// unsigned int num1=0,num2=0;
// i=0;
// while(i<4){
// unsigned char n1=readData();
// if(n1=='A')
// break;
// if(n1>0){
// temp=temp*10+(n1-'0');
// i++;
// }
// }
// num1=temp;
// temp=0;
// i=0;
// while(i<4){
// unsigned char n1=readData();
// if(n1=='#')
// break;
// if(n1>0){
// temp=temp*10+(n1-'0');
// i++;
// }
// }
// num2=temp;
// while(readData()!='C'){// to quit use c button
// allDig((num1+num2));
// }
// allDig(0U);
////3rd.4th,5th--> using # as equals and 'A' as add
unsigned int temp=0;
unsigned int num1=0,num2=0;
i=0;
while(i<5){
unsigned char n1=readData();
if(n1=='A')
break;
if(n1>0){
temp=temp*10+(n1-'0');
i++;
}
}
num1=temp;
temp=0;
i=0;
while(i<5){
unsigned char n1=readData();
if(n1=='#')
break;
if(n1>0){
temp=temp*10+(n1-'0');
i++;
}
}
num2=temp;
bool err=false;
if(temp>9999){
err=true;
}
while(readData()!='C'){// to quit use c button
allDig((num1+num2));
}
allDig(0U);
}