#include #include #include #define RS '\001' #define ENABLE2 '\002' #define ENABLE '\004' #define DB4 '\010' #define DB5 '\020' #define DB6 '\040' #define DB7 '\100' #define ONE_LINE '\000' #define TWO_LINE DB7 #define F5x7 '\000' #define F5x10 DB7 #define INC DB5 #define DEC '\000' #define SHIFT DB4 #define CURSOR '\000' #define HIGH(x) ((x>>1)&'\170') #define LOW(x) ((x<<3)&'\170') #define WRITEINV(c) WriteFile( fh, &c, 1, &dw, NULL ) #define oute(c,en) out(c); out(c|en);Sleep(2);out(c) HANDLE fh; DWORD dw; void toggle( unsigned char c ) { WRITEINV(c); } void out( unsigned char c ) { WRITEINV(c); } void outchar( unsigned char c, unsigned char en ) { oute( HIGH(c)|RS, en ); oute( LOW(c)|RS, en ); } void outaddr( unsigned char c, unsigned char en ) { oute( HIGH(c), en ); oute( LOW(c), en ); } void init_lcd( unsigned char N, unsigned char F, unsigned char I_D, unsigned char S, unsigned char en ) { Sleep( 15L ); out( DB4 | DB5 | en ); Sleep( 5L ); out( DB4 | DB5 ); out( DB4 | DB5 | en ); Sleep( 5L ); out( DB4 | DB5 ); out( DB4 | DB5 | en ); Sleep( 5L ); oute( DB5, en ); oute( DB5, en ); oute( N | F, en ); oute( 0, en ); oute( DB7 | DB6 | DB5 | DB4, en ); oute( 0, en ); oute( DB4, en ); oute( 0, en ); oute( DB6 | I_D | S, en ); } unsigned char bits[]="\001\003\007\017\037\077\177\377"; main ( int argc, unsigned char *argv[] ) { int i; fh = CreateFile( argv[1], GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, 0 ); printf( "fh=%d\n", fh ); if ( fh != -1 ) { #if 0 for ( ;; ) { for ( i = 0; i < sizeof(bits); i++ ) { WriteFile( fh, &(bits[i]), 1, &dw, NULL ); WriteFile( fh, "\0", 1, &dw, NULL ); } } printf( "dw=%d\n", dw ); #else init_lcd( TWO_LINE, F5x10, INC, CURSOR, ENABLE ); init_lcd( TWO_LINE, F5x10, INC, CURSOR, ENABLE2 ); outaddr( '\x80', ENABLE ); outchar( 'h', ENABLE ); outaddr( '\x81', ENABLE ); outchar( 'i', ENABLE ); outaddr( '\x80', ENABLE2 ); outchar( 'b', ENABLE2 ); outaddr( '\x81', ENABLE2 ); outchar( 'y', ENABLE2 ); #endif CloseHandle( fh ); } return (0); }