first re-commit.
This commit is contained in:
182
piglcd.cpp
Normal file
182
piglcd.cpp
Normal file
@@ -0,0 +1,182 @@
|
||||
/*****************************************************************************
|
||||
|
||||
source::worx libPiGPio
|
||||
Copyright © 2022 c.holzheuer
|
||||
chris@sourceworx.org
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Uses:
|
||||
|
||||
pigpiod_if2 by joan2937, pigpio @ abyz.me.uk
|
||||
https://abyz.me.uk/rpi/pigpio
|
||||
|
||||
sigslot by 2017 Pierre-Antoine Lacaze
|
||||
https://github.com/palacaze/sigslot
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
|
||||
#include <piglcd.h>
|
||||
|
||||
|
||||
|
||||
pigLCD::pigLCD( i2c_addr_t addr, i2c_bus_t bus )
|
||||
{
|
||||
init( addr, bus );
|
||||
}
|
||||
|
||||
|
||||
pigLCD::~pigLCD()
|
||||
{
|
||||
reset();
|
||||
}
|
||||
|
||||
|
||||
void pigLCD::init( i2c_addr_t addr, i2c_bus_t bus, int width, bool bl, uint8_t RS, uint8_t , uint8_t E, uint8_t BL, uint8_t B4 )
|
||||
{
|
||||
_i2c.init( addr, bus );
|
||||
|
||||
_width = width;
|
||||
_backlight = bl;
|
||||
|
||||
_RS = (1<<RS);
|
||||
_E = (1<<E);
|
||||
_BL = (1<<BL);
|
||||
_B4 = B4;
|
||||
|
||||
put_inst( 0x33 ); // Initialise 1
|
||||
put_inst( 0x32 ); // Initialise 2
|
||||
put_inst( 0x06 ); // Cursor increment
|
||||
put_inst( 0x0C ); // Display on,move_to off, blink off
|
||||
put_inst( 0x28 ); // 4-bits, 1 line, 5x8 font
|
||||
put_inst( 0x01 ); // Clear display
|
||||
//?? move_to( 0,0 )
|
||||
put_inst( _LCD_ROW[0]+0 );
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief pigLCD::close
|
||||
* Close the LCD (clearing the screen) and release used resources.
|
||||
*/
|
||||
|
||||
void pigLCD::reset()
|
||||
{
|
||||
put_inst( 0x01 ); // Clear display
|
||||
set_backlight( false );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief pigLCD::set_backlight
|
||||
* @param bl
|
||||
* toogle backlight on or off.
|
||||
*/
|
||||
|
||||
void pigLCD::set_backlight( bool bl )
|
||||
{
|
||||
_backlight = bl;
|
||||
// hack
|
||||
move_to( 0, 0 );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief pigLCD::move_to
|
||||
* @param row
|
||||
* @param col
|
||||
*
|
||||
* Position cursor at row and column (0 based).
|
||||
*/
|
||||
|
||||
void pigLCD::move_to( int row, int col )
|
||||
{
|
||||
put_inst( _LCD_ROW[row]+col );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief pigLCD::write
|
||||
* @param c
|
||||
* Write a character at the current cursor postion and
|
||||
* increment the cursor.
|
||||
*/
|
||||
|
||||
void pigLCD::write( const char c )
|
||||
{
|
||||
put_data( (uint8_t) c );
|
||||
}
|
||||
|
||||
|
||||
void pigLCD::write( const std::string text )
|
||||
{
|
||||
for( const char c : text )
|
||||
write( c );
|
||||
}
|
||||
|
||||
|
||||
void pigLCD::write( int row, int col, const std::string text )
|
||||
{
|
||||
move_to( row, col );
|
||||
write( text );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void pigLCD::put_byte( uint8_t MSb, uint8_t LSb )
|
||||
{
|
||||
|
||||
if( _backlight )
|
||||
{
|
||||
MSb |= _BL;
|
||||
LSb |= _BL;
|
||||
}
|
||||
|
||||
char buf[4];
|
||||
buf[0] = (char) MSb | _E;
|
||||
buf[1] = (char) MSb & ~_E;
|
||||
buf[2] = (char) LSb | _E;
|
||||
buf[3] = LSb & ~_E;
|
||||
_i2c.i2c_write_device( buf, 4 );
|
||||
|
||||
// self.pi.i2c_write_device(self._h,
|
||||
// [MSb | self.E, MSb & ~self.E, LSb | self.E, LSb & ~self.E]) */
|
||||
|
||||
}
|
||||
|
||||
|
||||
void pigLCD::put_inst( uint8_t bits )
|
||||
{
|
||||
|
||||
uint8_t MSN = (bits>>4) & 0x0F;
|
||||
uint8_t LSN = bits & 0x0F;
|
||||
|
||||
uint8_t MSb = MSN << _B4;
|
||||
uint8_t LSb = LSN << _B4;
|
||||
|
||||
put_byte( MSb, LSb );
|
||||
|
||||
}
|
||||
|
||||
|
||||
void pigLCD::put_data( uint8_t bits )
|
||||
{
|
||||
|
||||
uint8_t MSN = (bits>>4) & 0x0F;
|
||||
uint8_t LSN = bits & 0x0F;
|
||||
|
||||
uint8_t MSb = (MSN << _B4) | _RS;
|
||||
uint8_t LSb = (LSN << _B4) | _RS;
|
||||
|
||||
put_byte( MSb, LSb );
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user