Stap 3: Hoe om te lezen van het scherm
readDDRAM.c
Deze weergave lijkt niet veel, maar neem een kijkje op wat er echt gebeurt.
Eerst schrijven we wat tekst naar het display, waarna we de beginpositie van de AC, adres teller reset en lezen van de tekens die zijn geschreven.
Dan schrijven we de tekens die zijn gelezen terug aan de weergave.
Laten we de code:
#include #include "hd44780_4bit_lib.h" #include /* * This code example show how to read text from DDRAM, * in this example we will write some text to the display * then read the text and then write the read text * back to the display. */void main() { WDTCTL = WDTPW | WDTHOLD; // Disable watchdog timer uint8_t rtn = 0; uint8_t readStr[80]; uint8_t *pint; unsigned int cnt = 0; unsigned int charCnt = 0; // according to spec give the display 10ms to come up to voltage __delay_cycles(10000 * CPUSPEED); // set up data length, number of lines and font // notice we have setup the display for 2 lines // and using the 5 x 8 character size hd44780_init(N_2LINE, FONT_8); // turn display on and clear the display // and set cursor to home position 0x00 // hd44780_send_command(HD44780_CMD_DISPLAY_ON); // hd44780_send_command(HD44780_CMD_RETURN_HOME); // hd44780_send_command(HD44780_CMD_CLEAR_DISPLAY); hd44780_setCursorPosition(0, 0); hd44780_write_string("this"); hd44780_setCursorPosition(0, 0); pint = readStr; // reads characters from display while(1) { rtn = hd44780_readByte(); if (rtn == ' ') { break; } *pint = rtn; pint++; charCnt++; } // writes read characters back to display for(cnt = 0; cnt < charCnt; cnt++) { hd44780_write_special_char(readStr[cnt]); } hd44780_send_command(HD44780_CMD_RETURN_HOME); }
Laten we breken van de code en zien wat er gaande is:
uint8_t rtn = 0;uint8_t readStr[80]; uint8_t *pint; unsigned int cnt = 0; unsigned int charCnt = 0;// according to spec give the display 10ms to come up to voltage __delay_cycles(10000 * CPUSPEED);// set up data length, number of lines and font // notice we have setup the display for 2 lines // and using the 5 x 8 character size hd44780_init(N_2LINE, FONT_8);
Eerste instellen off we sommige variabelen die we tijdens de lezing en het schrijven van de personages geëxtraheerd uit het display gebruiken kunnen.
Bericht die zijn we de weergave voor 2 lijnen en 5 x 8 teken dot patroon instellen.
hd44780_setCursorPosition(0, 0); hd44780_write_string("this"); hd44780_setCursorPosition(0, 0); pint = readStr; // reads characters from display while(1) { rtn = hd44780_readByte(); if (rtn == ' ') { break; } *pint = rtn; pint++; charCnt++; }
We nu de cursorpositie ingesteld op het display naar de rij 0, kolom 0 en schrijf de tekst naar het display.
Wij opstelling een pointer naar de readStr array. Nu doorlopen we de DDRAM, grijpen een teken tegelijk en het plaatsen van het teken in de array.
Als de volgende teken ontvangen is ' ', we dan aannemen dat geen meer tekens bevat, en we de lus te sluiten.
Dit is slechts een voorbeeld, als u verwacht een aantal woorden dat dan uw logica worden een beetje complexer moet, zoals het doorlopen van de gehele lijn, een eenvoudig vast te stellen.
// writes read characters back to display for(cnt = 0; cnt < charCnt; cnt++) { hd44780_write_special_char(readStr[cnt]); } hd44780_send_command(HD44780_CMD_RETURN_HOME);
Aangezien de cursorpositie wordt bijgehouden door de AC, adres teller, zit onze cursor al op een locatie na de gelezen tekst. Alles wat we moeten doen is lezen van de tekens uit de matrix en hen tegelijkertijd terug naar het scherm weer te geven.