Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed PowerControl SDFileSystem
Fork of HeptaBattery_SDFilesystem_Q by
hepta_sat/HeptaLcd.h
- Committer:
- tomoya123
- Date:
- 2016-12-09
- Revision:
- 0:9eb94b338772
File content as of revision 0:9eb94b338772:
#ifndef MBED_HeptaLcd
#define MBED_HeptaLcd
#include <stdarg.h>
#include "mbed.h"
#include "I2cBusDevice.h"
// SB1602E IIC address
const char SB1602E_addr = 0x7C;
// SB1602E initialization command sequence
#ifdef INIT_VALUE_DATASHEET_ORIGINAL
const char Comm_FunctionSet_Normal = 0x38;
const char Comm_FunctionSet_Extended = 0x39;
const char Comm_InternalOscFrequency = 0x14;
const char Comm_ContrastSet = 0x78;
const char Comm_PwrIconContrast = 0x5E;
const char Comm_FollowerCtrl = 0x6A;
const char Comm_DisplayOnOff = 0x0C;
const char Comm_ClearDisplay = 0x01;
const char Comm_EntryModeSet = 0x06;
#else
const char Comm_FunctionSet_Normal = 0x38;
const char Comm_FunctionSet_Extended = 0x39;
const char Comm_InternalOscFrequency = 0x14;
const char Comm_ContrastSet = 0x70;
const char Comm_PwrIconContrast = 0x5C;
const char Comm_FollowerCtrl = 0x60;
const char Comm_DisplayOnOff = 0x0C;
const char Comm_ClearDisplay = 0x01;
const char Comm_EntryModeSet = 0x04;
const char Comm_ReturnHome = 0x02;
#endif
// SB1602E general commands
const char Comm_SetDDRAMAddress = 0x80;
const char DDRAMAddress_Ofst[] = { 0x00, 0x40 };
const char Comm_SetCGRAM = 0x40;
// SB1602E setting values
const char default_Contrast = 0x35;
const char COMMAND = 0x00;
const char DATA = 0x40;
const char MaxCharsInALine = 0x10; // buffer deoth for one line (no scroll function used)
const char init_seq0_length = 7;
const char init_seq0[ init_seq0_length ]
= {
Comm_FunctionSet_Normal,
Comm_ReturnHome, // This may be required to reset the scroll function
Comm_FunctionSet_Extended,
Comm_InternalOscFrequency,
Comm_ContrastSet | ( default_Contrast & 0xF),
Comm_PwrIconContrast | ((default_Contrast >> 4) & 0x3),
Comm_FollowerCtrl | 0x0A,
};
// required 30us interval
const char init_seq1_length = 3;
const char init_seq1[ init_seq1_length ]
= {
Comm_DisplayOnOff,
Comm_ClearDisplay,
Comm_EntryModeSet,
};
// required 30us, 2ms interval
class HeptaLcd : I2cBusDevice {
public:
I2C lcd;
int addr;
explicit HeptaLcd(PinName sda, PinName scl, char dev_address = SB1602E_addr, char *init_massage = " " ) : lcd(sda,scl),addr(dev_address),I2cBusDevice(&lcd, dev_address ) {
wait( 0.04 ); // interval after hardware reset
for ( int i = 0; i < init_seq0_length; i++ ) {
lcd_command( init_seq0[ i ] );
wait( 30e-6 );
}
wait( 0.2 );
for ( int i = 0; i < init_seq1_length; i++ ) {
lcd_command( init_seq1[ i ] );
wait( 2e-3 );
}
if ( init_massage )
puts( 0, init_massage );
set_CGRAM( 7, '\x1F' );
curs[ 0 ] = 0;
curs[ 1 ] = 0;
}
~HeptaLcd() {
}
void clear( void ) {
lcd_command( Comm_ClearDisplay );
wait( 2e-3 );
curs[ 0 ] = 0;
curs[ 1 ] = 0;
}
void initilize(){
char *init_massage = " ";
for ( int i = 0; i < init_seq0_length; i++ ) {
lcd_command( init_seq0[ i ] );
wait( 30e-6 );
}
wait( 0.2 );
for ( int i = 0; i < init_seq1_length; i++ ) {
lcd_command( init_seq1[ i ] );
wait( 2e-3 );
}
if ( init_massage )
puts( 0, init_massage );
set_CGRAM( 7, '\x1F' );
curs[ 0 ] = 0;
curs[ 1 ] = 0;
}
void put_custom_char( char c_code, const char *cg, char x, char y ) {
for ( int i = 0; i < 5; i++ ) {
set_CGRAM( c_code, cg );
putcxy( c_code, x, y );
}
}
void contrast( char contrast ) {
lcd_command( Comm_FunctionSet_Extended );
lcd_command( Comm_ContrastSet | (contrast & 0x0f) );
lcd_command( Comm_PwrIconContrast | ((contrast>>4) & 0x03) );
lcd_command( Comm_FunctionSet_Normal );
}
void set_CGRAM( char char_code, const char* cg ) {
for ( int i = 0; i < 8; i++ ) {
lcd_command( (Comm_SetCGRAM | (char_code << 3) | i) );
lcd_data( *cg++ );
}
}
void set_CGRAM( char char_code, char v ) {
char c[ 8 ];
for ( int i = 0; i < 8; i++ )
c[ i ] = v;
set_CGRAM( char_code, c );
}
void putcxy( char c, char x, char y ) {
if ( (x >= MaxCharsInALine) || (y >= 2) )
return;
lcd_command( (Comm_SetDDRAMAddress | DDRAMAddress_Ofst[ y ]) + x );
lcd_data( c );
}
void putc( char line, char c ) {
if ( (c == '\n') || (c == '\r') ) {
clear_lest_of_line( line );
curs[ line ] = 0;
return;
}
putcxy( c, curs[ line ]++, line );
}
void puts( char line, char *s ) {
while ( char c = *s++ )
putc( line, c );
}
void printf( char line, char *format, ... ) {
char s[ 32 ];
va_list args;
va_start( args, format );
vsnprintf( s, 32, format, args );
va_end( args );
puts( line, s );
}
private:
char curs[2];
void clear_lest_of_line( char line ) {
for ( int i = curs[ line ]; i < MaxCharsInALine; i++ )
putcxy( ' ', i, line );
}
int lcd_write( char first, char second ) {
char cmd[2];
cmd[ 0 ] = first;
cmd[ 1 ] = second;
return ( write( cmd, 2 ) );
}
int lcd_command( char command ) {
return ( lcd_write( COMMAND, command ) );
}
int lcd_data( char data ) {
return ( lcd_write( DATA, data ) );
}
}
;
#endif
