Разработка цифрового термометра с диапазоном измеряемых температур 0-70 °C, страница 4

{

// инициализация дисплея

Caption();

LCD_xy(1,2);

LCD_string("Uop=");

PrintJKI(Uop,2);

LCD_xy(2,0);

LCD_string("ADCH1=");

PrintJKI(ADCH1,0);

LCD_xy(2,11);

LCD_string("T1=");

PrintJKI(T1,2);

LCD_xy(3,0);

LCD_string("ADCH2=");

PrintJKI(ADCH2,0);

LCD_xy(3,11);

LCD_string("T2=");

PrintJKI(T2,2);

// цикл меню

for(;;){

__delay_ms(STDDEL);

// обработка клавиатуры

SkanKlav(0);

if(bnID==13){  // C - выход

MenuMainInit();

return;

}

if(bnID==11){ // A-ввод Uop

LCD_xy(1,2);

LCD_string1(TCLEAR10);

_Uop=EnterFloat(_Uop,5,1,6);

Uop=_Uop;

LCD_xy(1,2);

LCD_string("Uop=");

PrintJKI(Uop,2);

}

}

}

//----------------------------------------------------------------------------float EnterFloat(float outsave,unsigned char Ns,unsigned char x,

unsigned char y)

// Ns-количество символов, выводимых при вводе (размер поля ввода)

{

// переменные функции

unsigned char id=0; // есть точка или нет

float del;          // делитель для дробного

float out=0;

// очищение пространства под ввод

LCD_xy(x,y);

for(id=1;id<=Ns;id++) LCD_char(' '); 

id=0;

LCD_xy(x,y);

LCD_inst(0x0F);

for(;;){

__delay_ms(STDDEL);

SkanKlav(0);

if(bnID==16){  // "."-ввод после точки

id=1;

del=10;

LCD_string(".");

}

if((bnID>=1)&&(bnID<=10)&&(id==0)){ // изменение целых значений

if(bnID!=10){

if(out==0){

out=bnID;

LCD_data(bnID);

}

else{

out=out*10+bnID;

LCD_data(bnID);

}

}

else{

out=out*10;

LCD_data(0);

}

}

if((bnID>=1)&&(bnID<=10)&&(id==1)){ // изменение значений после точки

if(bnID!=10){

if(out==0){

out=bnID/del;

LCD_data(bnID);

}

else{

out=out+bnID/del;

del=del*10;

LCD_data(bnID);

}

}

else{

del=del*10;

LCD_data(0);

}

}

if(bnID==11){              // A - вернуть значение

LCD_inst(0x0C);

return out;    

}

if(bnID==13){              // C - отмена ввода

LCD_inst(0x0C);

return outsave;    

}

}

//----------------------------------------------------------------------------void Caption()

{

LCD_inst(1);

LCD_xy(0,7);

LCD_string1(TKOKHNO);

}

//----------------------------------------------------------------------------void MenuKalibr()

{

// инициализация дисплея

Caption();

// ADCH=

LCD_xy(1,1);

LCD_string1(TADCH);

PrintJKI(D,0);

// Т=

LCD_xy(1,10);

LCD_string1(TT1);

PrintJKI(T,2);

// вывести...

LCD_xy(2,1);

LCD_string1(MenuCtn1);

// выход/измен

LCD_xy(3,1);

LCD_string1(MenuCtn2);

// рабочий цикл

for(;;){

__delay_ms(STDDEL);

SkanKlav(0);  

if(bnID==13){  // C - выход

MenuMainInit();

return;

if(bnID==1){  // 1 - ввод _T1

// шапка

Caption();

LCD_xy(1,0);

LCD_string1(MenuCtn3);

LCD_xy(3,0);

LCD_string1(RedBt);

// ввод ADCH1

LCD_xy(2,0);

LCD_string1(TADCH1); // ADCH1=

ADCH1=(unsigned int)EnterFloat(ADCH1,5,2,6);

//ADCH1=_ADCH1;

// ввод T1

LCD_xy(2,0);

LCD_string1(TCLEAR10);

LCD_xy(2,2);

LCD_string1(TT1); // T1=

T1=EnterFloat(T1,5,2,5);

MenuMainInit();

return;

if(bnID==2){  // 2 - ввод _T2

// шапка

Caption();

LCD_xy(1,0);

LCD_string1(MenuCtn3);

LCD_xy(3,0);

LCD_string1(RedBt);

// ввод ADCH2

LCD_xy(2,0);

LCD_string1(TADCH2); // ADCH2=

ADCH2=(unsigned char)EnterFloat(ADCH2,5,2,6);

//ADCH2=EnterInt(ADCH2,5,2,6);

// ввод T2

LCD_xy(2,0);

LCD_string1(TCLEAR10);

LCD_xy(2,2);

LCD_string1(TT2); // T2=

T2=EnterFloat(T2,5,2,5);

MenuMainInit();

return;

}

}

//-------------------------------------------------------------------В файле lcd.c добавлена функция для вывода на дисплей значения с плавающей точкой(и не только):

//-------------------------------------------------------------------// ФУНКЦИЯ КОХНО К.С.