NucleoF446 re + SSD1331 simple Library

Dependents:   Nucleo_446 Nucleo446_SSD1331

Committer:
kadonotakashi
Date:
Thu Oct 11 01:58:04 2018 +0000
Revision:
0:9442efe129e7
Child:
1:85198abc3103
success to Initilize SSD1331

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kadonotakashi 0:9442efe129e7 1
kadonotakashi 0:9442efe129e7 2 #include "ssd1331.h"
kadonotakashi 0:9442efe129e7 3 #include "mbed.h"
kadonotakashi 0:9442efe129e7 4
kadonotakashi 0:9442efe129e7 5
kadonotakashi 0:9442efe129e7 6
kadonotakashi 0:9442efe129e7 7 /*
kadonotakashi 0:9442efe129e7 8 private function
kadonotakashi 0:9442efe129e7 9 */
kadonotakashi 0:9442efe129e7 10
kadonotakashi 0:9442efe129e7 11 void ssd1331::DataWr(uint8_t data) {
kadonotakashi 0:9442efe129e7 12 _dc=1;
kadonotakashi 0:9442efe129e7 13 _cs=0;
kadonotakashi 0:9442efe129e7 14 _spi.write(data);
kadonotakashi 0:9442efe129e7 15 _cs=1;
kadonotakashi 0:9442efe129e7 16 }
kadonotakashi 0:9442efe129e7 17
kadonotakashi 0:9442efe129e7 18 void ssd1331::CmdWr(uint8_t Cmd) {
kadonotakashi 0:9442efe129e7 19 _dc=0;
kadonotakashi 0:9442efe129e7 20 _cs=0;
kadonotakashi 0:9442efe129e7 21 _spi.write(Cmd);
kadonotakashi 0:9442efe129e7 22 _cs=1;
kadonotakashi 0:9442efe129e7 23 }
kadonotakashi 0:9442efe129e7 24
kadonotakashi 0:9442efe129e7 25 ssd1331::ssd1331(PinName mosi,PinName miso,PinName sclk,PinName cs,PinName dc,PinName reset)
kadonotakashi 0:9442efe129e7 26 : _spi(mosi,miso,sclk),_cs(cs),_dc(dc),_rst(reset)
kadonotakashi 0:9442efe129e7 27 {
kadonotakashi 0:9442efe129e7 28 _spi.format(8,3);
kadonotakashi 0:9442efe129e7 29 _spi.frequency(500000);
kadonotakashi 0:9442efe129e7 30 _cs =1;
kadonotakashi 0:9442efe129e7 31 _dc =1;
kadonotakashi 0:9442efe129e7 32 _rst =0;
kadonotakashi 0:9442efe129e7 33
kadonotakashi 0:9442efe129e7 34 FntList[7].pFnt=(GFXfont *)0;
kadonotakashi 0:9442efe129e7 35 FntList[6].pFnt=(GFXfont *)0;
kadonotakashi 0:9442efe129e7 36 FntList[5].pFnt=(GFXfont *)0;
kadonotakashi 0:9442efe129e7 37 FntList[4].pFnt=(GFXfont *)0;
kadonotakashi 0:9442efe129e7 38 FntList[3].pFnt=(GFXfont *)0;
kadonotakashi 0:9442efe129e7 39 FntList[2].pFnt=(GFXfont *)0;
kadonotakashi 0:9442efe129e7 40 FntList[1].pFnt=(GFXfont *)0;
kadonotakashi 0:9442efe129e7 41
kadonotakashi 0:9442efe129e7 42 FntList[0].pFnt=(GFXfont *)&FreeMonoBold9pt7b;
kadonotakashi 0:9442efe129e7 43 strcpy(FntList[0].FontName,"MonoBold9pt7b\0");
kadonotakashi 0:9442efe129e7 44 }
kadonotakashi 0:9442efe129e7 45
kadonotakashi 0:9442efe129e7 46
kadonotakashi 0:9442efe129e7 47
kadonotakashi 0:9442efe129e7 48 void ssd1331::Initssd1331()
kadonotakashi 0:9442efe129e7 49 {
kadonotakashi 0:9442efe129e7 50 _cs =1;
kadonotakashi 0:9442efe129e7 51 _dc =1;
kadonotakashi 0:9442efe129e7 52 _rst =0;
kadonotakashi 0:9442efe129e7 53
kadonotakashi 0:9442efe129e7 54 wait_ms(100);
kadonotakashi 0:9442efe129e7 55 _rst =1;
kadonotakashi 0:9442efe129e7 56 wait_ms(1);
kadonotakashi 0:9442efe129e7 57
kadonotakashi 0:9442efe129e7 58 CmdWr(SSD1331_CMD_SetDspOff);
kadonotakashi 0:9442efe129e7 59 CmdWr(SSD1331_CMD_SetRemap_DataFormat); CmdWr(0x72); //A[7:6] = 00; 256 color. A[7:6] = 01; 65k color format
kadonotakashi 0:9442efe129e7 60 CmdWr(SSD1331_CMD_SetDspStrtLine); CmdWr(0x0); //
kadonotakashi 0:9442efe129e7 61 CmdWr(SSD1331_CMD_SetDspOffset); CmdWr(0x0); //
kadonotakashi 0:9442efe129e7 62 CmdWr(SSD1331_CMD_SetDspModeNorm);
kadonotakashi 0:9442efe129e7 63 CmdWr(SSD1331_CMD_SetMltplRatio); CmdWr(63); //
kadonotakashi 0:9442efe129e7 64 CmdWr(SSD1331_CMD_SetMstrCnfg); CmdWr(0x8e); //
kadonotakashi 0:9442efe129e7 65 CmdWr(SSD1331_CMD_PowerSave); CmdWr(0x1A); //
kadonotakashi 0:9442efe129e7 66 CmdWr(SSD1331_CMD_P1_P2_ADJ); CmdWr(0x74); //
kadonotakashi 0:9442efe129e7 67 CmdWr(SSD1331_CMD_SetDispCLK); CmdWr(0xf0); //
kadonotakashi 0:9442efe129e7 68 CmdWr(SSD1331_CMD_SetChrgA); CmdWr(0x81); //
kadonotakashi 0:9442efe129e7 69 CmdWr(SSD1331_CMD_SetChrgB); CmdWr(0x82); //
kadonotakashi 0:9442efe129e7 70 CmdWr(SSD1331_CMD_SetChrgC); CmdWr(0x83); //
kadonotakashi 0:9442efe129e7 71 CmdWr(SSD1331_CMD_SetPrChrgV); CmdWr(0x3A); //
kadonotakashi 0:9442efe129e7 72 CmdWr(SSD1331_CMD_SetVcomhV); CmdWr(0x3E); //
kadonotakashi 0:9442efe129e7 73 CmdWr(SSD1331_CMD_SetMstrCrrnt); CmdWr(0x06); //
kadonotakashi 0:9442efe129e7 74 CmdWr(SSD1331_CMD_SetClmAddr); CmdWr(0); CmdWr(95); //
kadonotakashi 0:9442efe129e7 75 CmdWr(SSD1331_CMD_SetRawAddr); CmdWr(0); CmdWr(63); //
kadonotakashi 0:9442efe129e7 76 CmdWr(SSD1331_CMD_SetCntrstA); CmdWr(0xff); //
kadonotakashi 0:9442efe129e7 77 CmdWr(SSD1331_CMD_SetCntrstB); CmdWr(0xff); //
kadonotakashi 0:9442efe129e7 78 CmdWr(SSD1331_CMD_SetCntrstC); CmdWr(0xfF); //
kadonotakashi 0:9442efe129e7 79
kadonotakashi 0:9442efe129e7 80 CmdWr(SSD1331_CMD_SetDspOn); //
kadonotakashi 0:9442efe129e7 81 wait_ms(100);
kadonotakashi 0:9442efe129e7 82 }
kadonotakashi 0:9442efe129e7 83
kadonotakashi 0:9442efe129e7 84 void ssd1331::ClearScreen()
kadonotakashi 0:9442efe129e7 85 {
kadonotakashi 0:9442efe129e7 86
kadonotakashi 0:9442efe129e7 87 wait_ms(1); //クリアーコマンドは400μs 以上の休止期間が必要かも
kadonotakashi 0:9442efe129e7 88
kadonotakashi 0:9442efe129e7 89 CmdWr(SSD1331_CMD_ClearWindow);
kadonotakashi 0:9442efe129e7 90 CmdWr(0); //X始点
kadonotakashi 0:9442efe129e7 91 CmdWr(0); //Y始点
kadonotakashi 0:9442efe129e7 92 CmdWr(WIDTH_1331-1); //X終点
kadonotakashi 0:9442efe129e7 93 CmdWr(HEIGHT_1331-1); //Y終点
kadonotakashi 0:9442efe129e7 94
kadonotakashi 0:9442efe129e7 95 wait_ms(1); //クリアーコマンドは400μs 以上の休止期間が必要かも
kadonotakashi 0:9442efe129e7 96 }
kadonotakashi 0:9442efe129e7 97
kadonotakashi 0:9442efe129e7 98
kadonotakashi 0:9442efe129e7 99 void ssd1331::DrawPix( uint16_t x,
kadonotakashi 0:9442efe129e7 100 uint16_t y,
kadonotakashi 0:9442efe129e7 101 uint16_t color )
kadonotakashi 0:9442efe129e7 102 {
kadonotakashi 0:9442efe129e7 103 if(x>=WIDTH_1331-1){ return ; }
kadonotakashi 0:9442efe129e7 104 if(y>=HEIGHT_1331-1){ return ; }
kadonotakashi 0:9442efe129e7 105
kadonotakashi 0:9442efe129e7 106 CmdWr(SSD1331_CMD_SetClmAddr); CmdWr(x); CmdWr(x);
kadonotakashi 0:9442efe129e7 107 CmdWr(SSD1331_CMD_SetRawAddr); CmdWr(y); CmdWr(y);
kadonotakashi 0:9442efe129e7 108 DataWr( 0xff & (color>>8) ); DataWr( 0xff & (color) );
kadonotakashi 0:9442efe129e7 109 return;
kadonotakashi 0:9442efe129e7 110
kadonotakashi 0:9442efe129e7 111 }
kadonotakashi 0:9442efe129e7 112
kadonotakashi 0:9442efe129e7 113 void ssd1331::DrawLine( uint8_t xs,
kadonotakashi 0:9442efe129e7 114 uint8_t ys,
kadonotakashi 0:9442efe129e7 115 uint8_t xe,
kadonotakashi 0:9442efe129e7 116 uint8_t ye,
kadonotakashi 0:9442efe129e7 117 uint16_t color )
kadonotakashi 0:9442efe129e7 118 {
kadonotakashi 0:9442efe129e7 119 if(xe>=WIDTH_1331-1){ return ; }
kadonotakashi 0:9442efe129e7 120 if(ye>=HEIGHT_1331-1){ return ; }
kadonotakashi 0:9442efe129e7 121 if(xe>=WIDTH_1331-1){ return ; }
kadonotakashi 0:9442efe129e7 122 if(ye>=HEIGHT_1331-1){ return ; }
kadonotakashi 0:9442efe129e7 123
kadonotakashi 0:9442efe129e7 124 CmdWr(SSD1331_CMD_DrawLine);
kadonotakashi 0:9442efe129e7 125 CmdWr(xs); CmdWr(ys); CmdWr(xe); CmdWr(ye);
kadonotakashi 0:9442efe129e7 126
kadonotakashi 0:9442efe129e7 127 //color R 5bit bit 15-11
kadonotakashi 0:9442efe129e7 128 // G 6bit bit 10- 5
kadonotakashi 0:9442efe129e7 129 // B 5bit bit 4- 0
kadonotakashi 0:9442efe129e7 130 CmdWr((color>>10) & 0x3e); //R 5bit
kadonotakashi 0:9442efe129e7 131 CmdWr((color>>5) & 0x3f); //G 6bit
kadonotakashi 0:9442efe129e7 132 CmdWr((color<<1) & 0x3e); //B 5bit
kadonotakashi 0:9442efe129e7 133 }
kadonotakashi 0:9442efe129e7 134
kadonotakashi 0:9442efe129e7 135 void ssd1331::DrawRectangle( uint8_t xs,
kadonotakashi 0:9442efe129e7 136 uint8_t ys,
kadonotakashi 0:9442efe129e7 137 uint8_t xe,
kadonotakashi 0:9442efe129e7 138 uint8_t ye,
kadonotakashi 0:9442efe129e7 139 uint16_t color )
kadonotakashi 0:9442efe129e7 140 {
kadonotakashi 0:9442efe129e7 141 CmdWr(SSD1331_CMD_FillEnable); CmdWr(0x00); //塗りつぶし禁止
kadonotakashi 0:9442efe129e7 142
kadonotakashi 0:9442efe129e7 143 CmdWr(SSD1331_CMD_DrawRectangle);
kadonotakashi 0:9442efe129e7 144 CmdWr(xs); CmdWr(ys); CmdWr(xe); CmdWr(ye);
kadonotakashi 0:9442efe129e7 145
kadonotakashi 0:9442efe129e7 146 //color R 5bit bit 15-11
kadonotakashi 0:9442efe129e7 147 // G 6bit bit 10- 5
kadonotakashi 0:9442efe129e7 148 // B 5bit bit 4- 0
kadonotakashi 0:9442efe129e7 149 CmdWr((color>>10) & 0x3e); //R 5bit
kadonotakashi 0:9442efe129e7 150 CmdWr((color>>5) & 0x3f); //G 6bit
kadonotakashi 0:9442efe129e7 151 CmdWr((color<<1) & 0x3e); //B 5bit
kadonotakashi 0:9442efe129e7 152 CmdWr(0); //R 5bit
kadonotakashi 0:9442efe129e7 153 CmdWr(0); //G 6bit
kadonotakashi 0:9442efe129e7 154 CmdWr(0); //B 5bit
kadonotakashi 0:9442efe129e7 155 wait_us(100);
kadonotakashi 0:9442efe129e7 156
kadonotakashi 0:9442efe129e7 157 }
kadonotakashi 0:9442efe129e7 158
kadonotakashi 0:9442efe129e7 159 void ssd1331::DrawRectangleFill( uint8_t xs,
kadonotakashi 0:9442efe129e7 160 uint8_t ys,
kadonotakashi 0:9442efe129e7 161 uint8_t xe,
kadonotakashi 0:9442efe129e7 162 uint8_t ye,
kadonotakashi 0:9442efe129e7 163 uint16_t line_color,
kadonotakashi 0:9442efe129e7 164 uint16_t fill_color )
kadonotakashi 0:9442efe129e7 165
kadonotakashi 0:9442efe129e7 166 {
kadonotakashi 0:9442efe129e7 167 CmdWr(SSD1331_CMD_FillEnable); CmdWr(0x01); //塗りつぶし禁止
kadonotakashi 0:9442efe129e7 168
kadonotakashi 0:9442efe129e7 169 CmdWr(SSD1331_CMD_DrawRectangle);
kadonotakashi 0:9442efe129e7 170 CmdWr(xs); CmdWr(ys); CmdWr(xe); CmdWr(ye);
kadonotakashi 0:9442efe129e7 171
kadonotakashi 0:9442efe129e7 172 //color R 5bit bit 15-11
kadonotakashi 0:9442efe129e7 173 // G 6bit bit 10- 5
kadonotakashi 0:9442efe129e7 174 // B 5bit bit 4- 0
kadonotakashi 0:9442efe129e7 175 CmdWr((line_color>>10) & 0x3e); //R 5bit
kadonotakashi 0:9442efe129e7 176 CmdWr((line_color>>5) & 0x3f); //G 6bit
kadonotakashi 0:9442efe129e7 177 CmdWr((line_color<<1) & 0x3e); //B 5bit
kadonotakashi 0:9442efe129e7 178 CmdWr((fill_color>>10) & 0x3e); //R 5bit
kadonotakashi 0:9442efe129e7 179 CmdWr((fill_color>>5) & 0x3f); //G 6bit
kadonotakashi 0:9442efe129e7 180 CmdWr((fill_color<<1) & 0x3e); //B 5bit
kadonotakashi 0:9442efe129e7 181 wait_us(400);
kadonotakashi 0:9442efe129e7 182 }
kadonotakashi 0:9442efe129e7 183
kadonotakashi 0:9442efe129e7 184
kadonotakashi 0:9442efe129e7 185
kadonotakashi 0:9442efe129e7 186 /*
kadonotakashi 0:9442efe129e7 187 * Adafruit Font Library
kadonotakashi 0:9442efe129e7 188 * */
kadonotakashi 0:9442efe129e7 189 int ssd1331::put_charPattern(char CharCode,uint16_t CHAR_COLOR,uint16_t xs,uint16_t ys,int FontSel)
kadonotakashi 0:9442efe129e7 190 {
kadonotakashi 0:9442efe129e7 191 uint8_t FirstCode,char_offset;
kadonotakashi 0:9442efe129e7 192 uint8_t *pFNT;
kadonotakashi 0:9442efe129e7 193
kadonotakashi 0:9442efe129e7 194 int x,y;
kadonotakashi 0:9442efe129e7 195 int FontWidth,FontHeight,FontDotCap,bitCnt;
kadonotakashi 0:9442efe129e7 196 int xOffset,yOffset;
kadonotakashi 0:9442efe129e7 197 uint8_t LinePattern;
kadonotakashi 0:9442efe129e7 198 int BitCount;
kadonotakashi 0:9442efe129e7 199
kadonotakashi 0:9442efe129e7 200 FirstCode = FntList[FontSel].pFnt->first;
kadonotakashi 0:9442efe129e7 201 if ((CharCode > FntList[FontSel].pFnt->last)||(CharCode < FirstCode)){
kadonotakashi 0:9442efe129e7 202 return -1;
kadonotakashi 0:9442efe129e7 203 }
kadonotakashi 0:9442efe129e7 204
kadonotakashi 0:9442efe129e7 205 char_offset=(CharCode - FirstCode);
kadonotakashi 0:9442efe129e7 206 pFNT = FntList[FontSel].pFnt->bitmap;
kadonotakashi 0:9442efe129e7 207 pFNT += FntList[FontSel].pFnt->glyph[char_offset].bitmapOffset;
kadonotakashi 0:9442efe129e7 208
kadonotakashi 0:9442efe129e7 209 FontWidth = FntList[FontSel].pFnt->glyph[char_offset].width;
kadonotakashi 0:9442efe129e7 210 FontHeight = FntList[FontSel].pFnt->glyph[char_offset].height;
kadonotakashi 0:9442efe129e7 211 FontDotCap = FontWidth * FontHeight;
kadonotakashi 0:9442efe129e7 212
kadonotakashi 0:9442efe129e7 213 xOffset = FntList[FontSel].pFnt->glyph[char_offset].xOffset;
kadonotakashi 0:9442efe129e7 214 yOffset = FntList[FontSel].pFnt->glyph[char_offset].yOffset;
kadonotakashi 0:9442efe129e7 215
kadonotakashi 0:9442efe129e7 216 x=0;
kadonotakashi 0:9442efe129e7 217 y=0;
kadonotakashi 0:9442efe129e7 218 BitCount=8;
kadonotakashi 0:9442efe129e7 219
kadonotakashi 0:9442efe129e7 220 for(bitCnt=0;bitCnt<FontDotCap;bitCnt++){
kadonotakashi 0:9442efe129e7 221 if (8==BitCount){
kadonotakashi 0:9442efe129e7 222 LinePattern = *pFNT++;
kadonotakashi 0:9442efe129e7 223 BitCount=0;
kadonotakashi 0:9442efe129e7 224 }
kadonotakashi 0:9442efe129e7 225 if((LinePattern & 0x80)!=0){
kadonotakashi 0:9442efe129e7 226 DrawPix(x+xs+xOffset,y+ys+yOffset,CHAR_COLOR);
kadonotakashi 0:9442efe129e7 227 // Serial.print("@");
kadonotakashi 0:9442efe129e7 228
kadonotakashi 0:9442efe129e7 229 // Serial.print(" x ");
kadonotakashi 0:9442efe129e7 230 // Serial.print(x+xs+xOffset);
kadonotakashi 0:9442efe129e7 231 // Serial.print(" y ");
kadonotakashi 0:9442efe129e7 232 // Serial.print(y+ys+yOffset);
kadonotakashi 0:9442efe129e7 233
kadonotakashi 0:9442efe129e7 234 }else{
kadonotakashi 0:9442efe129e7 235 // Serial.print(".");
kadonotakashi 0:9442efe129e7 236 }
kadonotakashi 0:9442efe129e7 237
kadonotakashi 0:9442efe129e7 238 LinePattern = LinePattern<<1;
kadonotakashi 0:9442efe129e7 239
kadonotakashi 0:9442efe129e7 240 if(x>=FontWidth-1){
kadonotakashi 0:9442efe129e7 241 x=0; y++;
kadonotakashi 0:9442efe129e7 242 // Serial.println();
kadonotakashi 0:9442efe129e7 243 }else{
kadonotakashi 0:9442efe129e7 244 x++;
kadonotakashi 0:9442efe129e7 245 }
kadonotakashi 0:9442efe129e7 246 BitCount++;
kadonotakashi 0:9442efe129e7 247 }
kadonotakashi 0:9442efe129e7 248 return FntList[FontSel].pFnt->glyph[char_offset].xAdvance;
kadonotakashi 0:9442efe129e7 249 }
kadonotakashi 0:9442efe129e7 250
kadonotakashi 0:9442efe129e7 251 int ssd1331::PutString(int x,int y,char *string,uint16_t CharColor,int FontSel)
kadonotakashi 0:9442efe129e7 252 {
kadonotakashi 0:9442efe129e7 253 int i,j,k;
kadonotakashi 0:9442efe129e7 254 char *STR;
kadonotakashi 0:9442efe129e7 255
kadonotakashi 0:9442efe129e7 256 STR = (char *)string;
kadonotakashi 0:9442efe129e7 257
kadonotakashi 0:9442efe129e7 258 for(i=0,j=x;;i++,STR++){
kadonotakashi 0:9442efe129e7 259
kadonotakashi 0:9442efe129e7 260 if (*STR==0){
kadonotakashi 0:9442efe129e7 261 return 0;
kadonotakashi 0:9442efe129e7 262 }
kadonotakashi 0:9442efe129e7 263
kadonotakashi 0:9442efe129e7 264 k=put_charPattern(*STR,CharColor,j,y,FontSel);
kadonotakashi 0:9442efe129e7 265 if(k<0){
kadonotakashi 0:9442efe129e7 266 return -2;
kadonotakashi 0:9442efe129e7 267 }else{
kadonotakashi 0:9442efe129e7 268 j=j+k;
kadonotakashi 0:9442efe129e7 269 }
kadonotakashi 0:9442efe129e7 270 }
kadonotakashi 0:9442efe129e7 271 return 0;
kadonotakashi 0:9442efe129e7 272 }