LCD teller

Dette er en tellerkrets som viser verdien på en LCD skjerm.

Mål

Målet er å lage en fullstendig krets med en mikrokontroller krets som teller fra 0-99 og viser verdien på en LCD skjerm.

Utstyr

  • DE 112-RS-20 (LCD skjerm)
  • ICM7211 (LCD driver)
  • PIC16F690 (Mikrokontroller)
  • Strømforsyning (5V)
  • Kodensator (220pF)
  • PICKIT3 e.l. (For å programmere mikrokontrolleren)

Krets

lcd-driver-page-1-1

Program

Hele koden kan lastes ned her.

Initalisering

    /**
     * Setter frekvens til 125Khz
     */
    OSCCONbits.IRCF = 0b001;
    /**
     * Slå på pullresistor for alle portB utganger.
     */
    WPUB = 0b11111111;
    /**
     * Setter port B4 som utgang. Denne skal brukes for låsing av verdi på ICM7211.
     */
    TRISBbits.TRISB4 = 0;
    /**
     * Port B6 og B7 brukes som utganger for å sette adressen på LCD driveren.
     */
    TRISBbits.TRISB6 = 0;
    TRISBbits.TRISB7 = 0;
    /**
     * Port C4-C7 brukes som utgang for verdien som skal vises.
     */
    TRISCbits.TRISC4 = 0;
    TRISCbits.TRISC5 = 0;
    TRISCbits.TRISC6 = 0;
    TRISCbits.TRISC7 = 0;

Applikasjon

/*
 * Verdien som skal kjøres ut på B6 og B7 for å sette adressen på LCD driveren 
 * til første adresse.
 */
const unsigned char FIRST_ADDRESS = 3;
/*
 * Verdien på B6 og B7 for å sette adressen tilLCD driveren til andre adresse.
 */
const unsigned char SECOND_ADDRESS = 2;
    /**
    * Setter adressen på port B6 og B7. Holder B4 høy fordi l,atch ikke skal kjøres
    * enda.
    */
    unsigned char val = addr;
    val = val << 6;
    val = val | 0b00010000;
    PORTB = val;
    __delay_us(WAIT_TIME);
    /**
    * Setter utgangsverdien på port C4-C7.
    */
    unsigned char output = val;
    output = output << 4;
    PORTC = output;
    __delay_us(WAIT_TIME);
    /**
    * Setter verdien på port C4 lav, men holder B6 og B7 slik de var. Dette setter 
    * verdien i LCD driveren.
    */
    PORTB = PORTB & 0b11101111;
    __delay_us(WAIT_TIME);
    /**
    * Setter verdien på C4 høy, slik at verdien er låst på LCD driveren.
    */
    PORTB = PORTB | 0b00010000;
    __delay_us(WAIT_TIME);

Video