LCD_write_CGRAM(0x02,&bgpat2[0]);
__enable_interrupt(); // Запускпрерываний
LCD_cursor(0x0);
LCD_string(&text01[0]);
LCD_cursor(0x40);
LCD_string(&text02[0]);
vWait10(200);
LCD_cursor(0x0);
LCD_string(&text03[0]);
LCD_cursor(0x40);
LCD_string(&text04[0]);
vWait10(200);
LCD_cursor(0x0);
LCD_string(&text05[0]);
if(set_done!=0xa5)
{
menu=1;
LCD_cursor(0x40);
LCD_string(&text07[0]);
}
else
{
menu=0;
LCD_cursor(0x40);
LCD_string(&text06[0]);
}
vWait10(200);
LCD_inst(0x01);
LED = 0xff;
//Расчёттемпературы
long Kt;
char key;
signed long A[10], B[10]; // Массив переменных описывающих аппроксимирующую прямую
A[1]=149253; B[1]=-121641;
A[2]=140845; B[2]=-114788;
A[3]=133333; B[3]=-108133;
A[4]=128205; B[4]=-103205;
A[5]=125000; B[5]=-100000;
A[6]=120481; B[6]=-95301;
A[7]=116279; B[7]=-90581;
A[8]=109890; B[8]=-82857;
A[9]=106382; B[9]=-78297;
while(1)
{
temperature = ACP;
Kt=1689340/temperature;
Kt=Kt-1675;
if (Kt>748&Kt<815)
key=1;
if (Kt>815&Kt<866)
key=2;
if (Kt>866&Kt<961)
key=3;
if (Kt>961&Kt<1)
key=4;
if (Kt>1&Kt<1040)
key=5;
if (Kt>1040&Kt<1123)
key=6;
if (Kt>1123&Kt<1209)
key=7;
if (Kt>1209&Kt<1300)
key=8;
if (Kt>1300&Kt<1394)
key=9;
temperature=(A[key]*Kt+B[key]*1000)/100000;
Output_result( temperature_out ); // ВыводтемпературынаЖКИ
switch(menu)
{
case(1): LCD_cursor(0x0);
LCD_string(&text03[0]);
LCD_cursor(0x40);
LCD_char(0x20);
LCD_inst(0x0c);
temperature_out=temperature; //Условиядлязажиганиясветодиодов
if (temperature>temperature_max)
{
LED=0x000;
}
else
LED=0xFF;
break;
case(0):
LCD_cursor(0x40);
LCD_char(0x02);
if(bKey3Flag>=2) // Key SW3 pressed ?
{
bKey3Flag=0;
if((temperature_max>=0)&(temperature_max<700))
{
temperature_max+=50;
temperature_out=temperature_max;
}
else temperature_max = 0;
}
LCD_cursor(0x0);
LCD_string(&text05[0]);
LCD_cursor(0x45);
LCD_inst(0x0d);
break;
}
if(bKey2Flag>=2)
{
bKey2Flag=0;
menu++;
if(menu==2)
{
set_done=0xa5;
menu=0;
}
}
vWait10(30);
}
}
Функции, отвечающие за прерывания:
//----------------------------------------------------------------------------// Название: vTimer0
// Описание: Прерывание 16-битного таймера
//----------------------------------------------------------------------------#pragma vector = INTTM000_vect
__interrupt void vTimer0(void)
{
bTimer1Flag = 1;
}
//----------------------------------------------------------------------------// Название: Watchtimer
// Описание: Отвечает за прерывания службы Watchtimer
//----------------------------------------------------------------------------#pragma vector = INTWT_vect
__interrupt void Watchtimer(void)
{
bWatchTimer = !bWatchTimer ;
if(bWatchTimer)
{
while(!ADIF);
ACP = ADCR >> 6;
}
}
//----------------------------------------------------------------------------// Название: vKey3
// Описание: Внешние прерывания P1 (-> кнопка SW3)
//----------------------------------------------------------------------------#pragma vector = INTP1_vect
__interrupt void vKey3(void)
{
bKey3Flag++ ;
}
//----------------------------------------------------------------------------// Название: vKey2
// Описание: Внешние прерывания P0 (-> кнопка SW2)
//----------------------------------------------------------------------------#pragma vector = INTP0_vect
__interrupt void vKey2(void)
{
bKey2Flag++ ;
}
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.