Anda di halaman 1dari 6

PEMROGRAMAN DASAR STM32 – LCD 20X4 4bit Mode

1. Jalankan STM32 CubeMX


2. Buat New Project, pilihan MCU : STM32F103C8
3. Skema Praktikum

4. Atur konfigurasi Pin sesuai dengan skema Praktikum


5. Lengkapi parameter konfigurasi dan berikan User Label untuk setiap pin ,

tampilan Pin & Configuration dan gambar IC hasil setelah pengaturan SYS Mode
dan RCC

6. Atur SYS Mode, pada kolom Debug pilih Serial Wire

7. Atur RCC, pada kolom High Speed Clock ( HSE) pilih Crystal Ceramic
Resonator

8. Atur Clock pada menu Clock Configuration, ubah nilai HCLK menjadi 72 (ketik
dan Enter  lalu Ok)
9. Mengatur pada Project Manager, isi Project Name, Project Location dan jenis
Toolchain / IDE

10. Langkah berikutnya klik Generate Code, setelah proses selesai pilih Open Project
dan akan langsung diarahkan masuk ke Keil uVision IDE ( MDK-ARM) dan tampil
layar editor program.

11. Hasil dari generate code kita dapatkan struktur program STM32, untuk
memudahkan waktu pemrograman hapus semua teks yang diberi tanda remark /
keterangan yang tidak diperlukan. sampai batas akhir kurung kurawal tutup } milik
int main (void), yang dibawah kurung kurawal ini biarkan apa adanya, kita siap
untuk menambah program.
12. Mengatur parameter downloader (boleh dilakukan sebelum atau sesudah pengetikan
program),

• Tancapkan Downloader ST-LINK V2 ke port USB dan modul trainer.


• Ikuti petunjuk pada Gambar Di Bawah

Progam
#include "main.h"
#include "stdio.h" //fungsi sprintf terdapat pada library stdio.h

void SystemClock_Config(void);
static void MX_GPIO_Init(void);

/**
* fungsi untuk mengirim data pada lcd dalam mode 4 bit
* pengiriman data di lakukan 2 kali ( High Nible dahulu lalu Low Nible )
*
*/

void lcd_send(uint8_t data)


{
//High Nible
HAL_GPIO_WritePin (LCD_D4_GPIO_Port, LCD_D4_Pin, (data>>4 & 1)? GPIO_PIN_SET : GPIO_PIN_RESET);
HAL_GPIO_WritePin (LCD_D5_GPIO_Port, LCD_D5_Pin, (data>>5 & 1)? GPIO_PIN_SET : GPIO_PIN_RESET);
HAL_GPIO_WritePin (LCD_D6_GPIO_Port, LCD_D6_Pin, (data>>6 & 1)? GPIO_PIN_SET : GPIO_PIN_RESET);
HAL_GPIO_WritePin (LCD_D7_GPIO_Port, LCD_D7_Pin, (data>>7 & 1)? GPIO_PIN_SET : GPIO_PIN_RESET);

//clock Enable
HAL_GPIO_WritePin (LCD_E_GPIO_Port, LCD_E_Pin, GPIO_PIN_SET);
HAL_Delay (1);
HAL_GPIO_WritePin (LCD_E_GPIO_Port, LCD_E_Pin, GPIO_PIN_RESET);

//Low Nible
HAL_GPIO_WritePin (LCD_D4_GPIO_Port, LCD_D4_Pin, (data>>0 & 1)? GPIO_PIN_SET : GPIO_PIN_RESET);
HAL_GPIO_WritePin (LCD_D5_GPIO_Port, LCD_D5_Pin, (data>>1 & 1)? GPIO_PIN_SET : GPIO_PIN_RESET);
HAL_GPIO_WritePin (LCD_D6_GPIO_Port, LCD_D6_Pin, (data>>2 & 1)? GPIO_PIN_SET : GPIO_PIN_RESET);
HAL_GPIO_WritePin (LCD_D7_GPIO_Port, LCD_D7_Pin, (data>>3 & 1)? GPIO_PIN_SET : GPIO_PIN_RESET);

//clock Enable
HAL_GPIO_WritePin (LCD_E_GPIO_Port, LCD_E_Pin, GPIO_PIN_SET);
HAL_Delay (1);
HAL_GPIO_WritePin (LCD_E_GPIO_Port, LCD_E_Pin, GPIO_PIN_RESET);
}
//fungsi untuk mengirim command karakter ke LCD
void lcd_cmd (uint8_t cmd)
{
HAL_GPIO_WritePin (LCD_RW_GPIO_Port, LCD_RW_Pin, GPIO_PIN_RESET); //pin RW : LOW
HAL_GPIO_WritePin (LCD_RS_GPIO_Port, LCD_RS_Pin, GPIO_PIN_RESET); //pin RS : LOW
lcd_send(cmd);

//fungsi untuk mengirim data karakter ke LCD


void lcd_data (char data)
{
HAL_GPIO_WritePin (LCD_RW_GPIO_Port, LCD_RW_Pin, GPIO_PIN_RESET); //pin RW : LOW
HAL_GPIO_WritePin (LCD_RS_GPIO_Port, LCD_RS_Pin, GPIO_PIN_SET); //pin RS : HIGH

lcd_send(data);
}

//fungsi inisialisasi harus dipanggil pertama


void lcd_init()
{
HAL_Delay(20); //power on > 15ms

lcd_cmd (0x33); //pengaturan awal


lcd_cmd (0x32); //pengaturan untuk antarmuka 4-bit
lcd_cmd (0x28); //pengaturan untuk ukuran font 5x8 pixel
lcd_cmd (0x0C); //menyalakan display dan mematikan kursor
lcd_cmd (0x06); //entry mode set
lcd_cmd (0x01); //lcd clear
}

//fungsi untuk menghapus semua karakter pada LCD


void lcd_clear (void)
{
lcd_cmd (0x01);
HAL_Delay (2);
}

//fungsi untuk menaruh kursor ke posisi yang diinginkan


void lcd_goto_xy (uint8_t x, uint8_t y)
{
if (y == 0)
{
lcd_cmd (0x80 + x);
}
else if(y == 1)
{
lcd_cmd (0xC0 + x);
}
else if(y == 2)
{
lcd_cmd (0x94 + x);
}
else if(y == 3)
{
lcd_cmd (0xD4 + x);
}
}

//fungsi untuk mencetak karakter


void lcd_print (char *str)
{
for (uint8_t i = 0; str[i] != 0; i++)
{
lcd_data (str[i]);
}
}

int main(void)
{
//variable char array untuk menyimpan hasil konversi dari fungsi sprintf
char str_buffer[20];

//interger ( menyimpan angka bulat )


int nilai_bulat = 123;

//float ( menyimpan angka pecahan )


float nilai_pecahan = 4.56;
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();

//funsi inisialisasi lcd


lcd_init();

while (1)
{
//cetak tulisan pada lcd
lcd_goto_xy(0,0);
lcd_print("LCD 20x4");

//konversi nilai interger ke string


lcd_goto_xy(0,1);
sprintf(str_buffer,"Bilangan Blt : %d",nilai_bulat);
lcd_print(str_buffer);

//konversi nilai float ke string


lcd_goto_xy(0,2);
sprintf(str_buffer,"Bilangan Pch : %.2f",nilai_pecahan);
lcd_print(str_buffer);

//cetak tulisan pada lcd


lcd_goto_xy(8,3);
lcd_print("BBE");
}
}

Build / Compile Program, jika build selesai dan tanpa error / warning, maka program
siap didownload

Download, jika tampil keterangan Verify OK , maka program sudah berhasil


didownload dan siap di jalankan

Anda mungkin juga menyukai