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)
@Elektroemre hocam;
konuyu yeniden hortlatmış oldum.
hocam kodlar elinizde duruyor mu ? incelemek istiyorumda.
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.
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
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ı?
Hocam c++ olması
@M_Bneden c++ istiyorsun. maksat ogrenmek mi yoksa baska bir dusuncenmi var?
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.
Hocam mümkünse herkes büyük projelerde c++ kullansın. Rahatlığını göreceksiniz.