#include #include //расширение библиотеки специальных функций mcs51 char x,y,i, digit, //ASCII цифра, символ, вводимые с клавиатуры m=0, //масштаб - 10 (номер цифры после запятой) mas[10]; //контрольный массив введенных символов float numb, //формируемое при вводе числа с естественной запятой numb1; //значение числа при вводе с текущим масштабом Delay(int t) //задержка { while(t--); } void scan(void); //предопределение функции сканирования main () { x=0xef; //начальное значение кода сканирования while (1) //цикл сканирования { x= _crol_(x,1); //код сканирования циклическим сдвигом (_crol( )-в intrins.h) //P3=x|0x0f; // код сканирования строки if((P3&0x0f)!=0x0f) //контроль нажатой клавиши { Delay(100); //противодребезговая задержка нажатия клавиши scan(); //функция ввода while((P3&0x0f)!=0x0f) Delay(100); //противодребезговая задержка нажатия клавиши } } } void scan(void) { if(i==0) //начало ввода {numb=0; //сброс значения вводимого числа m=0;} //нет масштаба switch (P3) //идентификация символа { case 0xf0: digit='0'; break; case 0xf1: digit='1'; break; case 0xf2: digit='2'; break; case 0xf3: digit='3'; break; case 0xf4: digit='4'; break; case 0xf5: digit='5'; break; case 0xf6: digit='6'; break; case 0xf7: digit='7'; break; case 0xf8: digit='8'; break; case 0xfa: digit='9'; break; case 0xfb: digit=','; break; case 0xfc: digit='e'; break; default: digit=0xff; } if(digit==0xFF) goto exit; //ошибочный код сканирования if(digit==',') //далее формирование масштаба { m=1;mas[i++]=digit; goto exit;} if(digit=='e') //конец ввода { if(m) numb=numb/m; i=0;m=0; goto exit; } else {mas[i++]=digit;numb=numb*10 + (digit&0xf); if(m) m*=10; } // ввод цифры и формирование масштаба exit: digit=0xff; }