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

ADCSRA=0xA0;      // 10100000  вкл ацп

ADMUX=0xE0;       // 11100000  ИОН=2.56В ADLAR=1

ADCSRA=0xC7;      // 11000111 вкл преобразования

// Uop=4.94;         //           опорное напряжение от USB

// Uop=4.78;

// Главное меню

MenuMain();

//  return 0;

}

Файл KRMenuList.c:

#include <intrinsics.h>

#include <iom16.h>

#include "defines.h"

#include "lcd.h"

unsigned char bnIDl;   // предыдущая нажатая клавиша (служебная)

unsigned char bnID;    // текущая нажатая клавиша

unsigned char SDOUT;   // вкл/выкл индикатор цикла

unsigned char D;       // значение АЦП

float U;               // текущее напряжение на АЦП

float T;               // текущая температура

float Uop;

__flash char Cexit[]   ="C-выход";

__flash char Bcikl[]   ="B-цикл";

__flash char RedBt[]   ="A-присвоить  C-выход";

__flash char TADCH[]   ="ADCH=";

__flash char TT2[]     ="T2=";

__flash char TT1[]     ="T1=";

__flash char TADCH1[]  ="ADCH1=";

__flash char TADCH2[]  ="ADCH2=";

__flash char MenuCtn1[]="Ввести: 1-Т1 2-Т2";

__flash char MenuCtn2[]="С-Выход";

__flash char MenuCtn3[]="Присвоить значение:";

__flash char TKOKHNO[] = "Кохно РМС7-71";

__flash char TU[]= "U=";

__flash char TT[]= "T=";

__flash char TCLEAR10[]="          ";

__no_init __eeprom float _Uop;  // опорное напряжение

__no_init __eeprom float T1;   // температура мин  напряжения

__no_init __eeprom float T2;   // температура макс напряжения

__no_init __eeprom  int ADCH1;   // ADCH для T1

__no_init __eeprom  int ADCH2;   // ADCH для T2

//----------------------------------------------------------------------------void SkanKlav(unsigned char mod)

// возвращает адрес нажатой клавиши

// mod=1 значит, что значение клавиши возвращается 1 раз за нажатие

{

// нажата ли какая либо клавиша

PORTB=0xF0;   // 11110000

bnID=0;

if((PINB&0xFF)>0xF0){

PORTB=128;                  // 10000000

__delay_ms(keyDEL);

if((PINB&8)==8) bnID=1;     // 00001000 (1)

if((PINB&4)==4) bnID=4;     // 00000100 (4)

if((PINB&2)==2) bnID=7;     // 00000010 (7)

if((PINB&1)==1) bnID=15;    // 00000001 (*)

PORTB=64;                   // 01000000

__delay_ms(keyDEL);

if((PINB&8)==8) bnID=2;     // 00001000 (2)

if((PINB&4)==4) bnID=5;     // 00000100 (5)

if((PINB&2)==2) bnID=8;     // 00000010 (8)

if((PINB&1)==1) bnID=10;    // 00000001 (0)

PORTB=32;                   // 00100000

__delay_ms(keyDEL);

if((PINB&8)==8) bnID=3;     // 00001000 (3)

if((PINB&4)==4) bnID=6;     // 00000100 (6)

if((PINB&2)==2) bnID=9;     // 00000010 (9)

if((PINB&1)==1) bnID=16;    // 00000001 (#)

PORTB=16;                   // 00010000

__delay_ms(keyDEL);

if((PINB&8)==8) bnID=11;    // 00001000 (A)

if((PINB&4)==4) bnID=12;    // 00000100 (B)

if((PINB&2)==2) bnID=13;    // 00000010 (C)

if((PINB&1)==1) bnID=14;    // 00000001 (D)

}

// изменение статуса кнопки в соответствии с модом

if(mod==1)  bnIDl=bnID;

if(mod==0)

if(bnID!=bnIDl)  // если новая кнопка или отжали

bnIDl=bnID;

else{

if(bnID==0) bnIDl=0;

bnID=0;        // если нажата таже кнопка

//bnIDl=0;

}

// вывод кода клавиши

/* LCD_xy(0,1);

if(bnID==0)  LCD_string("_");

if(bnID==1)  LCD_string("1");

if(bnID==2)  LCD_string("2");

if(bnID==3)  LCD_string("3");

if(bnID==4)  LCD_string("4");

if(bnID==5)  LCD_string("5");

if(bnID==6)  LCD_string("6");