void LCD_ShowSPPV(uint8_t event){ char buff[16]; sprintf(buff, "SP: %d", SP); LCD_WriteTextXY(buff, 0, 0); sprintf(buff, "PV: %d", PV); LCD_WriteTextXY(buff, 0, 1); TIM_Cmd(TIM3, ENABLE); // Wlacz Tim2 }
void TIM3_IRQHandler(void){ char buff[16]; sprintf(buff, "SP: %d", SP); LCD_WriteTextXY(buff, 0, 0); sprintf(buff, "PV: %d", PV); LCD_WriteTextXY(buff, 0, 1); TIM_ClearITPendingBit(TIM3,TIM_IT_CC3); // Clear interruption bit }
/******************************************************************************* * Function Name : RTC_IRQHandler * Description : This function handles RTC global interrupt request. * Input : None * Output : None * Return : None *******************************************************************************/ void RTC_IRQHandler(void) { volatile unsigned long int stanRTC; static unsigned char stanRTCTekst[17] = {"0\0"}; unsigned long int godziny, minuty, sekundy; if (RTC_GetITStatus(RTC_IT_SEC) != RESET) { // Czekaj na zakonczenie ewentualnych operacji zapisu do rejestrów RTC RTC_WaitForLastTask(); // Wyczysc flage od przerwania RTC RTC_ClearITPendingBit(RTC_IT_SEC); // Zmiana stanu wyprowadzenia PB15 co 1s GPIO_WriteBit(GPIOB, GPIO_Pin_15, (BitAction)(1 - GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_15))); stanRTC=RTC_GetCounter(); //sprintf((char *)stanRTCTekst,"%16i\0",stanRTC); //LCD_WriteTextXY(stanRTCTekst,0,1); sekundy=stanRTC%60; //liczba sekund od ostatniej pelnej minuty minuty=(long int)(stanRTC)/60; //dzielenie calkowite, "usuniecie" sekund, czas pracy w samych minutach godziny=(long int)(minuty)/60; //dzielenie calkowite, "usuniecie" minut, czas pracy w samych godzinach minuty=minuty%60; //liczba minut od ostatniej pelnej godziny sprintf((char *)stanRTCTekst,"%3i:%02i:%02i\0",godziny,minuty,sekundy); LCD_WriteTextXY(stanRTCTekst,7,1); } }
void EditTd(uint8_t event){ char buff[16]; if(menu_event == E_UP) PID._Td += 0.1; if(menu_event == E_DOWN) PID._Td -= 0.1; sprintf(buff, "%.2f", PID._Td); LCD_WriteTextXY(buff, 0,1); }
int main(void) { volatile unsigned long int i; int temperatura; unsigned char temperaturaTekst[8]={" 0,0 C\0"}; static const unsigned char stopienSymbol[8] = {0x06,0x09,0x09,0x06,0x00,0x00,0x00,0}; //symbol stopnia //konfiguracja systemu RCC_Config(); GPIO_Config(); NVIC_Config(); SPI_Config(); /*Tu nalezy umiescic ewentualne dalsze funkcje konfigurujace system*/ GPIO_ResetBits(GPIOB, GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15); LCD_Initialize(); //Inicjalizacja wysietlacza LCD_SetUserChar(1, 1, stopienSymbol); //Umiesc symbol stopnia pod kodem =1 LCD_WriteCommand(HD44780_CLEAR); //Wyczysc wyswietlacz LCD_WriteText("Temp.:\0"); temperaturaTekst[5]=1; LCD_WriteTextXY(temperaturaTekst,7,0); //Wstaw do tekstu znak stopnia #define SPI_Mode_Slave_Mask ((unsigned short int)0xFEFB) //Maska pozwalajaca wyzerowac bity trybu pracy wprost w rejestrzez SPIx->CR1 while (1) { /*Tu nalezy umiescic glowny kod programu*/ SPI1->CR1 |= SPI_Mode_Master; //Ustaw tryb master - wymusi to zmiane stanu NSS na niski while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET); //Czekaj na dane temperatura = SPI_I2S_ReceiveData(SPI1); //Odczytaj dane if ((temperatura&0x04)==0){ //Sprawdz, czy zakonczono juz pierwszy pomiar po wlaczeniu ukladu TC77 temperatura=0; //Jesli nie, ustaw temp=0, wprzeciwnym razie wynik bedzie bledny (>500stC) } temperatura = temperatura >> 3; //Usun 3 LSB SPI1->CR1 &= SPI_Mode_Slave_Mask; //Ustaw tryb slave - wymusi to zmiane stanu NSS na wysoki temperatura = (temperatura * 625)/100; //1 bit temperatury odpowiada 0,0625 stopnia sprintf((char *)temperaturaTekst, "%2d,%d C ", temperatura / 100, (temperatura % 100)/10 ); temperaturaTekst[4]=1; //Wstaw do tekstu znak stopnia LCD_WriteTextXY(temperaturaTekst,7,0); for (i=0;i<4500000ul;i++); GPIO_WriteBit(GPIOB, GPIO_Pin_15, (BitAction)(1-GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_15))); }; return 0; }
void EditSP(uint8_t event){ TIM_Cmd(TIM3, DISABLE); // Wylacz Tim2 char buff[16]; if(menu_event == E_UP){ if(SP < 4095) SP += 100; } if(menu_event == E_DOWN){ if(SP > 0) SP-=100; } sprintf(buff, "%d", SP); LCD_WriteTextXY(buff, 0,1); }
void ChangeMenu(void) { //przejdz do nastepnego stanu current_menu = menu[current_menu].next_state[menu_event]; LCD_Clear(); LCD_WriteTextXY(menu[current_menu].first_line, 0, 0); //wywolaj funkcje zwrotna if (menu[current_menu].callback) menu[current_menu].callback(menu_event); //wyswietl komunikat //skasuj zdarzenie menu_event = E_IDLE; TIM_Cmd(TIM2, DISABLE); // Wylacz przerwania od Tim2 }
void LCD_ShowPID(uint8_t event){ char buff [16]; sprintf(buff, "P=%.1fI=%.1fD=%.1f", PID._Kp, PID._Ti, PID._Td); LCD_WriteTextXY(buff, 0,1); TIM_Cmd(TIM3, DISABLE); // Wy³acz TIM3 }