Merhaba Arkadaşlar,
Daha önceden yazdığım bu kodu sizinle palaşayım. Belki işine yaran olur.
Verdiğim lcd.c ve lcd.h kodlarını projenizde ygun yere ekleyin. Daha sonra kullanacağınız yerde lcd.h dosyasını çağırın.
lcd.c :
/******************************************************************
*Dosya :lcd.c
*Yazar :Ayhan KORKMAZ - AyhanKorkmaz.Net
*İletişim :info@ayhankorkmaz.net
*Versiyon :V1.0
*******************************************************************/
#include <stm32f10x.h>
#include "lcd.h"
unsigned char sayac,s,adres=64;
/*****************************************************************************
Kullanim : Eklemek istediğiniz özel karakterleri ekleyebiliriniz
Bunun için LCD karakter oluşturma programlarını kulanabilirsiniz
******************************************************************************/
unsigned char karakter_[8][8]=
{
/* TR Karakterler */
{ 0,14,16,16,17,14, 4, 0},//ç
{ 0, 0,12, 4, 4, 4,14, 0},//I
{10, 0,14,17,17,17,14, 0},//ö
{ 0,15,16,14, 1,30, 4, 0},//$
{10, 0,17,17,17,17,14, 0},//ü
/* özel isaretler */
{2, 6,14,30,14, 6, 2, 0},//<
{ 0, 4, 4, 4, 4, 4, 4, 0},//|
{ 0, 16, 8, 4, 2, 1, 0,0} //\//
};
/********************************************************
Fonksiyon : delay
Amac : Gecikme Fonksiyonudur.
Kullanim : delay(0x0000FFFF);
*********************************************************/
void delay(unsigned long delay)
{
while(delay--);
}
/********************************************************
Fonksiyon : lcd_komut
Amac : LCD Çalışması için gerekli komutları verir
Kullanim : lcd_komut(temizle);
*********************************************************/
void lcd_komut(char komut)
{
GPIOC->BRR = 0x00000001; //RS=0
GPIOC->ODR |= 0x00000002; //E=1
GPIOC->ODR |= (komut & 0x000000F0); //Yüksek değerlikli 4 bit gönderiliyor
lcd_gecikme();
GPIOC->BRR = 0x00000002; //E=0
GPIOC->BRR = 0x000000F0; //gönderilen yüksek değerlikli 4 bit porttan temizleniyor.
lcd_gecikme();
GPIOC->ODR |= 0x00000002; //E=1
GPIOC->ODR |= ((komut & 0x0000000F)<<4); //İlk 4 bit lcd ye gönderiliyor.
lcd_gecikme();
GPIOC->BRR = 0x00000002; //E=0
GPIOC->BRR = 0x000000FF; //Gönderilen düşük değerlikli 4 bit porttan temizleniyor.
}
/********************************************************
Fonksiyon : lcd_karakter_yaz
Amac : LCD Ekrana bir karakter basar
Kullanim : lcd_karakter_yaz('A');
*********************************************************/
void lcd_karakter_yaz(char veri)
{
switch (veri) {
case 'Ç' : veri=0x00; break;
case 'İ' : veri=0x01; break;
case 'Ö' : veri=0x02; break;
case 'Ş' : veri=0x03; break;
case 'Ü' : veri=0x04; break;
case 'ç' : veri=0x00; break;
case 'ı' : veri=0x01; break;
case 'ö' : veri=0x02; break;
case 'ş' : veri=0x03; break;
case 'ü' : veri=0x04; break;
default : break;
}
GPIOC->ODR |= 0x00000001; //RS=1
GPIOC->ODR |= 0x00000002; //E=1
GPIOC->ODR |= (veri & 0x000000F0); //verinin yüksek değerlikli 4 biti gönderiliyor.
lcd_gecikme();
GPIOC->BRR = 0x00000002; //E=0
GPIOC->BRR = 0x000000F0; //Gönderilen 4 bit porttan temizleniyor.
lcd_gecikme();
GPIOC->ODR |= 0x00000002; //E=1
GPIOC->ODR |= ((veri & 0x0000000F)<<4); //İlk 4 bit gönderiliyor.
lcd_gecikme();
GPIOC->BRR = 0x00000002; //E=0;
GPIOC->BRR = 0x000000FF; //Gönderilen ilk 4bit porttan temizleniyor.
lcd_gecikme();
}
/********************************************************
Fonksiyon : lcd_yazi_yaz
Amac : LCD Ekrana yazi yazar
Kullanim : lcd_yazi_yaz("AyhanKorkmaz.Net");
*********************************************************/
void lcd_yazi_yaz(char *veri)
{
while(*veri)
{
lcd_gecikme();
lcd_karakter_yaz(*veri++);
}
delay(0x0000FFFF);
}
/**************************************************************
Fonksiyon : lcd_git_xy
Amac : LCD ekranın hangi bölmesine yazılacağını ayarlarız
Kullanim : lcd_git_xy(2,1); 2. satır 1. Sütun
***************************************************************/
void lcd_git_xy(unsigned char satir,unsigned char sutun)
{
if(satir==1)
{
lcd_komut(0x00000080 + (sutun-1)); //1.satır 1.sütun için cgram adresi 0x80 dir
}
else if(satir==2)
{
lcd_komut(0x000000C0 +(sutun-1)); //2.satır 1.sütun için chram adresi 0x80+0x40=0xC0 dır
}
}
/********************************************************
Fonksiyon : lcd_hazirla
Amac : LCD Çalışması için gerekli ilk ayarlar
Kullanim : lcd_hazirla();
*********************************************************/
void lcd_hazirla(void)
{
delay(0x0000FFFF);
delay(0x0000FFFF);
GPIO_InitTypeDef GPIO_InitStructure;
delay(0x0000FFFF);
RCC_DeInit();
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOC, &GPIO_InitStructure);
lcd_komut(zorunlu);
delay(0x0000FFFF);
lcd_komut(ikisatir4bit5x8);
delay(0x0000FFFF);
lcd_komut(imlecsagakay);
delay(0x0000FFFF);
lcd_komut(dayansonig);
delay(0x0000FFFF);
lcd_komut(dayansonyok);
delay(0x0000FFFF);
lcd_komut(temizle);
delay(0x0000FFFF);
lcd_gecikme();
lcd_temizle();
for(sayac=0;sayac<=7;sayac++){ // Türkçe karakterler tanitiliyor
lcd_komut(adres);
for(s=0;s<=7;s++){
lcd_karakter_yaz(karakter_[sayac][s]);
}
adres=adres+8;
}
lcd_temizle();
delay(0x0000FFFF);
}
/********************************************************
Fonksiyon : lcd_temizle
Amac : LCD ekran tamamen silinir
Kullanim : lcd_temizle();
*********************************************************/
void lcd_temizle(void)
{
lcd_komut(temizle);
lcd_gecikme();
}
/********************************************************
Fonksiyon : lcd_gecikme
Amac : LCD Çalışması için gerekli gecikmedir
Kullanim : lcd_gecikme();
*********************************************************/
void lcd_gecikme(void)
{
unsigned long delay=0x00000872;
while(delay--);
}
lcd.h :
/******************************************************************
*Dosya :lcd.h
*Amaç :2*16 LCD için gerekli tanımlamaları yapar
*Kullanım :Proje dosyasında ilgili yere eklenir.
* lcd.c içinden çağırılır
*Yazar :Ayhan KORKMAZ - AyhanKorkmaz.Net
*İletişim :info@ayhankorkmaz.net
*Versiyon :V1.0
*Pin bağlantısı :
* ----------------
* ||||||||||||||||
*
*PC.0 –> RS
*PC.1 –> E
*PC.4 –> DB4
*PC.5 –> DB5
*PC.6 –> DB6
*PC.7 –> DB7
*RW ->Toprak
*******************************************************************/
#ifndef __LCD_H
#define __LCD_H
#define temizle 0x01
#define zorunlu 0x02
//------İMLEÇ AYARLARI------//
#define dkyansonyok 0x08 //dk = disp kapalı
#define dkyanson 0x09
#define dkyansonyokig 0x0A //ig = imleç göster
#define dkyansonig 0x0B
#define dayansonyok 0x0C //da = display açık
#define dayanson 0x0D
#define dayansonyokig 0x0E
#define dayansonig 0x0F
#define solakay 0x10 //imleç sola kayar
#define sagakay 0x14 //imleç sağa kayar
#define dispsolakay 0x18 //display sola kayar
#define dispsagakay 0x1C //display sağa kayar
//-------İletişim Ayarları------//
#define birsatir4bit5x8 0x3C //LCD 1 satır,5x8 matris 4bit iletişim
#define birsatir4bit5x10 0x24
#define ikisatir4bit5x8 0x28
#define ikisatir4bit5x10 0x2C
#define birsatir8bit5x8 0x30
#define birsatir8bit5x10 0x34
#define ikisatir8bit5x8 0x38
#define ikisatir8bit5x10 0x20
//-------GİRİŞ AYARLARI--------//
#define imlecsolakay 0x04 //Her yazılan karakterden sonra imleç sola kayar
#define imlecdispsolakay 0x05 //Her yazılan karakterden sonra imleç ve display sola kayar
#define imlecsagakay 0x06 //Her yazılan karakterden sonra imleç saga kayar
#define imlecdispsagakay 0x07 //Her yazılan karakterden sonra imleç ve display sola kayar
extern void delay(unsigned long delay);
extern void lcd_komut(char komut);
extern void lcd_karakter_yaz(char veri);
extern void lcd_yazi_yaz(char *veri);
extern void lcd_git_xy(unsigned char satir,unsigned char sutun);
extern void lcd_hazirla(void);
extern void lcd_temizle(void);
extern void lcd_gecikme(void);
#endif
Çalışmasını da gösteren bir video çektim. En azından kullanmak isteyenler için örnek olur
http://youtu.be/bYycMRQmGKc (http://youtu.be/bYycMRQmGKc)
Proje dosyaların ve örnek proje için:
STM32 2x16 LCD (http://www.ayhankorkmaz.net/stm32f1xx-ile-2x16-lcd-kutuphanesi-olusturalim/)
Teşekkürler arkadaşım.Çok faydalı bir paylaşım olmuş.Devamını merakla bekliyoruz.STM32 ile bazı basit programlarıda paylaşırmısınız.Yeni öğrenmeye başlıyorumda.
Teşekkürler yorum için. Yeni projeler de eklemeye devam edicem.
merhaba.
bu kütüphane ile ekrana değişken yazdırabilir miyiz?