void lcd_invert() { for ( uint8_t pageloop = 0; pageloop < 8; pageloop++ ) { wait_while_busy(CHIP1); wait_while_busy(CHIP2); lcd_cmd_write(CMD_LCD_SET_ADDRESS|ADDRESS0, CHIP1|CHIP2); lcd_cmd_write(CMD_LCD_SET_PAGE|pageloop, CHIP1|CHIP2); lcd_dummy_read(CHIP1); lcd_dummy_read(CHIP2); for ( uint8_t chip = CHIP1; chip <= CHIP2; chip++ ) { uint8_t data[64]; uint8_t loop; for ( loop = 0; loop < 64; loop++ ) { wait_while_busy(chip); data[loop] = lcd_data_read(chip); } wait_while_busy(chip); lcd_cmd_write(CMD_LCD_SET_ADDRESS|ADDRESS0, chip); for ( loop = 0; loop < 64; loop++ ) { wait_while_busy(chip); lcd_data_write(~data[loop], chip); } } } }
void GoTo(unsigned char x, unsigned char y){ switch (y) { case 0: lcd_cmd_write(SET_DRAM_ADDR+x); lcd_wait(WAIT_15m); break; case 1: lcd_cmd_write(SET_DRAM_ADDR+line_1+x); lcd_wait(WAIT_15m); break; case 2: lcd_cmd_write(SET_DRAM_ADDR+line_2+x); lcd_wait(WAIT_15m); break; case 3: lcd_cmd_write(SET_DRAM_ADDR+line_3+x); lcd_wait(WAIT_15m); break; default: break; } }
void lcd_set_pixel(uint8_t x, uint8_t y, char color) { uint8_t chip, page; if ( x < 64 ) chip = CHIP1; else { chip = CHIP2; x -= 64; } page = y/8; y = y%8; wait_while_busy(chip); lcd_cmd_write(CMD_LCD_SET_ADDRESS|x,chip); lcd_cmd_write(CMD_LCD_SET_PAGE|page,chip); lcd_dummy_read(chip); wait_while_busy(chip); uint8_t data; data = lcd_data_read(chip); if (color) data |= (1<<y); else data &= ~(1<<y); lcd_cmd_write(CMD_LCD_SET_ADDRESS|x,chip); lcd_data_write(data,chip); }
/*************************************************************************************************** * @fn lcd_cursor_addr_set * * @brief LCD数据批量写入 * @param x,y坐标 * @return 0 -- success ***************************************************************************************************/ int lcd_cursor_addr_set(uint8_t x, uint8_t y) { lcd_cmd_write(x&0x0F); //Set Column Address LSB CA[3:0] lcd_cmd_write((x>>4)|0x10); //Set Column Address MSB CA[7:4] lcd_cmd_write((y&0x0F)|0x60); //Set Row Address LSB RA [3:0] lcd_cmd_write(((y>>4)&0x0F)|0x70); //Set Row Address MSB RA [7:4] return 0; }
void lcd_clear() { for(uint8_t y = 0; y < 8; y++) { lcd_cmd_write(CMD_LCD_SET_PAGE|y,CHIP1|CHIP2); lcd_cmd_write(CMD_LCD_SET_ADDRESS|ADDRESS0,CHIP1|CHIP2); for(uint8_t x = 0; x < 64; x++) { lcd_data_write(0x00,CHIP1|CHIP2); } lcd_cmd_write(CMD_LCD_SET_PAGE|PAGE0,CHIP1|CHIP2); lcd_cmd_write(CMD_LCD_SET_ADDRESS|ADDRESS0,CHIP1|CHIP2); } }
void lcd_init() { lcd_select_chip(CHIP1|CHIP2); LOW(RST_PORT,RST_PIN);//reset _delay_ms(30); HIGH(RST_PORT,RST_PIN); lcd_cmd_write(CMD_LCD_ON,CHIP1|CHIP2); lcd_cmd_write(CMD_LCD_DISP_START|LINE0,CHIP1|CHIP2); lcd_cmd_write(CMD_LCD_SET_ADDRESS|ADDRESS0,CHIP1|CHIP2); lcd_cmd_write(CMD_LCD_SET_PAGE|PAGE0,CHIP1|CHIP2); }
void draw_bitmap_fullscreen(const uint8_t *image) { uint8_t chip; uint16_t byte = 0; for(uint8_t y = 0; y < 8; y++) { lcd_cmd_write(CMD_LCD_SET_PAGE|y,CHIP1|CHIP2); lcd_cmd_write(CMD_LCD_SET_ADDRESS|0,CHIP1|CHIP2); for(uint8_t x = 0; x < 128; x++) { if(x<64) chip=1; else chip=2; lcd_data_write(pgm_read_byte(image+(byte++)),chip); } } }
//! write a zero-terminated ASCII string to the display void LCDPutString(char *str) { char c,index=0; for (; (c = *str) != 0; str++){ if((c=='\r') || c=='\n'); else lcd_data_write(c); index++; if (index>=20) { lcd_cmd_write(SET_DRAM_ADDR+line_3); lcd_wait(WAIT_15m); index=0; } } }
void lcd_init() // Works like a constructor { // Power on delay lcd_direction |= 0xfc; // set port a as output lcd_wait( 20000 ); // Power on wait lcd_wait( 20000 ); lcd_port &= ~((1<<lcd_E) | (1<<lcd_RS)); // EN=0, RS=0 // lcd_port &= ~(1<<lcd_RW); // Set RW = 0 in case it is connected lcd_nibble_transfer(SET_FUNCTION+IN8_BIT); //lcd_wait(longdelay ); // wait 24 ms _delay_ms(24); lcd_nibble_transfer(SET_FUNCTION+IN8_BIT); //lcd_wait(longdelay); _delay_ms(24); lcd_nibble_transfer(SET_FUNCTION+IN8_BIT); //lcd_wait(longdelay); _delay_ms(24); lcd_nibble_transfer(SET_FUNCTION); // lcd_wait(longdelay); _delay_ms(24); lcd_cmd_write(SET_FUNCTION+LN2_BIT); // Function set: 0x28 2 lines // lcd_wait(WAIT_15m); // Wait 39 uS _delay_ms(2); lcd_cmd_write(SET_DISPLAY); //display off //lcd_wait(WAIT_15m); _delay_ms(2); lcd_cmd_write(CLR_DISPLAY); // Display clear: 0x01 clear data // lcd_wait(WAIT_15m); // 1.53 mS _delay_ms(2); lcd_cmd_write(SET_ENTRY_MODE+INC_BIT); // +INC_BIT // Entry mode set: shift cursor 1 position to right // lcd_wait(WAIT_15m); _delay_ms(2); lcd_cmd_write(SET_DISPLAY+ON_BIT+CUR_BIT+BLK_BIT); //+CUR_BIT+BLK_BIT); Display ON/OFF control: 0x0f // lcd_wait(WAIT_15m); // Wait 39 uS // 1.53 mS //lcd_wait(WAIT_15m); // 1.53 mS _delay_ms(2); createCustomFont(); _delay_ms(2); lcd_cmd_write(RTN_HOME); } // end lcd_init()
/*************************************************************************************************** * @fn lcd_init * * @brief LCD设备初始化 * @param NULL * @return null ***************************************************************************************************/ void lcd_init(void) { lcd_regist(); //背光开启 GPIO_SetBits(LCD_BL_PORT, LCD_BL_PIN); GPIO_SetBits(LCD_BLW_PORT, LCD_BLW_PIN); //LCD RST LCD_RST_LOW(); delay_ms(1); LCD_RST_HIGH(); delay_ms(300); //LCD 寄存器 lcd_cmd_write(0x2F); //Internal pump control delay_ms(20); lcd_cmd_write(0x24); //Temperature compensation lcd_cmd_write(0xE9); //set bias=1/10 lcd_cmd_write(0x81); //Set Vop lcd_cmd_write(160+25); lcd_cmd_write(0xA2); //set line rate:28KLPS lcd_cmd_write(0x28); //set pannel loading lcd_cmd_write(0x40); //scroll line LSB lcd_cmd_write(0x50); //SCROLL LINE MSB // lcd_cmd_write(0x89); //ram address control lcd_cmd_write(0x8B); //ram address control, PAGE increment first lcd_cmd_write(0xC0); //LCD mapping control // lcd_cmd_write(0x04); //MX=0,MY=1 lcd_cmd_write(0x01); //MX=0,MY=0,MSF=1 lcd_cmd_write(0xD0); //DISPLAY PATTERN = 16-SCALE GRAY lcd_cmd_write(0xF1); //SET COM end lcd_cmd_write(0x3F); //64 lcd_cmd_write(0xF8); //Set Window Program inside. lcd_cmd_write(0xF5); //starting row address of RAM program window.PAGE1 lcd_cmd_write(0x00); lcd_cmd_write(0xF7); //end row address of RAM program window.PAGE32 lcd_cmd_write(0x1F); lcd_cmd_write(0xF4); //start column address of RAM program window. lcd_cmd_write(0x00); // lcd_cmd_write(0xEF); lcd_cmd_write(0xF6); //end column address of RAM program window.SEG212 lcd_cmd_write(0xD3); // lcd_cmd_write(0x1B); lcd_cmd_write(0xAF); //dc2=1, IC into exit SLEEP MODE, dc3=1 gray=ON, dc4=1 Green Enhanc mode disabled delay_ms(20); //needed for internal DC-DC converter startup printf("lcd init over! @ %s,%s,%d\r\n", __FILE__, __func__, __LINE__); }
//clear the display void lcdClear(void) { lcd_cmd_write(CLR_DISPLAY); lcd_wait(WAIT_15m); lcd_cmd_write(CLR_DISPLAY+RTN_HOME); lcd_wait(WAIT_15m); }
void createCustomFont(){ lcd_cmd_write(0x40); //CGRAM _delay_ms(4); lcd_data_write(0); _delay_ms(2); lcd_data_write(1); _delay_ms(2); lcd_data_write(3); _delay_ms(2); lcd_data_write(22); _delay_ms(2); lcd_data_write(28); _delay_ms(2); lcd_data_write(8); _delay_ms(2); lcd_data_write(0); _delay_ms(2); lcd_data_write(0); _delay_ms(4); lcd_data_write(8); _delay_ms(2); lcd_data_write(12); _delay_ms(2); lcd_data_write(10); _delay_ms(2); lcd_data_write(9); _delay_ms(2); lcd_data_write(10); _delay_ms(2); lcd_data_write(12); _delay_ms(2); lcd_data_write(8); _delay_ms(2); lcd_data_write(0); _delay_ms(4); // lcd_data_write(0x1c); // _delay_ms(2); // lcd_data_write(0x1c); // _delay_ms(2); // lcd_data_write(0x1c); // _delay_ms(2); // lcd_data_write(0x1c); // _delay_ms(2); // lcd_data_write(0x1c); // _delay_ms(2); // lcd_data_write(0x1c); // _delay_ms(2); // lcd_data_write(0x1c); // _delay_ms(2); // lcd_data_write(0x1c); // _delay_ms(4); // // lcd_data_write(0x1e); // _delay_ms(2); // lcd_data_write(0x1e); // _delay_ms(2); // lcd_data_write(0x1e); // _delay_ms(2); // lcd_data_write(0x1e); // _delay_ms(2); // lcd_data_write(0x1e); // _delay_ms(2); // lcd_data_write(0x1e); // _delay_ms(2); // lcd_data_write(0x1e); // _delay_ms(2); // lcd_data_write(0x1e); // _delay_ms(10); lcd_data_write(0x80); //DD RAM }
// Upper 4 bits are data. void lcd_write_ins_once(uint8_t data) { lcd_cmd_write(data); }