Пример #1
0
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);
			}
		}
	}
}
Пример #2
0
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;
	}

}
Пример #3
0
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);
}
Пример #4
0
/***************************************************************************************************
 * @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;
}
Пример #5
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);
	}
}
Пример #6
0
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);
}
Пример #7
0
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);
		}
	}
}
Пример #8
0
//! 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;
		}

	}
}
Пример #9
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()
Пример #10
0
/***************************************************************************************************
 * @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__);
}
Пример #11
0
//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);
}
Пример #12
0
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	
	
}
Пример #13
0
// Upper 4 bits are data.
void lcd_write_ins_once(uint8_t data)
{
	lcd_cmd_write(data);
}