示例#1
0
/**
 * @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;

}
示例#2
0
文件: Lcd.c 项目: eyantra/cs308_2014
//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');
 }
	
}
示例#3
0
文件: ELB_LCD.c 项目: kunal15595/pic
/*
--------------------------------------------------------------------------------
[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 );
    }

}
示例#4
0
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
}
示例#5
0
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