Jelajahi eBook
Kategori
Jelajahi Buku audio
Kategori
Jelajahi Majalah
Kategori
Jelajahi Dokumen
Kategori
PERCOBAAN 2
LCD DAN KEYPAD
I.
Tujuan:
Description
Ground
Vcc
Contrast Voltage
"E" Clock
7 - 14
15
16
Instruction/Description
14 13 12 11 10 9
7 Pins
1 Clear Display
D C B Enable Display/Cursor
1 SC RL *
1 DL N F
BF *
D D D D D D D D
D D D D D D D D
Display/Cursor
Turn Display On(1)/Off(0)
Turn Cursor On(1)/Off(0)
Cursor Blink On(1)/Off(0)
IV.
Algorithma Pemrograman
1. Percobaan 1
Tampilkan tulisan TEST LCD dengan cara masing masing huruf keluar
secara bergantian dari T kemudian E kemudian S sampai huruf yang terakhir
yaitu D dengan delay waktu 1 detik untuk pemunculan tiap hurufnya.
2. Percobaan 2
Tampilkan huruf dan angka yang ditekan pada keypad 4x4 pada LCD
dengan cara saat keypad ditekan maka huruf atau angka tersebut akan tampil
pada LCD dan saat dilepas keypadnya maka tidak akan tampil lagi.
3. Percobaan 3
Jika keypad 1 ditekan maka relay 1 akan aktif
Jika keypad 2 ditekan maka relay 2 akan aktif
Jika keypad 3 ditekan maka relay 3 akan aktif
Jika keypad 4 ditekan maka relay 4 akan aktif
Jika keypad 5 ditekan maka relay 5 akan aktif
Jika keypad 6 ditekan maka relay 6 akan aktif
Jika keypad 7 ditekan maka relay 7 akan aktif
Jika keypad 8 ditekan maka relay 8 akan aktif
Jika keypad A ditekan maka relay 1,2,3,4 akan aktif
Jika keypad B ditekan maka relay 5,6,7,8 akan aktif
Jika keypad C ditekan maka semua relay akan aktif
Jika keypad * ditekan maka akan meng-lock perintah terakhir dan tidak
merespon perintah keypad lainnya
Jika
keypad
ditekan
maka akan
meng-unlock
dan
keypad
Jika keypad * dan # ditekan bersamaan maka relay akan menyala sacara
bergantian dari relay 1 sampai relay 8 dengan delay waktu 1 detik setiap
pergantiannya
V.
Program
Percobaan 1
#include "stm32f4xx_hal.h"
#include "lcd_character.h"
#include "stdio.h"
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
lcd_init();
lcd_gotoxy(0,0);
lcd_puts("T");
HAL_Delay(1000);
lcd_gotoxy(1,0);
lcd_puts("E");
HAL_Delay(1000);
lcd_gotoxy(2,0);
lcd_puts("S");
HAL_Delay(1000);
lcd_gotoxy(3,0);
lcd_puts("T");
HAL_Delay(1000);
lcd_gotoxy(5,0);
lcd_puts("L");
HAL_Delay(1000);
lcd_gotoxy(6,0);
lcd_puts("C");
HAL_Delay(1000);
lcd_gotoxy(7,0);
lcd_puts("D");
HAL_Delay(1000);
while (1)
{
}
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct;
RCC_ClkInitTypeDef RCC_ClkInitStruct;
PWR_CLK_ENABLE();
HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLM = 8;
RCC_OscInitStruct.PLL.PLLN = 336;
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
RCC_OscInitStruct.PLL.PLLQ = 4;
HAL_RCC_OscConfig(&RCC_OscInitStruct);
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1
|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5);
HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
}
HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
/* GPIO Ports Clock Enable */
GPIOH_CLK_ENABLE();
GPIOD_CLK_ENABLE();
/*Configure GPIO pins : PD0 PD1 PD2 PD3
PD4 PD5 PD6 PD7 */
GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3
|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
}
#ifdef USE_FULL_ASSERT
void assert_failed(uint8_t* file, uint32_t line)
{
}
#endif
Percobaan 2
#include
#include
#include
#include
"stm32f4xx_hal.h"
"lcd_character.h"
"stdio.h"
"keypad_4x4.h"
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
char simpan[1000];
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
lcd_init();
keypad_init();
while (1)
{
sprintf(simpan,"Key means=%c",keypad_get_key_value());
lcd_gotoxy(0,0);
lcd_puts(simpan);
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct;
RCC_ClkInitTypeDef RCC_ClkInitStruct;
PWR_CLK_ENABLE();
HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLM = 8;
RCC_OscInitStruct.PLL.PLLN = 336;
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
RCC_OscInitStruct.PLL.PLLQ = 4;
HAL_RCC_OscConfig(&RCC_OscInitStruct);
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1
|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5);
HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
/* GPIO Ports Clock Enable */
GPIOH_CLK_ENABLE();
GPIOD_CLK_ENABLE();
GPIOE_CLK_ENABLE();
/*Configure GPIO pins : PD0 PD1 PD2 PD3
PD4 PD5 PD6 PD7 */
GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3
|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
/*Configure GPIO pins : PE12 PE13 PE14 PE15 */
GPIO_InitStruct.Pin = GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
/*Configure GPIO pins : PE8 PE9 PE10 PE11 */
GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
}
#ifdef USE_FULL_ASSERT
void assert_failed(uint8_t* file, uint32_t line)
{
}
#endif
Percobaan 3
#include
#include
#include
#include
"stm32f4xx_hal.h"
"lcd_character.h"
"stdio.h"
"keypad_4x4.h"
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
char simpan[1000];
char key;
int ubah=1;
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
lcd_init();
keypad_init();
while (1)
{
key=keypad_get_key_value();
sprintf(simpan,"Key means=%c",keypad_get_key_value());
lcd_gotoxy(0,0);
lcd_puts(simpan);
if(keypad_get_key_value()=='.') ubah=0;
else if(keypad_get_key_value()=='#') ubah=1;
if(ubah)
{
if(key=='1')
{ HAL_GPIO_WritePin(GPIOE,GPIO_PIN_0,1);
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3
|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7,0);
}
else if(key=='2')
{ HAL_GPIO_WritePin(GPIOE,GPIO_PIN_1,1);
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_0|GPIO_PIN_2|GPIO_PIN_3
GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7,0);
}
else if(key=='3')
{ HAL_GPIO_WritePin(GPIOE,GPIO_PIN_2,1);
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_3
|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7,0);
}
else if(key=='4')
{ HAL_GPIO_WritePin(GPIOE,GPIO_PIN_3,1);
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2
|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7,0);
}
else if(key=='5')
{ HAL_GPIO_WritePin(GPIOE,GPIO_PIN_4,1);
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2
|GPIO_PIN_3|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7,0);
}
else if(key=='6')
{ HAL_GPIO_WritePin(GPIOE,GPIO_PIN_5,1);
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2
|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_6|GPIO_PIN_7,0);
}
else if(key=='7')
{ HAL_GPIO_WritePin(GPIOE,GPIO_PIN_6,1);
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2
|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_7,0);
}
else if(key=='8')
{ HAL_GPIO_WritePin(GPIOE,GPIO_PIN_7,1);
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2
|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6,0);
}
else if(key=='A')
{ HAL_GPIO_WritePin(GPIOE,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2
|GPIO_PIN_3,1);
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6
|GPIO_PIN_7,0);
}
else if(key=='B')
{ HAL_GPIO_WritePin(GPIOE,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2
|GPIO_PIN_3,0); HAL_GPIO_WritePin(GPIOE,GPIO_PIN_4|
GPIO_PIN_5|GPIO_PIN_6
|GPIO_PIN_7,1);
}
else if(key=='C')
{ HAL_GPIO_WritePin(GPIOE,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2
|GPIO_PIN_3 GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7,1);
}
else if(key=='#'&&key=='.') /* Running Relay */
{ HAL_GPIO_WritePin(GPIOE,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2
|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7,0);
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_0,1);
HAL_Delay(1000);
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_0,0);
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_1,1);
HAL_Delay(1000);
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_2,1);
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_1,0);
HAL_Delay(1000);
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_3,1);
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_2,0);
HAL_Delay(1000);
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_4,1);
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_3,0);
HAL_Delay(1000);
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_5,1);
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_4,0);
HAL_Delay(1000);
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_6,1);
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_5,0);
HAL_Delay(1000);
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_6,0);
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_7,1);
HAL_Delay(1000);
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_7,0);
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_8,1);
}
}
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct;
RCC_ClkInitTypeDef RCC_ClkInitStruct;
PWR_CLK_ENABLE();
HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLM = 8;
RCC_OscInitStruct.PLL.PLLN = 336;
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
RCC_OscInitStruct.PLL.PLLQ = 4;
HAL_RCC_OscConfig(&RCC_OscInitStruct);
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1
|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5);
HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
/* GPIO Ports Clock Enable */
GPIOH_CLK_ENABLE();
GPIOD_CLK_ENABLE();
GPIOE_CLK_ENABLE();
/*Configure GPIO pins : PD0 PD1 PD2 PD3
PD4 PD5 PD6 PD7 */
GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3
|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
/*Configure GPIO pins : PE12 PE13 PE14 PE15 */
GPIO_InitStruct.Pin = GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
/*Configure GPIO pins : PE0 PE1 PE2 PE3
PE4 PE5 PE6 PE7 */
GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3
|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
#ifdef USE_FULL_ASSERT
void assert_failed(uint8_t* file, uint32_t line)
{
}
#endif
VI.
Flow Chart
Percobaan 1
START
Gotoxy(0,0)
Cetak(T)
Delay 1s
Gotoxy(1,0)
Cetak(E)
Delay 1s
Gotoxy(2,0)
Cetak(S)
Delay 1s
Gotoxy(3,0)
Cetak(T)
Delay 1s
Gotoxy(5,0)
Cetak(L)
Delay 1s
Gotoxy(6,0)
Cetak(C)
Delay 1s
Gotoxy(7,0)
Cetak(D)
Delay 1s
END
Percobaan 2
START
Gotoxy(0,0)
Cetak(Simpan)
AND
Percobaan 3
START
Key=keypad_get_key_value
Simpan = key means =
%c,keypad_get_key_value
Gotoxy(0,0)
Cetak(Simpan)
Key==.
Key==#
YA
YA
Ubah=0
Ubah=1
Ubah==1
YA
Key==1
Key==2
YA
YA
PINE.0=1
PINE.1=1
Key==3
Key==4
YA
PINE.2=1
Key==5
YA
PINE.3=1
Key==6
Key==7
YA
PINE.4=1
YA
PINE.5=1
Key==8
Key==A
YA
YA
YA
PINE.6=1
PINE.7=1
PINE.0= PINE.1=PINE.2=PINE.3=1
YA
Key==B
YA
Key==C
Key==*
&&
Key=#
YA
PINE.4= PINE.5=PINE.6=PINE.7=1
PINE.0= PINE.1=PINE.2=PINE.3=1
PINE.4= PINE.5=PINE.6=PINE.7=1
PINE.0=1 delay 1S
PINE.1=1 delay 1S
PINE.2=1 delay 1S
PINE.3=1 delay 1S
PINE.4=1 delay 1S
PINE.5=1 delay 1S
PINE.6=1 delay 1S
PINE.7=1 delay 1S
END
VII.
Gambar Rangkaian
Relay 1
Relay 1
Relay 1
Relay 1
Relay 1
Relay 1
Relay 1
Relay 1
PE 0
.
.
.
.
.
PD 0 PD 7
LCD
ARM
STM32F4
KEYPAD
VIII. Analisa
Pada praktikum kali ini mempraktekkan tentag penerapan penggunaan LCD dan
Keypad menggunakan mikrokontroller STM32 F4. Perlu diketahui bahwa untuk bisa
menggunakan LCD dan Keypad pada ARM maka perlu menambahkan file header pada library
ARM secara manual karena pada software keil uVision tidak disediakan library untuk LCD
dan Keypad. Ada 2 buah library yang harus di copykan ke dalam library keil yaitu file bertipe
header dan file bertipe source. Hal tersebut bisa dilakukan dengan mengcopy file yang bertipe
header lcd_character.h dan keypad_4x4.h ke dalam folder inc. Serta mengcopy file bernama
lcd_character.c dan keypad_4x4.c ke dalam folder src.seperti gambar di bawah ini.
Kemudian carilah file lcd_character dan keypad_4x4 di dalam folder Src blok kedua
file kemudian tambahkan dengan klik Add
Jika di dalam Application/Users sudah tedapat kedua file header maka bisa dilakukan
langkah selanjutnya.
Untuk memanggil header tersebut maka di dalam program perlu ditambahkan program
untukk memanggil kedua file header terebut. Hal tersebut bisa dilakukan dengan
menambahkan program sebagai berikut :
#includelcd_character.h
#includekeypad_4x4.h
Inisialisai juga diperlukan agar program mengenal fungi fungsi yang ada di dalam
header tersebut. Hal ini dilakukan dengan melakukan penulisan program pada fungsi main/
utama tetapi di luar fungsi while(1) dengan program sebagai berikut :
lcd_init();
keypad_init();
dengan penambahan ini maka bisa langsung dilakukan pemrograman untuk LC
dan
Keypad terebut.
Pada praktikum kali ini LCD dihubungkan dengan PIN D mulai bit 0 sampai bit
7 sehingga untuk inisialisasi kita jadikan PIN D ini sebagai GPIO_output. Sedangkan
untuk keypad menggunakan PINE mulai bit 8 sampai bit 15. Dimana untuk bit 8 11 dijadikan
sebagai GPIO_input dan bit 12-15 dijadikan ebagai GPIO_output. Hal ini dikarenakan
konfigurasi untuk keypad 4x4 ini membutuhkan 4 buah input dan 4 buah output untuk
mengetahui posisi keypad mana yang sedang ditekan. Untuk output relay menggunakan
PORTE pin 0 sampai pin
7 sehingga PORTE ini diiniialisasikan sebagai GPIO_output.
IX.
Kesimpulan
1. Untuk menggunakan modul keypad dan LCD pada mikrokontroller ARM maka perlu
menambahkan file tambahan yang diperoleh dari luar berupa file .H (lcd_character.h &
keypad_4x4.h) yang bertipe header dan file .C (lcd_character.c & keypad_4x4.c) yang
bertipe source.
2. File yang bertipe .H perlu di copy dan ditempatkan pada folder Inc dan file yang bertpe
.C ditempatkan pada folder Src
3. Pada program uVision Keil memerlukan untuk menambahkan file source .C pada
Application/User jika menggunakan LCD dan keypad