#include #include char CGRAM_data[]={ 0x08,0x1F,0x02,0x0F,0x0A,0x1F,0x02,0x02, 0X55,0X55,0X55,0X55,0X55,0X55,0X55,0X55, 0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA,0XAA, 0XFF,0X00,0XFF,0X00,0XFF,0X00,0XFF,0X00, 0X00,0XFF,0X00,0XFF,0X00,0XFF,0X00,0XFF, 0XFF,0X11,0X11,0X11,0X11,0X11,0X11,0XFF, 0XFF,0X11,0X11,0X11,0X11,0X11,0X11,0XFF, 0XFF,0X11,0X11,0X11,0X11,0X11,0X11,0XFF }; char GRAM_data_nian[]={ 0x08,0x1F,0x02,0x0F,0x0A,0x1F,0x02,0x02 }; void transfer(int data1) { int i; for(i=0;i<8;i++) { digitalWrite(SCL, LOW); if(data1&0x80) digitalWrite(SDA, HIGH); else digitalWrite(SDA, LOW); digitalWrite(SCL, HIGH); digitalWrite(SCL, LOW); data1=data1<<1; } digitalWrite(SDA, LOW); digitalWrite(SCL, HIGH); digitalWrite(SCL, LOW); } //LiquidCrystal_I2C lcd(0x78,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display void start_flag() { digitalWrite(SCL, HIGH); digitalWrite(SDA, HIGH); digitalWrite(SDA, LOW); } void stop_flag() { digitalWrite(SCL, HIGH); digitalWrite(SDA, LOW); digitalWrite(SDA, HIGH); } /* void waitkey() { delay(500); } */ void initial_lcd() { start_flag(); transfer(0x78); transfer(0x00); transfer(0x38); // function set transfer(0x0c); // display on/off transfer(0x01); // clear display transfer(0x06); stop_flag(); } void write_CGRAM() { int i; char *dp=CGRAM_data; start_flag(); transfer(0x78); transfer(0x80); transfer(0x40); transfer(0x40); for(i=0;i<64;i++) { transfer(*dp); dp=dp+1; } stop_flag(); } void disp_CGRAM() { int i; start_flag(); transfer(0x78); transfer(0x80); transfer(0x80); transfer(0x40); for(i=0;i<16;i++) { transfer(0x01); } stop_flag(); start_flag(); transfer(0x78); transfer(0x80); transfer(0xc0); transfer(0x40); for(i=0;i<16;i++) { transfer(0x01); } stop_flag(); } void disp_char(int line,int column,char *dp) { int i; start_flag(); transfer(0x78); transfer(0x80); transfer(0x80+(line-1)*0x40+(column-1)); transfer(0x40); for(i=0;i<16;i++) { transfer(*dp); dp=dp+1; } stop_flag(); } void setup() { pinMode(SCL, OUTPUT); pinMode(SDA, OUTPUT); delay(100); initial_lcd(); } void loop() { write_CGRAM(); disp_char(1,1,"*16*2 LCM no BL*"); disp_char(2,1,"**JLX1602I LCM**"); transfer(0x01); // clear display delay(2000); disp_char(1,1,"1111111111111111"); disp_char(2,1,"2222222222222222"); transfer(0x01); // clear display delay(2000); }