티스토리 뷰
728x90
본 체험 제품은 element14 의 후원을 받아 아이씨뱅큐㈜ 에서 진행하는 무상 체험단 활동으로 작성한 것입니다.
출처 : ssd1331 - SSD1331 Oled driver library for 96x64 colour Oled display. Demo included in .h file | Mbed
micro:bit - OLED Display SSD1331 제어
micro:bit로 oled 모듈인 ssd1331 제어하는 예제를 C++로 만들어 보았습니다. 라이브러리 소스(출처 : ssd1331 - SSD1331 Oled driver library for 96x64 colour Oled display. Demo included in .h file | Mbed)를 받아서 사용했습니다.
소스 - ssd1331.h
라이브러리 소스 파일 - ssd1331_lib.zip
#ifndef __ssd1331_H__ #define __ssd1331_H__ #include "mbed.h" // Screen Settings #define width 96-1 // Max X axial direction in screen #define height 64-1 // Max Y axial direction in screen #define Set_Column_Address 0x15 #define Set_Row_Address 0x75 #define contrastA 0x81 #define contrastB 0x82 #define contrastC 0x83 #define display_on 0xAF #define display_off 0xAE // Internal Font size settings #define NORMAL 0 #define WIDE 1 #define HIGH 2 #define WH 3 #define WHx36 4 #define X_width 6 #define Y_height 8 // GAC hardware acceleration commands #define GAC_DRAW_LINE 0x21 // Draw Line #define GAC_DRAW_RECTANGLE 0x22 // Rectangle #define GAC_COPY_AREA 0x23 // Copy Area #define GAC_DIM_WINDOW 0x24 // Dim Window #define GAC_CLEAR_WINDOW 0x25 // Clear Window #define GAC_FILL_ENABLE_DISABLE 0x26 // Enable Fill #define SCROLL_SETUP 0x27 // Setup scroll #define SCROLL_STOP 0x2E // Scroll Stop #define SCROLL_START 0x2F // Scroll Start // Basic RGB color definitions RED GREEN BLUE values #define Black 0x0000 // 0, 0, 0 #define LightGrey 0xC618 // 192, 192, 192 #define DarkGrey 0x7BEF // 128, 128, 128 #define Red 0xF800 // 255, 0, 0 #define Green 0x07E0 // 0, 255, 0 #define Cyan 0x07FF // 0, 255, 255 #define Blue 0x001F // 0, 0, 255 #define Magenta 0xF81F // 255, 0, 255 #define Yellow 0xFFE0 // 255, 255, 0 #define White 0xFFFF // 255, 255, 255 class ssd1331 : public Stream { public: // constructor ssd1331(PinName cs_pin, PinName rst_pin, PinName a0_pin, PinName mosi_pin, PinName miso_pin, PinName sclk_pin); void Init(void); void pixel(uint8_t x,uint8_t y, uint16_t color); // place a pixel x,y coordinates, color void rect(uint8_t x1,uint8_t y1,uint8_t x2,uint8_t y2,uint16_t colorline); // draw rectangle, start x,y end x,y, color void fillrect(uint8_t x1,uint8_t y1,uint8_t x2,uint8_t y2,uint16_t colorline,uint16_t colorfill); // fill rectangle start x,y, end x,y, outline color, fill color. void line(uint8_t x1,uint8_t y1,uint8_t x2,uint8_t y2,uint16_t color); // draw line start x,y, end x,y, color void circle (uint8_t radius, uint8_t x, uint8_t y,uint16_t color,uint16_t fill); // draw circle radius, position x,y, color void Fill_Screen(uint16_t color); // fill screen with any colour void foreground(uint16_t color); // set text color void background(uint16_t color); // set background color void SetFontSize(uint8_t); // set internal font size NORMAL, HIGH, WIDE, WH (high and wide), WHx36 (large 36x36 pixel size) void on(); // display on void off(); // display off void cls(); // clear screen to black screen void dim(); // flip dim/normal on each call void contrast(char value); //0~9 low~high void locate(uint8_t column, uint8_t row); // text start position x,y uint16_t toRGB(uint16_t R,uint16_t G,uint16_t B); // get color from RGB values 00~FF(0~255) uint8_t row(); // set row position (in pixels) uint8_t column(); // set column position (in pixels) void ScrollSet(int8_t horizontal, int8_t startline, int8_t linecount, int8_t vertical , int8_t frame_interval); // set up scroll function void Scrollstart(); // start scrolling void Scrollstop(); // stop scrolling void Copy(uint8_t src_x1,uint8_t src_y1,uint8_t src_x2,uint8_t src_y2, uint8_t dst_x,uint8_t dst_y); // GAC function to copy/paste area on the screen void character(uint8_t x, uint8_t y, uint16_t c); // Print single character, x & y pixel co-ords. void set_font(unsigned char* f); // set external font. Use oled.set_font(NULL) to restore default font void Bitmap(const uint8_t *bitmap, uint8_t x, uint8_t y, uint8_t w, uint8_t h, unsigned char color); // load mono bitmap from flash void Bitmap16(uint8_t x, uint8_t y, uint8_t w, uint8_t h, const uint8_t *bitmap); // load bitmap from flash int Bitmap16RAM(uint8_t x, uint8_t y, unsigned char *Name_BMP); // copy image to RAM, uses up to 12.288k RAM, Fast but need plenty of RAM int Bitmap16FS(uint8_t x, uint8_t y, unsigned char *Name_BMP); // load from fielsystem, uses 96b RAM, slower, will work on any MCU // use GIMP to generate images, open image, select image-scale image, set width/height(max 96x64), select File-Export As // select Windows BMP image, Name it with .BMP extension, select export, select Compatability Options- check 'Do Not write colour space' // select Advanced Options- check '16bit R5 G6 B5', select export. Copy the file to a SD card or to the local file system. // image maximum size 96x64, smaller images can be placed anywhere on screen setting x,y co-ords but must fit within boundaries // example: // oled.Bitmap16FS(0,0,(unsigned char *)"/sd/image.bmp"); full size 96x64 image // oled.Bitmap16RAM(20,20,(unsigned char *)"/sd/image.bmp"); place smaller image starting x-20, y-20 protected: // Stream implementation functions virtual int _putc(int c); virtual int _getc(); private: void RegWrite(unsigned char Command); void RegWriteM(unsigned char *Command, uint8_t count); void DataWrite(unsigned char c); void DataWrite_to(uint16_t Dat); void FontSizeConvert(int *lpx, int *lpy); void PutChar(uint8_t x,uint8_t y,int a); void PutCharInt(uint8_t x,uint8_t y,uint16_t a); void putp(int colour); unsigned char* font; uint16_t Char_Color; // text color uint16_t BGround_Color; // background color void window(uint8_t x, uint8_t y, uint8_t w, uint8_t h); void Maxwindow(); // reset display window to full size // pixel location uint8_t _x; uint8_t _y; // window location uint8_t _x1; uint8_t _x2; uint8_t _y1; uint8_t _y2; uint8_t char_x; uint8_t char_y; uint8_t chr_size; uint8_t cwidth; // character's width uint8_t cvert; // character's height uint8_t externalfont; DigitalOut CS, RES, DC; SPI spi; // mosi, miso, sclk }; #endif
소스 - main.cpp
#include "MicroBit.h" #include "ssd1331.h" MicroBit uBit; // ssd1331(PinName cs_pin, PinName rst_pin, PinName a0_pin, PinName mosi_pin, PinName miso_pin, PinName sclk_pin); ssd1331 oled(P0_16, P0_26, P0_20, P0_21, P0_22, P0_23); // cs, res, dc, miso(nc), sck (KL25z) char Time[50],Date[50]; void gettime(); int main() { uBit.init(); uBit.display.scroll("ssd1331"); while(1){ oled.Fill_Screen(oled.toRGB(255,0,0)); //red wait_ms(500); oled.Fill_Screen(oled.toRGB(0,255,0)); //green wait_ms(500); oled.Fill_Screen(oled.toRGB(0,0,255)); //blue wait_ms(500); oled.Fill_Screen(oled.toRGB(255,255,255)); //white wait_ms(500); oled.cls(); // clear screen to black oled.circle (20, 40, 30 ,oled.toRGB(0,0,255) , 1); //fill circle oled.circle (20, 40, 30 ,oled.toRGB(255,255,255) , 0); //circle oled.circle (20, 60, 40 ,oled.toRGB(255,0,0) , 0); //circle oled.line( 0, 0, width, height, oled.toRGB(0,255,255)); //line oled.line( width, 0, 0, height, oled.toRGB(255,0,255)); //line oled.rect(10,10,90,60,oled.toRGB(255,255,0)); //rectangle oled.fillrect(20,20,40,40,oled.toRGB(255,255,255),oled.toRGB(0,255,0)); //fillrectangle for(int y = 9; y >= 0; y--) { oled.contrast(y); // set contrast level oled.foreground(oled.toRGB(255,255,255)); // set text colour oled.locate(1, 10); // set text start location oled.printf("%d",y); // std printf wait_ms(300); } wait_ms(1000); oled.contrast(9); // set contrast to maximum wait_ms(2000); oled.cls(); oled.SetFontSize(HIGH); // set tall font oled.foreground(oled.toRGB(0,255,0)); // set text colour oled.locate(0, 10); oled.printf( "HIGH 12345"); oled.SetFontSize(WIDE); // set text to wide oled.foreground(oled.toRGB(0,0,255)); oled.locate(0, 28); oled.printf( "WIDE 123"); oled.SetFontSize(WH); // set text to wide and tall oled.foreground(oled.toRGB(255,0,0)); oled.locate(0, 40); oled.printf( "WH 123"); oled.SetFontSize(NORMAL); // set text to normal oled.foreground(oled.toRGB(255,255,255)); oled.ScrollSet(0,8,18,1,0); // set scroll function oled.Scrollstart(); // start scroll gettime();wait(1);gettime();wait(1);gettime();wait(1); oled.ScrollSet(0,8,18,-2,0); oled.Scrollstart(); gettime();wait(1);gettime();wait(1);gettime();wait(1); oled.ScrollSet(0,8,18,3,0); oled.Scrollstart(); gettime();wait(1);gettime();wait(1);gettime();wait(1); oled.ScrollSet(0,8,18,-4,0); oled.Scrollstart(); gettime();wait(1);gettime();wait(1);gettime();wait(1); oled.Scrollstop(); // stop scroll wait(1); } uBit.display.scroll("bye"); release_fiber(); } void gettime() { time_t seconds = uBit.systemTime(); strftime(Time,40,"%H:%M:%S %a", localtime(&seconds)); strftime(Date,40,"%d-%b-%Y", localtime(&seconds)); oled.locate(0, 0); oled.printf(Time); }
실행
마이크로비트 공식 구입처 : 아이씨뱅큐 http://www.icbanq.com/
엘리먼트14의 특장점 - 글로벌 전자부품 유통회사, 6만원 이상 무료배송, 60만가지 재고 보유, MOQ 없음, 한글 웹사이트, 국내서비스센터 운영 (http://kr.element14.com/?CMP=DSP-ODB-KR-JAN2018-BLOG-ICBanQ1-HOMEPAGE)
마이크로비트 공식 카페 : http://cafe.naver.com/bbcmicro
아이씨뱅큐 공식 블로그 : http://blog.naver.com/icbanq
댓글
300x250
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- NDK
- 레이싱모델 익스트림 포토 페스티벌
- Xcode
- Linux
- SAS
- oracle
- Delphi Tip
- JavaScript
- android
- koba2010
- Spring
- 지스타2007
- flex
- 동경
- BPI-M4
- Delphi
- Java
- MySQL
- 송주경
- ubuntu
- Mac
- 일본여행
- 튜닝쇼 2008
- Spring MVC
- KOBA
- ble
- sas2009
- 서울오토살롱
- 전예희
- ffmpeg
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함