Code below, getting random data and flashing display. any ideas? note that ms_delay is not really a millisecond.
(Edit by CF Tech: used code tag to fix indentation.)
Code:
#include "system.h"
//20mhz 16F877A
//port a is control port
#define CS1 0
#define CS2 1
//#define RESET 2 - connect to RC (10k to +5, .1uf to GND)
//#define RW 3 - connect to GND (write only)
#define RS 4 //called DI on spec sheet
#define E 5
//============================================================
void ms_delay()
{
int
delay;
for( delay = 0; delay < 500; delay++ )
nop();
}
//============================================================
void main()
{
//portd is data port
portd = 0;
trisd = 0;
adcon1 = 00000110b; //all A/D lines digital
//porta is control port
porta = 0;
trisa = 0;
set_bit ( porta, E );
//wait for lcd to reset
int
delay;
for( delay = 0; delay < 1000; delay++ )
ms_delay();
clear_bit ( porta, E );
clear_bit ( porta, RS );
clear_bit ( porta, CS1 );
clear_bit ( porta, CS2 );
//turn display on
portd = 00111111b;
ms_delay();
set_bit ( porta, E );
ms_delay();
clear_bit ( porta, E );
ms_delay();
//start line 0 (set by reset anyway?)
portd = 11000000b;
ms_delay();
set_bit ( porta, E );
ms_delay();
clear_bit ( porta, E );
ms_delay();
char
x;
char
y;
char
num;
while(true)
{
num = 0;
for( x = 0; x < 8; x++ )
for( y = 0; y < 64; y++ )
{
//set x page
portd = (10111000b | x);
ms_delay();
set_bit ( porta, E );
ms_delay();
clear_bit ( porta, E);
ms_delay();
//set y
portd = (01000000b | y);
ms_delay();
set_bit ( porta, E );
ms_delay();
clear_bit ( porta, E);
ms_delay();
//data
set_bit ( porta, RS );
ms_delay();
portd = num;
ms_delay();
num++;
set_bit ( porta, E );
ms_delay();
clear_bit ( porta, E );
ms_delay();
clear_bit ( porta, RS);
ms_delay();
}
}
while(true)
nop();
}
Looking for additional LCD resources? Check out our LCD blog for the latest developments in LCD technology.