u8glib, birçok işlemci ve ekran için (SSD1325, ST7565, ST7920, UC1608, UC1610, UC1701, PCD8544, PCF8812, KS0108,LC7981, SBN1661, SSD1306, SH1106, T6963, LD7032) hazırlanmış bir kütüphane. Sağolsun Coşkun ERGAN sayasinde böyle bir kütüphanenin olduğunu öğrendim. STM32 ile çalışıyorum, kütüphaneyi elimdeki KS0108 işlemcili agb12864 ekrana uyguladım. Bu uygulamayı aslında başladığım bir güç kaynağı projesi için geliştiriyordum, o proje olmadı bende tekrar bu kütüphaneyi öğrenmek için geri masaya aldım.
U8Glibin ARM için olan versiyonunun https://bintray.com/olikraus/u8glib/ARM buradan indirebilirsiniz. Gelelim uygulamaya,
u8g_arm.h dosyasından işlemcinin pinlerinin lcd nin pinlerine bağlantısını ayarlıyoruz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// Lcd Pinlerinin Set/Reset Tanimlamalari #define LCD_A0 GPIO_Pin_8 //RESET #define LCD_A0_PORT GPIOD #define LCD_E GPIO_Pin_10 // #define LCD_E_PORT GPIOD #define LCD_RW GPIO_Pin_9 #define LCD_RW_PORT GPIOD #define LCD_RESET GPIO_Pin_13 //RS #define LCD_RESET_PORT GPIOD #define LCD_CS1 GPIO_Pin_12 #define LCD_CS1_PORT GPIOD #define LCD_CS2 GPIO_Pin_11 #define LCD_CS2_PORT GPIOD #define LCD_8BIT_PORT GPIOE #define LCD_BIT_START 0 |
daha sonra aşağıdaki kodlarla main dosyamızı yazıyoruz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
#include "stm32f4xx.h" #include "stm32f4xx_gpio.h" #include "stm32f4xx_rcc.h" #include "u8g.h" #include "u8g_arm.h" u8g_t u8g; //GPIO INIT void Config_GPIO(){ // GPIO_InitTypeDef GPIO_InitStructure; /* GPIO clock Configuration */ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD| RCC_AHB1Periph_GPIOE, ENABLE); /* GPIO Pin Configuration */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All; // GLCD port out yapiliyor GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(GPIOD, &GPIO_InitStructure); GPIO_Init(GPIOE, &GPIO_InitStructure); } int main(void) { SystemInit();//168mhz Config_GPIO();//porte ve portd çıkış 100mhz u8g_InitComFn(&u8g, &u8g_dev_ks0108_128x64_fast, u8g_com_sw_spi_fn); //sistemimize bağlı olan glcd nin tipni belirtip kütüphaneyi başlatıyoruz. for(;;) { /* picture loop */ u8g_FirstPage(&u8g); do{ /*https://code.google.com/p/u8glib/wiki/userreference#drawCircle*/ u8g_DrawBox(&u8g,110,50,8,4);//içi dolu dikdörtgen çizer u8g_DrawCircle(&u8g,110,10,5,U8G_DRAW_ALL); /*daire çizer son parametre aşağıdakileri alabilir. U8G_DRAW_UPPER_RIGHT U8G_DRAW_UPPER_LEFT U8G_DRAW_LOWER_LEFT U8G_DRAW_LOWER_RIGHT U8G_DRAW_ALL*/ u8g_DrawFrame(&u8g,0,0,128,64);//Çerçeve çizer u8g_SetFont(&u8g, u8g_font_unifont);//Font Seçer, /* * Orjinal font dosyasında Çok fazla Font var, LTO ve optimizasyon yapılmazsa devasa olan Stm32f407 nin hafızasına sığmıyor. * LTO yapıldığında her derleme esnasında epey uzun bekleniyor. Bundan dolayı ben sadece u8g_font_unifont kullandım, * diğerlerini yukarda adını verdiğim dosyadan sildm. * * */ u8g_DrawStr(&u8g, 1, 12, "Kaplan!");//Belirtilen Adresten Başlayarak Yazar u8g_DrawStr180(&u8g,70, 30, "Kaplan!");//180der. Döndürerek yazar } while ( u8g_NextPage(&u8g) ); /* refresh screen after some delay */ u8g_Delay(1000); /* update position */ } } |
Çalışan proje dosyası için tıklayınız.