#include #include unsigned char x, y, i, w, digit, j = 0; char mas[10]; float numb, m = 0; //char scancode[] = {0x7f,0xbf,0xff}; Delay(int t) { while(t--); } char what(void); scan() interrupt 2 { w=P2; j++; if(j == 3) j = 0; P3=w; Delay(100); what(); Delay(100); } main () { x = 0xFE; numb = 0; i = 0; m = 0; IT1 = 1; EX1 = 1; EA = 1; while (digit != 'e') Delay(100); while(1); } char what(void) { if(i == 0) // clear all { numb = 0; m = 0; } switch (w) // check value of button { case 0x7d: digit='.'; break; case 0x7b: digit='.'; break; case 0x77: digit='9'; break; case 0x6f: digit='8'; break; case 0xbd: digit='7'; break; case 0xbb: digit='6'; break; case 0xb7: digit='5'; break; case 0xaf: digit='4'; break; case 0xdd: digit='3'; break; case 0xdb: digit='2'; break; case 0xd7: digit='1'; break; case 0xcf: digit='0'; break; case 0xed: digit='e'; break; case 0xeb: digit='.'; break; case 0xe7: digit=','; break; case 0xdf: digit='-'; break; default: digit=0xff; } if(digit == 0xff) // exit if default { goto exit; } if(digit == ',') // if , is readed { m = 1; // need to divide mas[i++] = digit; // write , to massive goto exit; } if(digit == 'e') // if end { if(m) { numb = numb / m; //divide } i = 0; // clear all m = 0; goto exit; //and exit } else // in other cases { mas[i++] = digit; // write digit to massive if (mas[i - 1] != '-') // if digit { numb = numb * 10 + (digit & 0xf); if (i == 2 && mas[0] == '-') // if negative { numb = -numb; // negative } if (m) // id we divide { m *= 10; // numbers after } } } exit: return digit; }