/** * @param pcWriteBuffer * @param xWriteBufferLen * @param pcCommandString * @return */ static BaseType_t LCD_HomeCommand(char *pcWriteBuffer, size_t xWriteBufferLen, const char *pcCommandString) { LCD_Home(); sprintf(pcWriteBuffer, "LCD move cursor home\n"); return pdFALSE; }
//This function displays any data upto 5 digits. It also requires row and column address void LCD_Print(unsigned char Row, char Col,unsigned int Val, unsigned int Digits) { unsigned char Flag=0; unsigned int Temp,Mi,Th,Hu,Te,Un=0; if(Row==0 || Col==0) { LCD_Home(); } else { LCD_Cursor(Row,Col); } if(Digits==5 || Flag==1) { Mi=Val/10000+48; LCD_Data(Mi); Flag=1; } if(Digits==4 || Flag==1) { Temp = Val/1000; Th = (Temp % 10) + 48; LCD_Data(Th); Flag=1; } if(Digits==3 || Flag==1) { Temp = Val/100; Hu = (Temp%10) + 48; LCD_Data(Hu); Flag=1; } if(Digits==2 || Flag==1) { Temp = Val/10; Te = (Temp%10) + 48; LCD_Data(Te); Flag=1; } if(Digits==1 || Flag==1) { Un = (Val%10) + 48; LCD_Data(Un); } if(Digits>5) { LCD_Data('E'); } }
/* -------------------------------------------------------------------------------- [NAME] : LCD_WriteString [TYPE] : Public API [INPUT] : v_Row_u8: Vertical Cursor Position: (Line Number 1 or 2) v_Column_u8: Horizontal Cursor Position: (1-16) p_String_u8: Pointer to the text to be written on LCD [RETURN] : None [DESCRIPTION] : This function prints the string on the LCD. The length of string should be not more than 32, if written on the 1st line and not more than 16 if written in the 2nd line -------------------------------------------------------------------------------- */ void LCD_WriteString(U8 v_Row_u8,U8 v_Column_u8,U8 *p_String_u8) { U8 a_TempBuffer_u8[16]; U8 v_Index_u8=0; U8 v_Counter_u8; U8 v_Length_u8=0; if(v_Row_u8==1) { LCD_Home(); } else LCD_NewLine(); V_LCDCommand_U8=0x38; I2C3_WRITE_Byte(C_LCD_I2CAdress,C_CommandAdr, &V_LCDCommand_U8); DELAY_mSec(1); for(v_Counter_u8=0;v_Counter_u8<(v_Column_u8-1);v_Counter_u8++) { V_LCDCommand_U8=0x14; I2C3_WRITE_Byte(C_LCD_I2CAdress,C_CommandAdr, &V_LCDCommand_U8); } while(p_String_u8[v_Index_u8++]!='\0') v_Length_u8++; v_Index_u8=0; if(v_Length_u8<=(16-v_Column_u8+1)) I2C3_WRITE_String(C_LCD_I2CAdress,C_DataAddr, p_String_u8, v_Length_u8 ); // Write Text else { if(v_Row_u8==1) { I2C3_WRITE_String(C_LCD_I2CAdress,C_DataAddr, p_String_u8, 16-v_Column_u8+1 ); for(v_Counter_u8=16-v_Column_u8+1;v_Counter_u8<v_Length_u8;v_Counter_u8++) { a_TempBuffer_u8[v_Index_u8++]=p_String_u8[v_Counter_u8]; if(v_Index_u8==16) { break; } } LCD_NewLine(); I2C3_WRITE_String(C_LCD_I2CAdress,C_DataAddr, a_TempBuffer_u8, v_Index_u8 ); } else I2C3_WRITE_String(C_LCD_I2CAdress,C_DataAddr, p_String_u8, 16-v_Column_u8+1 ); } }
void LCD_Update() { _INT3IP = 0; // Disable INT3 for temporary AdcData data = ADC_GetData(); LCD_Home(); switch(page) { case 1: LCD_Puts("Load Data "); LCD_Row(2); if (data.vLoadRms != 0 && data.iLoadRms != 0) { sprintf(lcdChar, "V:%-7.1f I:%-5.3f ", data.vLoadRms, data.iLoadRms); LCD_Puts(lcdChar); LCD_Row(3); if (data.pfLoad != 0) sprintf(lcdChar, "P:%-7.3f PF:%-6.2f ", data.pLoad, data.pfLoad); else sprintf(lcdChar, "P:%-7.3f PF:- ", data.pLoad); LCD_Puts(lcdChar); } else { if (data.vLoadRms != 0 && data.iLoadRms == 0) { sprintf(lcdChar, "V:%-7.1f I:0 ", data.vLoadRms); LCD_Puts(lcdChar); } else if (data.vLoadRms == 0 && data.iLoadRms != 0) { sprintf(lcdChar, "V:0 I:%-5.3f ", data.iLoadRms); LCD_Puts(lcdChar); } else { LCD_Puts("V:0 I:0 "); } LCD_Row(3); LCD_Puts("P:0 PF:- "); } LCD_Row(4); if (data.eLoad != 0) { sprintf(lcdChar, "E:%.4Lf kWh ", data.eLoad); LCD_Puts(lcdChar); } else LCD_Puts("E:0 kWh "); break; case 3: LCD_Puts("PV Data "); LCD_Row(2); if (data.vPV != 0 && data.iPV != 0) { sprintf(lcdChar, "V:%-6.2f I:%-6.2f ", data.vPV, data.iPV); LCD_Puts(lcdChar); } else if (data.vPV != 0 && data.iPV == 0) { sprintf(lcdChar, "V:%-6.2f I:0 ", data.vPV); LCD_Puts(lcdChar); } else if (data.vPV == 0 && data.iPV != 0) { sprintf(lcdChar, "V:0 I:%-6.2f ", data.iPV); LCD_Puts(lcdChar); } else LCD_Puts("V:0 I:0 "); LCD_Row(3); if (data.pPv != 0) { sprintf(lcdChar, "P:%-7.2f ", data.pPv); LCD_Puts(lcdChar); } else LCD_Puts("P:0 "); LCD_Row(4); if (data.ePv != 0) { sprintf(lcdChar, "E:%.4Lf kWh ", data.ePv); LCD_Puts(lcdChar); } else LCD_Puts("E:0 kWh "); break; case 2: LCD_Puts("Battery Data "); LCD_Row(2); if (data.vBatt != 0 && data.iBatt != 0) { sprintf(lcdChar, "V:%-6.2f I:%-6.2f ", data.vBatt, data.iBatt); LCD_Puts(lcdChar); } else if (data.vBatt != 0 && data.iBatt == 0) { sprintf(lcdChar, "V:%-6.2f I:0 ", data.vBatt); LCD_Puts(lcdChar); } else if (data.vBatt == 0 && data.iBatt != 0) { sprintf(lcdChar, "V:0 I:%-6.2f ", data.iBatt); LCD_Puts(lcdChar); } else LCD_Puts("V:0 I:0 "); LCD_Row(3); if (data.pBatt != 0) { if (data.percentBatt != 0) { sprintf(lcdChar, "P:%-6.2f %%Batt:%-5.2f", data.pBatt, data.percentBatt); LCD_Puts(lcdChar); } else { sprintf(lcdChar, "P:%-6.2f %%Batt:0 ", data.pBatt); LCD_Puts(lcdChar); } } else { if (data.percentBatt != 0) { sprintf(lcdChar, "P:0 %%Batt:%-5.2f", data.percentBatt); LCD_Puts( lcdChar); } LCD_Puts("P:0 %Batt:0 "); } LCD_Row(4); if (data.eBatt != 0) { sprintf(lcdChar, "E:%.4Lf kWh ", data.eBatt); LCD_Puts(lcdChar); } else LCD_Puts("E:0 kWh "); break; case 0: LCD_Puts(RTCC_GetLcdTime()); LCD_Row(2); LCD_Puts(RTCC_GetLcdDate()); LCD_Row(3); sprintf(lcdChar, "%%Eff: %-6.2f ", data.efficiency); LCD_Puts(lcdChar); LCD_Row(4); LCD_Puts(sdCardText); break; default: break; } _INT3IP = 1; // Re-enable INT3 }
int main(void) { double temp = 0; char bufor[16]; char bufor2[16]; int zadana = 40; int licznik_odczytow = 0; short grzanie = 0; short p_start = 0; short p_start_old = 0; //USTAWIENIE PORTU B JAKO WYJSCIE// DDRB = 0b11111111; //USTAWIENIE PORTU C JAKO WEJSCIE// DDRC = 0b0000000; PORTC = 0b111111; LCD_Initalize(); while (1) { //WARTOSC<<BIT //PORTB |= 1<<0; //PORTB &= 0<<0; //// ODCZYT STANU PRZYCISKÓW I TEMPERATURY //// p_start = !(PINC & (1<<3)) & 0x01; if (!(PINC & (1<<5))) { zadana = zadana + 1; } if (!(PINC & (1<<4))) { zadana = zadana - 1; } if ( (p_start == 1) & (p_start_old == 0) ) { grzanie = !grzanie; } p_start_old = p_start; if (licznik_odczytow == max_licznik) { temp = ds18b20_gettemp(); dtostrf(temp,5,1,bufor); } licznik_odczytow++; if(licznik_odczytow > max_licznik) { licznik_odczytow = 0; } if (grzanie == 1) { if (temp > zadana + histereza) { PORTB &= 0<<7; PORTB |= 1<<0; } if (temp < zadana - histereza) { PORTB |= 1<<7; PORTB |= 1<<0; } } else { PORTB &= 0<<0; PORTB &= 0<<7; } LCD_Clear(); LCD_Home(); sprintf(bufor2,"Z:%d%cC A: %cC",zadana,0xdf,0xdf); LCD_WriteText(bufor2); LCD_GoTo(9,0); LCD_WriteText(bufor); LCD_GoTo(0,1); LCD_WriteText("Grzanie:"); LCD_GoTo(10,1); if (grzanie == 1) { LCD_WriteText("WL"); } else { LCD_WriteText("WYL"); } _delay_ms(140); } }
void main(void){ unsigned char i,cmd, param[9]; //unsigned char t[]={"Hello World"}; init(); //setup the crystal, pins usbbufflush(); //setup the USB byte buffer delayMS(10); HD44780_Reset();//setup the LCD HD44780_Init(); USBDeviceInit();//setup usb while(1){ USBDeviceTasks(); if((USBDeviceState < CONFIGURED_STATE)||(USBSuspendControl==1)) continue; usbbufservice();//load any USB data into byte buffer cmd=waitforbyte();//wait for a byte from USB if(cmd!=MATRIX_ORBITAL_COMMAND){//assume text, if 254 then enter command mode LCD_WriteChar(cmd); //not a command, just write it to the display }else{//previous byte was 254, now get actual command switch(waitforbyte()){//switch on the command case BACKLIGHT_ON: //1 parameter (minutes 00=forever) param[0]=waitforbyte(); LCD_Backlight(1);//turn it on, we ignore the parameter break; case BACKLIGHT_OFF: LCD_Backlight(0);//backlight off break; case CLEAR: LCD_Clear(); break; case HOME: LCD_Home(); break; case POSITION: //2 parameters (col, row) param[0]=waitforbyte(); param[1]=waitforbyte(); cmd=( ((param[1]-1)*20) + param[0] ); //convert to 20x4 layout (used defined lines, add rows...) LCD_CursorPosition(cmd); break; case UNDERLINE_CURSER_ON: LCD_UnderlineCursor(1); break; case UNDERLINE_CURSER_OFF: LCD_UnderlineCursor(0); break; case BLOCK_CURSER_ON: LCD_BlinkCursor(1); break; case BLOCK_CURSER_OFF: LCD_BlinkCursor(0); break; case BACKLIGHT_BRIGHTNESS://1 parameter (brightness) param[0]=waitforbyte(); break; case CUSTOM_CHARACTER: //9 parameters (character #, 8 byte bitmap) LCD_WriteCGRAM(waitforbyte());//write character address for(i=1; i<9; i++){ LCD_WriteRAM(waitforbyte()); //send 8 bitmap bytes } break; default: //error break; } } CDCTxService(); } }//end main