added sample display code, added enclosing files

This commit is contained in:
Lucas Pleß 2014-06-02 20:31:49 +02:00
parent 54c2f8bdca
commit 21be4e1626
8 changed files with 3931 additions and 0 deletions

View File

@ -0,0 +1,171 @@
/* ---------------------------------------------------------------------
Sample code for driving ST7036 on ELECTRONIC ASSEMBLY's DOG-Series
(tested on ATmega8, EA DOGM163, AVR-GCC)
*** NO FREE SUPPORT ON THIS PIECE OF CODE ***
if you need an offer: mailto: programmer@demmel-m.de
--------------------------------------------------------------------- */
//Serieller Betrieb von EA DOGModulen mit dem ST7036
#define ST7036_SI As_(PORTD, 5)
#define ST7036_CLK As_(PORTC, 4)
#define ST7036_CSB As_(PORTD, 2)
#define ST7036_RS As_(PORTD, 3)
#define ST7036_RESET As_(PORTB, 1)
/* ein Byte in das ???-Register des ST7036 senden */
void ST7036_write_byte( char data )
{
signed char u8_zahl = 8;
char c_data;
// Chip-Select auf log.0
Clear_Bit( ST7036_CSB );
c_data = data;
do
{
_delay_loop_2(6);
if ( c_data & 0x80 ) // oberstes Bit von c_data betrachten
Set_Bit(ST7036_SI); // und Datenleitung entsprechend setzen
else
Clear_Bit(ST7036_SI);
_delay_loop_2(5); // einen Clockpuls erzeugen
Clear_Bit(ST7036_CLK);
_delay_loop_2(6);
Set_Bit(ST7036_CLK);
c_data = c_data << 1;
u8_zahl --;
} while (u8_zahl > 0);
// Chip-Select wieder auf log.1
warte_ms( 2 );
Set_Bit( ST7036_CSB );
}
/* ein Byte in das Control-Register des KS0073 senden */
void ST7036_write_command_byte( char data )
{
Clear_Bit( ST7036_RS );
_delay_loop_2( 1 );
ST7036_write_byte( data );
}
/* ein Byte in das Daten-Register des KS0073 senden */
void ST7036_write_data_byte( char data )
{
Set_Bit( ST7036_RS );
_delay_loop_2( 7 );
ST7036_write_byte( data );
}
/* Reset durchführen */
void ST7036_reset(void)
{
#ifdef ST7036_RESET
Clear_Bit(lcdReset); // Hardware-Reset log.0 an den ST7036 anlegen
warte_ms( 100 );
Set_Bit(lcdReset);
#endif
}
/* ein Byte in das Daten-Register des KS0073 senden */
void ST7036_init(void)
{
Set_Bit(ST7036_CLK);
Set_Bit(ST7036_CSB);
//ST7036_reset();
warte_ms(50); // mehr als 40ms warten
// ST7036_write_command_byte( 0x38 ); // Function set; 8 bit Datenlänge, 2 Zeilen
warte_us(50); // mehr als 26,3µs warten
ST7036_write_command_byte( 0x39 ); // Function set; 8 bit Datenlänge, 2 Zeilen, Instruction table 1
warte_us(50); // mehr als 26,3µs warten
ST7036_write_command_byte( 0x1d ); // Bias Set; BS 1/5; 3 zeiliges Display /1d
warte_us(50); // mehr als 26,3µs warten
ST7036_write_command_byte( 0x7c ); // Kontrast C3, C2, C1 setzen /7c
warte_us(50); // mehr als 26,3µs warten
ST7036_write_command_byte( 0x50 ); // Booster aus; Kontrast C5, C4 setzen /50
warte_us(50); // mehr als 26,3µs warten
ST7036_write_command_byte( 0x6c ); // Spannungsfolger und Verstärkung setzen /6c
warte_ms( 500 ); // mehr als 200ms warten !!!
ST7036_write_command_byte( 0x0f ); // Display EIN, Cursor EIN, Cursor BLINKEN /0f
warte_us(50); // mehr als 26,3µs warten
ST7036_write_command_byte( 0x01 ); // Display löschen, Cursor Home
warte_ms(400); //
ST7036_write_command_byte( 0x06 ); // Cursor Auto-Increment
warte_us(50); // mehr als 26,3µs warten
}
void ST7036_putsf( PGM_P string )
{
unsigned char zahl;
zahl = 0;
while (string[zahl] != 0x00)
{
ST7036_write_data_byte( string[zahl]);
zahl++;
}
}
void ST7036_puts( char * string )
{
unsigned char zahl;
zahl = 0;
while (string[zahl] != 0x00)
{
_delay_loop_2(50000);
ST7036_write_data_byte( string[zahl] );
string ++;
}
}
void ST7036_putc( char zeichen )
{
ST7036_write_data_byte( zeichen );
}
// positioniert den Cursor auf x/y.
// 0/0 ist links oben, 2/15 ist rechts unten
void ST7036_goto_xy(unsigned char xwert, unsigned char ywert)
{
//_delay_loop_2(50000);
ST7036_write_command_byte(0x80 + ywert*0x20 + xwert);
//_delay_loop_2(50000);
Set_Bit(ST7036_RS);
}
void ST7036_clearline( unsigned char zeile )
{
unsigned char zahl;
ST7036_goto_xy( 0, zeile );
for (zahl=1; zahl<20; zahl++) ST7036_write_data_byte( ' ' );
}
void ST7036_clear( void )
{
ST7036_clearline( 0 );
ST7036_clearline( 1 );
ST7036_clearline( 2 );
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff