Aplikasi LCD 2×16 Sederhana Pada Mikrokontroler AVR Dengan Compiler WinAVR + AVR Studio 4

Berikut adalah contoh aplikasi sederhana penggunaan LCD 2×16 pada mikrokontroler ATmega8 4Mhz dengan menggunakan header file lcd_lib.h dari http://winavr.scienceprog.com/download/AVR_LCD_Lib_Demo.zip. Dari file tersebut saya tambahkan kode untuk menampilkan bilangan float atau bilangan berkoma. Berikut kode yang saya gunakan.

//*****************************************************************************
//
// File Name    : 'main.c'
// Title        : LCD demo
// Author        : Scienceprog.com - Copyright (C) 2007
// Created        : 2007-03-29
// Revised        : 2007-08-28
// Version        : 1.0
// Target MCU    : Atmel AVR series
//
// This code is distributed under the GNU Public License
//        which can be found at http://www.gnu.org/licenses/gpl.txt
//
//*****************************************************************************

#include <avr/io.h>
#include <avr/pgmspace.h>
#include <util/delay.h>
#include "lcd_lib.h"
#include <stdio.h>    //untuk sprintf
#include <stdlib.h> //untuk rand

//Strings stored in AVR Flash memory
const uint8_t LCDwelcomeln1[] PROGMEM="AVR LCD DEMO";
const uint8_t LCDprogress[] PROGMEM="Loading...";
const uint8_t LCDanimation[] PROGMEM=" LCD animation ";

// additional custom LCD characters
const uint8_t backslash[8] PROGMEM=
{
0b00000000,//back slash
0b00010000,
0b00001000,
0b00000100,
0b00000010,
0b00000001,
0b00000000,
0b00000000
};
//delay 1s
void delay1s(void)
{
    uint8_t i;
    for(i=0;i<100;i++)
    {
        _delay_ms(10);
    }
}
//demonstration of progress bar
void progress(void)
{
    LCDclr();
    CopyStringtoLCD(LCDwelcomeln1, 3, 0);    
    delay1s();
    LCDclr();
    CopyStringtoLCD(LCDprogress, 3, 0);
    for(uint8_t i=0;i<255;i++)
        {
            _delay_ms(10);
            LCDGotoXY(0, 1);
            LCDprogressBar(i, 255, 16);
        }
}
//demonstration of animation
void demoanimation(void)
{
    LCDclr();
    LCDdefinechar(backslash,0);
    CopyStringtoLCD(LCDanimation, 0, 0);
    for(uint8_t i=0;i<3;i++)
        {
            LCDGotoXY(8, 1);
            LCDsendChar(0);
            delay1s();
            LCDGotoXY(8, 1);
            LCDsendChar('-');
            delay1s();
            LCDGotoXY(8, 1);
            LCDsendChar('/');
            delay1s();
            LCDGotoXY(8, 1);
            LCDsendChar('|');
            delay1s();
            LCDGotoXY(8, 1);
            LCDsendChar(8);//backslash
            delay1s();
            LCDGotoXY(8, 1);
            LCDsendChar('-');
            delay1s();
            LCDGotoXY(8, 1);
            LCDsendChar('/');
            delay1s();
            LCDGotoXY(8, 1);
            LCDsendChar('|');
            delay1s();
        }    
}

int main(void)
{
uint8_t buff[33];
double a, b, c;

    LCDinit();//init LCD bit, dual line, cursor right
    while(1)//loop demos
    {
        LCDclr();//clears LCD
        LCDGotoXY(0,0);//arahkan kursor ke koordinat 0,0 LCD
        a = (double)(rand() % 10 + 1)/2; //membangkitkan bilangan acak (0s.d.10)/2
        b = (double)(rand() % 10 + 1)/3; //membangkitkan bilangan acak (0s.d.10)/3
        c = a*b;
        sprintf(buff,"%.2f*%.2f=%.5f",a,b,c);//menampilkan bilangan float
        LCDstring(buff,33);//menampilkan bilangan float
        delay1s();
        delay1s();

        progress();//demonstration of progress bar
        delay1s();
        demoanimation();//demonstration of animation
    }
    return 0;
}

Pada program tersebut pada LCD akan tampil perkalian 2 buah bilangan acak berkoma (c = a*b). Lalu demonstrasi sebuah progress bar dan demoanimation yang diulang dalam while(1).

Untuk menampilkan angka berkoma pada LCD menggunakan sprintf() maka ditambahkan #include <stdio.h>. Lalu tambahkan -Wl,-u,vfprintf -lprintf_flt pada linker options (Merujuk pada situs http://winavr.scienceprog.com/comment/28). Pada menu bar klik Project -> Configuration Options -> Custom Options.

Untuk mengatur port mana yang akan digunakan untuk interface ke LCD,  diatur pada lcd_lib.h.

#define LDP PORTD    //define MCU port connected to LCD data pins
#define LCP PORTD    //define MCU port connected to LCD control pins
#define LDDR DDRD    //define MCU direction register for port connected to LCD data pins
#define LCDR DDRD    //define MCU direction register for port connected to LCD control pins

Berikut link file yang bisa di-download dari project di atas.

http://www.mediafire.com/file/dbwri8ndlwaavlt/tes_lcd_2.rar

_________________________________

Daftar Pustaka

http://winavr.scienceprog.com/download/AVR_LCD_Lib_Demo.zip

http://winavr.scienceprog.com/example-avr-projects/simplified-avr-lcd-routines.html

http://winavr.scienceprog.com/example-avr-projects/avr-gcc-4-bit-and-8-bit-lcd-library.html

http://www.cplusplus.com/reference/clibrary/cstdlib/rand/

http://winavr.scienceprog.com/comment/28

2 Responses to Aplikasi LCD 2×16 Sederhana Pada Mikrokontroler AVR Dengan Compiler WinAVR + AVR Studio 4

  1. m.syafaat says:

    apa bisa di kirimkan tutor pemrograman tsb di CD kan ?

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s