Picproje Elektronik Sitesi

DERLEYİCİLER => Diğer Derleyiciler => KEIL => Konuyu başlatan: Elektroemre - 23 Aralık 2013, 12:07:53

Başlık: STM32 C++ LCD Örneği
Gönderen: Elektroemre - 23 Aralık 2013, 12:07:53
Merhaba arkadaşlar,


Düzgün yazılmış bir lcd driverı değildir.
Maksat C++ ile Keil'de bir proje derlemiş olmak.
"C++ ile yazdım abi çok havalı oldu"  :)

Derlemeye hazır keil projemiz;
http://www.4shared.com/rar/8J4O2-qU/LCD.html (http://www.4shared.com/rar/8J4O2-qU/LCD.html)


Main.cpp kısaca;
BasicLCD Lcd(GPIOB,11,   // LCD EN
             GPIOB,10,   // LCD RS
             GPIOB,12,13,14,15); // LCD DATA


int main(void)
{
GPIO_Configuration();

Lcd.Init();
Lcd.Write(" STM32 ile C++  ");
Lcd.Write(2,2,"Havamiz olsun!  ");

for(;;);

}


Basic Lcd Class'ımız;
class BasicLCD
{

GPIO_TypeDef* EnPort;
uint16_t EnPin;

GPIO_TypeDef* RsPort;
uint16_t RsPin;

GPIO_TypeDef* DtPort;
uint16_t DtPins[4];



public:
BasicLCD(GPIO_TypeDef* enPort,uint16_t enPin,
GPIO_TypeDef* rsPort,uint16_t rsPin,
GPIO_TypeDef* dtPort,uint16_t dtPin0,uint16_t dtPin1,uint16_t dtPin2,uint16_t dtPin3);
  void Init(void);
  void Write(const char * s);
  void Write(uint8_t x, uint8_t y,const char * s);
  void Clear(void);
  void GotoXY(uint8_t x, uint8_t y);

private:
  void WrData(uint8_t c);
  void WrCmd(uint8_t c);
  void WrByte(uint8_t c);
  void DelayMs(uint16_t dly);
  void Busy(void);


};





(http://u1312.hizliresim.com/1j/r/vtj4c.jpg)
Başlık: Ynt: STM32 C++ LCD Örneği
Gönderen: M_B - 12 Temmuz 2017, 00:17:03
@Elektroemre hocam;
konuyu yeniden hortlatmış oldum.
hocam kodlar elinizde duruyor mu ?  incelemek istiyorumda.

Başlık: Ynt: STM32 C++ LCD Örneği
Gönderen: Emre_Tuncay_ - 12 Temmuz 2017, 13:41:13
Daha önceden basit bir LCD uygulaması yazmıştım.Kullanmak üzere genel bir fonksiyon yazmaya çalışmıştım ama birden fazla fonksiyon olacak şekilde oldu.

////////////////////////////////////////////////////
/////////////////EMRE TUNÇAY////////////////////////
////////////////LCD UYGULAMASI//////////////////////
////////////////////////////////////////////////////
#include "stm32f10x.h"
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#define sagakaydir 0x06
#define AYAR1 60
#define AYAR2 14
#define AYAR3 1
#define AYAR4 6
int i=0,j=0;
int delay(uint32_t time)
{
while(time)
time--;
}
int GPIO_AYAR()
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitStructure.GPIO_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_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 ;
GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);

}
int lcd_komut_yukle(uint8_t komut)
{
GPIOA->ODR = komut;
GPIO_ResetBits(GPIOA , GPIO_Pin_10 | GPIO_Pin_9);
GPIO_SetBits(GPIOA , GPIO_Pin_8);
delay(1000000);
GPIO_ResetBits(GPIOA , GPIO_Pin_8);
}
int lcd_clear(void)
{
lcd_komut_yukle(1);
}
void lcd_yaz(char veri)
{
GPIOA->ODR = veri;
GPIO_SetBits(GPIOA , GPIO_Pin_10);
delay(1000);
GPIO_ResetBits(GPIOA , GPIO_Pin_9);
delay(1000);
GPIO_SetBits(GPIOA , GPIO_Pin_8);
delay(1000);
GPIO_ResetBits(GPIOA , GPIO_Pin_8);
}
void lcd_kelime_yazdir(char  kelime[])
{
for (j = strlen(kelime); j>0; j--)
{
lcd_yaz(kelime[strlen(kelime)-j]);
lcd_komut_yukle(sagakaydir);
}
}
void lcd_degisken_yazdir(int deger)
{
char str[100];
sprintf(str, "%d", deger);
lcd_kelime_yazdir(str);
}
int main(void)
{
int i=0;
GPIO_AYAR();
lcd_komut_yukle(AYAR1);
delay(1000);
lcd_komut_yukle(AYAR2);
delay(1000);
lcd_komut_yukle(AYAR3);
delay(1000);
lcd_komut_yukle(AYAR4);
delay(1000);
//lcd_kelime_yazdir("*EMRE TUNCAY*");
//sprintf(str, "%d", i);
//lcd_kelime_yazdir(str);
lcd_degisken_yazdir(i);
lcd_degisken_yazdir(521);

}



Kodlara Yüklediğim ayarlar var yanlarına açıklama yazmamışım.https://www.sparkfun.com/datasheets/LCD/ADM1602K-NSW-FBS-3.3v.pdf
Bu linken yüklenmesi gereken ayarlara bakarsın.Anlamadığın yer olursa açıklamaya çalışırım.
Başlık: Ynt: STM32 C++ LCD Örneği
Gönderen: Emre_Tuncay_ - 12 Temmuz 2017, 13:48:53
Bu arada A portunun 0 dan 7 ye kadar olan çıkışları LCD'nin D0 dan D7 ye kadar olan girişlerine sırasıyla bağlanacak.LCD nin RS,RW,E bacakları  ise şu şekilde.
RS=GPIOA_10
RW=GPIOA_9
Enable=GPIOA_8
Başlık: Ynt: STM32 C++ LCD Örneği
Gönderen: Elektroemre - 13 Temmuz 2017, 13:08:56
Alıntı yapılan: M_B - 12 Temmuz 2017, 00:17:03
@Elektroemre hocam;
konuyu yeniden hortlatmış oldum.
hocam kodlar elinizde duruyor mu ?  incelemek istiyorumda.

Hocam senin için kritik olan C++ örneği olmasımı? LCD driver olmasımı?
Başlık: Ynt: STM32 C++ LCD Örneği
Gönderen: M_B - 13 Temmuz 2017, 14:40:22
Hocam c++ olması
Başlık: Ynt: STM32 C++ LCD Örneği
Gönderen: OptimusPrime - 14 Temmuz 2017, 21:31:53
@M_B

neden c++ istiyorsun. maksat ogrenmek mi yoksa baska bir dusuncenmi var?
Başlık: Ynt: STM32 C++ LCD Örneği
Gönderen: M_B - 15 Temmuz 2017, 00:05:53
Alıntı yapılan: OptimusPrime - 14 Temmuz 2017, 21:31:53
@M_B

neden c++ istiyorsun. maksat ogrenmek mi yoksa baska bir dusuncenmi var?
Öğrenmek için.
Başlık: Ynt: STM32 C++ LCD Örneği
Gönderen: yamak - 15 Temmuz 2017, 12:28:41
Hocam mümkünse herkes büyük projelerde c++ kullansın. Rahatlığını göreceksiniz.