Program penampil LCD dengan LCD 16X2 HD44780 based controller. Program ini akan menampilkan tulisan berjalan kekiri. Dibuat dengan CodeVision AVR V.2.03.9. Program juga dilengkapi dengan simulasi menggunakan Proteus ISIS Simulation. Buka file *.DSN dengan proteus V7.4 SP 3 atau yang lebih baru. Silahkan dimanfaatkan untuk belajar
dan bila ada pertanyaan, kritik atau saran post aja di kolom komentar. Atau bisa dengan mengirimkan email ke herlambang@nubielab.com Semoga bermanfaat.
Ini listing programnya:
/*__ ___ __ __ ___ ___ ___ ___ _ _ |_ _| \ ___ | \/ |_ _|/ __| _ \/ _ \ \| | - eMBEDDED Design & | || |) ||___|| |\/| || | (__| / (_)| .` | - System Development |___|___/ |_| |_|___|\___|_|_\\___/_|\_|______________________+ ;Homepage : http://www.nubielab.com ;Programmer : Herlambang Aribowo. ;Email : herlambang@nubielab.com ;Mobile : +6285883289911 ;------------------------------------ */ //Simple running text on 2X16 HD44780 LCD.. for AVR (Codevision AVR) //you can modify this source code for your specific needs. //You should recompile this code using CodeVision AVR V2.03.9 or later. //This code is distributed under GNU license. //For question and suggestion you should contact me on the address above. //Happy programming :D /************************************************************************* this file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. Copyright 2009, 2010 Herlambang Aribowo ************************************************************************/ #include <mega8535.h> // Alphanumeric LCD Module functions #asm .equ __lcd_port=0x1B ;PORTA //.equ __lcd_port=0x15 ;PORTC #endasm // Standard Input/Output functions #include <lcd.h> #include <delay.h> #include <string.h> // Global variables // Silahkan ganti text yang mau ditampilin di array buffer_lcd char buffer_lcd[]="RUNNING TEXT ON 2X16 HD44780 LCD.. Coded by: " "Herlambang Aribowo :D http://www.nubielab.com ";//space required // belakang sendiri kasih karakter "spasi"/0x20 biar keliatan fadingnya. char lcd_number = 16; //diganti sesuai kebutuhan misal pake yg 4x20 //lcd_number = 20 // Function prototype void sett_regs(void); void tampilan(void); // Main routine (super loop) void main(void){ sett_regs(); lcd_init(16); _lcd_ready(); lcd_clear(); for(;;){// Endless loop, podo karo "while(1)" tampilan(); } } // Setting register void sett_regs(void){ //Define I/O DDRA = 0xff;PORTA = 0x00; DDRB = 0x00;PORTB = 0x00; DDRC = 0x00;PORTC = 0x00; } // Display routine :D void tampilan(void){ unsigned int i,j,k; unsigned int data_len = strlen(buffer_lcd); _lcd_ready(); lcd_clear(); lcd_gotoxy(0,0); lcd_putsf(" RUNNING TEXT "); for (i=lcd_number; i>=0; --i){ if (i > lcd_number)break; lcd_gotoxy(i,1); for (j=0; j<(lcd_number-i); j++){ lcd_putchar(buffer_lcd[j]); } delay_ms(100); //ubah untuk kecepatan pergeseran text }; k=0; for (i=0; i<=data_len; i++){ k++; lcd_gotoxy(0,1); for (j=0; j<16; j++){ if (buffer_lcd[j+k] == NULL){ return; } lcd_putchar(buffer_lcd[j+k]); } delay_ms(100); //ubah untuk kecepatan pergeseran text (samakan sama yang diatas) }; }
Dan ini adalah screenshot dari simulasi proteus..

Yang perlu diingat.. kode ini ane bikin dengan compiler CVAVR 2.03.9. kalau diganti versi kompiler… apalagi downgrade, ane gak menjamin kode ini bisa berjalan dengan semestinya.
Thanks..
Silahkan download file lengkapnya disini: AVR RUNNING TEXT ON HD44780 LCD
Jangan lupa dikomeng gan ![]()
File sudah didownload ribuan kali tapi yang komeng cuman sedikit ![]()
yang gak komeng ![]()
UPDATE!
Bila ingin mencoba menggunakan LCD library untuk CodeVisionAVR yang support running text dan progressbar, agan bisa download Nubielab LCD Library.. masih dalam versi beta, silahkan dicoba dolo OK langsung menuju TKP aja..
![]()
>>>>>>Nubielab LCD library V1.0beta<<<<<<
-Herlambang Aribowo





akhirnya ketemu jg….ta coba pa…
@ryq: Ya silahkan dicoba.. kalo ada kesulitan silahkan post aja disini
mas mantabbbbbb!!!
“ijin download yaaaaachhhhh”
sukses mas
@ilham: terimakasih gan… monggo silahkan di download dan dipelajari codenya.. dan coba diubah-ubah dan disempurnakan bwt latihan. Kalo ada pertanyaan, kritik ato saran.. silahkan mampir kesini lagi ya
unsigned int data_len = strlen((buffer_lcd));
saya dapat error di coding ini pak,
bunyi errornya spt ini “must be constant expression”
piye ki pak??
bukan unsigned int data_len = strlen((buffer_lcd));
tapi:
unsigned int data_len = (strlen(buffer_lcd));
kalo error silahkan dicoba jadi :
unsigned int data_len = strlen(buffer_lcd);
hehe.. lupa ngapus, tanda kurungnya kebanyakan .. kalo di CVAVR 2.03.9 tidak ada warning ato error.. silahkan dicoba seperti cara yang diatas.
NB: Saia masih muda… jadi jangan panggil pak ya….
wahahaha..maaf aku panggil masnya aja yah…
gini mas…saya juga sudah utak-atik misalnya minghilangkan kurung tersebut.. tapi masi error warning juga..
saya pake codevision juga mas…
apa karena gak updet CVnya??tapi masa sih…warnig errornya masalah versi codevisionnya….
ada ide lain gak mas?
setelah saya utak-atik ternyata sya sudah dapat error tadi mas…
perintah ini saya matikan //unsigned int data_len = strlen(buffer_lcd);
saya pikir code nya itu tidak perlu ada karena buffer_lcd bisa berdiri sendiri tanpa mengubahnya ke bentuk int.
jadi perintah selanjutnya yang terdapat data_len saya ganti menjadi buffer_lcd… cuma sekedar share aja mas…
thanks atas source codenya yah mas…
unsigned int data_len = strlen(buffer_lcd);
buffer_lcd memang bisa berdiri sendiri…walopun gak punya kaki
nah, tapi apa yang dimaksud ipul dengan “berdiri sendiri”? apa maksudnya variable data_len langsung diganti buffer_lcd tanpa haru ada data_len = strlen(buffer_lcd). Dan selanjutnya kalo ada data_len di replace dengan buffer_lcd…. nah kalo gini jadinya berantakan deh. ntar kalo di download ke mikro beneran (bukan simulasi) dan ditampilin di LCD beneran… akan muncul karakter-karakter aneh dibelakang tulisan…. atow malah tulisannya kepotong
….
Okey… doesn’t matter, yang penting mohon dipahami dulu konsepnya…
data_len adalah variable untuk mengetahui panjang dari data pada buffer_lcd dan fungsinya untuk perhitungan panjang kolom pada LCD yang akan ditulisi.. kalo memang jumlah karakter di array buffer_lcd sudah fixed… gak usah pake strlen(buffer_lcd) langsung aja tulis nilainya…. misal :
unsigned int data_len = 500; <—- untuk karakter di buffer lcd sejumlah limaratus
fungsi : strlen() adalah mengambil nilai panjang karakter yang terisi dari suatu array string yang hasilnya berupa nilai unsigned int. Baca CVAVR 2.03.9 user manual. (strlen() masuk dalam perintah standar ANSI C).
nah variable data_len saia buat dengan tipe lokal variable.. dengan tipe unsigned int. maka jadinya : unsigned int data_len.
dan saya isi nilai awal sekalian: jadinya…
unsigned int data_len = strlen(buffer_lcd);
jadi kalo data_len langsung diganti buffer_lcd, nanti tampilannya pasti suatu saat akan berantakan … apalagi kalo program sudah dimodifikasi dengan isi karakter pada buffer_lcd yang variable (tidak tetap) dan tidak pasti jumlahnya… pasti akan muncul karakter2 aneh pada lcd
tapi mungkin masih ketolong dengan yang dibawah ini koq mas…
hehe… gimana kalo tidak ada syntax ini :
pasti… tampilan lcd akan berjalan terus sampai tulisan2 aneh keluar dan tulisan aslinya gak muncul2 … kenapa?? karena itu adalah salah satu rutin syntax untuk null terminated. Atau jika data pada array[?] berisi null… maka running akan diselesaikan dan memulai dari awal…
BTW,
coba pake CVAVR V2.. pasti dijamin bisa.. dan bagaimanapun juga CVAVR versi lebih tinggi memungkinkan support dengan jenis mikro terbaru dan pembenahan bugs disana sini..
Ato kalo masih ingin menggunakan versi lama, silahkan baca user manualnya … dan setiap versi pasti berbeda…
Yang perlu diingat.. kode ini saia buat dengan CVAVR 2.03.9. kalau diganti versi kompiler… apalagi downgrade, saia tidak menjamin kode ini bisa berjalan dengan semestinya. Thanks..
ya… monggo silahkan ada lagi yang ingin membagi pengalamannya menggunakan kode saia diatas.
gan kalo pengen menghapus satu karakter aja bisa ga ya gan?misalnya pengen menghapus karakter lokasi (0,2).kalo pake lcd_clear() kehapus semua karakternya. gmn ya???
oya gan, tanya donk soal seting timer pake codevision?….
kalo ada yg punya artikel bisa tlg shared g ke uranium_weee@ymail.com
memang bro kalo perintah lcd_clear untuk menghapus semua row maupun column. (0,2) berarti kolom 0 baris 2 kan… (baris dimulai dari 0) pake LCD lebih dari 2X.. ya? gapapa sama aja bro. Kalo pingin ngapusnya biar gak kelihatan karakter sebelumnya pada kolom dan garis yang dituju bisa menggunakan karakter spasi..
perintah diatas akan mengganti karakter pada kolom 0 baris ke 2 (baris dimulai dari 0 berarti baris ke2 = baris ke3) yang sebelumnya tersimpan pada CGRAM LCD dengan nilai 0X20 atau karakter spasi… jadi ntar keliatannya kosong (karakter sebelumnya diganti dengan spasi).
untuk artikel setting timer di CVAVR saia belum sempat menulisnya…
kalo untk nampilin nama di lcd gimana programnya? dengan menggunakan bahasa C di codevision AVR.. tolong ya,,, kasi tau. terimakasih
ya itu diatas salah satu contohnya..
coba dipelajari dulu dasar2 LCD pake library CVAVR
mas, kalo mo nampilkan data nomor di keypad ke lcd secara secara menggeser pke CVAVR gmana ? mksh
Mudah banget gan.. kesulitannya dimana kira2
mas kalomau ngerubah textnya, bagian mana yang harus dirubah?
Coba dilihat lagi petunjuknya diprogram.. inline explanation koq
mas mo tnya. kalo mo ngasih inputannya gmn mas?
mis: jika d tekan PIND, maka LCD akan tampil dengan pesan berjalan.
sya sdh coba yg program di atas, berhasil mas, tp sya cba ngsih inputan kok blm bisa, tlg mas. mksh sblumnya
pertama seting dulu DDR dan PORTnya..
untuk inputan misal PIND.1
terus codenya seperti ini:
nah gitu boss.. udeh jelas belon??
tks atas ilmu yg dibagi
@jono
sama2 jono.. thanks juga ya dah berkunjung
Om Herlambang, Aku boleh gk kursus privat sama om…?
@andar
boleh silahkan.. by email pa?? hehe
pa, saya mau nanya ni soal program pencacah 1 -255 pada LCD !!
@fahmi
Apa yang mau ditanyakan fahmi? hehe program pencacah dengan tampilah hasil cacah pada LCD sangatlah mudah, apalagi menggunakan bahasa C. kesulitannya dimanananya bro???
mas,maw nanya, bisa dksi penjelasan ttg Proteus ISIS Simulation itu ky apa gag?prinsip kerjanya gimna?
makasii
@angga
Proteus ISIS itu adalah program yang bisa mensimulasikan rangkaian elektronika analog, digital maupun mikrokontroler.
jadi fungsi Proteus diatas cuman buat simulasi aja..
maap nulis programnya pake aplikasi/program apa? n pake os apa? trims
@Omni
Program diatas ditulis dengan aplikasi bernama CodeVisionAVR. Untuk OS pake windows.
program diatas adalah program C untuk aplikasi microcontroller dan bukan untuk aplikasi PC.
master, aye mw tnya ad coding buat tampilkan angka G???
misal ; aplikasi menghitung jumlah kendaraan yang msuk & keluap pd tmpat parkir…
contoh : jumlah kapasitas ruang parkir 100..
– jika SWITCH 1 ditekan satu X akan berkurang 1 angaka,dari 100 mnjdi 99,dst nya smpi 0 jika SWITCH1 ditekan brulangX…
– dan jika SWITCH2 ditekan satu X akan brtambah 1 angka,misal dari 98 mnjdi 99..
tpi Tanpa CodeWizardAVR, pke AVR…
tolong krim email eddy_kurnianto@yahoo.com…mohon bantuannya…
angka G gimane??
untuk aplikasi parkir
sangat mudah. coba eddy buat dulu ntar baru bisa ane bantu..
lha kalo ane yang buat semuanya kan kamu jadi gk belajar dah ..
oke bwt dulu terus kalo gagal ntar kirim ke email ane di herlambang [at] nubielab.com
hehe.. ane juga gak nganggur, banyak kerjaan jadi sesempatnya ya…
gan, gmana caranya update Library Proteus, padahal ane udah pake Proteus 7.5 SP3 lho. tp pas Pick Package/Symbol diketik AVR malah gk keluar list-nya… download dii Labcenter jg susah…. kali pnya link yg free…
sukses selalu…
Jangan ketik AVR mendingan ketik ATtiny atow ATmega aja… ada di kelompok microprocessor..
Lam kenal,mas aq mau buat running text dgn dot matrik ,punya listing programnya ,BOS
gak puna gan… at least belon ane buat
Mas, coba lihat :
for (i=lcd_number; i>=0; –i){
if (i > lcd_number)break;
…..
}
maksudnya i>lcd_number gimana ya?
kan lcd_number udah didefinisikan 16, sedangkan “format” for-nya decrement. Jadi ga mungkin i > 16 dong?thx mas.
Oh, setelah hasil decrementnya saya tampilin di LCD, TERNYATA hasilnya : 16,15,…,2,1,0,255,254,…
Hehe..
hehe ternyata dah dicoba sendiri tow .. yaw met utak-atik aje.. ntar ane juga ada library LCD komplit ada fungsi runnning text, progressbar dll.. running text bisa langsung mau masukin pada kolom dan baris berapa.. tapi belon sempat ane posting soalnya belon sempat buat dokumentasinya.. biar gampang dicerna .. ditunggu saja ..

oke, thanks banget ya mas. ditunggu janjinya :mrgreen:
Ini lho boss, masih beta silahkan dicoba dulu
=
http://www.nubielab.com/elektronika/mikrokontroler/nubielab-hd44780-lcd-library-avr-codevisionavr
udeh dicoba belon programnya??
haha…
owh, yang kamu tanyakan i>lcd_number terus kok dibawahnya if i > 16 kok bisa?? padahal lcd_number udeh didefinisikan?? hayooo… kenapa coba?? haha..
coba baca dan pelajari lagi programnya… bila suatu nilai variable unsigned misal 8bit dikurangi dan sampai nilai 0 masih dikurangi, maka nilai variable akan kembali ke 255 karena variable bertipe unsigned. jadi >lcd_number itu mendeteksi bahwa nilai variable dibawah 0. karena jika nilai perbandingannya if = 0 maka program akan keluar dari loop “for” dan even pada hitungan 0 tidak dilaksanakan… mengerti bro

ngopi dulu..
:razz: ..oke siap di coba
Wokey boss.. silahken dicoba dulu.
ntar komeng disini gimana hasilnya
mas tlg dong dibantuin sy sedang coba2 / latihan buat pemrogramn traffic light untuk pergantian waktu dari program normal ke program flashing/kedip serta sy buat tuk darim normal ke kedip/flashing sbb;
if (jam==05 && menit>=22);
{
lampu_satu_merah=1;
lampu_satu_kuning=0;
lampu_satu_hijau=0;
lampu_dua_merah=0;
lampu_dua_kuning=1;
lampu_dua_hijau=0;
}
else
lampu_satu_kuning=~lampu_satu_kuning;
tapi belum bs mas tolong dong dibantuin tuk perpindahan waktu program normal ke program kedip/flashing. pada waktu malam hari gtl lho mas.
terima kasih banyaj bs di emailkan budi_p_s@yahoo.co.id pa bs contact2 sy di 0351 7737355 biar tambah akrab
Hehe yang ngerti maksud dari program ente kan ente sendiri yang buat, jadi kalo mo dibantu buat dulu program utuh, terus jelaskan keinginannya dan apa yang belum bisa. kalo cuman potongan2 ane kagak ngarti kamsudnya
okay bang,abng pernah liat traffic light waktu dimalam hari kan skit tar jam 22.00. traffic light kan mati ganti lampu kedip yang nyala/warning, sy kbingungan buat perpindahan program, program satu ke program dua
(jam==05 && menit>=00);
{
lampu_satu_merah=1;
lampu_satu_kuning=0;
lampu_satu_hijau=0;
lampu_dua_merah=0;
lampu_dua_kuning=1;
lampu_dua_hijau=0;
lampu_satu_merah=1;
lampu_satu_kuning=0;
lampu_satu_hijau=0;
lampu_dua_merah=0;
lampu_dua_kuning=1;
lampu_dua_hijau=0;
}
else(jam==22 && menit>=00)
{
lampu_satu_kuning=~lampu_satu_kuning;
}
maksud program ogut diatas jam 5 pagi lampu nyala normal, lampu merah,kuning, hijau nyala, dan jam 10 malam lampu ganti kedip/flashing. ogut pakkek code vision avr mega 16
Hehe
Ane ngerti cara kerja traffic lights soalnya ane pernah buat yang bener2 dipasang dijalan dan bukan sekedar latihan, tapi yang ane maksud itu metode program ente seperti apa?
udeh dibilang jangan potongan2, kalo potongan2 baris program ya gak bisa nentuin metode apa yang harus dipake. ente harus kasih program source komplit metode seperti apa yang digunakan. Kalo dalam aplikasi traffic lights real, waktu kuning kedap kedip itu banyak cara dan teknik yang bisa digunakan.
OK dah, coba ane bantu dari potongan program diatas.. waktu jam 22.00 (lampu kuning kedip) buat loop pada salah satu fungsi program agan sampai jam 05.00. misal :
Program ane tulis gak pake compiler cuman ilustrasi aja, jadi mungkin ada salah ketik ato gak jalan haha..
permisi mas mau nanya, bisa di jelaskan tentang listing yng ini:
for (i=0; i<=data_len; i++){
k++;
lcd_gotoxy(0,1);
for (j=0; j<16; j++){
if (buffer_lcd[j+k] == NULL){
return;
}
lcd_putchar(buffer_lcd[j+k]);
}
delay_ms(100); //ubah untuk kecepatan pergeseran text (samakan sama yang diatas)
};
}
mas mau tanya,,,,
kalu misal mau buat progam kita punya 8 tombol
tombol 1 ditekan muncul angka1,,,tombol 2 angka 2 dst mpe 8
nah pengenya di lcdnya munculnya berurutan g hilang sesuai urutan tombol ditekan
klu urutan tombol ditekn itu 4,5,6
maka di lcd muncul 4,5,6 jadi bergeser gtu gmn ya,,
aku nyoba kok g pernah bisaa,,,cmn muncul sekali ajah,,numpuk gtu,,
dicontohin 2 tombol aja mas
mksh
kalo untuk ATMega8 gimana mas????
kalo untuk ATMega8 gimana mas????
udah saya coba n utak atik listing program diatas, tapi tetep kagak bisa…
mohon bantuannya…
aku ada problem ni mas,,, tolong dipecahin yah mas,, sebelumyna terima kasih…
aku mau buat tugas ni mas, mendeteksi orang di pintu pake “satu laserldr”,
“satu laserldr” ini nanti akan mendeteksi keberadaan orang di depan pintu,,
begini ceritanya mas…
pas ada 2 orang yag lewat pintu dhitung sama si ldr trus disimpan hasilnya,
kemudian ada 3 orang lagi yang lewat pada ldr yang sama dan hasilnya disimpan juga,,
kemudian kedua hasil itu dibandingkan,jumlah orang yang lebih banyak akan lebih ditumakan untuk membuka pintu terlebih dahulu
aku bingungnya pas nyimpan hasilnya itu mas dan membandingkan jumlah orangnya.,,
gimana ya mas??
mantap gan.
kalo ane mo ganti ke port C mesti gmn gan?
*maklum newbie
mas saya mau tanya, kalau running text nya mau diubah jadi geser kiri ke kanan, apa yg harus diubah ya mas? mohon pencerahannya.. thanks..
mas ijin aku mo copas n donlod ya…
buat tugas
ane lom paham… nanti tak coba juga
om cara nyambungin cv avr ama isisnya gmana ?? lupa,hhe… mohon bantuannya ^_^
om saya mau skripsi bikin alat pendeteksi telur,, bisa di bantu cv avr a??hhe…. pusing saya,, pake sensor cahaya LDR,, outputnya LCD ama LED merah dan hijau,, makasih ^_^,, klo bantuin saya doain masuk surga,, panjang umur,, sehat selalu,, amin
Maturnuwun sanget Gan….tak kasih cendol deh…..mudah-mudahan manfaat n bisa dipake buat skripsi nih…..
om saya mau nanyain sourcecode dong,,saya ada tugas mikro…
pake lcd, keypad, atmega8535…
disuruh input dari keypad 0-255, trus di lcd nampilin 0-100%…jadi klo kita input 255 berarti yang tampil di lcd 100%,…saya dah nyoba2 tp g berhasil2…saya baru bisa input 1 digit aja lewat keypadnya, jd g bisa input 3 digit…mohon bantuannya…..
makasih om….