Описание библиотеки микросхемы 5023ВС016 процессора "Спутник"
SSD1306.c
См. документацию.
1 
24 #include "SSD1306.h"
25 
26 uint8_t OLED_GRAM[128][8];
27 
28 uint8_t SPI_WriteByte(uint8_t TxData, uint8_t Cmd)
29 {
30 
31  uint16_t Data = (Cmd)?0xFF:0x00;
32 
33  Data = (Data << 8) | TxData;
34 
35 
36 
37 
38  return SPI_WriteFrames_Blocking(SPI1, (uint8_t*)&Data, sizeof(Data));
39 
40 }
41 
49 void Delay_us(uint32_t Time)
50 {
51  do
52  {
53  Time --;
54  }while(Time != 0);
55 }
56 
66 void OLED_WriteByte(uint8_t Data, uint8_t Cmd)
67 {
68 
69  SPI_WriteByte(Data, Cmd);
70 }
71 
80 void OLED_SetPos(uint8_t X, uint8_t Y)
81 {
82  OLED_WriteByte(0xb0 + Y, OLED_CMD);
83  OLED_WriteByte(((X & 0xf0) >> 4) | 0x10, OLED_CMD);
84  OLED_WriteByte((X & 0x0f) | 0x01, OLED_CMD);
85 }
86 
87 
96 void OLED_DisplayOn(void)
97 {
98 
99  OLED_WriteByte(0X8D, OLED_CMD);
100  OLED_WriteByte(0X14, OLED_CMD);
101  OLED_WriteByte(0XAF, OLED_CMD);
102 }
103 
111 void OLED_DisplayOff(void)
112 {
113  OLED_WriteByte(0X8D, OLED_CMD);
114  OLED_WriteByte(0X10, OLED_CMD);
115  OLED_WriteByte(0XAE, OLED_CMD);
116 }
117 
127 {
128  uint8_t i, n;
129 
130  for(i = 0; i < 8; i ++)
131  {
132  OLED_WriteByte(0xb0 + i, OLED_CMD);
133  OLED_WriteByte(0x00, OLED_CMD);
134  OLED_WriteByte(0x10, OLED_CMD);
135  for(n = 0; n < 128; n ++)
136  {
138  }
139  }
140 }
141 
142 
151 void OLED_ClearDisplay(void)
152 {
153  uint8_t i, n;
154 
155  for(i = 0; i < 8; i ++)
156  {
157  for(n = 0; n < 128; n ++)
158  {
159  OLED_GRAM[n][i] = 0x00;
160  }
161  }
163 }
164 void OLED_SetDisplay(void)
165 {
166  uint8_t i, n;
167 
168  for(i = 0; i < 8; i ++)
169  {
170  for(n = 0; n < 128; n ++)
171  {
172  OLED_GRAM[n][i] = 0xff;
173  }
174  }
176 }
177 
190 void OLED_DrawPoint(uint8_t X, uint8_t Y, uint8_t Fill)
191 {
192  uint8_t Pos, Bx, Temp = 0;
193 
194  if(X > 127 || Y > 63)
195  return;
196  Pos = 7 - Y / 8;
197  Bx = Y % 8;
198  Temp = 1 << (7 - Bx);
199  if(Fill)
200  {
201  OLED_GRAM[X][Pos] |= Temp;
202  }
203  else
204  {
205  OLED_GRAM[X][Pos] &= ~Temp;
206  }
207 }
208 
209 
220 void OLED_Fill(uint8_t X1, uint8_t Y1, uint8_t X2, uint8_t Y2, uint8_t Dot)
221 {
222  uint8_t X, Y;
223 
224  for(X = X1; X <= X2; X ++)
225  {
226  for(Y = Y1; Y <= Y2; Y ++)
227  OLED_DrawPoint(X, Y, Dot);
228  }
229  //OLED_Refresh_Gram();
230 }
231 
232 void OLED_View( uint8_t X1, uint8_t Y1, uint8_t X2, uint8_t Y2, const uint8_t Image[] ){
233 
234 
235 }
236 
237 
254 #if 1
255 void OLED_ShowChar(uint8_t X, uint8_t Y, uint8_t Chr, uint8_t Size, uint8_t Mode)
256 {
257  uint8_t Temp, t, t1;
258  uint8_t y0 = Y;
259 
260  Chr = Chr - ' ';
261  for(t = 0; t < Size; t ++)
262  {
263  if(Size == 12)
264  {
265  Temp = oled_asc2_1206[Chr][t];
266  }
267  else
268  {
269  Temp = oled_asc2_1608[Chr][t];
270  }
271  for(t1 = 0; t1 < 8; t1 ++)
272  {
273  if(Temp & 0x80)
274  OLED_DrawPoint(X, Y, Mode);
275  else
276  OLED_DrawPoint(X, Y, !Mode);
277  Temp <<= 1;
278  Y ++;
279  if((Y - y0) == Size)
280  {
281  Y = y0;
282  X ++;
283  break;
284  }
285  }
286  }
287 }
288 #endif
289 
290 
300 #if 1
301 void OLED_ShowString(uint8_t X, uint8_t Y, const uint8_t *Str)
302 {
303 #define MAX_CHAR_POSX 122
304 #define MAX_CHAR_POSY 58
305 
306  while(*Str != '\0')
307  {
308  if(X > MAX_CHAR_POSX)
309  {
310  X = 0;
311  Y += 16;
312  }
313  if(Y > MAX_CHAR_POSY)
314  {
315  Y = X = 0;
317  }
318  OLED_ShowChar(X, Y, *Str, 16, 1);
319  X += 8;
320  Str ++;
321  }
322 }
323 
324 #endif
325 
326 void OLED_SetPageAddress(uint32_t PageOffSet){
327 
328  OLED_WriteByte(0x22, OLED_CMD);//-set display offset Shift Mapping RAM Counter (0x00~0x3F)
329  OLED_WriteByte(PageOffSet, OLED_CMD);//-not offset
330 
331 }
332 
333 void OLED_StartLine(uint32_t StartLine){
334 
335  OLED_WriteByte(0xD3, OLED_CMD);//-set display offset Shift Mapping RAM Counter (0x00~0x3F)
336  OLED_WriteByte(StartLine, OLED_CMD);//-not offset
337 
338 }
339 
340 void OLED_OffSet(uint32_t OffSet){
341 
342  OLED_WriteByte(0xD3, OLED_CMD);//-set display offset Shift Mapping RAM Counter (0x00~0x3F)
343  OLED_WriteByte(OffSet, OLED_CMD);//-not offset
344 
345 }
346 
347 void OLED_SetDisplayEnable(bool TurnOn){
348  OLED_WriteByte((TurnOn)?0xAF:0xAE, OLED_CMD);
349 }
350 
352 
353  //OLED_WriteByte(0xAE, OLED_CMD);
354 
355  switch(Mode){
356 
357  case LeftMode:
358 
359  case RightMode:
360 
361  OLED_WriteByte(0x2E, OLED_CMD); // выключить прокрутку
362 
363  OLED_WriteByte((Mode==LeftMode)?0x27:0x26, OLED_CMD); // настроить горизонтальный скроллинг 27 - вправо, 26 - влево
364 
365  OLED_WriteByte(0x00, OLED_CMD); // пустой байт
366 
367  OLED_WriteByte(0x02, OLED_CMD);//OLED_WriteByte((Mode==LeftMode)?0x00:0x07, OLED_CMD); // стартовая страница 000b – PAGE0, 001b – PAGE1, 010b – PAGE2, 011b – PAGE3, 100b – PAGE4, 101b – PAGE5, 110b – PAGE6, 111b – PAGE7
368 
369  OLED_WriteByte(0x07, OLED_CMD); // временной интервал между каждым шагом прокрутки, относительно частоты кадров 000b – 5 frames, 001b – 64 frames, 010b – 128 frames, 011b – 256 frames, 100b – 3 frames, 101b – 4 frames, 110b – 25 frame, 111b – 2 frame
370 
371  OLED_WriteByte(0x07, OLED_CMD);//OLED_WriteByte((Mode==LeftMode)?0x07:0x00, OLED_CMD); // стоповая страница смотри комментарий стартовая страница
372 
373  OLED_WriteByte(0x00, OLED_CMD); // пустой байт
374 
375  OLED_WriteByte(0xFF, OLED_CMD); // FF байт
376 
377  OLED_WriteByte(0x2F, OLED_CMD); // включить прокрутку
378 
379  break;
380 
381  case OffMode:
382  OLED_WriteByte(0x2E, OLED_CMD);
383  break;
384 
385  case OnMode:
386  OLED_WriteByte(0x2F, OLED_CMD);
387  break;
388  }
389 
390  //OLED_WriteByte(0xAF, OLED_CMD);
391 
392 }
393 
401 void OLED_Init(void)
402 {
403 
404  OLED_DisplayOff();
405 
406  Delay_us(5000);
407 
408  OLED_WriteByte(0xAE, OLED_CMD);//--turn off oled panel
409  OLED_WriteByte(0x00, OLED_CMD);//---set low column address
410  OLED_WriteByte(0x10, OLED_CMD);//---set high column address
411  OLED_WriteByte(0x40, OLED_CMD);//--set start line address Set Mapping RAM Display Start Line (0x00~0x3F)
412  OLED_WriteByte(0x81, OLED_CMD);//--set contrast control register
413  OLED_WriteByte(0xCF, OLED_CMD); // Set SEG Output Current Brightness
414  OLED_WriteByte(0xA0, OLED_CMD);//--Set SEG/Column Mapping
415  OLED_WriteByte(0xC8, OLED_CMD);//Set COM/Row Scan Direction
416  OLED_WriteByte(0xA6, OLED_CMD);//--set normal display
417  OLED_WriteByte(0xA8, OLED_CMD);//--set multiplex ratio(1 to 64)
418  OLED_WriteByte(0x3f, OLED_CMD);//--1/64 duty
419  OLED_WriteByte(0xD3, OLED_CMD);//-set display offset Shift Mapping RAM Counter (0x00~0x3F)
420  OLED_WriteByte(0x00, OLED_CMD);//-not offset
421  OLED_WriteByte(0xd5, OLED_CMD);//--set display clock divide ratio/oscillator frequency
422  OLED_WriteByte(0x80, OLED_CMD);//--set divide ratio, Set Clock as 100 Frames/Sec
423  OLED_WriteByte(0xD9, OLED_CMD);//--set pre-charge period
424  OLED_WriteByte(0xF1, OLED_CMD);//Set Pre-Charge as 15 Clocks & Discharge as 1 Clock
425  OLED_WriteByte(0xDA, OLED_CMD);//--set com pins hardware configuration
426  OLED_WriteByte(0x12, OLED_CMD);
427  OLED_WriteByte(0xDB, OLED_CMD);//--set vcomh
428  OLED_WriteByte(0x40, OLED_CMD);//Set VCOM Deselect Level
429  OLED_WriteByte(0x20, OLED_CMD);//-Set Page Addressing Mode (0x00/0x01/0x02)
430  OLED_WriteByte(0x02, OLED_CMD);//
431  OLED_WriteByte(0x8D, OLED_CMD);//--set Charge Pump enable/disable
432  OLED_WriteByte(0x14, OLED_CMD);//--set(0x10) disable
433  OLED_WriteByte(0xA4, OLED_CMD);// Disable Entire Display On (0xa4/0xa5)
434  OLED_WriteByte(0xA6, OLED_CMD);// Disable Inverse Display On (0xa6/a7)
435  OLED_WriteByte(0xAF, OLED_CMD);//--turn on oled panel
436 
437  Delay_us(5000);
438 
439  OLED_DisplayOn();
440 
441 
443 
444 
445 }
446 
447 /******************* (C) COPYRIGHT 2014 Waveshare *****END OF FILE*******************/
448 
#define OLED_CMD
Definition: SSD1306.h:29
SCROL_MODE
Definition: SSD1306.h:32
uint32_t SPI_WriteFrames_Blocking(SPI_T *pSPI, uint8_t *buffer, uint32_t buffer_len)
Запись методом постоянного опроса.
Definition: spi.c:339
void OLED_DisplayOn(void)
Enables the Display.
Definition: SSD1306.c:96
void Delay_us(uint32_t Time)
Inserts a delay time.
Definition: SSD1306.c:49
void OLED_Fill(uint8_t X1, uint8_t Y1, uint8_t X2, uint8_t Y2, uint8_t Dot)
Dispalys a full rectangle.
Definition: SSD1306.c:220
const unsigned char oled_asc2_1608[95][16]
Definition: OLEDFont.c:125
void OLED_Init(void)
initializes the OLED.
Definition: SSD1306.c:401
void OLED_ShowChar(uint8_t X, uint8_t Y, uint8_t Chr, uint8_t Size, uint8_t Mode)
Displays one character.
Definition: SSD1306.c:255
void OLED_ShowString(uint8_t X, uint8_t Y, const uint8_t *Str)
Displays a string on the OLED.
Definition: SSD1306.c:301
void OLED_SetDisplay(void)
Definition: SSD1306.c:164
void OLED_SetHorizontalScroll(SCROL_MODE Mode)
Definition: SSD1306.c:351
void OLED_Refresh_Gram(void)
refresh the GDDRAM
Definition: SSD1306.c:126
uint8_t SPI_WriteByte(uint8_t TxData, uint8_t Cmd)
Definition: SSD1306.c:28
void OLED_OffSet(uint32_t OffSet)
Definition: SSD1306.c:340
#define OLED_DAT
Definition: SSD1306.h:30
const uint8_t oled_asc2_1206[95][12]
Definition: OLEDFont.c:26
void OLED_StartLine(uint32_t StartLine)
Definition: SSD1306.c:333
#define SPI1
Указатель на структуру SPI1.
uint8_t OLED_GRAM[128][8]
Definition: SSD1306.c:26
void OLED_SetPageAddress(uint32_t PageOffSet)
Definition: SSD1306.c:326
void OLED_SetPos(uint8_t X, uint8_t Y)
sets the positions of the character that will be displayed.
Definition: SSD1306.c:80
void OLED_ClearDisplay(void)
Clears the hole OLED.
Definition: SSD1306.c:151
void OLED_SetDisplayEnable(bool TurnOn)
Definition: SSD1306.c:347
void OLED_View(uint8_t X1, uint8_t Y1, uint8_t X2, uint8_t Y2, const uint8_t Image[])
Definition: SSD1306.c:232
const uint8_t Str[]
Definition: spi_oled_test.c:41
#define MAX_CHAR_POSX
This file contains all the functions prototypes for the OLED firmware driver.
void OLED_WriteByte(uint8_t Data, uint8_t Cmd)
writes an byte to OLED
Definition: SSD1306.c:66
#define MAX_CHAR_POSY
void OLED_DisplayOff(void)
Disables the Display.
Definition: SSD1306.c:111
Definition: SSD1306.h:36
void OLED_DrawPoint(uint8_t X, uint8_t Y, uint8_t Fill)
Displays a pixel.
Definition: SSD1306.c:190