Sterowanie wyświetlaczem przez USART
1. Cele
Opracować moduł umożliwiający komunikację z wyświetlaczem 16×1 przez USART. By wysłać dane na wyświetlacz należy wydać instrukcję informującą o rozpoczęciu transmisji „[„. Instrukcja „]” informuje mikrokontroler o zakończeniu danych przeznaczonych dla wyświetlacza. Dodatkowa instrukcja „#” pozwala na wyczyszczenie zawartości ekranu. Ponieważ wyświetlacz 16×1 podzielony jest na dwie części (po 8 znaków) mikrokontroler dba o poprawne przejście napisu na drugą połowę ekranu. W chwili zapełnienia znakami całego ekranu i otrzymania 17 znaku ekran jest czyszczony i 17 znak pojawia się jako 1 znak na ekranie.
2. Diagram wdrożenia
2.1 Komunikacja mikrokontrolera z komputerem PC
Mikrokontroler PIC16F84A komunikuje się z komputerem PC wykorzystując w tym celu port COM. Konieczne jest użycie układu MAX232 by dostosować napięcia TTL (5V) mikrokontrolera do standardu RS232 (12V) które występują na porcie COM.

Rys. 1 Komunikacja PIC16F84A z PC
2.2 Komunikacja mikrokontrolera z innym mikrokontrolerem
Mikrokontroler PIC16F84A komunikuje się z innym mikrokontrolerem wykorzystując do tego celu USART.

Rys. 2 Komunikacja PIC16F84A z innym uC
3. Schemat elektryczny

Rys. 3 Schemat elektryczny
4. Protokół transmisji danych
Tab. 1 Instrukcje sterujące
| Kod ASCII | Instrukcja |
|---|---|
| [ | Rozpoczęcie odbioru danych |
| ] | Zakończenie odbioru danych |
| # | Wyczyszczenie ekranu |
5. Algorytm programu

Rys. 4 Algorytm programu
6. Kod programu
/**
* Wyswietlanie na LCD danych pobranych
* przez USART.
*/
#include
#fuses XT,NOPROTECT,NOWDT
#use delay(clock=4000000)
//RX RA2 PIN 1
//TX RA3 PIN 2
#use rs232(baud=300,parity=N,xmit=PIN_A3,rcv=PIN_A2,bits=9)
#include "wlcd.c"
main() {
char c;
char i=0;
/*
//Informacja o sterowaniu wyslana na rs232
printf("\fLCD OK\n");
printf("[ - begin\n");
printf("] - end\n");
printf("# - clear\n");
*/
//inicjacja lcd
lcd_init();
//napis testowy na lcd
lcd_putc("\fLCD 2.2");
delay_ms(800);
lcd_putc("\f");
//glowna petla programu
for(;;){
//pobranie znaku z usart
c = getc();
//komenda - czyszczenie wyswietlacza
if (c=='#'){
i = 0;
lcd_putc("\f");
}
//komenda - rozpoczecie wyswietlania
if (c == '['){
for(;;){
//pobranie znaku do wyswietlenia
c = getc();
//jesli nie jest to znak konca transmisji dla wyswietlania, to znak na ekran
if (c!=']'){
//jesli koniec linii (polowa ekranu) to przejscie na 2 polowe ekranu
if (i==8){ lcd_putc("\n"); }
//jesli koniec ekranu to zaczynamy od nowa
if (i==16){ lcd_putc("\f"); i=0; }
//dodanie znaku do wyswietlacza
lcd_putc(c);
i++;
}
//byl znak konca transmisji na wyswietlacz
if (c==']') {
break;
}
}
}
}
}


