MODUL 4 SEVEN SEGMENT, KEYPAD, DAN LCD
MODUL 4 SEVEN SEGMENT, KEYPAD, DAN LCD
Novi Prihatiningrum (13212065) Novi Prihatiningrum (13212065)
Asisten: Lukman Aji
Asisten: Lukman Aji Samudra (132110Samudra (13211018)18) Tanggal Percobaan: 220!201" Tanggal Percobaan: 220!201" #L321!$Praktikum Sistem %ikro&rosesor #L321!$Praktikum Sistem %ikro&rosesor
Laboratorium Dasar Teknik Elektro - Sekolah Teknik Elektro dan Informatika ITB
Laboratorium Dasar Teknik Elektro - Sekolah Teknik Elektro dan Informatika ITB
Abstrak
Abstrak
Beberapa
Beberapa
interface
interface
y
ya
an
ng
g
u
um
mu
um
m
di
digu
guna
naka
kan
n seb
sebag
agai
ai ma
masu
suka
kan
n ma
maup
upun
un
k
ke
ellu
ua
arra
an
n
d
da
alla
am
m
p
pe
en
ng
gg
gu
un
na
aa
an
n
m
miik
krro
ok
ko
on
nttrro
olllle
err
A
ATMega8535
TMega8535
adalah
adalah
seven segment, keypad,
seven segment, keypad, dan
dan LCD.
LCD. Dalam
Dalam
percobaan di modul 4 ini akan dipelajari
percobaan di modul 4 ini akan dipelajari
bagaimana menggunakan ketiganya.
bagaimana menggunakan ketiganya.
Kata kunci:
Kata kunci: seven segment, keypad, LCD,
seven segment, keypad, LCD,
scanning.
scanning.
1.
1. P
P
ENDAHULUANENDAHULUANDalam menggunakan mikrokontroller ATMega Dalam menggunakan mikrokontroller ATMega 85
853535 seserinringkgkalali i didi!e!erlrlukukan an susuatatu u dede"a"aisis un
untutuk k mmenenaam!m!ililkkaan n kkeleluauararan n mamau!u!uunn memberikan suatu masukan# $ntuk itu da!at memberikan suatu masukan# $ntuk itu da!at dig
digununakakan an dede"a"ais is tatambmbahahan an sese!e!ertrtii sevenseven s
seeggmmeenntt, , kkeeyyppaadd,, ddaan n LL%%DD# # DDaallaamm !enggu
!enggunaannnaann&a&a seven segment seven segment dan dan keypadkeypad m
meemmeerrlluukkaan n !rro! osseess scanningscanning untukuntuk men
menam!am!ilkilkan an kekelualuaran ran mamau!uu!un n memmemba'ba'aa mas
masukukan# an# SemSemententara ara untuntuk uk menmengguggunaknakanan L%D telah terda!at
L%D telah terda!at library library &ang berisi fungsi- &ang berisi fungsi-fungsi untuk menam!ilkan dalam L%D#
fungsi untuk menam!ilkan dalam L%D#
2.
2. S
S
TUDITUDIP
P
USTAKA USTAKA2
2..1
1
S
S
CANNINGCANNINGS
S
EVENEVENS
S
EGMENTEGMENT Salah satu teknik untuk menggunakSalah satu teknik untuk menggunakanan sevenseven segment
segment aaddaalalah h tteekknniikk scanningscanning# # DeDengnganan me
mengnggugunanakakan n teteknknik ik inini i sese(u(umlmlahah sevenseven segment
segment da!at di(alankan se'ara bergantian da!at di(alankan se'ara bergantian de
dengngan an frfrekekueuensnsi i tetertrtenentutu# # )a)al l inini i akakanan menghemat (umlah
menghemat (umlah port port ##
*ada !er'obaan di modul ini akan digunakan *ada !er'obaan di modul ini akan digunakan dua buah
dua buah seven segment seven segment !ada Trainer Board# !ada Trainer Board# $nt
$ntuk uk menmen(al(alankankanan seven segment seven segment + dan , + dan , se'ara berurutan !in D+ dan D, se'ara berurutan !in D+ dan D, masing-m
masasining g haharurus s didibbereri i lologgikika a ..//0 0 sse'e'aarara be
berrgagantntiaian# n# SeSelalain in ititu u !e!erlrlu u didilalakkukukanan !
!eennggaattuurraann segment segment mamanna a &&aanng g aakkaann dia
diaktiktifkfkan an dendengan gan memmemberberikaikan n loglogika ika .+.+0#0# $rutan dari MSB ke LSB adalah D* 1 2 D E $rutan dari MSB ke LSB adalah D* 1 2 D E % B A#
% B A#
Gambar 2 1
Gambar 2 1 TTam!"#a$ S%&%$ S%'m%$tam!"#a$ S%&%$ S%'m%$t
2
2..2
2
S
S
CANNINGCANNINGK
K
EYPADEYPAD $$nnttuuk k mmeenngggguunnaakkaann keypadkeypad didigugunanakkanan tteekknniikk scanningscanning se!se!erterti i !ad!ada a !en!engguggunaanaann se
seveven n sesegmgmenent t sebesebelumn&alumn&a# # *e*engatungaturanran lo
logigika ka didilalakkukukan an sese'a'ara ra bebergrganantitian an ununtutukk me
mengngetetahahui ui totombmbol ol mamana na &a&ang ng sesedadangng di
dittekekanan## KKeeyyppaadd ,,, , &a&ang ng teterdrda!a!at at !a!adada tra
traineiner r boaboard rd memmemiliiliki ki !in !eneri!in !enerimama output output dar
dari i mikmikrorokokontrntrolloller er 4B4B+ + dan dan 4B4B, , &an&angg be
bersrsififatat actactive ive lowlow ddan !ian !in n !!emembeberrii input input !ada mikrokontroller 4BI+ dan 4BI, &ang (uga !ada mikrokontroller 4BI+ dan 4BI, &ang (uga bersifat
bersifat active lowactive low## $n
$ntutuk k memen(n(alalanankakann keypadkeypad ,, diberik,, diberikanan logika ./0 !ada 4B+ dan .+0 !ada 4B,0# logika ./0 !ada 4B+ dan .+0 !ada 4B,0# Selan(utn&a dilakukan !enge'ekan !ada 4BI+ Selan(utn&a dilakukan !enge'ekan !ada 4BI+ dan 4BI, &ang mengalami !erubahan logika dan 4BI, &ang mengalami !erubahan logika da
dari ri ././0 0 memen(n(adadi i .+.+0 0 ununtutuk k memengngetetahahuiui to
tombmbol ol mamana na &a&ang ng diditetekkanan# # SeSelalan(n(ututn&n&aa diulangi langkah &ang sama dengan memberi diulangi langkah &ang sama dengan memberi log
logika .+0 ika .+0 !ad!ada a 4B4B+ + dan dan loglogikika a .+0 !ada.+0 !ada 4B,#
4B,#
Gambar 2 2 Sk%mat"k K%(!a) 2*2 Gambar 2 2 Sk%mat"k K%(!a) 2*2
Laporan Praktikum - Laboratorium Dasar Teknik !ektro " #T$ $T% Laporan Praktikum - Laboratorium Dasar Teknik !ektro " #T$ $T% 11
2
2..+
+
L
LC
CD
D
**adada a !e!er'r'obobaaaan n inini i didigungunakakan an L%L%D D &a&angng b
beerrbbaassiis s ))DD6688/ / LL%%D D %%oonnttrroolllleerr## *
*engenggungunaaaan n L%L%D D akakan an didilalakkukukan an dedengnganan menggunakan
menggunakan librarylibrary dan demodan demo project project &ang &ang ber
bernamnama a AA7 7 L%D L%D liblib# # L%D digunaL%D digunakakan n !ad!adaa *ort %#
*ort %#
+.
+. L
L
ANGKAH ANGKAHP
P
ECO-AANECO-AAN$ntuk melakukan !er'obaan-!er'obaan !ada $ntuk melakukan !er'obaan-!er'obaan !ada m
moodduul l iinni i ddiigguunnaakkaan n SSiissmmiin n ddeennggaann mikrok
mikrokontroller ATMega 8535# $ntuk ontroller ATMega 8535# $ntuk interfa'einterfa'e digunakan Trainer Board &ang sudah memiliki digunakan Trainer Board &ang sudah memiliki ke
keypypadad, , seseveven n sesegmgmenent,t, dan dan L%DL%D# # SebSebagaagaii su
sumbmber er dada&a &a didigugunanakakann power power supply supply 9 9 77## $ntuk
$ntuk melakmelakukan ukan !emr!emrogramograman an digunadigunakankan usbas!#
usbas!#
Sebagai !ersia!an hal berikut dilakukan: Sebagai !ersia!an hal berikut dilakukan: Buk
Buka a *r*rogrogrammammer er ;ot;ote!ae!ad d lallalu u buabuat t ;e<;e< *ro(e't# 4emudian masukkan s'ri!t !rogram# *ro(e't# 4emudian masukkan s'ri!t !rogram# La
Lalu lu sisim!m!an an dadan n adadd d =l=les es tetersrsebebut ut !a!adada !ro(e't#
!ro(e't# Se
Settelelaah h ititu u bubukka a M=M=le le ununttuk uk mememmbubuatat Make=le guna melakuka
Make=le guna melakukan 'om!iling dari n 'om!iling dari s'ri!ts'ri!t &an
&ang g tetelah lah dibudibuat# at# **ada ada M=lM=le e diadiatur tur (en(enisis M
Mikikrrookkonontrtroollller er &a&ang ng ddigigununaakkaan n &&aiaittuu ATMega8535 (enis !rogrammer &aitu usbas! ATMega8535 (enis !rogrammer &aitu usbas! !ort !rogrammer &ang digunakan &aitu 'om+ !ort !rogrammer &ang digunakan &aitu 'om+ da
dan n %l%lo'o'k k 22rre>e>ueuen'n'& & dadari ri ososililatator or &a&angng digunakan &aitu 6368 M)?#
digunakan &aitu 6368 M)?# Se
Setetelalah h s's'riri!t !t dadan n M=M=le le seselelesasai i didibubuatat ke
kembambali li ke ke *r*rogrogrammammer er ;ot;ote!ae!ad d laklakukukanan Ma
Makke e AlAll l ununtutuk k memengng-'-'omom!i!ile le !r!rogograram#m# A!abi
A!abila la berhberhasil asil laklakukan ukan do<ndo<nload load !rog!rogramram u
unnttuuk k mmeemmaassuukkkkaan n !!rrooggrraam m kkee mikrokontroller#
mikrokontroller#
+
+..1
1
T
T
UGASUGASIV.A S
IV.A S
CANNINGCANNINGS
S
EVENEVENS
S
EGMENTEGMENT )u)ububungngkakan n **T T A A AATMTMegega8a853535 5 dedengnganan DA
DATTA A 6S 6S !a!ada da TTraraininer er BoBoarard d dadan n **T T DD ATMega 8535 dengan I@* S 4E !ada Trainer ATMega 8535 dengan I@* S 4E !ada Trainer Board#
Board#
+
+..1
1..1
1 T
T
UGASUGASIV.A.1
IV.A.1
LaLakkukukan an dodo<n<nloload ad !r!rogograram m &a&ang ng tetelalahh ter
terda!da!at at !ad!ada a modmodul# ul# AmaAmati ti kkelueluaraaran n !ad!adaa se"
se"en en segsegmenment# t# *r*rogrogram am &an&ang g dibudibuat at akakanan menam!ilkan .6#,0 !ada se"en segment# menam!ilkan .6#,0 !ada se"en segment#
+
+..1
1..2
2 T
T
UGASUGASIV.A.2
IV.A.2
LLakakukukan an mmododi=i=kkaassi i !a!ada da !r!rogograram m AA##+#+# !r
!rogograram m akakan an memenanam!m!ilkilkan an .5.5/#/#0 0 ../#/#00 hingga .+/#0 Masing-masing selama + detik hingga .+/#0 Masing-masing selama + detik
kemudian
kemudian menam!ilkan menam!ilkan .22.22#0 #0 ang ang berkedi!berkedi! dengan selang <aktu /#5 detik#
dengan selang <aktu /#5 detik#
+
+..2
2
T
T
UGASUGASIV.- S
IV.- S
CANNINGCANNINGK
K
EYPADEYPAD )u)ububungngkakan n **T T A A AATMTMegega a 858535 35 dedengnganan *T $T*$T !ada Trainer Board dan *T D *T $T*$T !ada Trainer Board dan *T D ATMega 8535 dengan I@* S 4E !ada Trainer ATMega 8535 dengan I@* S 4E !ada Trainer Board#
Board#
+
+..2
2..1
1 T
T
UGASUGASIV.-.1
IV.-.1
LaLakkukukan an dodo<n<nloload ad !r!rogograram m &a&ang ng tetelalahh ter
terda!da!at at !ad!ada a modmodul# ul# LakLakukukan an !er!er'ob'obaaaann masukan melalui ke&!ad ,, amati keluaran masukan melalui ke&!ad ,, amati keluaran !ada LED#
!ada LED#
+
+..2
2..2
2 T
T
UGASUGASIV.-.2
IV.-.2
LLakakukukan an momodidi==kkaassi i ssehehininggga ga !r!rogograramm menam!ilkan keluaran !ada se"en segment# menam!ilkan keluaran !ada se"en segment#
+
+..+
+
T
T
UGASUGASIV.C LCD
IV.C LCD
)ub)ubungungkakan n **T T % % AATMeTMega ga 858535 35 dengdenganan *T L%D dan *T D ATMega 8535 dengan *T L%D dan *T D ATMega 8535 dengan I@* S4E !ada Trainer Board#
I@* S4E !ada Trainer Board#
+
+..+
+..1
1 T
T
UGASUGASIV.C.1
IV.C.1
Ada!tasi make=le dan (alankan a"rl'd#!n!ro( Ada!tasi make=le dan (alankan a"rl'd#!n!ro( !ada A7 L%D Lib Demo#
!ada A7 L%D Lib Demo# Amati keluaran !adaAmati keluaran !ada L%D
L%D
+
+..+
+..2
2 T
T
UGASUGASIV.C.2
IV.C.2
alankanalankan main#' main#' &ang &ang telah telah dimodi=kasi dimodi=kasi !ada!ada modul# Amati keluaran dari !enekanan tombol modul# Amati keluaran dari !enekanan tombol !ada L%D#
!ada L%D#
+
+..+
+..+
+ T
T
UGASUGASIV.C.+
IV.C.+
MMooddii==kkaassi i ==lle e mmaaiinn##' ' sseehhiinngggga a LL%%DD menam!ilkan ke&!ad ,, &ang ditekan# Amati menam!ilkan ke&!ad ,, &ang ditekan# Amati keluaran dari !enekanan tombol !ada L%D# keluaran dari !enekanan tombol !ada L%D#
1
1
T
T
UGASUGASIV.C.4
IV.C.4
MMooddii==kkaassi i ==lle e mmaaiinn##' ' sseehhiinngggga a LL%%DD menam!ilkan ke&!ad 33 &ang ditekan# Amati menam!ilkan ke&!ad 33 &ang ditekan# Amati keluaran dari !enekanan tombol !ada L%D# keluaran dari !enekanan tombol !ada L%D#
4.
4. H
H
ASIL ASIL DANDANA
A
NALISISNALISIS4
4..1
1
T
T
UGASUGASIV.A S
IV.A S
CANNINGCANNINGS
S
EVENEVENS
S
EGMENTEGMENT4
4..1
1..1
1 T
T
UGASUGASIV.A.1
IV.A.1
*ada !er'obaan ini akan dilakukan s'anning *ada !er'obaan ini akan dilakukan s'anning se"
se"en en segsegmenment# t# AkAkan an ditditam!am!ilkilkan an digdigit it 6#,6#, !a
!ada da dudua a sese"e"en n sesegmgmenent# t# *r*rogograram m &a&angng
Laporan Praktikum - Laboratorium Dasar Teknik !ektro " #T$ $T% Laporan Praktikum - Laboratorium Dasar Teknik !ektro " #T$ $T% 22
digunakan terda!at !ada lam!iran# Berikut Co<'hart dari !rogram &ang digunakan#
Gambar 4 1 /#03art ma"$ T'as A.1
Gambar 4 2 /#03art SS%'m%$ T'as A.1 Dari Co<'hart di atas terlihat bah<a !rogram memiliki bagian main dan sebuah fungsi SSegmen# 2ungsi Ssegmen digunakan untuk mengatur segmen mana &ang diaktifkan saat suatu karakter akan ditam!ilkan# Dalam hal ini han&a karakter angka &ang dibuat &aitu /-9# *enambahan karakter titik !ada se"en segment dilakukan dengan o!erasi dengan o!eran +6F#
*rogram utama &ang dibuat melakukan s'anning !ada kedua se"en segment se'ara bergantian dengan !eriode , detik terlihat dari (eda + detik tia! !roses s'anning# 4emudian dilakukan !enam!ilan digit .6#0
!ada se"en segment !ertama dan .,0 !ada se"en segment kedua# )asil &ang di!eroleh dari !er'obaan ini telah sesuai &aitu ditam!ilkann&a .6#,0 !ada se"en segment#
4.1.2 T
UGASIV.A.2
*ada !er'obaan ini dilakukan modi=kasi dari tugas A#+# !rogram diinginkan menam!ilkan .5/#0 selama + detik kemudian ./#0 selama satu detik dan begitu seterrusn&a hingga menam!ilkan .+/#0 Setelah itu !rogram akan menam!ilkan .2#2#0 &ang berkedi!-kedi! 3 dengan selang <aktu setengah detik lalu !adam# $ntuk itu dibuat !rogram dengan menggunakan timer+# Timer+ digunakan untuk menghitung <aktu satu detik dan setengah detik# )asil modi=kasi !rogram &ang digunakan terda!at dalam lam!iran# Berikut Co<'hart dari !rogram &ang dimodi=kasi#
Gambar 4 + /#03art ma"$ T'as A.2 $ntuk menghitung <aktu satu detik dan setengah detik digunakan timer + dengan 'om!are mat'h# $ntuk <aktu + detik digunakan %+A G /+%,/# $ntuk <aktu /#5 detik digunakan %+A G //E+/# S'anning se"en segmen untuk menam!ilkan suatu digit dilakukan berulang hingga Cag 'om!are mat'h %2+A diaktifkan &ang menun(ukkan <aktu + detik# Setelah <aktu + detik lan(ut ditam!ilkan digit selan(utn&a !ada se"en segment#
Selain !enambahan timer+ modi=kasi (uga dilakukan !ada fungsi Ssegmen# Sebelumn&a se"en segment han&a menam!ilkan angka sa(a# Modi=kasi dilakukan dengan menambah digit hruf .20 karena di!erlukan dalam !er'obaan ini#
)asil dari !er'obaan ini telah sesuai dengan &ang dihara!kan# Se"en segment
menam!ilkan .5/#0 ./#0 .3/#0 .,/#0 .+/#0 Masing-masing selama + detik# 4emudian ditam!ilkan .22#0 ang berkedi! dengan selang <aktu /#5 detik#
4.2
T
UGASIV.- S
CANNINGK
EYPAD4.2.1 T
UGASIV.-.1
*ada !er'obaan ini akan dilakukan s'anning ke&!ad ,, &ang meru!akan em!at buah s<it'h# *rogram akan menam!ilkan LED &ang men&ala sesuai dengan ke&!ad &ang ditekan# ika SH+ ditekan LED bit / akan men&ala SH, akan men&alakan LED bit / dan + SH 3 akan men&alakan LED bit / + dan , dan SH akan men&alakan LED bit / + , dan 3# *rogram &ang digunakan terda!at dalam lam!iran# Berikut Co<'hart dari !rogram &ang digunakan#
Gambar 4 4 /#03art ma"$ T'as -.1 Dari Co<'hart di atas terlihat bah<a !roses s'anning &ang dilakukan sesuai dengan teori# S'anning dilakukan dengan bergantian mengeluarkan logika ./0 untuk menge'ek ke&!ad &ang ditekan#
)asil &ang di!eroleh dari !er'obaan ini telah sesuai dengan &ang dihara!kan# ika SH+ ditekan LED bit / akan men&ala SH, akan men&alakan LED bit / dan + SH 3 akan men&alakan LED bit / + dan , dan SH akan men&alakan LED bit / + , dan 3#
4.2.2 T
UGASIV.-.2
*ada !er'obaan ini akan dilakukan modi=kasi terhada! !rogram dari !er'obaan B#+# modi=kasi dilakukan dengan menam!ilkan keluaran hasil !enekanan ke&!ad !ada se"en segment# ika SH + ditekan se"en segment
akan menam!ilkan .++0 (ika SH , ditekan se"en segment akan menam!ilkan .,,0 (ika SH 3 ditekan se"en segment akan menam!ilkan .330 dan (ika SH ditekan se"en segment akan menam!ilkan .0# )asil modi=kasi !rogram &ang digunakan terda!at dalam lam!iran# Berikut Co<'hart &ang digunakan dalam !rogram hasil modi=kasi#
Gambar 4 5 /#03art ma"$ T'as -.2 Modi=kasi dilakukan dengan mengubah keluaran &ang tadin&a melalui LED *TA men(adi keluaran dalam se"en segment# $ntuk itu dilakukan kembali !roses se'anning se"en segment setelah !enge'ekan tombol dilakukan#
)asil &ang di!eroleh telah sesuai dengan hasil &ang dihara!kan# ika SH + ditekan se"en segment akan menam!ilkan .++0 (ika SH , ditekan se"en segment akan menam!ilkan .,,0 (ika SH 3 ditekan se"en segment akan menam!ilkan .330 dan (ika SH ditekan se"en segment akan menam!ilkan .0#
4.+
T
UGASIV.C LCD
*ada !er'obaan ini akan digunakan librar& A7 L%D Lib untuk menggunakan fasilitas L%D# Dalam librar& ini telah terda!at bebera!a fngsi dan !rosedur &ang da!at digunakan untuk men(alankan L%D# Berikut !rosedur &ang ada dalam librar& ini#
- L%Dsend%har untuk menam!ilkan karakter
- L%Dsend%ommand sama se!erti L%Dsend%har
- L%Dinit untuk menginisialisasi L%D - L%D'lr untuk mengosongkan la&ar
L%D
- L%Dhome untuk menggeser 'ursor ke home
- L%Dstring untuk menam!ilkan string !ada la&ar
- L%D1oto untuk menggeser kursor ke !osisi &ang diinginkan
- %o!&StringtoL%D menam!ilkan string !ada L%D
- L%Dde=ne'har untuk menulis sebuah 'har ke L%D %1AM
- L%Dshiftight menggeser se(umlah n karakter ke kanan
- L%DshiftLeft menggeser se(umlah n karakter ke kiri
- L%D'ursorn mengaktifkan !osisi kursor dengan underline
- L%D'ursornBlink mengaktifkan !osisi kursor dengan underline &ang berkedi! - L%D'ursor22 mematikan !osisi
'ursor
- L%Dblank tidak menam!ilkan a!a!un !ada L%D namun tidak membersihkan &ang sebelumn&a ada
- L%D"isible menam!ilkan L%D
- L%D%ursorLeft menggeser kursor L%D ke kiri se(umlah n karakter
- L%D%ursoright menggeser kursor L%D ke kanan se(umlah n karakter
4.+.1 T
UGASIV.C.1
Librar& A7 L%D Lib telah memberikan sebuah main =le untuk mendemokan !enggunaan L%D# *ada !er'obaan ini akan di(alankan demo =le tersebut# *rogram &ang digunakan terda!at dalam lam!iran# Berikut Co<'hart dari !rogram &ang digunakan#
Gambar 4 6 /#03art ma"$ C.1
Gambar 4 7 /#03art )%#a( 1s C.1
Gambar 4 8 /#03art !r0'r%ssbar C.1
Gambar 4 9 /#03art )%m0a$"mat"0$ )asil dari !er'obaan ini meru!akan tam!ilan !ada L%D &ang menam!ilkan (udul kemudian melakukan !roses loading#
4.+.2 T
UGASIV.C.2
*ada !er'obaan ini dilakukan modi=kasi untuk menam!ilkan !ada L%D karakter &ang ditekan melalui ke&!ad ,,# *rogram hasil modi=kasi
&ang ada !ada modul terda!at dalam lam!iran# Berikut Co<'hart dari !rogram &ang digunakan#
Gambar 4 1: /#03art ma"$ C.2
)asil dari !er'obaan ini ditam!ilkan dalam L%D# ika SH+ ditekan akan ditam!ilkan .J0 (ika SH, ditekan akan ditam!ilkan .60 (ika
SH3 ditekan akan ditam!ilkan .50 (ika SH ditekan akan ditam!ilkan .a0#
4.+.+ T
UGASIV.C.+
*ada !er'obaan ini dilakukan modi=kasi untuk menam!ilkan !ada L%D karakter &ang ditekan melalui ke&!ad ,,# *rogram hasil modi=kasi terda!at dalam lam!iran# Berikut Co<'hart dari !rogram &ang digunakan#
)asil dari !er'obaan ini ditam!ilkan dalam L%D# ika SH+ ditekan akan ditam!ilkan .+0 (ika SH, ditekan akan ditam!ilkan .,0 (ika SH3 ditekan akan ditam!ilkan .30 (ika SH ditekan akan ditam!ilkan .0# umlah karakter &ang ditam!ilkan han&a 3 karakter setelah terda!at tiga karakter dilakukan !enggeserean ke kiri , karakter#
2
T
UGASIV.C.4
*ada !er'obaan ini dilakukan modi=kasi untuk menam!ilkan !ada L%D karakter &ang ditekan melalui ke&!ad # *rogram hasil modi=kasi terda!at dalam lam!iran# Modi=kasi dilakukan
dengan menambah (umlah s'anning karena kali ini terda!at tombol# Terda!at em!at !in sebagai out!ut &ang akan diberi logika ./0 se'ara bergantian dan terda!at em!at !in &ang akan di'ek a!akah memiliki logika ./0 )asil &ang di!eroleh belum sesuai &ang dihara!kan# )al ini karena kon=gurasi !in dari ke&!ad &ang belum diketahui# *enge'ekan berhasil dilakukan untuk , baris &angberisi digit + , 3 a 5 K b# ;amun masih ter(adi kesalahan karena (ika tombol + ditekan &ang ditam!ilkan adalah dan (ika tombol ditekan &ang ditam!ilkan adalah 6#
5. K
ESIMPULANDari !er'obaan-!er'obaan &ang telah dilakukan !ada modul ini di!eroleh kesim!ulan bah<a
- Sebagai interfa'e untuk memberikan masukan ke mikrokontroller ATMega 8535 da!at digunakan ke&!ad# Terda!at bebera!a (enis ke&!ad dilihat dari ukurann&a &aitu ,, 33 dan #
- Sebagai interfa'e untuk menam!ilkan suatu keluaran selain digunakan LED da!at !ula digunakan se"en segmen dan L%D#
- $ntuk menghemat !enggunaan !ort !ada mikrokontroller ATMega dalam !roses !emba'aan masukan mau!un menam!ilkan keluaran digunakan sebuah teknik s'anning# Dnegan teknik ini s'anning dilakukan se'ara bergantian untuk setia! kom!onen sehingga (umlah !in &ang digunakan han&a sedikit#
- $ntuk menggunakan L%D telah tersedia librar& &ang da!at langsung digunakan beserta dnegan !rosedur-!rosedur di dalamn&a#
D
A/TAP
USTAKA!"
Datas#eet ATMega8535
$"
%uta&arat, Mervin T., Petunjuk
Praktikum Sistem Mikroprosesor ,
La&'rat'rium Dasar Teknik ()ekt',
*andung, $+!5.
LAMPIAN
!. Tugas A.!
#include <avr/io.h> #define F_CPU 7372800L #include <util/dela.h> char an!"a; char "odehe;un$i!ned int %%e!&en(char an!"a); int &ain (void) { ''() = 0FF; ''(' = 0FF; while (*) { P+(,' =(0 <<P'7)|(* <<P'-); P+(,) =%%e!&en(7)|(* <<7); _dela_&$(*); P+(,' =(* <<P'7)|(0 <<P'-); P+(,) =%%e!&en(2); _dela_&$(*); } return 0; }
un$i!ned int %%e!&en(char an!"a) {
switch (an!"a) {
case 0: "odehe = 03f; break; case *: "odehe = 00-; break; case 2: "odehe = 0; break; case 3: "odehe = 01f; break; case 1: "odehe = 0--; break; case : "odehe = 0-d; break; case -: "odehe = 07d; break; case 7: "odehe = 007; break; case 8: "odehe = 07f; break; case : "odehe = 0-f; break; } return "odehe; }
$. Tugas A.$
#include <avr/io.h> #include <util/dela.h> char an!"a; char "odehe;un$i!ned int %%e!&en(char an!"a); int &ain (void) { char i; ''() = 0FF; ''(' = 0FF; ,4%5 |= (* <<,+6*); ,CC(*) = 0; ,CC(* = 00000**0*;
//enentuan nilai a9al ti&er ,C:,*; = 0;
,C:,*L = 0;
//enentuan nilai co&are untu" dela * deti" +C(*); = 0*C; +C(*)L = 020; while(*) { do{ ,F(|=(0 <<+CF*)); P+(,' =(0 <<P'7)|(* <<P'-); P+(,) =%%e!&en(); _dela_&$(*); P+(,' =(* <<P'7)|(0 <<P'-); P+(,) =%%e!&en(0)|(* <<7); _dela_&$(*); } while(it_i$_clear(,F(,+CF*))); do{ ,F(|=(0 <<+CF*)); P+(,' =(0 <<P'7)|(* <<P'-); P+(,) =%%e!&en(1); _dela_&$(*); P+(,' =(* <<P'7)|(0 <<P'-); P+(,) =%%e!&en(0)|(* <<7); _dela_&$(*); } while(it_i$_clear(,F(,+CF*))); do{ ,F(|=(0 <<+CF*)); P+(,' =(0 <<P'7)|(* <<P'-); P+(,) =%%e!&en(3); _dela_&$(*); P+(,' =(* <<P'7)|(0 <<P'-); P+(,) =%%e!&en(0)|(* <<7);
_dela_&$(*); } while(it_i$_clear(,F(,+CF*))); do{ ,F(|=(0 <<+CF*)); P+(,' =(0 <<P'7)|(* <<P'-); P+(,) =%%e!&en(2); _dela_&$(*); P+(,' =(* <<P'7)|(0 <<P'-); P+(,) =%%e!&en(0)|(* <<7); _dela_&$(*); } while(it_i$_clear(,F(,+CF*))); do{ ,F(|=(0 <<+CF*)); P+(,' =(0 <<P'7)|(* <<P'-); P+(,) =%%e!&en(*); _dela_&$(*); P+(,' =(* <<P'7)|(0 <<P'-); P+(,) =%%e!&en(0)|(* <<7); _dela_&$(*); } while(it_i$_clear(,F(,+CF*))); for(i=*;i <=3;i++){
//enentuan nilai a9al ti&er ,C:,*; = 0;
,C:,*L = 0;
//enentuan nilai co&are untu" dela 0. deti" +C(*); = 006; +C(*)L = 0*0; do{ ,F(|=(0 <<+CF*)); P+(,' =(0 <<P'7)|(* <<P'-); P+(,) =%%e!&en(F); _dela_&$(*); P+(,' =(* <<P'7)|(0 <<P'-); P+(,) =%%e!&en(F)|(* <<7); _dela_&$(*); } while(it_i$_clear(,F(,+CF*))); do{ ,F(|=(0 <<+CF*)); P+(,' =(0 <<P'7)|(* <<P'-); P+(,) = 000; _dela_&$(*); P+(,' =(* <<P'7)|(0 <<P'-); P+(,) = 000; _dela_&$(*); } while(it_i$_clear(,F(,+CF*))); } } return 0; }
un$i!ned int %%e!&en(char an!"a) {
switch (an!"a) {
case 0: {"odehe = 03f; break;} case *: {"odehe = 00-; break;} case 2: {"odehe = 0; break;} case 3: {"odehe = 01f; break;} case 1: {"odehe = 0--; break;} case : {"odehe = 0-d; break;} case -: {"odehe = 07d; break;} case 7: {"odehe = 007; break;} case 8: {"odehe = 07f; break;} case : {"odehe = 0-f; break;}
case F: {"odehe = 07*; break;} } return "odehe; }
3. Tugas *.!
#include <avr/io.h> #define F_CPU 7372800UL #include <util/dela.h> int &ain (void) { ''()=0FF; P+(,)=000; ''('=(* <<P'1)|(* <<P'); %F+(=(0 <<PU'); while(*) { P+(,'=(* <<P'1)|(0 <<P'); if(it_i$_clear(P:',0)) P+(,)=00000000*; _dela_&$(0); if(it_i$_clear(P:',*)) P+(,)=00000****; _dela_&$(0); P+(,'=(0 <<P'1)|(* <<P'); if(it_i$_clear(P:',0)) P+(,)=0000000**; _dela_&$(0); if(it_i$_clear(P:',*)) P+(,)=000000***; _dela_&$(0); } return 0; }. Tugas *.$
#include <avr/io.h> #include <util/dela.h> char an!"a, "odehe;un$i!ned int %%e!&en(char an!"a);
int &ain (void) { char $tate = 0; ''()=0FF; P+(,)=000; ''('=(* <<P'1)|(* <<P'); %F+(=(0 <<PU'); while(*) { switch($tate) { case 0 : { P+(,' =(0 <<P'7)|(* <<P'-); P+(,) =%%e!&en(0); _dela_&$(*); P+(,' =(* <<P'7)|(0 <<P'-);
P+(,) =%%e!&en(0); _dela_&$(*); break; } case * : { P+(,' =(0 <<P'7)|(* <<P'-); P+(,) =%%e!&en(*); _dela_&$(*); P+(,' =(* <<P'7)|(0 <<P'-); P+(,) =%%e!&en(*); _dela_&$(*); break; } case 2 : { P+(,' =(0 <<P'7)|(* <<P'-); P+(,) =%%e!&en(2); _dela_&$(*); P+(,' =(* <<P'7)|(0 <<P'-); P+(,) =%%e!&en(2); _dela_&$(*); break; } case 3 : { P+(,' =(0 <<P'7)|(* <<P'-); P+(,) =%%e!&en(3); _dela_&$(*); P+(,' =(* <<P'7)|(0 <<P'-); P+(,) =%%e!&en(3); _dela_&$(*); break; } case 1 : { P+(,' =(0 <<P'7)|(* <<P'-); P+(,) =%%e!&en(1); _dela_&$(*); P+(,' =(* <<P'7)|(0 <<P'-); P+(,) =%%e!&en(1); _dela_&$(*); break; } } P+(,'=(* <<P'1)|(0 <<P');
if(it_i$_clear(P:',0)) $tate = *; if(it_i$_clear(P:',*)) $tate = 1; P+(,'=(0 <<P'1)|(* <<P');
if(it_i$_clear(P:',0)) $tate = 2; if(it_i$_clear(P:',*)) $tate = 3; }
return 0; }
un$i!ned int %%e!&en(char an!"a) {
switch (an!"a) {
case 0: {"odehe = 03f; break;} case *: {"odehe = 00-; break;} case 2: {"odehe = 0; break;} case 3: {"odehe = 01f; break;} case 1: {"odehe = 0--; break;} case : {"odehe = 0-d; break;} case -: {"odehe = 07d; break;} case 7: {"odehe = 007; break;} case 8: {"odehe = 07f; break;} case : {"odehe = 0-f; break;}
case F: {"odehe = 07*; break;} }
return "odehe; }
5. Li&rary A- LCD : main.c LCD dem'
//
//
// File :a&e = &ain.c // ,itle = LC' de&o
// )uthor = %ciencero!.co& Cori!ht ?C@ 2007
// Created = 2007032
// (evi$ed = 20070828
// Aer$ion = *.0
// ,ar!et 4CU = )t&el )A( $erie$ //
// ,hi$ code i$ di$triuted under the B:U Pulic Licen$e
// 9hich can e found at htt=//999.!nu.or!/licen$e$/!l.tt // // #include <avr/io.h> #include <avr/!&$ace.h> #include <util/dela.h> #include lcd_li.h #include lcd_li.c
//%trin!$ $tored in )A( Fla$h &e&or
con$t uint8_t LC'9elco&eln*[] P(+B464=)A( LC' '64+D0; con$t uint8_t LC'ro!re$$[] P(+B464=Loadin!...D0;
con$t uint8_t LC'ani&ation[] P(+B464= LC' ani&ation D0;
// additional cu$to& LC' character$ con$t uint8_t ac"$la$h[8] P(+B464= { 000000000,//ac" $la$h 0000*0000, 00000*000, 000000*00, 0000000*0, 00000000*, 000000000, 000000000 }; //dela *$ void dela*$(void) { uint8_t i; for(i=0;i <*00;i++) { _dela_&$(*0); } }
//de&on$tration of ro!re$$ ar void ro!re$$(void) { LC'clr(); Co%trin!toLC'(LC'9elco&eln*, 3, 0); dela*$(); LC'clr();
Co%trin!toLC'(LC'ro!re$$, 3, 0); for(uint8_t i=0;i <2;i++) { _dela_&$(*0); LC'BotoE(0, *); LC'ro!re$$ar(i, 2, *-); } } //de&on$tration of ani&ation void de&oani&ation(void) { LC'clr(); LC'definechar(ac"$la$h,0); Co%trin!toLC'(LC'ani&ation, 0, 0); for(uint8_t i=0;i <3;i++) { LC'BotoE(8, *); LC'$endChar(0); dela*$(); LC'BotoE(8, *); LC'$endChar(); dela*$(); LC'BotoE(8, *); LC'$endChar(/); dela*$(); LC'BotoE(8, *); LC'$endChar(G); dela*$(); LC'BotoE(8, *); LC'$endChar(8);//ac"$la$h dela*$(); LC'BotoE(8, *); LC'$endChar(); dela*$(); LC'BotoE(8, *); LC'$endChar(/); dela*$(); LC'BotoE(8, *); LC'$endChar(G); dela*$(); } } int &ain(void) {
LC'init();//init LC' itH dual lineH cur$or ri!ht LC'clr();//clear$ LC'
while(*)//loo de&o$ { ro!re$$(); dela*$(); de&oani&ation(); } return 0; }
/. Li&rary A- LCD : )cd0)i&.c
//
//
// ,itle = 8 and 1 it LCd interface
// )uthor = %ciencero!.co& Cori!ht ?C@ 2007
// Created = 2007032
// (evi$ed = 20070808
// Aer$ion = *.0
// ,ar!et 4CU = )t&el )A( $erie$ //
// ,hi$ code i$ di$triuted under the B:U Pulic Licen$e
// 9hich can e found at htt=//999.!nu.or!/licen$e$/!l.tt // // #include lcd_li.h #include <intte$.h> #include <avr/io.h> #include <avr/!&$ace.h> #include <util/dela.h>
con$t uint8_t LcdCu$to&Char[] P(+B464=//define 8 cu$to& LC' char$ { 000, 0*F, 000, 000, 000, 000, 0*F, 000, // 0. 0/ full ro!re$$ loc" 000, 0*F, 0*0, 0*0, 0*0, 0*0, 0*F, 000, // *. */ full ro!re$$ loc" 000, 0*F, 0*8, 0*8, 0*8, 0*8, 0*F, 000, // 2. 2/ full ro!re$$ loc" 000, 0*F, 0*C, 0*C, 0*C, 0*C, 0*F, 000, // 3. 3/ full ro!re$$ loc" 000, 0*F, 0*6, 0*6, 0*6, 0*6, 0*F, 000, // 1. 1/ full ro!re$$ loc" 000, 0*F, 0*F, 0*F, 0*F, 0*F, 0*F, 000, // . / full ro!re$$ loc" 003, 007, 00F, 0*F, 00F, 007, 003, 000, // -. re9ind arro9 0*8, 0*C, 0*6, 0*F, 0*6, 0*C, 0*8, 000 // 7. fa$tfor9ard arro9 };
void LC'$endChar(uint8_t ch) //%end$ Char to LC' { #ifdef LC'_1it //1 it art L'P=(ch&0****0000); LCP|=* <<LC'_(%; LCP|=* <<LC'_6; _dela_&$(*); LCP&=(* <<LC'_6); LCP&=(* <<LC'_(%); _dela_&$(*); L'P=((ch&00000****)<<1); LCP|=* <<LC'_(%; LCP|=* <<LC'_6; _dela_&$(*); LCP&=(* <<LC'_6); LCP&=(* <<LC'_(%); _dela_&$(*); #el$e //8 it art L'P=ch; LCP|=* <<LC'_(%; LCP|=* <<LC'_6; _dela_&$(*); LCP&=(* <<LC'_6); LCP&=(* <<LC'_(%); _dela_&$(*);
#endif }
void LC'$endCo&&and(uint8_t c&d) //%end$ Co&&and to LC' { #ifdef LC'_1it //1 it art L'P=(c&d&0****0000); LCP|=* <<LC'_6; _dela_&$(*); LCP&=(* <<LC'_6); _dela_&$(*); L'P=((c&d&00000****)<<1); LCP|=* <<LC'_6; _dela_&$(*); LCP&=(* <<LC'_6); _dela_&$(*); #el$e //8 it art L'P=c&d; LCP|=* <<LC'_6; _dela_&$(*); LCP&=(* <<LC'_6); _dela_&$(*); #endif }
void LC'init(void)//nitialiIe$ LC' { #ifdef LC'_1it //1 it art _dela_&$(*); L'P=000; LCP=000; L''(|=* <<LC'_'7|* <<LC'_'-|* <<LC'_'|* <<LC'_'1; LC'(|=* <<LC'_6|* <<LC'_(J|* <<LC'_(%; //one L'P=0 <<LC'_'7|0 <<LC'_'-|* <<LC'_'|* <<LC'_'1; //1 it &ode LCP|=* <<LC'_6|0 <<LC'_(J|0 <<LC'_(%; _dela_&$(*); LCP&=(* <<LC'_6); _dela_&$(*); //t9o L'P=0 <<LC'_'7|0 <<LC'_'-|* <<LC'_'|* <<LC'_'1; //1 it &ode LCP|=* <<LC'_6|0 <<LC'_(J|0 <<LC'_(%; _dela_&$(*); LCP&=(* <<LC'_6); _dela_&$(*); //three L'P=0 <<LC'_'7|0 <<LC'_'-|* <<LC'_'|0 <<LC'_'1; //1 it &ode LCP|=* <<LC'_6|0 <<LC'_(J|0 <<LC'_(%; _dela_&$(*); LCP&=(* <<LC'_6); _dela_&$(*); //1 itdual line LC'$endCo&&and(000*0*000);
//incre&ent addre$$H invi$ile cur$or $hift LC'$endCo&&and(00000**00);
//init 8 cu$to& char$ uint8_t ch=0, chn=0; while(ch <-1) { LC'definechar((LcdCu$to&Char+ch),chn++); ch=ch+8; }
#el$e //8 it art _dela_&$(*); L'P=000; LCP=000; L''(|=* <<LC'_'7|* <<LC'_'-|* <<LC'_'|* <<LC'_'1|* <<LC'_'3 |* <<LC'_'2|* <<LC'_'*|* <<LC'_'0; LC'(|=* <<LC'_6|* <<LC'_(J|* <<LC'_(%; //one L'P=0 <<LC'_'7|0 <<LC'_'-|* <<LC'_'|* <<LC'_'1|0 <<LC'_'3 |0 <<LC'_'2|0 <<LC'_'*|0 <<LC'_'0; //8 it &ode LCP|=* <<LC'_6|0 <<LC'_(J|0 <<LC'_(%; _dela_&$(*); LCP&=(* <<LC'_6); _dela_&$(*); //t9o L'P=0 <<LC'_'7|0 <<LC'_'-|* <<LC'_'|* <<LC'_'1|0 <<LC'_'3 |0 <<LC'_'2|0 <<LC'_'*|0 <<LC'_'0; //8 it &ode LCP|=* <<LC'_6|0 <<LC'_(J|0 <<LC'_(%; _dela_&$(*); LCP&=(* <<LC'_6); _dela_&$(*); //three L'P=0 <<LC'_'7|0 <<LC'_'-|* <<LC'_'|* <<LC'_'1|0 <<LC'_'3 |0 <<LC'_'2|0 <<LC'_'*|0 <<LC'_'0; //8 it &ode LCP|=* <<LC'_6|0 <<LC'_(J|0 <<LC'_(%; _dela_&$(*); LCP&=(* <<LC'_6); _dela_&$(*);
//8 it dual line
L'P=0 <<LC'_'7|0 <<LC'_'-|* <<LC'_'|* <<LC'_'1|* <<LC'_'3 |0 <<LC'_'2|0 <<LC'_'*|0 <<LC'_'0; //8 it &ode LCP|=* <<LC'_6|0 <<LC'_(J|0 <<LC'_(%; _dela_&$(*); LCP&=(* <<LC'_6); _dela_&$(*);
//incre&ent addre$$H invi$ile cur$or $hift L'P=0 <<LC'_'7|0 <<LC'_'-|0 <<LC'_'|0 <<LC'_'1|* <<LC'_'3 |* <<LC'_'2|0 <<LC'_'*|0 <<LC'_'0; //8 it &ode LCP|=* <<LC'_6|0 <<LC'_(J|0 <<LC'_(%; _dela_&$(*); LCP&=(* <<LC'_6); _dela_&$();
//init cu$to& char$ uint8_t ch=0, chn=0; while(ch <-1) { LC'definechar((LcdCu$to&Char+ch),chn++); ch=ch+8; } #endif }
void LC'clr(void) //Clear$ LC'
{
LC'$endCo&&and(* <<LC'_CL(); }
void LC'ho&e(void) //LC' cur$or ho&e
{
LC'$endCo&&and(* <<LC'_;+46); }
void LC'$trin!(uint8_t! data, uint8_t nte$) //+utut$ $trin! to LC' {
// chec" to &a"e $ure 9e have a !ood ointer if ("data) return;
// rint data
for(i=0; i <nte$; i++) {
LC'$endChar(data[i]); }
}
void LC'BotoE(uint8_t , uint8_t ) //Cur$or to E o$ition {
re!i$ter uint8_t ''()4)ddr;
// re&a line$ into roer order switch() { case 0: ''()4)ddr = LC'_L:60_''()4)''(+; break; case *: ''()4)ddr = LC'_L:6*_''()4)''(+; break; case 2: ''()4)ddr = LC'_L:62_''()4)''(+; break; case 3: ''()4)ddr = LC'_L:63_''()4)''(+; break; default: ''()4)ddr = LC'_L:60_''()4)''(+; }
// $et data addre$$
LC'$endCo&&and(* <<LC'_''()4 | ''()4)ddr);
}
//Coie$ $trin! fro& fla$h &e&or to LC' at o$ition //con$t uint8_t 9elco&eln*K P(+B464M)A( LC' '64+D0N //Co%trin!toLC'?9elco&eln*H 3H *@N
void Co%trin!toLC'(con$t uint8_t !Fla$hLoc, uint8_t , uint8_t ) {
uint8_t i;
LC'BotoE(,);
for(i=0;(uint8_t)!&_read_te(&Fla$hLoc[i]);i++) {
LC'$endChar((uint8_t)!&_read_te(&Fla$hLoc[i])); }
}
//define$ char $&ol in CB()4 /
con$t uint8_t ac"$la$hK P(+B464M O 000000000H//ac" $la$h 0000*0000H 00000*000H 000000*00H 0000000*0H 00000000*H 000000000H 000000000 N LC'definechar?ac"$la$hH0@N /
void LC'definechar(con$t uint8_t !c,uint8_t char_code){ uint8_t a, cc;
uint*-_t i;
a=(char_code <<3)|010; for (i=0; i <8; i++){
cc=!&_read_te(&c[i]); LC'$endCo&&and(a++);
LC'$endChar(cc); }
}
void LC'$hiftLeft(uint8_t n) //%crol n of character$ (i!ht {
for (uint8_t i=0;i <n;i++) {
LC'$endCo&&and(0*6); }
}
void LC'$hift(i!ht(uint8_t n) //%crol n of character$ Left { for (uint8_t i=0;i <n;i++) { LC'$endCo&&and(0*8); } }
void LC'cur$or+n(void) //di$la$ LC' cur$or {
LC'$endCo&&and(006); }
void LC'cur$or+nlin"(void) //di$la$ LC' lin"in! cur$or {
LC'$endCo&&and(00F); }
void LC'cur$or+FF(void) //turn$ +FF cur$or {
LC'$endCo&&and(00C); }
void LC'lan"(void) //lan"$ LC' {
LC'$endCo&&and(008); }
void LC'vi$ile(void) //%ho9$ LC'
{
LC'$endCo&&and(00C); }
void LC'cur$orLeft(uint8_t n) //4ove$ cur$or n oi$ition$ left { for (uint8_t i=0;i <n;i++) { LC'$endCo&&and(0*0); } }
void LC'cur$or(i!ht(uint8_t n) //4ove$ cur$or n oi$ition$ left { for (uint8_t i=0;i <n;i++) { LC'$endCo&&and(0*1); } }
//adated fro &)A(L
void LC'ro!re$$ar(uint8_t ro!re$$, uint8_t &aro!re$$, uint8_t len!th) {
uint8_t i;
uint*-_t ielro!re$$; uint8_t c;
// dra9 a ro!re$$ ar di$lain! ?ro!re$$ / &aro!re$$@ // $tartin! fro& the current cur$or o$ition
// 9ith a total len!th of len!th character$
// noteH LC' char$ 0 &u$t e ro!ra&&ed a$ the ar character$ // char 0 M e&t ... char M full
// total iel len!th of ar!rah eQual$ len!thP(+B(6%%PE6L%_P6(_C;)(N // iel len!th of ar it$elf i$
ielro!re$$ =
((ro!re$$!(len!th!P(+B(6%%PE6L%_P6(_C;)())#&aro!re$$);
for(i=0; i <len!th; i++) {
// chec" if thi$ i$ a full loc"H or artial or e&t // ?u*-@ ca$t i$ needed to avoid $i!n co&ari$on 9arnin!
if( ((i!(uint*-_t)P(+B(6%%PE6L%_P6(_C;)()+) $ ielro!re$$ ) {
// thi$ i$ a artial or e&t loc"
if( ((i!(uint*-_t)P(+B(6%%PE6L%_P6(_C;)()) $ ielro!re$$ )
{
// thi$ i$ an e&t loc" // u$e $ace characterR c = 0;
} else {
// thi$ i$ a artial loc"
c = ielro!re$$ % P(+B(6%%PE6L%_P6(_C;)(; }
} else {
// thi$ i$ a full loc" c = ;
}
// 9rite character to di$la LC'$endChar(c);
} }
1. Li&rary A- LCD : )cd0)i&.#
//
//
// File :a&e = lcd_li.h
// ,itle = 8 and 1 it LCd interface
// )uthor = %ciencero!.co& Cori!ht ?C@ 2007
// Created = 2007032
// (evi$ed = 20070808
// Aer$ion = *.0
// ,ar!et 4CU = )t&el )A( $erie$ //
// ,hi$ code i$ di$triuted under the B:U Pulic Licen$e
// 9hich can e found at htt=//999.!nu.or!/licen$e$/!l.tt // // #ifndef LC'_L #define LC'_L #include <intte$.h>
//Unco&&ent thi$ if LC' 1 it interface i$ u$ed // #define LC'_1it
//
#define LC'_(J * //define 4CU in connected to LC' (/J
#define LC'_6 2 //define 4CU in connected to LC' 6
#define LC'_'0 0 //define 4CU in connected to LC' '0 #define LC'_'* * //define 4CU in connected to LC' '* #define LC'_'2 2 //define 4CU in connected to LC' '* #define LC'_'3 3 //define 4CU in connected to LC' '2 #define LC'_'1 1 //define 4CU in connected to LC' '3 #define LC'_' //define 4CU in connected to LC' '1 #define LC'_'- - //define 4CU in connected to LC' ' #define LC'_'7 7 //define 4CU in connected to LC' '-#define L'P P+(,C //define 4CU ort connected to LC' data in$ #define LCP P+(,C //define 4CU ort connected to LC' control in$
#define L''( ''(C //define 4CU direction re!i$ter for ort connected to LC' data in$
#define LC'( ''(C //define 4CU direction re!i$ter for ort connected to LC' control in$
#define LC'_CL( 0 //'0= clear di$la
#define LC'_;+46 * //'*= return to ho&e o$ition #define LC'_6:,(_4+'6 2 //'2= $et entr &ode
#define LC'_6:,(_:C * //'*= incre&ent #define LC'_6:,(_%;F, 0 //'2= $hift
#define LC'_+:_C,(L 3 //'3= turn lcd/cur$or on
#define LC'_+:_'%PL) 2 //'2= turn di$la on
#define LC'_+:_CU(%+( * //'*= turn cur$or on
#define LC'_+:_L:5 0 //'0= lin"in! cur$or
#define LC'_4+A6 1 //'1= &ove cur$or/di$la
#define LC'_4+A6_'%P 3 //'3= &ove di$la ?0> &ove cur$or@ #define LC'_4+A6_(B;, 2 //'2= &ove ri!ht ?0> left@
#define LC'_FU:C,+: //'= function $et
#define LC'_FU:C,+:_8, 1 //'1= $et 8, &ode ?0>1, &ode@ #define LC'_FU:C,+:_2L:6% 3 //'3= t9o line$ ?0>one line@
#define LC'_FU:C,+:_*0'+,% 2 //'2= *0 font ?0>7 font@
#define LC'_CB()4 - //'-= $et CB ()4 addre$$
#define LC'_''()4 7 //'7= $et '' ()4 addre$$
// readin!=
#define LC'_U% 7 //'7= LC' i$ u$
#define LC'_L:6% 2 //vi$ile line$
#define LC'_L:6_L6:B,; *- //line len!th ?in character$@
// cur$or o$ition to ''()4 &ain!
#define LC'_L:60_''()4)''( 000
#define LC'_L:6*_''()4)''( 010
#define LC'_L:62_''()4)''( 0*1
#define LC'_L:63_''()4)''( 01
// ro!re$$ ar define$
#define P(+B(6%%PE6L%_P6(_C;)(
-void LC'$endChar(uint8_t); //for&$ data read to $end to 71;C*-1 void LC'$endCo&&and(uint8_t); //for&$ data read to $end to 71;C*-1
void LC'init(void); //nitialiIe$ LC'
void LC'clr(void); //Clear$ LC'
void LC'ho&e(void); //LC' cur$or ho&e
void LC'$trin!(uint8_t!, uint8_t); //+utut$ $trin! to LC' void LC'BotoE(uint8_t, uint8_t); //Cur$or to E o$ition
void Co%trin!toLC'(con$t uint8_t!, uint8_t, uint8_t);//coie$ fla$h $trin! to LC' at H
void LC'definechar(con$t uint8_t !,uint8_t);//9rite char to LC' CB()4 void LC'$hift(i!ht(uint8_t); //$hift n character$ (i!ht
void LC'$hiftLeft(uint8_t); //$hift n character$ Left void LC'cur$or+n(void); //Underline cur$or +:
void LC'cur$or+nlin"(void); //Underline lin"in! cur$or +:
void LC'cur$or+FF(void); //Cur$or +FF
void LC'lan"(void); //LC' lan" ut not cleared
void LC'cur$orLeft(uint8_t); //%hift cur$or left n void LC'cur$or(i!ht(uint8_t); //$hif cur$or ri!ht n
// di$la$ a horiIontal ro!re$$ ar at the current cur$or location // <ro!re$$> i$ the value the ar!rah $hould indicate
// <&aro!re$$> i$ the value at the end of the ar!rah
// <len!th> i$ the nu&er of LC' character$ that the ar!rah $hould cover //adated fro& )A(L di$la$ ro!re$$ onl for 8 it variale$
void LC'ro!re$$ar(uint8_t ro!re$$, uint8_t &aro!re$$, uint8_t len!th);
#endif
8. Tugas C.$
#include <avr/io.h> #include <avr/!&$ace.h> #include <util/dela.h> #include lcd_li.h #include lcd_li.c//%trin!$ $tored in )A( Fla$h &e&or
con$t uint8_t LC'to&ol*[] P(+B464=,e"an ,o&ol %cannin! 5eadD0;
//dela *$ void dela*$(void) { uint8_t i; for(i=0;i <*00;i++) { _dela_&$(*0); } } int &ain(void) {
LC'init();//init LC' itH dual lineH cur$or ri!ht LC'clr();//clear$ LC' ''()=0FF; P+(,)=000; ''('=(* <<P'1)|(* <<P')|(* <<PC7)|(* <<PC-); %F+(=(0 <<PU'); dela*$(); LC'BotoE(0, *); dela*$();
while(*)//loo de&o$ { Co%trin!toLC'(LC'to&ol*, 0, 0); LC'$hift(i!ht(*); P+(,' =(* <<P'1)|(0 <<P'); if(it_i$_clear(P:',0)) { LC'clr(); LC'BotoE(8, *); LC'$endChar(S); dela*$(); LC'clr(); } _dela_&$(0); if(it_i$_clear(P:',*)) { LC'clr(); LC'BotoE(8, *); LC'$endChar(a);
dela*$(); LC'clr(); } _dela_&$(0); P+(,' =(0 <<P'1)|(* <<P'); if(it_i$_clear(P:',0)) { LC'clr(); LC'BotoE(8, *); LC'$endChar(); dela*$(); LC'clr(); } _dela_&$(0); if(it_i$_clear(P:',*)) { LC'clr(); LC'BotoE(8, *); LC'$endChar(7); dela*$(); LC'clr(); } _dela_&$(0); } return 0; }
2. Tugas C.3
#include <avr/io.h> #include <avr/!&$ace.h> #include <util/dela.h> #include lcd_li.h #include lcd_li.c//%trin!$ $tored in )A( Fla$h &e&or
con$t uint8_t LC'to&ol*[] P(+B464=Percoaan LC'D0;
//dela *$ void dela*$(void) { uint8_t i; for(i=0;i <*00;i++) { _dela_&$(*0); } } uint8_t counter = 0; int &ain(void) {
LC'init();//init LC' itH dual lineH cur$or ri!ht LC'clr();//clear$ LC' ''()=0FF; P+(,)=000; ''('=(* <<P'1)|(* <<P'); %F+(=(0 <<PU'); dela*$();
while(*)//loo de&o$ {
P+(,' =(* <<P'1)|(0 <<P'); if(it_i$_clear(P:',0)) {
if(counter%2==* && counter"=*) { LC'$hift(i!ht(2); } counter++; LC'$endChar(*); dela*$(); } _dela_&$(0); if(it_i$_clear(P:',*)) {
if(counter%2==* && counter"=*) { LC'$hift(i!ht(2); } counter++; LC'$endChar(1); dela*$(); } _dela_&$(0); P+(,' =(0 <<P'1)|(* <<P'); if(it_i$_clear(P:',0)) {
if(counter%2==* && counter"=*) { LC'$hift(i!ht(2); } counter++; LC'$endChar(2); dela*$(); } _dela_&$(0); if(it_i$_clear(P:',*)) {
if(counter%2==* && counter"=*) { LC'$hift(i!ht(2); } counter++; LC'$endChar(3); dela*$(); } _dela_&$(0); } return 0; }
!+.Tugas C.
#include <avr/io.h> #include <avr/!&$ace.h> #include <util/dela.h> #include lcd_li.h #include lcd_li.c//%trin!$ $tored in )A( Fla$h &e&or
//dela *$ void dela*$(void) { uint8_t i; for(i=0;i <*00;i++) { _dela_&$(*0); } } uint8_t counter = 0; int &ain(void) {
LC'init();//init LC' itH dual lineH cur$or ri!ht LC'clr();//clear$ LC' ''()=0FF; P+(,)=000; ''('=(* <<P'1)|(* <<P'); %F+(=(0 <<PU'); dela*$();
while(*)//loo de&o$ {
LC'BotoE(counter, *);
P+(,' =(0 <<P'1)|(* <<P')|(* <<P'-)|(* <<P'7); if(it_i$_clear(P:',0))
{
if(counter%2==* && counter"=*) { LC'$hift(i!ht(2); } counter++; LC'$endChar(1); dela*$(); } _dela_&$(0); if(it_i$_clear(P:',*)) {
if(counter%2==* && counter"=*) { LC'$hift(i!ht(2); } counter++; LC'$endChar(2); dela*$(); } _dela_&$(0); if(it_i$_clear(P:',2)) {
if(counter%2==* && counter"=*) { LC'$hift(i!ht(2); } counter++; LC'$endChar(3); dela*$(); } _dela_&$(0); if(it_i$_clear(P:',3))
{
if(counter%2==* && counter"=*) { LC'$hift(i!ht(2); } counter++; LC'$endChar()); dela*$(); } _dela_&$(0); P+(,' =(* <<P'1)|(0 <<P')|(* <<P'-)|(* <<P'7); if(it_i$_clear(P:',0)) {
if(counter%2==* && counter"=*) { LC'$hift(i!ht(2); } counter++; LC'$endChar(7); dela*$(); } _dela_&$(0); if(it_i$_clear(P:',*)) {
if(counter%2==* && counter"=*) { LC'$hift(i!ht(2); } counter++; LC'$endChar(); dela*$(); } _dela_&$(0); if(it_i$_clear(P:',2)) {
if(counter%2==* && counter"=*) { LC'$hift(i!ht(2); } counter++; LC'$endChar(-); dela*$(); } _dela_&$(0); if(it_i$_clear(P:',3)) {
if(counter%2==* && counter"=*) { LC'$hift(i!ht(2); } counter++; LC'$endChar(); dela*$(); } _dela_&$(0); P+(,' =(* <<P'1)|(* <<P')|(0 <<P'-)|(* <<P'7); if(it_i$_clear(P:',0)) {
{ LC'$hift(i!ht(2); } counter++; LC'$endChar(7); dela*$(); } _dela_&$(0); if(it_i$_clear(P:',*)) {
if(counter%2==* && counter"=*) { LC'$hift(i!ht(2); } counter++; LC'$endChar(8); dela*$(); } _dela_&$(0); if(it_i$_clear(P:',2)) {
if(counter%2==* && counter"=*) { LC'$hift(i!ht(2); } counter++; LC'$endChar(); dela*$(); } _dela_&$(0); if(it_i$_clear(P:',3)) {
if(counter%2==* && counter"=*) { LC'$hift(i!ht(2); } counter++; LC'$endChar(C); dela*$(); } _dela_&$(0); P+(,' =(* <<P'1)|(* <<P')|(* <<P'-)|(0 <<P'7); if(it_i$_clear(P:',0)) {
if(counter%2==* && counter"=*) { LC'$hift(i!ht(2); } counter++; LC'$endChar(); dela*$(); } _dela_&$(0); if(it_i$_clear(P:',*)) {
if(counter%2==* && counter"=*) {
LC'$hift(i!ht(2); }
LC'$endChar(0); dela*$(); } _dela_&$(0); if(it_i$_clear(P:',2)) {
if(counter%2==* && counter"=*) { LC'$hift(i!ht(2); } counter++; LC'$endChar(#); dela*$(); } _dela_&$(0); if(it_i$_clear(P:',3)) {
if(counter%2==* && counter"=*) { LC'$hift(i!ht(2); } counter++; LC'$endChar('); dela*$(); } _dela_&$(0); } return 0; }