Exemple #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);
			}
		}
	}
}
void lcd_print(char *text) {
    // Prints a string to the screen (if the current address is in DDRAM)
    while (*text != 0) {
        lcd_data_write(*text);
        ++text;
    }
}
Exemple #3
0
int lcd_area_clear(uint8_t x, uint8_t y,  uint8_t width, uint8_t height)
{
	uint8_t t, col, sec, page, trans_x, origin_y;
	
	IF_CONDITION_TURE_RET_PARAM_ERR(width > LCD_W);
	IF_CONDITION_TURE_RET_PARAM_ERR(height > LCD_H);
	IF_CONDITION_TURE_RET_PARAM_ERR(((height%8) != 0) && (((height/8 + 1)*8)> LCD_H));

	
	origin_y = (y%2) ? (y/2 + 1) : (y/2);
	trans_x = 211 - x;						//该款液晶原点在右上角
	t = (height%8) ? (height/8 +1) : (height/8);

	for(sec=0; sec<t; sec++)
	{
		for(col=0; col<width; col++)
		{
			lcd_cursor_addr_set(trans_x - col,origin_y+(sec*4));
			for(page=0; page<4; page++)
			{
				lcd_data_write(0x00);			
			}
		}
	}

	return 0;
}
Exemple #4
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);
}
void clearLine(unsigned char x, unsigned char y){

	unsigned char max_x=20;

	GoTo(x,y);
	for (int i=x; i<max_x; i++)
	{
		lcd_data_write(0x20);
		_delay_ms(1);
	}
	GoTo(x,y);
}
Exemple #6
0
// Send a command to the LCD in 4-bit or 8-bit mode.
void
xtl_lcd_hd44780_send_cmd(unsigned char cmd)
{

      lcd_data_write(cmd & 0xff);
	  lcd_delay_ms(1);
      xtl_lcd_hd44780_set_rs(0);          // set LCD to CMD mode
      lcd_delay_ms(1);
      xtl_lcd_hd44780_set_rw(0);          // set LCD to CMD  mode
      lcd_delay_ms(1);
      xtl_lcd_hd44780_strobe();           // toggle E for LCD
}
Exemple #7
0
void
lcd_putc(
	UINT8 u
)
{
	xtl_lcd_hd44780_wait_ready();
	lcd_data_write(u & 0xff);
	lcd_delay_ms(1);
	xtl_lcd_hd44780_set_rs(1);          // set LCD to DATA mode
	xtl_lcd_hd44780_set_rw(0);          // set LCD to DATA mode
	lcd_delay_ms(1);
	xtl_lcd_hd44780_strobe();           // toggle E for LCD
}
Exemple #8
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);
	}
}
Exemple #9
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);
		}
	}
}
Exemple #10
0
// Initialize LCD in 4-bit mode.
void
lcd_reset(
	void
)
{
	// Output pins low and as output (except last pin).
	// If R/W is configured, this sets R/W to 0, i.e. write mode.
	lcd_enable(0);
	xtl_lcd_hd44780_set_rw(0);
	xtl_lcd_hd44780_set_rs(0);


	// Wait at least 15ms for the LCD to initialise.
	lcd_delay_ms(15);

	// Reset as per p. 211 of HD44780 user guide.
	// Function set (8-bit data, two line mode, 5x7 dots).
	lcd_data_write(0x30);
	xtl_lcd_hd44780_strobe();
	lcd_delay_ms(10);  // Need at least 4.1ms according to the guide.
	xtl_lcd_hd44780_strobe();
	lcd_delay_ms(2);  // Need at least 100us according to the guide.
	xtl_lcd_hd44780_strobe();
	lcd_delay_ms(2);  // Don't use BF here either.


	// Function set (8-bit data, two line mode, 5x7 dots).
	xtl_lcd_hd44780_send_cmd(0x38);
	lcd_delay_ms(6);

	// Display off
	xtl_lcd_hd44780_send_cmd(DISP_OFF);
	lcd_delay_ms(5);

	// Display clear
	xtl_lcd_hd44780_send_cmd(CLR_DISP);
	lcd_delay_ms(10);

	// Entry mode, increasing cursor position.
	xtl_lcd_hd44780_send_cmd(ENTRY_INC);

	// Display on.
	xtl_lcd_hd44780_wait_ready();
	xtl_lcd_hd44780_send_cmd(DISP_ON);
}
//! 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;
		}

	}
}
Exemple #12
0
/***************************************************************************************************
 * @fn      lcd_disp_bmp
 *
 * @brief   LCD显示图象
 * @param   null
 * @return  0 -- success
 *			-1 - failure
 ***************************************************************************************************/ 
int lcd_disp_bmp(uint8_t x, uint8_t y,  uint8_t *p_bmp, uint8_t width, uint8_t height)
{
	uint8_t t, col, sec, page, trans_x, origin_y;
	uint8_t dat_H4, dat_L4, Shift;
	
	IF_CONDITION_TURE_RET_PARAM_ERR(width > LCD_W);
	IF_CONDITION_TURE_RET_PARAM_ERR(height > LCD_H);
	IF_CONDITION_TURE_RET_PARAM_ERR(((height%8) != 0) && (((height/8 + 1)*8)> LCD_H));

	origin_y = (y%2) ? (y/2 + 1) : (y/2);
	trans_x = 211 - x;						//该款液晶原点在右上角
	t = (height%8) ? (height/8 +1) : (height/8);

	for(sec=0; sec<t; sec++)
	{
		for(col=0; col<width; col++)
		{
			//lcd_cursor_addr_set(x+col,origin_y+(sec*4));
			lcd_cursor_addr_set(trans_x - col,origin_y+(sec*4));
			Shift=0x80;
			for(page=0; page<4; page++)
			{
				if((*p_bmp&Shift)==0)
					dat_H4=0x00;
				else 
					dat_H4=0xf0;			
				Shift>>=1;
				if((*p_bmp&Shift)==0)
					dat_L4=0x00;
				else 
					dat_L4=0x0f;
				Shift>>=1;
				lcd_data_write(dat_H4|dat_L4);			
			}
			p_bmp++;
		}
	}
	
	return 0;
}
Exemple #13
0
/***************************************************************************************************
 * @fn      lcd_char_inv_disp
 *
 * @brief   反白显示一个字符
 * @param   x,y -- 液晶坐标
 *			dispByte -- 要显示的数据
 * @return  0 -- success
 ***************************************************************************************************/ 
int lcd_char_inv_disp(uint8_t x,uint8_t y,uint8_t dispByte)
{
	uint8_t char_index;
	uint8_t sec,col,page,trans_x,origin_y,dat_H4,dat_L4,Shift;
	uint8_t *pChar;
	
	char_index = dispByte - ' ';
	pChar = &ascii_0816[char_index*16];

	origin_y = (y%2) ? (y/2 + 1) : (y/2);
	trans_x = 211 - x;						//该款液晶原点在右上角

	for(sec=0; sec<2; sec++)
	{
		for(col=0; col<8; col++)
		{
			//lcd_cursor_addr_set(x+col,origin_y+(sec*4));
			lcd_cursor_addr_set(trans_x - col,origin_y+(sec*4));
			Shift=0x80;
			for(page=0; page<4; page++)
			{
				if(((~(*pChar))&Shift)==0)
					dat_H4=0x00;
				else 
					dat_H4=0xf0;			
				Shift>>=1;
				if(((~(*pChar))&Shift)==0)
					dat_L4=0x00;
				else 
					dat_L4=0x0f;
				Shift>>=1;
				lcd_data_write(dat_H4|dat_L4);			
			}
			pChar++;
		}
	}

	return 0;
}
void displayTEMP(void)
{
	lcd_data_write( 0b11011111 );
	lcd_data_write('C');
}
static int write_char(char c, FILE *stream) {
    (void) stream;

    lcd_data_write(c);
    return 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	
	
}
Exemple #17
0
void lcd_putchar( int c )
{
  lcd_data_write( c );
}
void setLCD( void )
{
	delayMs(1,50);

	lcd_command_write(0b00101001);	//   function set - 4-bit interface
	delayMs(1,2);
	lcd_command_write(0b00001000);	//   display off
	delayMs(1,2);
	lcd_clear();
	lcd_command_write(0b00000110);	//   cursor move direction
	delayMs(1,2);

	// setup custom characters
	lcd_command_write(0b01000000);	// move to first CGRAM location
	delayMs(1,2);

	lcd_data_write(0b00000000);	delayMs(1,2); // 0x00
	lcd_data_write(0b00000011);	delayMs(1,2);
	lcd_data_write(0b00000100);	delayMs(1,2);
	lcd_data_write(0b00001000);	delayMs(1,2);
	lcd_data_write(0b00010000);	delayMs(1,2);
	lcd_data_write(0b00010000);	delayMs(1,2);
	lcd_data_write(0b00010000);	delayMs(1,2);
	lcd_data_write(0b00010000);	delayMs(1,2);

	lcd_data_write(0b00010000);	delayMs(1,2); // 0x01
	lcd_data_write(0b00010000);	delayMs(1,2);
	lcd_data_write(0b00010000);	delayMs(1,2);
	lcd_data_write(0b00010000);	delayMs(1,2);
	lcd_data_write(0b00010000);	delayMs(1,2);
	lcd_data_write(0b00001000);	delayMs(1,2);
	lcd_data_write(0b00000111);	delayMs(1,2);
	lcd_data_write(0b00000000);	delayMs(1,2);

	lcd_data_write(0b00011111);	delayMs(1,2); // 0x02
	lcd_data_write(0b00000000);	delayMs(1,2);
	lcd_data_write(0b00000000);	delayMs(1,2);
	lcd_data_write(0b00000000);	delayMs(1,2);
	lcd_data_write(0b00000000);	delayMs(1,2);
	lcd_data_write(0b00000000);	delayMs(1,2);
	lcd_data_write(0b00000000);	delayMs(1,2);
	lcd_data_write(0b00001111);	delayMs(1,2);

	lcd_data_write(0b00010010);	delayMs(1,2); // 0x03
	lcd_data_write(0b00001001);	delayMs(1,2);
	lcd_data_write(0b00001001);	delayMs(1,2);
	lcd_data_write(0b00001001);	delayMs(1,2);
	lcd_data_write(0b00001001);	delayMs(1,2);
	lcd_data_write(0b00010010);	delayMs(1,2);
	lcd_data_write(0b00001100);	delayMs(1,2);
	lcd_data_write(0b00000000);	delayMs(1,2);

	lcd_data_write(0b00011111);	delayMs(1,2); // 0x04
	lcd_data_write(0b00000000);	delayMs(1,2);
	lcd_data_write(0b00000000);	delayMs(1,2);
	lcd_data_write(0b00000000);	delayMs(1,2);
	lcd_data_write(0b00000000);	delayMs(1,2);
	lcd_data_write(0b00000000);	delayMs(1,2);
	lcd_data_write(0b00000000);	delayMs(1,2);
	lcd_data_write(0b00011111);	delayMs(1,2);

	lcd_data_write(0b00011100);	delayMs(1,2);  // 0x05
	lcd_data_write(0b00000010);	delayMs(1,2);
	lcd_data_write(0b00000001);	delayMs(1,2);
	lcd_data_write(0b00000111);	delayMs(1,2);
	lcd_data_write(0b00000001);	delayMs(1,2);
	lcd_data_write(0b00000001);	delayMs(1,2);
	lcd_data_write(0b00000010);	delayMs(1,2);
	lcd_data_write(0b00011100);	delayMs(1,2);

	lcd_command_write(0b00000010);	// cursor home
	delayMs(1,2);
	lcd_command_write(0b00001100);	// display on
	delayMs(1,2);

	lcd_gotoxy(0, 0);
	delayMs(1,2);
	lcd_clear();
}