#define MX_PIC #define MX_USES_UINT8 1 #define MX_USES_SINT16 0 #define MX_USES_CHAR 0 #define MX_USES_FLOAT 0 #define MX_USES_SINT32 0 #define MX_USES_BOOL 1 #define MX_USES_UINT16 0 #define MX_USES_UINT32 0 //Mikrovezérl? definíciók #define P16F677 #define FC_CAL_PIC #define MX_ADC #define MX_ADC_TYPE_3 #define MX_ADC_BITS_10 #define MX_EE #define MX_EE_SIZE 256 #define MX_SPI_1 #define MX_SPI_1_MISO_PORT portb #define MX_SPI_1_MISO_TRIS trisb #define MX_SPI_1_MISO_PIN 4 #define MX_SPI_1_MOSI_PORT portc #define MX_SPI_1_MOSI_TRIS trisc #define MX_SPI_1_MOSI_PIN 7 #define MX_SPI_1_CLK_PORT portb #define MX_SPI_1_CLK_TRIS trisb #define MX_SPI_1_CLK_PIN 6 #define MX_SPI_1_SS_PORT portb #define MX_SPI_1_SS_TRIS trisb #define MX_I2C #define MX_MI2C #define MX_I2C_1 #define MX_I2C_1_SDA_PORT portb #define MX_I2C_1_SDA_TRIS trisb #define MX_I2C_1_SDA_PIN 4 #define MX_I2C_1_SCL_PORT portb #define MX_I2C_1_SCL_TRIS trisb #define MX_I2C_1_SCL_PIN 6 //Függvények #define MX_CLK_SPEED 4000000 #ifdef _BOOSTC #include #endif #ifdef HI_TECH_C #include #endif //Konfigurációs adatok #ifdef _BOOSTC #pragma DATA 0x2007, 0x33f4 #endif #ifdef HI_TECH_C __CONFIG(0x33f4); #endif //Bels? függvények #include "\internals.c" //Makró deklarációk //Változó deklarációk #define FCV_TRUE (1) #define FCV_FALSE (0) //LCDDisplay(0): //Defines: /**** Macro Substitutions **** a = Unique Component Reference Number b = D1 Port Letter c = D2 Port Letter d = D3 Port Letter e = D4 Port Letter f = RS Port Letter g = E Port Letter h = Data 1_Pin i = Data 2 Pin j = Data 3 Pin k = Data 4 Pin l = RS Pin m = Enable Pin n = Row Count o = Column Count ******************************/ //component connections //Port pin lat workaround for 8-bit PIC devices running >= 32MHz //seems we need this mod for 19660800 16F1937 so changed to >= 16MHz #ifdef FC_CAL_PIC #if MX_CLK_SPEED >= 32000000 #define LCD_1__PORT0 latc #define LCD_1__PORT1 latc #define LCD_1__PORT2 latc #define LCD_1__PORT3 latc #define LCD_1__PORT4 latc #define LCD_1__PORT5 latc #else #ifdef MX_LCD_PORT_LAT #define LCD_1__PORT0 latc #define LCD_1__PORT1 latc #define LCD_1__PORT2 latc #define LCD_1__PORT3 latc #define LCD_1__PORT4 latc #define LCD_1__PORT5 latc #else #define LCD_1__PORT0 portc #define LCD_1__PORT1 portc #define LCD_1__PORT2 portc #define LCD_1__PORT3 portc #define LCD_1__PORT4 portc #define LCD_1__PORT5 portc #endif #endif #else #define LCD_1__PORT0 portc #define LCD_1__PORT1 portc #define LCD_1__PORT2 portc #define LCD_1__PORT3 portc #define LCD_1__PORT4 portc #define LCD_1__PORT5 portc #endif #define LCD_1__TRIS0 trisc #define LCD_1__TRIS1 trisc #define LCD_1__TRIS2 trisc #define LCD_1__TRIS3 trisc #define LCD_1__TRIS4 trisc #define LCD_1__TRIS5 trisc #define LCD_1__BIT0 2 #define LCD_1__BIT1 7 #define LCD_1__BIT2 6 #define LCD_1__BIT3 3 #define LCD_1__RS 0 #define LCD_1__E 1 #define LCD_1__ROWCNT 2 #define LCD_1__COLCNT 16 #ifdef _BOOSTC #define LCD_1__DELAY delay_10us(10) #endif #ifdef _C2C_ #define LCD_1__DELAY delay_us(100) #endif #ifdef HI_TECH_C #define LCD_1__DELAY __delay_us(120) #endif #ifndef LCD_1__DELAY #define LCD_1__DELAY delay_us(100) #endif //LCDDisplay(0): //Makró deklarációk void FCD_LCDDisplay0_RawSend(MX_UINT8 in, MX_UINT8 mask); void FCD_LCDDisplay0_Start(); void FCD_LCDDisplay0_Clear(); void FCD_LCDDisplay0_PrintASCII(MX_UINT8 Character); void FCD_LCDDisplay0_Command(MX_UINT8 in); void FCD_LCDDisplay0_Cursor(MX_UINT8 x, MX_UINT8 y); void FCD_LCDDisplay0_PrintNumber(MX_SINT16 Number); void FCD_LCDDisplay0_PrintString(MX_STRING String, MX_UINT8 MSZ_String); void FCD_LCDDisplay0_ScrollDisplay(MX_UINT8 Direction, MX_UINT8 Num_Positions); void FCD_LCDDisplay0_ClearLine(MX_UINT8 Line); void FCD_LCDDisplay0_RAM_Write(MX_UINT8 nIdx, MX_UINT8 d0, MX_UINT8 d1, MX_UINT8 d2, MX_UINT8 d3, MX_UINT8 d4, MX_UINT8 d5, MX_UINT8 d6, MX_UINT8 d7); //LCDDisplay(0): //Makró implementációk void FCD_LCDDisplay0_RawSend(MX_UINT8 in, MX_UINT8 mask) { MX_UINT8 pt; FC_CAL_Bit_Low(LCD_1__PORT0, LCD_1__BIT0); FC_CAL_Bit_Low(LCD_1__PORT1, LCD_1__BIT1); FC_CAL_Bit_Low(LCD_1__PORT2, LCD_1__BIT2); FC_CAL_Bit_Low(LCD_1__PORT3, LCD_1__BIT3); FC_CAL_Bit_Low(LCD_1__PORT4, LCD_1__RS); FC_CAL_Bit_Low(LCD_1__PORT5, LCD_1__E); pt = ((in >> 4) & 0x0f); if (pt & 0x01) FC_CAL_Bit_High(LCD_1__PORT0, LCD_1__BIT0); if (pt & 0x02) FC_CAL_Bit_High(LCD_1__PORT1, LCD_1__BIT1); if (pt & 0x04) FC_CAL_Bit_High(LCD_1__PORT2, LCD_1__BIT2); if (pt & 0x08) FC_CAL_Bit_High(LCD_1__PORT3, LCD_1__BIT3); if (mask) FC_CAL_Bit_High(LCD_1__PORT4, LCD_1__RS); LCD_1__DELAY; FC_CAL_Bit_High (LCD_1__PORT5, LCD_1__E); LCD_1__DELAY; FC_CAL_Bit_Low (LCD_1__PORT5, LCD_1__E); pt = (in & 0x0f); LCD_1__DELAY; FC_CAL_Bit_Low(LCD_1__PORT0, LCD_1__BIT0); FC_CAL_Bit_Low(LCD_1__PORT1, LCD_1__BIT1); FC_CAL_Bit_Low(LCD_1__PORT2, LCD_1__BIT2); FC_CAL_Bit_Low(LCD_1__PORT3, LCD_1__BIT3); FC_CAL_Bit_Low(LCD_1__PORT4, LCD_1__RS); FC_CAL_Bit_Low(LCD_1__PORT5, LCD_1__E); if (pt & 0x01) FC_CAL_Bit_High(LCD_1__PORT0, LCD_1__BIT0); if (pt & 0x02) FC_CAL_Bit_High(LCD_1__PORT1, LCD_1__BIT1); if (pt & 0x04) FC_CAL_Bit_High(LCD_1__PORT2, LCD_1__BIT2); if (pt & 0x08) FC_CAL_Bit_High(LCD_1__PORT3, LCD_1__BIT3); if (mask) FC_CAL_Bit_High(LCD_1__PORT4, LCD_1__RS); LCD_1__DELAY; FC_CAL_Bit_High (LCD_1__PORT5, LCD_1__E); LCD_1__DELAY; FC_CAL_Bit_Low (LCD_1__PORT5, LCD_1__E); LCD_1__DELAY; } void FCD_LCDDisplay0_Start() { FC_CAL_Bit_Low_DDR(LCD_1__PORT0, LCD_1__TRIS0, LCD_1__BIT0); FC_CAL_Bit_Low_DDR(LCD_1__PORT1, LCD_1__TRIS1, LCD_1__BIT1); FC_CAL_Bit_Low_DDR(LCD_1__PORT2, LCD_1__TRIS2, LCD_1__BIT2); FC_CAL_Bit_Low_DDR(LCD_1__PORT3, LCD_1__TRIS3, LCD_1__BIT3); FC_CAL_Bit_Low_DDR(LCD_1__PORT4, LCD_1__TRIS4, LCD_1__RS); FC_CAL_Bit_Low_DDR(LCD_1__PORT5, LCD_1__TRIS5, LCD_1__E); Wdt_Delay_Ms(12); FCD_LCDDisplay0_RawSend(0x33, 0); Wdt_Delay_Ms(2); FCD_LCDDisplay0_RawSend(0x33, 0); Wdt_Delay_Ms(2); FCD_LCDDisplay0_RawSend(0x32, 0); Wdt_Delay_Ms(2); FCD_LCDDisplay0_RawSend(0x2c, 0); Wdt_Delay_Ms(2); FCD_LCDDisplay0_RawSend(0x06, 0); Wdt_Delay_Ms(2); FCD_LCDDisplay0_RawSend(0x0c, 0); Wdt_Delay_Ms(2); //clear the display FCD_LCDDisplay0_RawSend(0x01, 0); Wdt_Delay_Ms(2); FCD_LCDDisplay0_RawSend(0x02, 0); Wdt_Delay_Ms(2); } void FCD_LCDDisplay0_Clear() { FCD_LCDDisplay0_RawSend(0x01, 0); Wdt_Delay_Ms(2); FCD_LCDDisplay0_RawSend(0x02, 0); Wdt_Delay_Ms(2); } void FCD_LCDDisplay0_PrintASCII(MX_UINT8 Character) { FCD_LCDDisplay0_RawSend(Character, 0x10); } void FCD_LCDDisplay0_Command(MX_UINT8 in) { FCD_LCDDisplay0_RawSend(in, 0); Wdt_Delay_Ms(2); } void FCD_LCDDisplay0_Cursor(MX_UINT8 x, MX_UINT8 y) { #if (LCD_1__ROWCNT == 1) y=0x80; #endif #if (LCD_1__ROWCNT == 2) if (y==0) y=0x80; else y=0xc0; #endif #if (LCD_1__ROWCNT == 4) if (y==0) y=0x80; else if (y==1) y=0xc0; #if (LCD_1__COLCNT == 16) else if (y==2) y=0x90; else y=0xd0; #endif #if (LCD_1__COLCNT == 20) else if (y==2) y=0x94; else y=0xd4; #endif #endif FCD_LCDDisplay0_RawSend(y+x, 0); Wdt_Delay_Ms(2); } void FCD_LCDDisplay0_PrintNumber(MX_SINT16 Number) { MX_SINT16 tmp_int; MX_UINT8 tmp_byte; if (Number < 0) { FCD_LCDDisplay0_RawSend('-', 0x10); Number = 0 - Number; } tmp_int = Number; if (Number >= 10000) { tmp_byte = tmp_int / 10000; FCD_LCDDisplay0_RawSend('0' + tmp_byte, 0x10); while (tmp_byte > 0) { tmp_int = tmp_int - 10000; tmp_byte--; } } if (Number >= 1000) { tmp_byte = tmp_int / 1000; FCD_LCDDisplay0_RawSend('0' + tmp_byte, 0x10); while (tmp_byte > 0) { tmp_int = tmp_int - 1000; tmp_byte--; } } if (Number >= 100) { tmp_byte = tmp_int / 100; FCD_LCDDisplay0_RawSend('0' + tmp_byte, 0x10); while (tmp_byte > 0) { tmp_int = tmp_int - 100; tmp_byte--; } } if (Number >= 10) { tmp_byte = tmp_int / 10; FCD_LCDDisplay0_RawSend('0' + tmp_byte, 0x10); while (tmp_byte > 0) { tmp_int = tmp_int - 10; tmp_byte--; } } FCD_LCDDisplay0_RawSend('0' + tmp_int, 0x10); } void FCD_LCDDisplay0_PrintString(MX_STRING String, MX_UINT8 MSZ_String) { MX_UINT8 idx = 0; for (idx=0; idx