Gunakan MimeTex/LaTex untuk menulis simbol dan persamaan matematika.

Selamat datang, Pengunjung. Silahkan masuk atau mendaftar. Apakah anda lupa aktivasi email?

Juli 30, 2021, 07:40:38 PM

Masuk dengan nama pengguna, kata sandi dan lama sesi

Topik Baru

Artikel Sains

Anggota
Stats
  • Total Tulisan: 139658
  • Total Topik: 10400
  • Online Today: 86
  • Online Ever: 441
  • (Desember 18, 2011, 12:48:51 AM)
Pengguna Online
Users: 0
Guests: 50
Total: 50

Ikuti ForSa

ForSa on FB ForSa on Twitter

Penulis Topik: bahasa C buat LCD 2x16  (Dibaca 39853 kali)

0 Anggota dan 1 Pengunjung sedang melihat topik ini.

Offline insan sains

  • Moderator
  • Profesor
  • *****
  • Tulisan: 579
  • IQ: 68
  • Gender: Pria
  • Life is Beatiful
    • Insan Sains
Re: bahasa C buat LCD 2x16
« Jawab #15 pada: Mei 26, 2009, 07:40:55 AM »
@mas Erik :

Micro C nya yang untuk 8051 kan? soalnya Micro C kan banyak variasinya, ada yang untuk AVR, PIC, dll.

mas Erik mungkin bisa mendeskripsikan bagaimana proses perakitannya dari awal (baik secara hardware maupun software). Soalnya kalo dalam hal troubleshooting, hal-hal remeh saja bisa jadi satu-satunya penyebab. Kalo bisa melampirkan juga program yang sudah ditulis.
Menuju Indonesia sebagai THE COUNTRY MASTER OF TECHNOLOGY, 2030

Offline erik hardianto

  • Dosen
  • ****
  • Tulisan: 111
  • IQ: 10
Re: bahasa C buat LCD 2x16
« Jawab #16 pada: Mei 27, 2009, 02:12:35 AM »
@mas Erik :

Micro C nya yang untuk 8051 kan? soalnya Micro C kan banyak variasinya, ada yang untuk AVR, PIC, dll.

mas Erik mungkin bisa mendeskripsikan bagaimana proses perakitannya dari awal (baik secara hardware maupun software). Soalnya kalo dalam hal troubleshooting, hal-hal remeh saja bisa jadi satu-satunya penyebab. Kalo bisa melampirkan juga program yang sudah ditulis.
iya, sy pake AT89S51, ngomong2 masukin gambar gmn ya???

programnya ga beda jauh sama mas KBH:

#define   LCD_DATA   P2 // kita gunakan Port 2 sebagai data, sebetulnya cuma P2[0:3]
#define   LCD_en      P2_5   // enable LCD display
#define   LCD_rs      P2_4   // register select
#define   LCD_DELAY   11.92 // bisa disesuaikan dengan frekuensi kristal yg digunakan

/* prototype fungsi dasar */
void LCD_delay(unsigned char ms);
void LCD_enable();
void LCD_command(unsigned char command);
void LCD_putc(unsigned char ascii);

/* fungsi turunan */
void LCD_puts(unsigned char *lcd_string);
void LCD_init();
void main(){
     LCD_init();
     LCD_puts("Ga Sukses");
     while(1);
}
/* implementasi fungsi dasar */
void LCD_delay(unsigned char ms)
{
   unsigned char n;
   unsigned int i;
   for(n=0;n<ms;n++)
      for(i=0;i<LCD_DELAY;i++);
}


void LCD_enable()
{
   LCD_en = 0; // memberi sinyal falling edge
   LCD_delay(1);
   LCD_en = 1;
}

void LCD_command(unsigned char command)
{
   LCD_rs = 0; // menandakan perintah
   LCD_DATA = (LCD_DATA&0xF0)|((command>>4)&0x0F); // ambil high nibble, kirim
   LCD_enable(); // beritahu driver LCD bahwa data telah siap
   LCD_DATA = (LCD_DATA&0xF0)|(command&0x0F); // ambil low nibble, kirim
   LCD_enable();
   LCD_delay(1);
}

void LCD_putc(unsigned char ascii)
{
   EA = 0; // (optional) matikan semua interrupt
   LCD_rs = 1; // menandakan data untuk ditampilkan
   LCD_DATA = (LCD_DATA&0xF0)|((ascii>>4)&0x0F);
   LCD_enable();
   LCD_DATA = (LCD_DATA&0xF0)|(ascii&0x0F);
   LCD_enable();
   EA = 1;
   LCD_delay(1);
}

/* implementasi fungsi turunan */
void LCD_puts(unsigned char *lcd_string)
{
   while(*lcd_string) /* scanning array data hingga null pointer (string habis) */
      LCD_putc(*lcd_string++);
}

void LCD_init()
{
   LCD_en = 1;
   LCD_rs = 0;
   LCD_command(0x33);
   LCD_command(0x32);
   LCD_command(0x28);
   LCD_command(0x0C);
   LCD_command(0x06);
   LCD_command(0x01);
   LCD_delay(256);
}

IC                             LCD
p2.0 ------------------> D4
p2.1 ------------------> D5
p2.2 ------------------> D6
p2.3 ------------------> D7
p2.4 ------------------> RS
p2.5 ------------------> E

sama vcc+ground...
« Edit Terakhir: Mei 27, 2009, 02:18:36 AM oleh erik hardianto »

Offline erik hardianto

  • Dosen
  • ****
  • Tulisan: 111
  • IQ: 10
Re: bahasa C buat LCD 2x16
« Jawab #17 pada: Mei 27, 2009, 02:24:31 AM »
ketinggalan:

IC                             LCD
p2.0 ------------------> D4
p2.1 ------------------> D5
p2.2 ------------------> D6
p2.3 ------------------> D7
p2.4 ------------------> RS
p2.5 ------------------> E

sama vcc+ground...

Offline erik hardianto

  • Dosen
  • ****
  • Tulisan: 111
  • IQ: 10
Re: bahasa C buat LCD 2x16
« Jawab #18 pada: Mei 27, 2009, 02:30:12 AM »
ketinggalan:

IC                             LCD
p2.0 ------------------> D4
p2.1 ------------------> D5
p2.2 ------------------> D6
p2.3 ------------------> D7
p2.4 ------------------> RS
p2.5 ------------------> E

sama vcc+ground...
niatnya cuma mau tampilin "Ga sukses"
e, ga sukses bener... apa sing salah ya mas???

Offline ksatriabajuhitam

  • Moderator
  • Profesor
  • *****
  • Tulisan: 791
  • IQ: 97
  • Gender: Pria
  • keep holding on
    • hsw weblog
Re: bahasa C buat LCD 2x16
« Jawab #19 pada: Mei 27, 2009, 11:35:18 AM »
mungkin masalah timing nya,
kalo ga mau ngitung cycle fungsi delay nya, coba2 pake nilai gede aja dulu

...
#define   LCD_DELAY   11.92 // bisa disesuaikan dengan frekuensi kristal yg digunakan
...
di deklarasi itu nilai delai harus bulat, maksudnya disesuaikan itu:
(cycle yg dibutuhkan untuk 1 loop fungsi delay) x (1/freq_crystal x pembagi*) x LCD_DELAY

*) pembagi : beberapa microcontroller, misal keluarga 8051 umumnya tipe CISC, memerlukan tahapan proses yg menyebabkan clock internalnya hanya menggunakan freq_crystal / pembagi. untuk 8051 nilai pembaginya 12.
not all the problems could be solved by the sword, but sword holder take control of problems.
ForSa versi mobile: http://www.forumsains.com/forum?wap2

Offline erik hardianto

  • Dosen
  • ****
  • Tulisan: 111
  • IQ: 10
Re: bahasa C buat LCD 2x16
« Jawab #20 pada: Mei 30, 2009, 02:06:47 AM »
mungkin masalah timing nya,
kalo ga mau ngitung cycle fungsi delay nya, coba2 pake nilai gede aja dulu
di deklarasi itu nilai delai harus bulat, maksudnya disesuaikan itu:
(cycle yg dibutuhkan untuk 1 loop fungsi delay) x (1/freq_crystal x pembagi*) x LCD_DELAY

*) pembagi : beberapa microcontroller, misal keluarga 8051 umumnya tipe CISC, memerlukan tahapan proses yg menyebabkan clock internalnya hanya menggunakan freq_crystal / pembagi. untuk 8051 nilai pembaginya 12.
uda di ganti smua ko ga mau tampilin jurum juga ya mas... knp ini?

Offline insan sains

  • Moderator
  • Profesor
  • *****
  • Tulisan: 579
  • IQ: 68
  • Gender: Pria
  • Life is Beatiful
    • Insan Sains
Re: bahasa C buat LCD 2x16
« Jawab #21 pada: Mei 31, 2009, 11:02:50 AM »
Dari keterangan mas Erik

- Hardware udah bener
- Program gak ada yang salah
- Freq-nya udah diubah

Apa di compilernya yach?

Apa mungkin di deklarasi portnya yach?

Misal kayak deklarasi ini :
#define   LCD_en      P2_5

Di AVR Studio, saya biasanya nulis :
#define   LCD_en      P2.5

Kalo di GCC, saya biasanya nulis :
#define   LCD_en      PB5

Apa karena ini bukan yach?

Offline erik hardianto

  • Dosen
  • ****
  • Tulisan: 111
  • IQ: 10
Re: bahasa C buat LCD 2x16
« Jawab #22 pada: Juni 01, 2009, 01:44:46 PM »
mungkin masalah timing nya,
kalo ga mau ngitung cycle fungsi delay nya, coba2 pake nilai gede aja dulu
di deklarasi itu nilai delai harus bulat, maksudnya disesuaikan itu:
(cycle yg dibutuhkan untuk 1 loop fungsi delay) x (1/freq_crystal x pembagi*) x LCD_DELAY

*) pembagi : beberapa microcontroller, misal keluarga 8051 umumnya tipe CISC, memerlukan tahapan proses yg menyebabkan clock internalnya hanya menggunakan freq_crystal / pembagi. untuk 8051 nilai pembaginya 12.
smua yg ditulis gada yg ngerti,,, mksdnya apa ya mas??

Offline erik hardianto

  • Dosen
  • ****
  • Tulisan: 111
  • IQ: 10
Re: bahasa C buat LCD 2x16
« Jawab #23 pada: Juni 01, 2009, 01:51:36 PM »
- Freq-nya udah diubah

Apa di compilernya yach?
[/quote]
1. freq,nya sy pake 12,,
2. compilernya? ga ngerti maksudnya??

Offline insan sains

  • Moderator
  • Profesor
  • *****
  • Tulisan: 579
  • IQ: 68
  • Gender: Pria
  • Life is Beatiful
    • Insan Sains
Re: bahasa C buat LCD 2x16
« Jawab #24 pada: Juni 10, 2009, 01:36:08 AM »
hampir 2 minggu gak baca topik ini, gimana perkembangannya nie?

Offline erik hardianto

  • Dosen
  • ****
  • Tulisan: 111
  • IQ: 10
Re: bahasa C buat LCD 2x16
« Jawab #25 pada: Juni 11, 2009, 05:10:22 PM »
iya ni ditunggu,, sampe prustasi,, gada jwban, jd sy pake prog, punya tmn pake bahasa asembly, tp ga sesempurna yg diinginkan.. bingung,,, , kalo bisa yg pake bahasa c, jd smpurna.. 1 juli sidang.. kalo ada yg masi bisa bantu, ditunggu. jd malaikat buat saya, soalnya uda 7 tahun kulia. detik2 terakhir :) 

Offline ksatriabajuhitam

  • Moderator
  • Profesor
  • *****
  • Tulisan: 791
  • IQ: 97
  • Gender: Pria
  • keep holding on
    • hsw weblog
Re: bahasa C buat LCD 2x16
« Jawab #26 pada: Juni 13, 2009, 10:44:53 PM »
coba post aja program assembly nya, siapa tau kita-kita di sini bisa bantu convert ke c

Offline erik hardianto

  • Dosen
  • ****
  • Tulisan: 111
  • IQ: 10
Re: bahasa C buat LCD 2x16
« Jawab #27 pada: Juni 22, 2009, 05:26:56 AM »
coba post aja program assembly nya, siapa tau kita-kita di sini bisa bantu convert ke c
program nya,,,

$mod51

ORG   00H

MAIN:
LCD_RS      EQU P3.5
LCD_RW      EQU P3.6
LCD_EN      EQU P3.7



MAIN_PROGRAM:

LCALL    INITIALIZE_LCD

MOV   A,#80H
LCALL ADDRESS
MOV    DPTR,#TEST
LCALL   TRANSFER

ENDD:
JMP   ENDD




;*************************************************
;-------------INITIALIZATION LCD------------------
;*************************************************

INITIALIZE_LCD:
CLR   LCD_EN            ;INIT 00110000B
CLR   LCD_RW
CLR   LCD_RS
MOV   P1,#00110000B
SETB   LCD_EN
LCALL   DELAY1

CLR   LCD_EN            ;INIT 00110000B
CLR   LCD_RW
CLR   LCD_RS
MOV   P1,#00110000B
SETB   LCD_EN
LCALL   DELAY1

CLR   LCD_EN            ;INIT 00110000B
CLR   LCD_RW
CLR   LCD_RS
MOV   P1,#00110000B
SETB   LCD_EN
LCALL   DELAY1

CLR   LCD_EN            ;0 0 1 DL N F X X
CLR   LCD_RW            ;DL = 1 => 8BIT         DL = 0 => 4BIT      
CLR   LCD_RS            ;N  = 1 => 2LINES         N  = 0 => 1LINE
MOV   P1,#00111000B      ;F  = 1 => 5X10         F  = 0 => 5X7
SETB   LCD_EN            ;==>   8BIT AND 2LINES
LCALL   DELAY1

CLR   LCD_EN            ;0 0 0 0 1 D C B
CLR   LCD_RW            ;D  = 1 => DISP_ON      D  = 0 => DISP_OFF
CLR   LCD_RS            ;C  = 1 => CURSOR_ON      C  = 0 => CURSOR_OFF
MOV   P1,#00001100B      ;B  = 1 => BLINK_ON      B  = 0 => BLINK_OFF
SETB   LCD_EN            ;==>   DISP_ON, CURSOR OFF AND BLINK OFF
LCALL   DELAY1

CLR   LCD_EN            ;0 0 0 0 0 1 I/D S
CLR   LCD_RW            ;I/D= 1 => INCREMENT      I/D= 0 => DECREMENT
CLR   LCD_RS            ;S  = 1 => DISP SHIFT   S  = 0 => NO DISP SHIFT
MOV   P1,#00000110B      ;==>   INCREMENT AND NO DISP SHIFT
SETB   LCD_EN            
LCALL   DELAY1
CLR   LCD_EN

RET

;*************************************************



;*************************************************
;------------------CONTROL LCD--------------------
;*************************************************

CURSOR_BLINK:
MOV    A,#0FH            ; 0 0 0 0 1 1 1 1 ==> ( 0 0 0 0 1 D C B )
LCALL   COMMAND            ; DISPLAY ON, CURSOR ON AND BLINK ON
RET


CURSOR_OFF:
MOV    A,#0CH            ; 0 0 0 0 1 1 0 0 ==> ( 0 0 0 0 1 D C B )
LCALL   COMMAND            ; dISPLAY ON, CURSOR OFF AND BLINK OFF
RET


CURSOR_CUSTOM:
MOV    A,#0C0H            ; 1 1 0 0 0 0 0 0 ==> ( ??????????????????
LCALL   COMMAND
RET


CLEAR_DISPLAY:         
MOV   A,#01H            ; CLEAR DISPLAY
LCALL COMMAND
RET


HOME:
MOV    A,#03H            ; SET DDRAM ADD TO 00H
LCALL COMMAND            ; RETURN CURSOR TO ORIGINAL POSITION IF SHIFTED
RET


SHIFT_LEFT_SCREEN:
MOV    A,#18H            ; 0 0 0 1 1 0 0 0 ==> ( 0 0 0 1 S/C R/L X X )   
LCALL   COMMAND            ; S/C = 1 DISP SHIFT   S/C = 0 CURSOR MOVE   R/L = 1 RIGHT SHIFT   R/L = 0 LEFT SHIFT   
RET                     ; DISP SHIFT AND LEFT SHIFT


SHIFT_RIGHT_SCREEN:
MOV    A,#1CH            ; 0 0 0 1 1 1 0 0 ==> ( 0 0 0 1 S/C R/L X X )
LCALL   COMMAND            ; S/C = 1 DISP SHIFT   S/C = 0 CURSOR MOVE   R/L = 1 RIGHT SHIFT   R/L = 0 LEFT SHIFT
RET                     ; DISP SHIFT AND RIHT SHIFT

;*************************************************



;*************************************************
;------------------INTERFACE LCD------------------
;*************************************************

COMMAND:
MOV   P1,A
CLR   LCD_EN
CLR   LCD_RW
CLR   LCD_RS
LCALL   DELAY0
SETB   LCD_EN
LCALL   DELAY0
CLR   LCD_EN
RET


CLEAR_SCREEN:
CLR   LCD_EN
CLR   LCD_RS
CLR   LCD_RW
MOV   P1,#00000001B
LCALL   DELAY0
SETB   LCD_EN
LCALL   DELAY0
CLR   LCD_EN
RET


ADDRESS:
CLR   LCD_EN
CLR   LCD_RW
CLR   LCD_RS
MOV   P1,A
LCALL   DELAY0
SETB   LCD_EN
LCALL   DELAY0
CLR   LCD_EN
RET


WRITE_ON:
MOV   P1,A
CLR   LCD_EN
CLR   LCD_RW
SETB   LCD_RS
LCALL   DELAY0
SETB   LCD_EN
LCALL   DELAY0
LCALL   DELAY0
CLR   LCD_EN
RET


TRANSFER:
CLR   A
MOVC   A,@A+DPTR
INC   DPTR
CJNE   A,#0FFH,TRANS
LJMP   EXIT

TRANS:
MOV   P1,A
LCALL   WRITE_ON
LJMP   TRANSFER

EXIT:
RET

;*************************************************



;*************************************************
;------------------TIMER DELAY--------------------
;*************************************************

DELAY0:
PUSH   7
MOV   R7,#1

SUB_DELAY0:
MOV   TMOD,#00000001B   ; 1023 X TIMES
MOV   TH0,#0FCH
MOV   TL0,#00H
SETB   TR0

TF0?0:
JNB   TF0,TF0?0
CLR   TR0
CLR   TF0
DJNZ   R7,SUB_DELAY0
POP   7
RET



DELAY1:
PUSH   7
MOV   R7,#1

SUB_DELAY1:
MOV   TMOD,#00000001B   ; 24575 X TIMES
MOV   TH0,#0A0H
MOV   TL0,#00H
SETB   TR0

TF0?1:
JNB   TF0,TF0?1
CLR   TR0
CLR   TF0
DJNZ   R7,SUB_DELAY1
POP   7
RET



DELAY2:
PUSH   7
MOV   R7,#1

SUB_DELAY2:
MOV   TMOD,#00000001B   ; 10903 X TIMES
MOV   TH0,#0D5H
MOV   TL0,#68H
SETB   TR0

TF0?2:
JNB   TF0,TF0?2
CLR   TR0
CLR   TF0
DJNZ   R7,SUB_DELAY1
POP   7
RET

;*************************************************


TEST:
DB      'KODE KIR' , 0FFH

END


Offline herlambang

  • Dosen
  • ****
  • Tulisan: 157
  • IQ: 2
  • Gender: Pria
  • uh".. kimochi^^"
    • Discovering The Art and Technology
Re: bahasa C buat LCD 2x16
« Jawab #28 pada: Juni 23, 2009, 03:33:32 PM »
iya ni ditunggu,, sampe prustasi,, gada jwban, jd sy pake prog, punya tmn pake bahasa asembly, tp ga sesempurna yg diinginkan.. bingung,,, , kalo bisa yg pake bahasa c, jd smpurna.. 1 juli sidang.. kalo ada yg masi bisa bantu, ditunggu. jd malaikat buat saya, soalnya uda 7 tahun kulia. detik2 terakhir :) 

tidak sesempurna yg di inginkan? gejalanya apa?
built-in double watchdog! ^^"   *Problem Solved*

Offline herlambang

  • Dosen
  • ****
  • Tulisan: 157
  • IQ: 2
  • Gender: Pria
  • uh".. kimochi^^"
    • Discovering The Art and Technology
Re: bahasa C buat LCD 2x16
« Jawab #29 pada: Juni 24, 2009, 12:38:07 AM »
 ;D
wew, mepet ya?
ya dah neh ada pake C mode 8bit.
saia attach lengkap:
program dengan Keil uVision3 C51 V8.16
schematic dan simulasi dengan ISIS Proteus V7.4SP3.
jangan nanya ya.. kenapa pilih warna ungu bwt komponennya :D kakakaka

ntar kalo butuh yg versi assembly-nya tinggal ngomong aja.. ^^"
semoga cepet lulus..

 

Related Topics

  Subyek / Dimulai oleh Jawaban Tulisan terakhir
5 Jawaban
10627 Dilihat
Tulisan terakhir Mei 31, 2013, 06:42:01 AM
oleh buburkacang89
3 Jawaban
7772 Dilihat
Tulisan terakhir Februari 19, 2011, 02:01:55 PM
oleh herlambang
5 Jawaban
6373 Dilihat
Tulisan terakhir Desember 08, 2010, 08:39:13 AM
oleh fahmicp3
10 Jawaban
7598 Dilihat
Tulisan terakhir November 25, 2011, 09:12:45 AM
oleh chebyshev
3 Jawaban
7385 Dilihat
Tulisan terakhir Juli 17, 2010, 04:34:44 AM
oleh herlambang