I used an Atmega8 and a Tinsharp TC1602B-08 to create the device. The microcontroller simply accepts characters from its serial input and puts them on the LCD. Here are the interpretation of the bytes it receives:
Bit 7 6 5 4 3 2 1 0
0 x x x x x x x Print ASCII character.
1 0 0 R C C C C Go to row R, column CCCC.
1 1 0 0 0 0 0 0 Clear screen and move to 0,0.
The serial line by default runs at 12.5kbps. This is achieved by
setting UBRR=4, normal speed with a 1Mhz system clock. You can
modify this setting by reprogramming the device.
The sender needs the following code.
//
// Atmega8(A)
//
#define USART_DIVIDER 4
static void Lput(uint8_t K, uint8_t dl)
{ while(!(UCSRA&(1<<UDRE))) ; UDR= K;
if (dl) _delay_ms(5); else _delay_us(120); }
static void Lchr(uint8_t B) { Lput(B,0); }
static void Lclear() { Lput(192,1); }
static void Lgoto(uint8_t r,uint8_t c)
{ Lput(128 | (r<<4) | c, 0); }
static void Lhex(uint8_t K)
{ static const char *he= "0123456789ABCDEF";
Lchr((uint8_t)he[K>>4]); Lchr((uint8_t)he[K&0xf]); }
static void Linit()
{ UBRRH= USART_DIVIDER>>8; UBRRL= USART_DIVIDER;
UCSRC= (1<<URSEL) | (3<<UCSZ0); UCSRB= (1<<TXEN); }
You need to modify USART_DIVIDER in order to match the receiver rate
if the sender has a different clock than 1Mhz.
Here is the first version.