Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: drive drive1 drive213 drive123213
SSD1327.cpp
00001 #include "mbed.h" 00002 #include "SSD1327.h" 00003 00004 /// 96x96 pixel SSD1327 SeeedStudio 1.12" OLED display 00005 /// http://www.displayfuture.com/Display/datasheet/controller/SSD1327.pdf 00006 /// based on https://github.com/blitz/mbed-arch-pro 00007 00008 // font info 00009 int font_w; 00010 int font_h; 00011 int font_bpc; //bytes per char width 00012 uint8_t *font_s; 00013 00014 unsigned char currR, currC; 00015 00016 unsigned char grayH; 00017 unsigned char grayL; 00018 00019 00020 bool SSD1327::send(char mode, const char data[], size_t len) 00021 { 00022 for (size_t c = 0; c < len; c++) { 00023 const char snd[2]= { mode, data[c] }; 00024 if (i2c.write(address, snd, sizeof(snd)) != 0) 00025 return false; 00026 } 00027 00028 return true; 00029 } 00030 00031 /*bool SSD1327::sendf(char mode, char data[], size_t len) 00032 { 00033 for (size_t c = 0; c < len; c++) { 00034 const char snd[2]= { mode, data[c] }; 00035 if (i2c.write(address, snd, sizeof(snd)) != 0) 00036 return false; 00037 } 00038 00039 return true; 00040 } */ 00041 00042 bool SSD1327::sendx(char mode, char data[], size_t len) 00043 { 00044 char snd[52]; 00045 snd[0]=mode; 00046 for (char c=0;c<len;c++) snd[c+1]=data[c]; 00047 if (i2c.write(address, snd, len+1) != 0) 00048 return false; 00049 return true; 00050 } 00051 00052 void SSD1327::tribyte_cmd(uint8_t a, uint8_t b, uint8_t c) 00053 { 00054 char data[] = { a, b, c }; 00055 send(cmd_mode, data, sizeof(data)); 00056 00057 } 00058 00059 void SSD1327::set_column_address(uint8_t start, uint8_t end) 00060 { 00061 tribyte_cmd(0x15, start, end); 00062 } 00063 00064 void SSD1327::set_row_address(uint8_t start, uint8_t end) 00065 { 00066 tribyte_cmd(0x75, start, end); 00067 } 00068 00069 void SSD1327::set_gray_level(unsigned char level) 00070 { 00071 grayL = level & 0x0F; 00072 grayH = grayL<<4; 00073 } 00074 00075 void SSD1327::set_text_rc(unsigned char row, unsigned char column) 00076 { 00077 currR=row; 00078 currC=column; 00079 set_column_address(8+column*font_w/2,8+column*font_w/2+font_w/2-1); 00080 set_row_address(0x00+(row*font_h),0x00+(row*font_h+(font_h-1))); 00081 } 00082 00083 void SSD1327::set_rc(unsigned char row, unsigned char column) 00084 { 00085 if (row>PIXELS) row=PIXELS; 00086 if (column>PIXELS) column=PIXELS; 00087 currR=row; 00088 currC=column/2; 00089 set_column_address(8+column/2,8+column/2+font_w/2-1); 00090 set_row_address(row,row+(font_h-1)); 00091 } 00092 00093 void SSD1327::putc(unsigned char C) 00094 { 00095 uint8_t line; 00096 uint8_t *pchar; 00097 char cc=0; 00098 char out[50]; 00099 00100 if(C < 32 || C > 127) //Ignore non-printable ASCII characters. This can be modified for multilingual font. 00101 { 00102 C=' '; //Space 00103 } 00104 00105 pchar=font_s+((C-32)*font_h*font_bpc); 00106 00107 for (char i = 0; i < font_h; i++) { 00108 char outcc=0; 00109 for (char j=0; j<font_bpc; j++) { 00110 line=pchar[cc++]; 00111 for (char k=0; k<4;k++) { 00112 char c=0x00; 00113 char bit1=line & 0x80; line<<=1; 00114 char bit2=line & 0x80; line<<=1; 00115 c|=(bit1)?grayH:0x00; 00116 c|=(bit2)?grayL:0x00; 00117 out[outcc++]=c; 00118 } 00119 } 00120 sendx(data_mode,out,font_bpc*4); 00121 } 00122 set_text_rc(currR,currC+1); 00123 } 00124 00125 void SSD1327::puts(const char *str) 00126 { 00127 unsigned char i=0; 00128 while(str[i]) 00129 { 00130 putc(str[i]); 00131 i++; 00132 } 00133 } 00134 00135 void SSD1327::set_font(const uint8_t *Font, int width, int height) { 00136 font_s= (uint8_t *) Font; 00137 font_h=height; 00138 font_w=width; 00139 font_bpc=width/8; 00140 } 00141 00142 00143 00144 void SSD1327::clear() 00145 { 00146 char empty[48]={0}; 00147 set_column_address(8, 8 + PIXELS/2 - 1); 00148 set_row_address (0, PIXELS - 1); 00149 for (char j=0;j<96;j++) sendx(data_mode, empty, sizeof(empty)); 00150 } 00151 00152 SSD1327::SSD1327(I2C &i2c) 00153 : i2c(i2c) 00154 { 00155 // Init gray level for text. Default:Brightest White 00156 grayH= 0xF0; 00157 grayL= 0x0F; 00158 00159 static const char init[] = { 0xFD, 0x12, 0xAE, 0xA8, 0x5F, 0xA1, 00160 0x00, 0xA2, 0x60, 0xA0, 0x46, 0xAB, 00161 0x01, 0x81, 0x53, 0xB1, 0x51, 0xB3, 00162 0x01, 0xB9, 0xBC, 0x08, 0xBE, 0x07, 00163 0xB6, 0x01, 0xD5, 0x62, 0xA4, 0x2E, 00164 0xAF }; 00165 00166 if (not send(cmd_mode, init, sizeof(init))) { 00167 // pc.printf("SSD1327 init failed.\n"); 00168 } 00169 00170 wait_ms(100); 00171 00172 static const char init2[] = { 0xA0, 0x42, 00173 0x15, 0x08, 0x37, 0x75, 0x00, 0x5f }; 00174 00175 if (not send(cmd_mode, init2, sizeof(init2))) { 00176 // pc.printf("SSD1327 init2 failed.\n"); 00177 } 00178 // pc.printf("SSD1327 initialized.\n"); 00179 clear(); 00180 } 00181 00182 // EOF
Generated on Wed Jul 13 2022 15:02:31 by
