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");
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.