You are on page 1of 26

LAMPIRAN

63

64

1. Karakter Huruf, Angka dan Simbol Pada Propeller Display

65

66

67

68

2. Program Propeller Display


2.1. Mikrokontroler ATmega16 (1)
a) mikro1.h
/*****************************************************
This program was produced by the
CodeWizardAVR V1.25.3 Standard
Automatic Program Generator
Copyright 1998-2007 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date
: 08/10/2012
Author : DutchA
Company : RnB
Comments:
Chip type
: ATmega16L
Program type
: Application
Clock frequency
: 12,000000 MHz
Memory model
: Small
External SRAM size : 0
Data Stack size
: 256
*****************************************************/
#include
#include
#include
#include
#include
#include
#include

<mega16.h>
<stdio.h>
<delay.h>
<string.h>
<led_atas.h>
<led_bawah.h>
<scan_code.h>

#define baris1
#define baris2
unsigned int
unsigned char
unsigned char
//
//
//
//
//
//

PORTB
PORTA
panjang_teks1,panjang_teks2,geser,col=50;
text1[50],data_bit1[250];
text2[50],data_bit2[250];

unsigned f;
void clock(unsigned int g) // d= delay(a)
{
unsigned int x;
for(x=0;x<g;x++);
}

void isi_bitAtas()
{
unsigned int a,c,x,i,digit;
col = panjang_teks1 * 6;
c
= 0;
for(digit=0;digit<panjang_teks1;++digit)
{ a = text1[digit];
//digit 0, misal, "!" yg dlm ascii=33
x = a*5;
//33x5= 165 (lookup table)
for (i=0;i<5;++i)
{ data_bit1[c] = LedAtas[x];
x++;c++; }
c++; }
}

//LedAtas=165

69

void isi_bitBawah()
{
unsigned int a,c,x,i,digit;
col = panjang_teks2 * 6;
c
= 0;
for(digit=0;digit<panjang_teks2;++digit)
{
a = text2[digit];
x = a*5;
for (i=0;i<5;++i)
{
data_bit2[c] = LedBawah[x];
x++;c++; }
c++; }
}
void tampil(char kolom,char laju)
{
unsigned int a,i,x;
for(geser=0; geser<col; geser++)
//penggeseran nyala LED
{
for (a=1; a<laju; a++)
//laju geser
{
for (i=0; i<kolom; i++)
//kolom dlm karakter
{
x = i + geser;
// x = hasil increment + geser
delay_us(100);
//delay tampilan 100 us
baris1 = data_bit1[x];
baris2 = data_bit2[x];
}
}
}
}
void simpan_default()
{
char default1[]="
char default2[]="

Teknik Elektro"; //isi ada 26


UMS
";

strcpy (text1, default1);


panjang_teks1 = strlen(text1);
isi_bitAtas();
strcpy (text2, default2);
panjang_teks2 = strlen(text2);
isi_bitBawah();
delay_ms(50);
}
void simpan_atas()
{
char datascan1[26]; //data kbd atas
char cnt_addr;
PORTC.4=0;PORTC.5=0;PORTC.6=1;PORTC.7=1; // indikator LED atas
for (cnt_addr=0;cnt_addr<26;cnt_addr++) //maks karakter 26
{
scan_code();
if (apret==0x66){cnt_addr=0;} //backspace
if (apret==0x83){goto next1;} //tombol ok F7
datascan1[cnt_addr]=kbd; }
next1:
strcpy (text1, datascan1);
panjang_teks1 = strlen(text1);
isi_bitAtas();
delay_ms(50);

//copy string datascan1 ke text1


//hitung panjang text1

}
void simpan_bawah()
{
char datascan2[26]; //data kbd bawah
char cnt_addr;
PORTC.4=1;PORTC.5=1;PORTC.6=0;PORTC.7=0; // indikator LED bawah
for (cnt_addr=0;cnt_addr<26;cnt_addr++)

70

scan_code();
if (apret==0x66){cnt_addr=0;}
if (apret==0x83){goto next2;}
datascan2[cnt_addr]=kbd; }

next2:
strcpy (text2, datascan2);
panjang_teks2 = strlen(text2);
isi_bitBawah();
delay_ms(50);
}
void showMenu()
{
/*
up
:(apret==0x03)
down :(apret==0x0B)
ok
:(apret==0x83)
cancel:(apret==0x0A)
*/
menu01:
delay_ms(20);
PORTC.4=1;PORTC.5=0;PORTC.6=0;PORTC.7=0;
scan_code();
if (apret==0x83){
//ok
simpan_default();
goto lanjut;
}
if (apret==0x0B){
goto menu02;
//down
}
goto menu01;
menu02:
delay_ms(20);
scan_code();
if (apret==0x83) {
goto menu03;
}
if (apret==0x03) {
goto menu01;
}
goto menu02;

//ok
//up

menu03:
PORTC.4=1;PORTC.5=1;PORTC.6=0;PORTC.7=0;
scan_code();
if (apret==0x83) {
//ok
simpan_atas();
delay_ms(800);
goto menu04;
}
if (apret==0x0B) {
//down
goto menu04;
}
if (apret==0x0A){
goto menu01;
//cancel
}
goto menu03;
menu04:
scan_code();
if (apret==0x83) {
//ok
simpan_bawah();
delay_ms(800);
goto menu05;
}
if (apret==0x03) {
//up
goto menu03;
}
if (apret==0x0B) {
//down

71

goto menu05;
}
if (apret==0x0A){
goto menu01;
}
goto menu04;

//cancel

menu05:
PORTC.4=1;PORTC.5=1;PORTC.6=0;PORTC.7=0;
scan_code();
if (apret==0x83) {
//ok
delay_ms(800);
goto lanjut;
}
if (apret==0x03) {
//up
goto menu04;
}
if (apret==0x0A){
goto menu01;
//cancel
}
goto menu05;
lanjut:
}
// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
tampil(1,3);
//tampil depan
delay_ms(20);
tampil(1,3);
//tampil belakang
}
void main(void)
{
PORTA=0x00;
DDRA=0xFF;
PORTB=0x00;
DDRB=0xFF;
PORTC=0x00;
DDRC=0xF0;
PORTD=0x00;
DDRD=0x00;
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Rising Edge
// INT1: Off
// INT2: Off
GICR|=0x40;
MCUCR=0x03;

72

MCUCSR=0x00;
GIFR=0x40;
TIMSK=0x00;
ACSR=0x80;
SFIOR=0x00;
showMenu();
#asm("sei")
while (1)
{
PORTC.4=1;PORTC.5=0;PORTC.6=0;PORTC.7=1; //LED hijau garis tepi
};
}

b) Led_Atas.h
const
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0x00,
0x00,
0x14,
0x24,
0x23,
0x36,
0x00,
0x00,
0x00,
0x08,
0x08,
0x00,
0x08,
0x00,
0x20,
0x3E,
0x00,

char LedAtas[] ={
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0x00, 0x5F, 0x00,
0x07, 0x00, 0x07,
0x7F, 0x14, 0x7F,
0x2A, 0x7F, 0x2A,
0x13, 0x08, 0x64,
0x49, 0x55, 0x22,
0x05, 0x03, 0x00,
0x1C, 0x22, 0x41,
0x41, 0x22, 0x1C,
0x2A, 0x1C, 0x2A,
0x08, 0x3E, 0x08,
0x50, 0x30, 0x00,
0x08, 0x08, 0x08,
0x30, 0x30, 0x00,
0x10, 0x08, 0x04,
0x51, 0x49, 0x45,
0x42, 0x7F, 0x40,

0,0,0,0,0, 0,0,0,0,0,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0x00,// !
0x00,// "
0x14,// #
0x12,// $
0x62,// %
0x50,// &
0x00,// '
0x00,// (
0x00,// )
0x08,// *
0x08,// +
0x00,// ,
0x08,// 0x00,// .
0x02,// /
0x3E,// 0
0x00,// 1

73

0x42,
0x21,
0x18,
0x27,
0x3C,
0x01,
0x36,
0x06,
0x00,
0x00,
0x00,
0x14,
0x41,
0x02,
0x32,
0x7E,
0x7F,
0x3E,
0x7F,
0x7F,
0x7F,
0x3E,
0x7F,
0x00,
0x20,
0x7F,
0x7F,
0x7F,
0x7F,
0x3E,
0x7F,
0x3E,
0x7F,
0x46,
0x01,
0x3F,
0x1F,
0x7F,
0x63,
0x03,
0x61,
0x00,
0x02,
0x41,
0x04,
0x40,
0x00,
0x20,
0x7F,
0x38,
0x38,
0x38,
0x08,
0x08,
0x7F,
0x00,
0x20,
0x00,
0x00,
0x7C,
0x7C,
0x38,
0x7C,
0x08,
0x7C,
0x48,
0x04,
0x3C,
0x1C,
0x3C,
0x44,

0x61,
0x41,
0x14,
0x45,
0x4A,
0x71,
0x49,
0x49,
0x36,
0x56,
0x08,
0x14,
0x22,
0x01,
0x49,
0x11,
0x49,
0x41,
0x41,
0x49,
0x09,
0x41,
0x08,
0x41,
0x40,
0x08,
0x40,
0x02,
0x04,
0x41,
0x09,
0x41,
0x09,
0x49,
0x01,
0x40,
0x20,
0x20,
0x14,
0x04,
0x51,
0x00,
0x04,
0x41,
0x02,
0x40,
0x01,
0x54,
0x48,
0x44,
0x44,
0x54,
0x7E,
0x14,
0x08,
0x44,
0x40,
0x7F,
0x41,
0x04,
0x08,
0x44,
0x14,
0x14,
0x08,
0x54,
0x3F,
0x40,
0x20,
0x40,
0x28,

0x51,
0x45,
0x12,
0x45,
0x49,
0x09,
0x49,
0x49,
0x36,
0x36,
0x14,
0x14,
0x14,
0x51,
0x79,
0x11,
0x49,
0x41,
0x41,
0x49,
0x09,
0x41,
0x08,
0x7F,
0x41,
0x14,
0x40,
0x04,
0x08,
0x41,
0x09,
0x51,
0x19,
0x49,
0x7F,
0x40,
0x40,
0x18,
0x08,
0x78,
0x49,
0x7F,
0x08,
0x7F,
0x01,
0x40,
0x02,
0x54,
0x44,
0x44,
0x44,
0x54,
0x09,
0x54,
0x04,
0x7D,
0x44,
0x10,
0x7F,
0x18,
0x04,
0x44,
0x14,
0x14,
0x04,
0x54,
0x44,
0x40,
0x40,
0x30,
0x10,

0x49,
0x4B,
0x7F,
0x45,
0x49,
0x05,
0x49,
0x29,
0x00,
0x00,
0x22,
0x14,
0x08,
0x09,
0x41,
0x11,
0x49,
0x41,
0x22,
0x49,
0x01,
0x51,
0x08,
0x41,
0x3F,
0x22,
0x40,
0x02,
0x10,
0x41,
0x09,
0x21,
0x29,
0x49,
0x01,
0x40,
0x20,
0x20,
0x14,
0x04,
0x45,
0x41,
0x10,
0x00,
0x02,
0x40,
0x04,
0x54,
0x44,
0x44,
0x48,
0x54,
0x01,
0x54,
0x04,
0x40,
0x3D,
0x28,
0x40,
0x04,
0x04,
0x44,
0x14,
0x18,
0x04,
0x54,
0x40,
0x20,
0x20,
0x40,
0x28,

0x46,//
0x31,//
0x10,//
0x39,//
0x30,//
0x03,//
0x36,//
0x1E,//
0x00,//
0x00,//
0x41,//
0x14,//
0x00,//
0x06,//
0x3E,//
0x7E,//
0x36,//
0x22,//
0x1C,//
0x41,//
0x01,//
0x32,//
0x7F,//
0x00,//
0x01,//
0x41,//
0x40,//
0x7F,//
0x7F,//
0x3E,//
0x06,//
0x5E,//
0x46,//
0x31,//
0x01,//
0x3F,//
0x1F,//
0x7F,//
0x63,//
0x03,//
0x43,//
0x41,//
0x20,//
0x00,//
0x04,//
0x40,//
0x00,//
0x78,//
0x38,//
0x20,//
0x7F,//
0x18,//
0x02,//
0x3C,//
0x78,//
0x00,//
0x00,//
0x44,//
0x00,//
0x78,//
0x78,//
0x38,//
0x08,//
0x7C,//
0x08,//
0x20,//
0x20,//
0x7C,//
0x1C,//
0x3C,//
0x44,//

2
3
4
5
6
7
8
9
:
;
<
=
>
?
@
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
[
"\"
]
^
_
`
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x

74

0x0C,
0x44,
0x00,
0x00,
0x00,
0x02,
};

0x50,
0x64,
0x08,
0x00,
0x41,
0x01,

0x50,
0x54,
0x36,
0x7F,
0x36,
0x02,

0x50,
0x4C,
0x41,
0x00,
0x08,
0x04,

0x3C,//
0x44,//
0x00,//
0x00,//
0x00,//
0x02 //

y
z
{
|
}
~

c) Led_Bawah.h
const
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0x00,
0x00,
0x14,
0x24,
0x23,
0x36,
0x00,
0x00,
0x00,
0x08,
0x08,
0x00,
0x08,
0x00,
0x20,
0x3E,
0x00,
0x42,
0x21,
0x18,
0x27,
0x3C,
0x01,
0x36,
0x06,
0x00,
0x00,

char LedBawah[] ={ 0,0,0,0,0, 0,0,0,0,0,


0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0 ,
0x00, 0x5F, 0x00, 0x00,// !
0x07, 0x00, 0x07, 0x00,// "
0x7F, 0x14, 0x7F, 0x14,// #
0x2A, 0x7F, 0x2A, 0x12,// $
0x13, 0x08, 0x64, 0x62,// %
0x49, 0x55, 0x22, 0x50,// &
0x05, 0x03, 0x00, 0x00,// '
0x1C, 0x22, 0x41, 0x00,// (
0x41, 0x22, 0x1C, 0x00,// )
0x2A, 0x1C, 0x2A, 0x08,// *
0x08, 0x3E, 0x08, 0x08,// +
0x50, 0x30, 0x00, 0x00,// ,
0x08, 0x08, 0x08, 0x08,// 0x30, 0x30, 0x00, 0x00,// .
0x10, 0x08, 0x04, 0x02,// /
0x51, 0x49, 0x45, 0x3E,// 0
0x42, 0x7F, 0x40, 0x00,// 1
0x61, 0x51, 0x49, 0x46,// 2
0x41, 0x45, 0x4B, 0x31,// 3
0x14, 0x12, 0x7F, 0x10,// 4
0x45, 0x45, 0x45, 0x39,// 5
0x4A, 0x49, 0x49, 0x30,// 6
0x71, 0x09, 0x05, 0x03,// 7
0x49, 0x49, 0x49, 0x36,// 8
0x49, 0x49, 0x29, 0x1E,// 9
0x36, 0x36, 0x00, 0x00,// :
0x56, 0x36, 0x00, 0x00,// ;

75

0x00,
0x14,
0x41,
0x02,
0x32,
0x7E,
0x7F,
0x3E,
0x7F,
0x7F,
0x7F,
0x3E,
0x7F,
0x00,
0x20,
0x7F,
0x7F,
0x7F,
0x7F,
0x3E,
0x7F,
0x3E,
0x7F,
0x46,
0x01,
0x3F,
0x1F,
0x7F,
0x63,
0x03,
0x61,
0x00,
0x02,
0x41,
0x04,
0x40,
0x00,
0x20,
0x7F,
0x38,
0x38,
0x38,
0x08,
0x08,
0x7F,
0x00,
0x20,
0x00,
0x00,
0x7C,
0x7C,
0x38,
0x7C,
0x08,
0x7C,
0x48,
0x04,
0x3C,
0x1C,
0x3C,
0x44,
0x0C,
0x44,
0x00,
0x00,
0x00,
0x02,
};

0x08,
0x14,
0x22,
0x01,
0x49,
0x11,
0x49,
0x41,
0x41,
0x49,
0x09,
0x41,
0x08,
0x41,
0x40,
0x08,
0x40,
0x02,
0x04,
0x41,
0x09,
0x41,
0x09,
0x49,
0x01,
0x40,
0x20,
0x20,
0x14,
0x04,
0x51,
0x00,
0x04,
0x41,
0x02,
0x40,
0x01,
0x54,
0x48,
0x44,
0x44,
0x54,
0x7E,
0x14,
0x08,
0x44,
0x40,
0x7F,
0x41,
0x04,
0x08,
0x44,
0x14,
0x14,
0x08,
0x54,
0x3F,
0x40,
0x20,
0x40,
0x28,
0x50,
0x64,
0x08,
0x00,
0x41,
0x01,

0x14,
0x14,
0x14,
0x51,
0x79,
0x11,
0x49,
0x41,
0x41,
0x49,
0x09,
0x41,
0x08,
0x7F,
0x41,
0x14,
0x40,
0x04,
0x08,
0x41,
0x09,
0x51,
0x19,
0x49,
0x7F,
0x40,
0x40,
0x18,
0x08,
0x78,
0x49,
0x7F,
0x08,
0x7F,
0x01,
0x40,
0x02,
0x54,
0x44,
0x44,
0x44,
0x54,
0x09,
0x54,
0x04,
0x7D,
0x44,
0x10,
0x7F,
0x18,
0x04,
0x44,
0x14,
0x14,
0x04,
0x54,
0x44,
0x40,
0x40,
0x30,
0x10,
0x50,
0x54,
0x36,
0x7F,
0x36,
0x02,

0x22,
0x14,
0x08,
0x09,
0x41,
0x11,
0x49,
0x41,
0x22,
0x49,
0x01,
0x51,
0x08,
0x41,
0x3F,
0x22,
0x40,
0x02,
0x10,
0x41,
0x09,
0x21,
0x29,
0x49,
0x01,
0x40,
0x20,
0x20,
0x14,
0x04,
0x45,
0x41,
0x10,
0x00,
0x02,
0x40,
0x04,
0x54,
0x44,
0x44,
0x48,
0x54,
0x01,
0x54,
0x04,
0x40,
0x3D,
0x28,
0x40,
0x04,
0x04,
0x44,
0x14,
0x18,
0x04,
0x54,
0x40,
0x20,
0x20,
0x40,
0x28,
0x50,
0x4C,
0x41,
0x00,
0x08,
0x04,

0x41,//
0x14,//
0x00,//
0x06,//
0x3E,//
0x7E,//
0x36,//
0x22,//
0x1C,//
0x41,//
0x01,//
0x32,//
0x7F,//
0x00,//
0x01,//
0x41,//
0x40,//
0x7F,//
0x7F,//
0x3E,//
0x06,//
0x5E,//
0x46,//
0x31,//
0x01,//
0x3F,//
0x1F,//
0x7F,//
0x63,//
0x03,//
0x43,//
0x41,//
0x20,//
0x00,//
0x04,//
0x40,//
0x00,//
0x78,//
0x38,//
0x20,//
0x7F,//
0x18,//
0x02,//
0x3C,//
0x78,//
0x00,//
0x00,//
0x44,//
0x00,//
0x78,//
0x78,//
0x38,//
0x08,//
0x7C,//
0x08,//
0x20,//
0x20,//
0x7C,//
0x1C,//
0x3C,//
0x44,//
0x3C,//
0x44,//
0x00,//
0x00,//
0x00,//
0x02 //

<
=
>
?
@
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
[
"\"
]
^
_
`
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
{
|
}
~

76

d) scan_code.h
#define
#define
#define
#define

indat
otdat
inclk
otclk

PINC.0
PORTC.0
PINC.1
PORTC.1

char Baca_data_ps2(void)
{
char data = 0x00, dt = 0x01;
int i=0;
otclk=1;
otdat=1;
delay_ms(150);
while (inclk==1);
delay_us(60);
while (inclk==0); // start bit
for (i=0; i < 8; i++)
{
while (inclk==1);
if (indat==1)
{ data = data | dt; }
dt=0x01
while (inclk==0);
dt = dt << 1;
}
return data;
}
unsigned int apret;
char x;
bit flag;
unsigned char kbd;
void scan_code()
{
apret=Baca_data_ps2();
//huruf kecil
if (apret==0x1c){kbd='a';}
(apret==0x21){kbd='c';}
if (apret==0x23){kbd='d';}
(apret==0x2b){kbd='f';}
if (apret==0x34){kbd='g';}
(apret==0x43){kbd='i';}
if (apret==0x3b){kbd='j';}
(apret==0x4b){kbd='l';}
if (apret==0x3a){kbd='m';}
(apret==0x44){kbd='o';}
if (apret==0x4d){kbd='p';}
(apret==0x2d){kbd='r';}
if (apret==0x1b){kbd='s';}
(apret==0x3c){kbd='u';}
if (apret==0x2a){kbd='v';}
(apret==0x22){kbd='x';}
if (apret==0x35){kbd='y';}

//ketika clock "1"


//dan jika data "1"
//maka bitwise or data=0x00 dan
//ketika clock "0",
//dt=0x01 digeser ke kiri 1 kali

if (apret==0x32){kbd='b';} if
if (apret==0x24){kbd='e';} if
if (apret==0x33){kbd='h';} if
if (apret==0x42){kbd='k';} if
if (apret==0x31){kbd='n';} if
if (apret==0x15){kbd='q';} if
if (apret==0x2c){kbd='t';} if
if (apret==0x1d){kbd='w';} if
if (apret==0x1a){kbd='z';}

//angka
if (apret==0x16){kbd='1';} if (apret==0x1e){kbd='2';} if
(apret==0x26){kbd='3';}
if (apret==0x25){kbd='4';} if (apret==0x2e){kbd='5';} if
(apret==0x36){kbd='6';}
if (apret==0x3d){kbd='7';} if (apret==0x3e){kbd='8';} if
(apret==0x46){kbd='9';}
if (apret==0x45){kbd='0';}
//simbol tanpa shift

77

if (apret==0x4e){kbd='-';}
(apret==0x54){kbd='[';}
if (apret==0x5b){kbd=']';}
(apret==0x52){kbd=',';}
if (apret==0x29){kbd=' ';}
(apret==0x49){kbd='.';}
if (apret==0x4a){kbd='/';}
(apret==0x7b){kbd='-';}
if (apret==0x79){kbd='+';}
(apret==0x7c){kbd='<';}
if (apret==0x71){kbd='>';}
//
//
//
//

if
if
if
if

(apret==0x76){}
(apret==0x0d){}
(apret==0x5a){}
(apret==0x66){}

if (apret==0x55){kbd='=';} if
if (apret==0x4c){kbd=';';} if
if (apret==0x41){kbd=',';} if
if (apret==0x0e){kbd='~';} if
if (apret==0xe0){kbd='?';} if

//esc
//tab
//enter
//backspace

//shift
if (apret==0x12){kbd='';flag=1;}
//huruf besar
if ((flag==1)&(apret==0x1c)) {kbd='A';flag=0;}
((flag==1)&(apret==0x32)) {kbd='B';flag=0;}
if ((flag==1)&(apret==0x21)) {kbd='C';flag=0;}
((flag==1)&(apret==0x23)) {kbd='D';flag=0;}
if ((flag==1)&(apret==0x24)) {kbd='E';flag=0;}
((flag==1)&(apret==0x2b)) {kbd='F';flag=0;}
if ((flag==1)&(apret==0x34)) {kbd='G';flag=0;}
((flag==1)&(apret==0x33)) {kbd='H';flag=0;}
if ((flag==1)&(apret==0x43)) {kbd='I';flag=0;}
((flag==1)&(apret==0x3b)) {kbd='J';flag=0;}
if ((flag==1)&(apret==0x42)) {kbd='K';flag=0;}
((flag==1)&(apret==0x4b)) {kbd='L';flag=0;}
if ((flag==1)&(apret==0x3a)) {kbd='M';flag=0;}
((flag==1)&(apret==0x31)) {kbd='N';flag=0;}
if ((flag==1)&(apret==0x44)) {kbd='O';flag=0;}
((flag==1)&(apret==0x4d)) {kbd='P';flag=0;}
if ((flag==1)&(apret==0x15)) {kbd='Q';flag=0;}
((flag==1)&(apret==0x2d)) {kbd='R';flag=0;}
if ((flag==1)&(apret==0x1b)) {kbd='S';flag=0;}
((flag==1)&(apret==0x2c)) {kbd='T';flag=0;}
if ((flag==1)&(apret==0x3c)) {kbd='U';flag=0;}
((flag==1)&(apret==0x2a)) {kbd='V';flag=0;}
if ((flag==1)&(apret==0x1d)) {kbd='W';flag=0;}
((flag==1)&(apret==0x22)) {kbd='X';flag=0;}
if ((flag==1)&(apret==0x35)) {kbd='Y';flag=0;}
((flag==1)&(apret==0x1a)) {kbd='Z';flag=0;}
//simbol dengan shift
if ((flag==1)&(apret==0x16)) {kbd='!';flag=0;}
((flag==1)&(apret==0x1e)) {kbd='@';flag=0;}
if ((flag==1)&(apret==0x26)) {kbd='#';flag=0;}
((flag==1)&(apret==0x25)) {kbd='$';flag=0;}
if ((flag==1)&(apret==0x2e)) {kbd='%';flag=0;}
((flag==1)&(apret==0x36)) {kbd='^';flag=0;}
if ((flag==1)&(apret==0x3d)) {kbd='&';flag=0;}
((flag==1)&(apret==0x3e)) {kbd='*';flag=0;}
if ((flag==1)&(apret==0x46)) {kbd='(';flag=0;}
((flag==1)&(apret==0x45)) {kbd=')';flag=0;}
if ((flag==1)&(apret==0x41)) {kbd='<';flag=0;}
((flag==1)&(apret==0x49)) {kbd='>';flag=0;}
if ((flag==1)&(apret==0x4a)) {kbd='?';flag=0;}
((flag==1)&(apret==0x55)) {kbd='+';flag=0;}
if ((flag==1)&(apret==0x5d)) {kbd='|';flag=0;}
((flag==1)&(apret==0x4e)) {kbd='_';flag=0;}
if ((flag==1)&(apret==0x52)) {kbd='"';flag=0;}
((flag==1)&(apret==0x4c)) {kbd=':';flag=0;}
if ((flag==1)&(apret==0x54)) {kbd='{';flag=0;}
((flag==1)&(apret==0x5b)) {kbd='}';flag=0;}
delay_us(50);
}

if
if
if
if
if
if
if
if
if
if
if
if
if

if
if
if
if
if
if
if
if
if
if

78

2.2. Mikrokontroler ATmega16 (2)


a) mikro2.h
/*****************************************************
This program was produced by the
CodeWizardAVR V1.25.3 Standard
Automatic Program Generator
Copyright 1998-2007 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date
: 25/06/2012
Author : DutchA
Company : RnB
Comments:
Chip type
: ATmega16
Program type
: Application
Clock frequency
: 12,000000 MHz
Memory model
: Small
External SRAM size : 0
Data Stack size
: 256
*****************************************************/
#include
#include
#include
#include

<mega16.h>
<delay.h>
<stdio.h>
<string.h>

#include <scancode.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x18 ;PORTB
#endasm
#include <lcd.h>
typedef unsigned char byte;
/* table for the user defined character
arrow that points to the top right corner */
flash byte char0[7]={
0b10101,
0b10101,
0b01110,
0b11111,
0b01110,
0b10101,
0b10101};
/* function used to define user characters */
void define_char(byte flash *pc,byte char_code)
{
byte i,a;
a=(char_code<<3) | 0x40;
for (i=0; i<8; i++) lcd_write_byte(a++,*pc++);
}
int t=0;
// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
// Place your code here
// PORTA=0;
// PORTB=0;
// PORTC=0;

79

t++;
}
char buffer_lcd[]="Propeller Display"
"
";//space required
char lcd_number = 16;
void tampilan(){
//ulang:
unsigned int i,j,k;
unsigned int data_len = strlen(buffer_lcd);
_lcd_ready();
lcd_clear();
lcd_gotoxy(0,0);
//0123456789abcdef
lcd_putsf(" Dutcha_punyA ");
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(300);
};
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(300);
};
}
unsigned char
unsigned char

text1[100];
text2[100];

void simpan_default()
{
char default1[]="Dwi Nurul Saputro";
char default2[]="NIM: D400 080 036";
strcpy (text1, default1);
strcpy (text2, default2);
delay_ms(50);
}
void simpan_atas()
{
char datascan1[50];
char cnt_addr;

//data kbd atas

for (cnt_addr=0;cnt_addr<33;cnt_addr++)
{
scan_code();
if (apret==0x83){goto next;}
datascan1[cnt_addr]=kbd; }
next:
strcpy (text1, datascan1);
delay_ms(50);
}
void simpan_bawah()
{
char datascan2[50];
char cnt_addr;

//data kbd bawah

80

for (cnt_addr=0;cnt_addr<33;cnt_addr++)
{
scan_code();
if (apret==0x83){goto next;}
datascan2[cnt_addr]=kbd; }
next:
strcpy (text2, datascan2);
delay_ms(50);
}
void showMenu()
{
lcd_clear();
//up
:(apret==0x03)
//down :(apret==0x0B)
//ok
:(apret==0x83)
//cancel:(apret==0x0A)
menu01:
delay_ms(20);
lcd_gotoxy(0,0);
// 0123456789abcdef
lcd_putsf(" Start !
");
lcd_gotoxy(0,1);
lcd_putsf(" Set Tampilan ");
// kursor awal
lcd_gotoxy(0,0);
lcd_putchar(0);
apret=Baca_data_ps2();
if (apret==0x83){
//ok
simpan_default();
goto lanjut;
}
if (apret==0x0B){
goto menu02;
//down
}
goto menu01;
menu02:
delay_ms(20);
lcd_gotoxy(0,0);
// 0123456789abcdef
lcd_putsf(" Start !
");
lcd_gotoxy(0,1);
lcd_putsf(" Set Tampilan ");
lcd_gotoxy(0,1);
lcd_putchar(0);
apret=Baca_data_ps2();
if (apret==0x83) {
lcd_clear();
goto menu03;
}
if (apret==0x03) {
goto menu01;
}
goto menu02;

//ok

//up

menu03:
// ATAS
delay_ms(20);
lcd_gotoxy(0,0);
// 0123456789abcdef
lcd_putsf(" Atas
");
lcd_gotoxy(0,1);
lcd_putsf(" Bawah
Tampil");
lcd_gotoxy(0,0);
lcd_putchar(0);
apret=Baca_data_ps2();

81

if (apret==0x83) {
//ok
lcd_clear();
simpan_atas();
delay_ms(300);
lcd_clear(); lcd_gotoxy(0,1);
//0123456789abcdef
lcd_putsf("
Simpan..");
delay_ms(800);
goto menu04;
}
if (apret==0x03) {
//up
goto menu05;
}
if (apret==0x0B) {
//down
goto menu04;
}
if (apret==0x0A) {
//cancel
goto menu01;
}
goto menu03;
menu04:
// BAWAH
delay_ms(20);
lcd_gotoxy(0,0);
// 0123456789abcdef
lcd_putsf(" Atas
");
lcd_gotoxy(0,1);
lcd_putsf(" Bawah
Tampil");
lcd_gotoxy(0,1);
lcd_putchar(0);
apret=Baca_data_ps2();
if (apret==0x83) {
//ok
lcd_clear();
simpan_bawah();
delay_ms(300);
lcd_clear(); lcd_gotoxy(0,1);
//0123456789abcdef
lcd_putsf("
Simpan..");
delay_ms(800);
goto menu03;
}
if (apret==0x03) {
//up
goto menu03;
}
if (apret==0x0B) {
//down
goto menu05;
}
if (apret==0x0A) {
//cancel
goto menu01;
}
goto menu04;
menu05:
// LANJUT TAMPIL
delay_ms(20);
lcd_gotoxy(0,0);
// 0123456789abcdef
lcd_putsf(" Atas
");
lcd_gotoxy(0,1);
lcd_putsf(" Bawah
Tampil");
lcd_gotoxy(8,1);
lcd_putchar(0);
apret=Baca_data_ps2();
if (apret==0x83) {
//ok
lcd_clear();
delay_ms(300);
lcd_clear(); lcd_gotoxy(0,1);
//0123456789abcdef
lcd_putsf("
Tampil..");
delay_ms(800);

82

goto lanjut;
}
if (apret==0x03) {
//up
goto menu04;
}
if (apret==0x0B) {
//down
goto menu03;
}
if (apret==0x0A) {
//cancel
goto menu01;
}
goto menu05;
lanjut:
}
void main(void)
{
PORTA=0x00;
DDRA=0xFF;
PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0x00;
TCCR0=0x00;
TCNT0=0x00;
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
GICR|=0x40;
MCUCR=0x03;
MCUCSR=0x00;
GIFR=0x40;

//rissing edge
//
//
//

TIMSK=0x00;
ACSR=0x80;
SFIOR=0x00;
define_char(char0,0);
lcd_init(16);
showMenu();
tampilan();
lcd_clear();
lcd_gotoxy(0,1);
//0123456789abcdef
lcd_putsf("
Putar.....
");
delay_ms(700);
#asm("sei")

83

while (1)
{
lcd_clear();
lcd_gotoxy(0,0);
// 0123456789abcdef
lcd_putsf(" Prop Display ");
lcd_gotoxy(0,1);
//0123456789abcdef
lcd_putsf("
ATmega16
");
scan_code();
//0123456789abcdef
if (apret==0x05){ PORTA=0x00; PORTA.0=1; lcd_clear();
lcd_putsf("Speed 1
"); sprintf(buff,"%c",kbd); lcd_puts(buff);
delay_ms(2000);}
if (apret==0x06){ PORTA=0x00; PORTA.1=1; lcd_clear();
lcd_putsf("Speed 2
"); sprintf(buff,"%c",kbd); lcd_puts(buff);
delay_ms(2000);}
if (apret==0x04){ PORTA=0x00; PORTA.2=1; lcd_clear();
lcd_putsf("Speed 3
"); sprintf(buff,"%c",kbd); lcd_puts(buff);
delay_ms(2000);}
if (apret==0x0C){ PORTA=0x00;
lcd_clear();
lcd_putsf("Motor Off "); sprintf(buff,"%c",kbd); lcd_puts(buff);
delay_ms(2000);}
if (apret==0x0A){ PORTA=0x00; lcd_clear(); delay_ms(700);
showMenu(); delay_ms(1000);}
delay_ms(50);
};
}

b) scancode.h
#define indat PINC.0
#define otdat PORTC.0
#define inclk PINC.1
#define otclk PORTC.1
#include <lcd.h>
char buff[33];
char Baca_data_ps2(void)
{
char data = 0x00;
int i=0;
char dt = 0x01;
DDRC.2=0; otclk=1;
DDRC.3=0; otdat=1;
delay_ms(150);
while (inclk==1);
delay_us(60);
while (inclk==0);
for (i=0; i < 8; i++)
{
while (inclk==1);
if (indat==1)
{ data = data | dt; }
while (inclk==0);
dt = dt << 1;
}
DDRC.2=1;

84

PORTC.2=0;
return data;
}
unsigned int apret;
char x;
bit flag;
unsigned char kbd;
void scan_code()
{
apret=Baca_data_ps2();
//huruf kecil
if (apret==0x1c){kbd='a';}
if (apret==0x21){kbd='c';}
if (apret==0x23){kbd='d';}
if (apret==0x2b){kbd='f';}
if (apret==0x34){kbd='g';}
if (apret==0x43){kbd='i';}
if (apret==0x3b){kbd='j';}
if (apret==0x4b){kbd='l';}
if (apret==0x3a){kbd='m';}
if (apret==0x44){kbd='o';}
if (apret==0x4d){kbd='p';}
if (apret==0x2d){kbd='r';}
if (apret==0x1b){kbd='s';}
if (apret==0x3c){kbd='u';}
if (apret==0x2a){kbd='v';}
if (apret==0x22){kbd='x';}
if (apret==0x35){kbd='y';}

if (apret==0x32){kbd='b';}
if (apret==0x24){kbd='e';}
if (apret==0x33){kbd='h';}
if (apret==0x42){kbd='k';}
if (apret==0x31){kbd='n';}
if (apret==0x15){kbd='q';}
if (apret==0x2c){kbd='t';}
if (apret==0x1d){kbd='w';}
if (apret==0x1a){kbd='z';}

//angka
if (apret==0x16){kbd='1';} if (apret==0x1e){kbd='2';}
if (apret==0x26){kbd='3';}
if (apret==0x25){kbd='4';} if (apret==0x2e){kbd='5';}
if (apret==0x36){kbd='6';}
if (apret==0x3d){kbd='7';} if (apret==0x3e){kbd='8';}
if (apret==0x46){kbd='9';}
if (apret==0x45){kbd='0';}
//simbol tanpa shift
if (apret==0x4e){kbd='-';}
if (apret==0x54){kbd='[';}
if (apret==0x5b){kbd=']';}
if (apret==0x52){kbd=',';}
if (apret==0x29){kbd=' ';}
if (apret==0x49){kbd='.';}
if (apret==0x4a){kbd='/';}
if (apret==0x7b){kbd='-';}
if (apret==0x79){kbd='+';}
if (apret==0x7c){kbd='<';}
if (apret==0x71){kbd='>';}
//
//
//
//

if
if
if
if

(apret==0x76){}
(apret==0x0d){}
(apret==0x5a){}
(apret==0x66){}

if (apret==0x55){kbd='=';}
if (apret==0x4c){kbd=';';}
if (apret==0x41){kbd=',';}
if (apret==0x0e){kbd='~';}
if (apret==0xe0){kbd='?';}

//esc
//tab
//enter
//backspace

//shift
if (apret==0x12){kbd='';flag=1;}
//huruf besar
if ((flag==1)&(apret==0x1c)) {kbd='A';flag=0;}
if ((flag==1)&(apret==0x32)) {kbd='B';flag=0;}
if ((flag==1)&(apret==0x21)) {kbd='C';flag=0;}
if ((flag==1)&(apret==0x23)) {kbd='D';flag=0;}
if ((flag==1)&(apret==0x24)) {kbd='E';flag=0;}
if ((flag==1)&(apret==0x2b)) {kbd='F';flag=0;}
if ((flag==1)&(apret==0x34)) {kbd='G';flag=0;}
if ((flag==1)&(apret==0x33)) {kbd='H';flag=0;}
if ((flag==1)&(apret==0x43)) {kbd='I';flag=0;}
if ((flag==1)&(apret==0x3b)) {kbd='J';flag=0;}

85

if
if
if
if
if
if
if
if
if
if
if
if
if
if
if
if

((flag==1)&(apret==0x42))
((flag==1)&(apret==0x4b))
((flag==1)&(apret==0x3a))
((flag==1)&(apret==0x31))
((flag==1)&(apret==0x44))
((flag==1)&(apret==0x4d))
((flag==1)&(apret==0x15))
((flag==1)&(apret==0x2d))
((flag==1)&(apret==0x1b))
((flag==1)&(apret==0x2c))
((flag==1)&(apret==0x3c))
((flag==1)&(apret==0x2a))
((flag==1)&(apret==0x1d))
((flag==1)&(apret==0x22))
((flag==1)&(apret==0x35))
((flag==1)&(apret==0x1a))

{kbd='K';flag=0;}
{kbd='L';flag=0;}
{kbd='M';flag=0;}
{kbd='N';flag=0;}
{kbd='O';flag=0;}
{kbd='P';flag=0;}
{kbd='Q';flag=0;}
{kbd='R';flag=0;}
{kbd='S';flag=0;}
{kbd='T';flag=0;}
{kbd='U';flag=0;}
{kbd='V';flag=0;}
{kbd='W';flag=0;}
{kbd='X';flag=0;}
{kbd='Y';flag=0;}
{kbd='Z';flag=0;}

//simbol dengan shift


if ((flag==1)&(apret==0x16))
if ((flag==1)&(apret==0x1e))
if ((flag==1)&(apret==0x26))
if ((flag==1)&(apret==0x25))
if ((flag==1)&(apret==0x2e))
if ((flag==1)&(apret==0x36))
if ((flag==1)&(apret==0x3d))
if ((flag==1)&(apret==0x3e))
if ((flag==1)&(apret==0x46))
if ((flag==1)&(apret==0x45))
if ((flag==1)&(apret==0x41))
if ((flag==1)&(apret==0x49))
if ((flag==1)&(apret==0x4a))
if ((flag==1)&(apret==0x55))
if ((flag==1)&(apret==0x5d))
if ((flag==1)&(apret==0x4e))
if ((flag==1)&(apret==0x52))
if ((flag==1)&(apret==0x4c))
if ((flag==1)&(apret==0x54))
if ((flag==1)&(apret==0x5b))

{kbd='!';flag=0;}
{kbd='@';flag=0;}
{kbd='#';flag=0;}
{kbd='$';flag=0;}
{kbd='%';flag=0;}
{kbd='^';flag=0;}
{kbd='&';flag=0;}
{kbd='*';flag=0;}
{kbd='(';flag=0;}
{kbd=')';flag=0;}
{kbd='<';flag=0;}
{kbd='>';flag=0;}
{kbd='?';flag=0;}
{kbd='+';flag=0;}
{kbd='|';flag=0;}
{kbd='_';flag=0;}
{kbd='"';flag=0;}
{kbd=':';flag=0;}
{kbd='{';flag=0;}
{kbd='}';flag=0;}

sprintf(buff,"%c",kbd);
lcd_puts(buff);
delay_us(50);
}

//tampilkan lcd

86

3. Terbang Bersama Propellerku

87

88

You might also like