Вы находитесь на странице: 1из 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

Вам также может понравиться