void Display_Task(void *pvParameters ) { static volatile uint8_t str_buf[32]; task_watches[DISPLAY_TASK].task_status=TASK_ACTIVE; while(1) { vTaskDelay(300); if(display_init_counter>=DISPLAY_INIT_PERIOD) { HD44780_Reinit(HD44780_WIDTH,HD44780_HEIGHT); display_init_counter=0; } else { display_init_counter++; } UKS_Sort_Channels(&uks_channels,DRYING_CHANNELS_NUM); uint8_t i=0; switch(uks_channels.screen) { case SCREEN_INIT_HEATER: { sprintf(str_buf," Ёpoеecc Ѕaґpeіa ");/* Процесс нагрева */ HD44780_Puts(0,0,str_buf); sprintf(str_buf,"Ёo¶a»y№cїa,ѕoгo¶гёїe");/*Пожалуйста,подождите*/ HD44780_Puts(0,1,str_buf); sprintf(str_buf," "); HD44780_Puts(0,2,str_buf); float temp=uks_channels.heater_temperature; if(temp>=0) { sprintf(str_buf,"Haґpeіaїe»Д %3d.%01d \xEF\x43",(uint16_t)temp,(uint16_t)(temp*10)%10); } else { sprintf(str_buf,"Haґpeіaїe»Д-%3d.%01d \xEF\x43",(uint16_t)(-temp),(uint16_t)(((-temp)*10))%10); } HD44780_Puts(0,3,str_buf); } break; case SCREEN_HEATER_INIT_TIMEOUT: { sprintf(str_buf," OБёІєa ");/* Ошибка */ HD44780_Puts(0,0,str_buf); sprintf(str_buf," BpeјЗ Ѕaґpeіa ");// Время нагрева HD44780_Puts(0,1,str_buf); sprintf(str_buf," ѕpeіГБeЅo ");// превышено HD44780_Puts(0,2,str_buf); sprintf(str_buf," "); HD44780_Puts(0,3,str_buf); } break; case SCREEN_CHANNELS_FIRST: { for(i=0;i<HD44780_HEIGHT;i++) { float temp=uks_channels.drying_channel_sort_list[i]->temperature; if(temp<0.0) { temp=0.0; } sprintf(str_buf,"%1d %3d.%01d \xEF\x43 %s",(uks_channels.drying_channel_sort_list[i]->number+1),(uint16_t)temp,(uint16_t)(temp*10)%10,&drying_states[uks_channels.drying_channel_sort_list[i]->drying_state]); HD44780_Puts(0,i,str_buf); } } break; case SCREEN_CHANNELS_SECOND: { for(i=HD44780_HEIGHT;i<DRYING_CHANNELS_NUM;i++) { float temp=uks_channels.drying_channel_sort_list[i]->temperature; if(temp<0.0) { temp=0.0; } sprintf(str_buf,"%1d %3d.%01d \xEF\x43 %s",(uks_channels.drying_channel_sort_list[i]->number+1),(uint16_t)temp,(uint16_t)(temp*10)%10,&drying_states[uks_channels.drying_channel_sort_list[i]->drying_state]); HD44780_Puts(0,(i-HD44780_HEIGHT),str_buf); } for(i=DRYING_CHANNELS_NUM-HD44780_HEIGHT;i<HD44780_HEIGHT;i++) { sprintf(str_buf," "); HD44780_Puts(0,i,str_buf); } } break; case SCREEN_HEATER: { float temp=uks_channels.heater_temperature; sprintf(str_buf," "); HD44780_Puts(0,0,str_buf); if(temp>=0) { sprintf(str_buf,"Haґpeіaїe»Д %3d.%01d \xEF\x43",(uint16_t)temp,(uint16_t)(temp*10)%10); } else { sprintf(str_buf,"Haґpeіaїe»Д-%3d.%01d \xEF\x43",(uint16_t)(-temp),(uint16_t)(((-temp)*10))%10); } HD44780_Puts(0,1,str_buf); sprintf(str_buf," "); HD44780_Puts(0,2,str_buf); HD44780_Puts(0,3,str_buf); } break; case SCREEN_ERROR: { switch(uks_channels.device_error) { case ERROR_PHAZE: { sprintf(str_buf," OБёІєa ");/* Ошибка */ HD44780_Puts(0,0,str_buf); sprintf(str_buf," Єa·a ");// Фаза HD44780_Puts(0,1,str_buf); sprintf(str_buf," oїcyїcїіyeї ");// отсутствует HD44780_Puts(0,2,str_buf); sprintf(str_buf," "); HD44780_Puts(0,3,str_buf); } break; case ERROR_HEATER_RELAY: { sprintf(str_buf," OБёІєa ");/* Ошибка */ HD44780_Puts(0,0,str_buf); sprintf(str_buf,"Haґpeіaїe»Д ё»ё pe»e");//Нагреватель или реле HD44780_Puts(0,1,str_buf); sprintf(str_buf," ЅeёcѕpaіЅГ ");// неисправны HD44780_Puts(0,2,str_buf); sprintf(str_buf," "); HD44780_Puts(0,3,str_buf); } break; case ERROR_RELAY: { sprintf(str_buf," OБёІєa ");/* Ошибка */ HD44780_Puts(0,0,str_buf); sprintf(str_buf," Pe»e " );// Реле HD44780_Puts(0,1,str_buf); sprintf(str_buf," ЅeёcѕpaіЅo ");// неисправно HD44780_Puts(0,2,str_buf); sprintf(str_buf," "); HD44780_Puts(0,3,str_buf); } break; default: { uks_channels.screen=SCREEN_CHANNELS_FIRST; } } } break; default: { uks_channels.screen=SCREEN_CHANNELS_FIRST; } } task_watches[DISPLAY_TASK].counter++; } }
int main(void) { TRIS_KEY1 = 1; TRIS_KEY2 = 1; TRIS_LED1 = 0; TRIS_LED2 = 0; LAT_LED1 = 0; LAT_LED2 = 0; /* External Interrupts Configuration */ INTCONbits.INT0E = 1; /* Enable Interrupt 0 (RB0 as interrupt) */ INTCON2bits.INTEDG0 = 1; /* Cause Interrupt 0 at rising edge */ INTCONbits.INT0F = 0; /* Clear Interrupt 0 flag */ INTCON3bits.INT1E = 1; /* Enable Interrupt 1 (RB1 as interrupt) */ INTCON2bits.INTEDG1 = 1; /* Cause Interrupt 1 at rising edge */ INTCON3bits.INT1F = 0; /* Clear Interrupt 0 flag */ ei(); /* Global Interrupt Enable */ /* Initialize LCD 16 cols x 2 rows */ HD44780_Init(16, 2); HD44780_Puts(3, 0, "PIC18F4520"); HD44780_Puts(0, 1, "16x2 HD44780 LCD"); Delayms(2000); SSEG_Init(); KEYPAD_Init(); OpenADC(ADC_FOSC_4 & ADC_RIGHT_JUST & ADC_0_TAD, ADC_CH0 & ADC_REF_VDD_VSS & ADC_INT_OFF, ADC_1ANA); Delay(50); /* Loop forever */ while(1) { if (state == STATE_LCD) { counter = 0; lcd_flag = 0; while(lcd_flag == 0) { HD44780_Clear(); Delayms(250); HD44780_Clear(); HD44780_Puts(0, 0, "1.LCD TEST"); HD44780_Puts(0, 1, "<<ADC LED>>"); Delayms(250); counter++; if(counter > 3) {counter = 0; break;} } HD44780_Clear(); HD44780_Puts(0, 0, "1.LCD TEST"); HD44780_Puts(0, 1, "<<ADC LED>>"); while(lcd_flag == 0){ HD44780_Clear(); HD44780_Puts(0, 0, "PRESS KEY1 FOR"); HD44780_Puts(0, 1, "LEFT"); Delayms(500); HD44780_Clear(); HD44780_Puts(0, 0, "PRESS KEY2 FOR"); HD44780_Puts(0, 1, "RIGHT"); Delayms(500); counter++; if(counter > 3) {counter = 0; break;} } } else if (state == STATE_LED) { counter = 0; led_flag = 0; while(led_flag == 0) { HD44780_Clear(); Delayms(250); HD44780_Clear(); HD44780_Puts(0, 0, "2.LED TEST"); HD44780_Puts(0, 1, "<<LCD SSEG>>"); Delayms(250); counter++; if(counter > 3) {counter = 0; break;} } HD44780_Clear(); HD44780_Puts(0, 0, "2.LED TEST"); HD44780_Puts(0, 1, "<<LCD SSEG>>"); while(led_flag == 0) { LAT_LED1 = 1; LAT_LED2 = 0; Delayms(50); LAT_LED1 = 0; LAT_LED2 = 1; Delayms(50); } LAT_LED2 = 0; } else if (state == STATE_SSEG) { counter = 0; sseg_flag = 0; while(sseg_flag == 0) { HD44780_Clear(); Delayms(250); HD44780_Clear(); HD44780_Puts(0, 0, "3.SSEG TEST"); HD44780_Puts(0, 1, "<<LED KEYPAD>>"); Delayms(250); counter++; if(counter > 3) {counter = 0; break;} } HD44780_Clear(); HD44780_Puts(0, 0, "3.SSEG TEST"); HD44780_Puts(0, 1, "<<LED KEYPAD>>"); while(sseg_flag == 0) { SSEG_Print(1,sseg_counter%10); Delayms(10); SSEG_Print(2,sseg_counter/10); Delayms(10); sseg_counter++; if(sseg_counter > 99) sseg_counter = 0; } LATCbits.LATC0 = 0; LATCbits.LATC5 = 0; } else if (state == STATE_KEYPAD) { counter = 0; keypad_flag = 0; while(keypad_flag == 0) { HD44780_Clear(); Delayms(250); HD44780_Clear(); HD44780_Puts(0, 0, "4.KEYPAD TEST"); HD44780_Puts(0, 1, "<<SSEG ADC>>"); Delayms(250); counter++; if(counter > 3) {counter = 0; break;} } HD44780_Clear(); HD44780_Puts(0, 0, "4.KEYPAD TEST"); HD44780_Puts(0, 1, "<<SSEG ADC>>"); while(keypad_flag == 0) { int_key = KEYPAD_Read(); char_key = (char)KEYPAD_KeytoASCII(int_key); HD44780_CursorSet(0,0); if(int_key != 0xFF) printf("4.KEYPAD TEST: %c", char_key); Delayms(50); } } else if (state == STATE_ADC) { counter = 0; adc_flag = 0; while(adc_flag == 0) { HD44780_Clear(); Delayms(250); HD44780_Clear(); HD44780_Puts(0, 0, "5.ADC TEST"); HD44780_Puts(0, 1, "<<KEYPAD LCD>>"); Delayms(250); counter++; if(counter > 3) {counter = 0; break;} } HD44780_Clear(); HD44780_Puts(0, 0, "5.ADC TEST"); HD44780_Puts(0, 1, "<<KEYPAD LCD>>"); while(adc_flag == 0){ ConvertADC(); while( BusyADC() ); adcin = 1023 - ReadADC(); dcf_old = dcf; dcf = (1-lamda)*dcf + lamda*adcin; if(dcf != dcf_old) { HD44780_CursorSet(0,0); printf("5.ADC TEST: %4d", (int)dcf); } } } else state = STATE_LCD; } }