SSP2CON1 = b;
}
-#elif defined(_I2C_IO_ONE_MSSP)
+#else
+ #ifdef _I2C_IO_ONE_MSSP
void i2c1_init(void)
{
unsigned char b;
i2c1_init();
}
-#else // None MSSP, Software I2C
+ #else // None MSSP, Software I2C
void i2c1_init(void)
{
}
void i2c2_init(void)
{
}
-#endif
+ #endif
+#endif
\ No newline at end of file
/*
* Machine depended flags
*/
-#if defined(__18F23K22) || defined(__18F24K22) || defined(__18F25K22) || defined(__18F26K22)
+#if defined(pic18f23k22) || defined(pic18f24k22) || defined(pic18f25k22) || defined(pic18f26k22)
#define _I2C_IO_TWO_MSSPS
#define _PIO_HAS_THREE
#endif
-#if defined(__18F23K20) || defined(__18F24K20) || defined(__18F25K20) || defined(__18F26K20)
+#if defined(pic18f23k20) || defined(pic18f24k20) || defined(pic18f25k20) || defined(pic18f26k20)
#define _I2C_IO_ONE_MSSP
#define _PIO_HAS_THREE
#endif
-#if defined(__18F43K20) || defined(__18F44K20) || defined(__18F45K20) || defined(__18F46K20)
+#if defined(pic18f43k20) || defined(pic18f44k20) || defined(pic18f45k20) || defined(pic18f46k20)
#define _I2C_IO_ONE_MSSP
#define _PIO_HAS_FIVE
#endif
i2c_writechar(0x00);
i2c_writechar(cmd);
CLOSEASMASTER();
- delay1ktcy(1); // 0.1ms
-}
-
-static void delay_lcd(void)
-{
- _ACM1602_LONG_WAIT(); // Wait 0.1ms
+ _ACM1602_I2C_WAIT(); // 0.2ms
}
static void acm1602_ioinit(unsigned char addr)
{
+ _ACM1602_LONG_LONG_WAIT();
return;
}
i2c_writechar(0x80); //Data
i2c_writechar(c); // Putchar
CLOSEASMASTER();
- _ACM1602_SHORT_WAIT(); // Wait 0.1ms
+ _ACM1602_SHORT_WAIT(); // Wait 50us
}
#else // Parallel
-
-static void delay_lcd(void)
+static void sendcmd(unsigned char addr, unsigned char cmd)
{
- _ACM1602_LONG_WAIT();
+ unsigned char b;
+ b = _LCDPORT_CONT;
+ b &= ~(_LCDPORT_CONT_RS | _LCDPORT_CONT_RW); // RS='0',RW='0'
+ _LCDPORT_CONT_LATCH = b;
+ _LCDPORT_LATCH_DATA = cmd;
+ b |= _LCDPORT_CONT_EN; // Send CMD
+ _LCDPORT_CONT_LATCH = b;
+ _ACM1602_TC_WAIT(); // Wait 2.5?us
+ b &= ~_LCDPORT_CONT_EN; // Disable EN
+ _LCDPORT_CONT_LATCH = b;
+ // End of Command.
}
static void acm1602_ioinit(unsigned char addr)
{
unsigned char b;
+
+ _ACM1602_LONG_LONG_WAIT();
b = _LCDPORT_TRIS_CONT;
b &= ~(_LCDPORT_CONT_RS | _LCDPORT_CONT_RW | _LCDPORT_CONT_EN);
_LCDPORT_TRIS_CONT = b; // Clear Tristate bits, output.
_LCDPORT_LATCH_DATA = 0x00;
}
-static void sendcmd(unsigned char addr, unsigned char cmd)
-{
- unsigned char b;
- b = _LCDPORT_CONT;
- b &= ~(_LCDPORT_CONT_RS | _LCDPORT_CONT_RW); // RS='0',RW='0'
- _LCDPORT_CONT_LATCH = b;
- _LCDPORT_LATCH_DATA = cmd;
- b |= _LCDPORT_CONT_EN; // Send CMD
- _LCDPORT_CONT_LATCH = b;
- _ACM1602_TC_WAIT(); // Wait 2.5?us
- b &= ~_LCDPORT_CONT_EN; // Disable EN
- _LCDPORT_CONT_LATCH = b;
- // End of Command.
-}
-
void acm1602_putchar(unsigned char addr, unsigned char c)
{
unsigned char b;
void acm1602_cls(unsigned char addr)
{
sendcmd(addr, 0x01);
- delay_lcd();
+ _ACM1602_LONG_WAIT(); // Wait 5ms
}
void acm1602_locate(unsigned char addr, char x, char y)
void acm1602_home(unsigned char addr)
{
sendcmd(addr, 0x02);
- delay_lcd();
+ _ACM1602_LONG_WAIT(); // Wait 5ms
}
void acm1602_printf(unsigned char addr, const char *fmt, ...)
{
acm1602_ioinit(addr);
sendcmd(addr, 0x38); // 2lines, 8x10dot fonts.
+ _ACM1602_SHORT_WAIT();
+ sendcmd(addr, 0x38); // 2lines, 8x10dot fonts.
+ _ACM1602_SHORT_WAIT();
sendcmd(addr, 0x0f); // Display ON.
+ _ACM1602_SHORT_WAIT();
if(cls == 0){
acm1602_home(addr);
} else {
acm1602_cls(addr);
}
+ sendcmd(addr, 0b00000110); // Cursor increment,not shift.
+ _ACM1602_SHORT_WAIT();
}
\ No newline at end of file
#define _ACM1602_SHORT_WAIT() delay100tcy(4)
// Wait 5ms
#define _ACM1602_LONG_WAIT() delay1ktcy(40)
+// Wait 50ms
+#define _ACM1602_LONG_LONG_WAIT() delay10ktcy(40)
+// Wait 0.2ms
+#define _ACM1602_I2C_WAIT() delay100tcy(16)
void acm1602_cls(unsigned char addr);
void acm1602_putchar(unsigned char addr, unsigned char c);
/*
* Config words.
*/
-#if defined(__18F23K22) || defined(__18F24K22) || defined(__18F25K22) || defined(__18F26K22)
+#if defined(pic18f23k22) || defined(pic18f24k22) || defined(pic18f25k22) || defined(pic18f26k22)
#pragma stack 0x200 256 // Set stack size to 256bytes.
#pragma config FOSC=INTIO67,BORV=190,BOREN=ON,PWRTEN=ON
#pragma config WDTEN=ON,WDTPS=32768
#pragma config EBTR0=OFF,EBTR1=OFF,EBTRB=OFF
#endif
// For 4xK20 or 2xK20 Series
-#if defined(__18F43K20) || defined(__18F44K20) || defined(__18F45K20) || defined(__18F46K20) || \
- defined(__18F23K20) || defined(__18F24K20) || defined(__18F25K20) || defined(__18F26K20)
+#if defined(pic18f43k20) || defined(pic18f44k20) || defined(pic18f45k20) || defined(pic18f46k20) || \
+ defined(pic18f23k20) || defined(pic18f24k20) || defined(pic18f25k20) || defined(pic18f26k20)
#pragma stack 0x200 256
#pragma config FOSC=INTIO67,FCMEN=ON,PWRT=ON,BOREN=ON,BORV=22
#pragma config WDTEN=ON,WDTPS=32768,PBADEN=OFF,LPT1OSC=ON,MCLRE=ON
-#pragma config STRVEN=ON,DEBUG=ON
+#pragma config STVREN=ON,DEBUG=ON
#pragma config CP0=OFF,CP1=OFF,CP2=OFF,CP3=OFF
#pragma config CPB=OFF,CPD=OFF
#pragma config WRT0=OFF,WRT1=OFF,WRT2=OFF,WRT3=OFF
#pragma config WRTC=OFF,WRTB=OFF,WRTD=OFF
-#pragma config EBTR0=OFF,EBTR1=OFFEBTR2=OFF,EBTR3=OFF,EBTRB=OFF
-#else // Another words.
-
+#pragma config EBTR0=OFF,EBTR1=OFF,EBTR2=OFF,EBTR3=OFF,EBTRB=OFF
#endif
keyin_counter = 0;
}
-
-#if defined(__18F23K22) || defined(__18F24K22) || defined(__18F25K22) || defined(__18F26K22)
+#if defined(pic18f23k22) || defined(pic18f24k22) || defined(pic18f25k22) || defined(pic18f26k22)
/*
* For 28Pin PIC(18F2xK22), I2C lcd using.
*/
ANSELC = AN_C_VAL;
TRISC = TRIS_C_VAL_O;
}
-#elif defined(__18F23K20) || defined(__18F24K20) || defined(__18F25K20) || defined(__18F26K20)
+#endif
+
+#if defined(pic18f23k20) || defined(pic18f24k20) || defined(pic18f25k20) || defined(pic18f26k20)
/*
* For 28Pin PIC(18F2xK20), I2C lcd using.
*/
LATC = 0x00;
TRISC = TRIS_C_VAL_O;
}
+#endif
-
-#elif defined(__18F43K20) || defined(__18F44K20) || defined(__18F45K20) || defined(__18F46K20)
+#if defined(pic18f43k20) || defined(pic18f44k20) || defined(pic18f45k20) || defined(pic18f46k20)
/*
* For 40Pin PIC(18F4xK20), paralell or I2C lcd using.
*/