Version:0.9 StartHTML:0000000105 EndHTML:0000341656 StartFragment:0000001499 EndFragment:0000341640 mikroIDE

#define Version "2021_0928"
//#define Version "2021_0927"
// 1er test ABCD EFGH IJKL MNO

 #define Directory  "C:\\_MikroC\\_MesProjets_MikroC\\OLED_SPI_DM13_625_18F26K22_2021"
 #define Project    "OLED_SPI_DM13_625_18F26K22_2021-09.mcppi"
 #define Source     "OLED_SPI_DM13_625_18F26K22_"
 #define HARDWARE   "Carte Base 18F26K22, LCD OLED SH1106 1.3\" 128x64 en Bleu"
 #define OTHER   "  "
 #define Config "P18F26K22_FOSC_interne_16xPLL_64MHz_RA6_FreqOut.cfgsch"
 #define FOSC_INTERNE
 #define FOSC "16MHz x PLL = 64MHz"
 #define MCU  "18F26K22 DIP28"
 #define POWER_Supply "3.6 V mini ! up to 5.0V"

#define FOSC_INTERNE
#define SSD1106_SPI
#define NB_PAGES 8
#define SS1106_LCDWIDTH 128
#define SS1106_LCDHEIGHT 64

#define CLS 12
#define CR 13
#define LF 10
#define TAB 9
#define BACK 8


#define ON 0
#define OFF 1
#define Byte unsigned char
#define Word unsigned int

#define INIT_A

 // ac:Base_18F



 // Hardware
 /*

 Pin 28 RB7  -----------------ICSP Data
 Pin 27 RB6  -----------------ICSP Clock
 Pin 26 RB5
 Pin 25 RB4
 Pin 24 RB3
 Pin 23 RB2    input
 Pin 22 RB1    --- strap input
 Pin 21 RB0    input
 Pin 20      VDD --------+5V  -----   Pin 1  OLED  VCC
 Pin 19      Vss ---------Gnd ----   Pin 2  OLED  Gnd
 Pin 18  RC7  RX UART  <---------------- Keyboard
 Pin 17  RC6  TX UART  ----------------> Display    * mettre une pull up de 10K si RX non utilisée
 Pin 16  RC5  MOSI  output
 Pin 15  RC4

 Pin 14 RC3   SCL  ------> OLED CLCK
 Pin 13 RC2
 Pin 12 RC1
 Pin 11 RC0
 Pin 10 RA6
 Pin  9 RA7
 Pin  8 VSS ---------  Gnd
 Pin  7 RA5
 Pin  6 RA4  Output -- Led -- 2,7K --+Vcc
 Pin  5 RA3  SQA output --> SQA50 Analyser synchro input
 Pin  4 RA2 (DAC)
 Pin  3 RA1  Analog input EA1
 Pin  2 RA0  Analog Input EA0   ou OWS
 Pin  1 RE3 MCLR  Reset --------ICSP PGRM VPP

*/
#include "../__common/BMP_128x64_Cheval.h"
#include "../__common/BMP_128x64_Vumetre.h"
//#include "../__common/BMP_128x64_Popeye.h"
//#include "../__common/BMP_128x64_Monroe.h"
#include "../__common/BMP_Truck.h"

 /*
const unsigned char cheval [] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xE0, 0xF0, 0xF0, 0xF0,
0xF0, 0xF8, 0xF8, 0xFC, 0xFF, 0xFF, 0x7F, 0x7E, 0x7E, 0x3E, 0x3E, 0x1E, 0x1F, 0x1F, 0x9F, 0x9F,
0x1F, 0x1F, 0x1E, 0x0E, 0x3E, 0x7E, 0xFE, 0xDC, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x80, 0x80, 0xE0, 0xF0, 0xF8, 0xF8, 0xFC, 0xFE, 0xFE, 0xFE, 0xFF, 0x7F, 0x7F, 0x3F,
0x3F, 0x3F, 0x9E, 0xFE, 0xFE, 0xFC, 0x3C, 0x1C, 0x0E, 0x0E, 0x07, 0x07, 0x07, 0x07, 0x07, 0x03,
0x07, 0x07, 0x06, 0x0E, 0x06, 0x0E, 0x0E, 0x0E, 0x0C, 0x1C, 0x1C, 0x1C, 0x18, 0x38, 0x18, 0x38,
0x38, 0x18, 0x38, 0x18, 0x18, 0x1C, 0x1C, 0x0C, 0x0E, 0x0E, 0x0F, 0x0F, 0x0F, 0x0F, 0x1F, 0x3F,
0xFF, 0xE7, 0xC3, 0x01, 0x00, 0x00, 0x80, 0xC0, 0xF0, 0xF8, 0x1C, 0xEE, 0xF0, 0x7E, 0x3F, 0x7F,
0x71, 0x70, 0xE0, 0xE0, 0xC0, 0x07, 0x07, 0x07, 0x7F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x0C, 0x08, 0x0C, 0x1C, 0x0C, 0x1C,
0x1C, 0x1E, 0x1F, 0x3F, 0x3F, 0x3F, 0x3F, 0x1F, 0x1F, 0x0F, 0x07, 0x01, 0x00, 0x80, 0x80, 0x00,
0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0,
0xE0, 0xF0, 0xF0, 0xF8, 0xFC, 0xFC, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xF0, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x33, 0xFF, 0xFF, 0xFC, 0xFA, 0xF3, 0xFF, 0x7F, 0x1E, 0x0F, 0x07, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01, 0x0F, 0x0F, 0x0E, 0x1E, 0x0F, 0x0F, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80,
0xC0, 0x80, 0x80, 0x00, 0x80, 0xC0, 0xC0, 0xC0, 0xC0, 0xF0, 0xF8, 0xFE, 0xEF, 0x77, 0x37, 0x3F,
0x3F, 0x1B, 0xFB, 0xF9, 0xF0, 0xF0, 0xF0, 0xB0, 0x38, 0x38, 0x18, 0x38, 0x1C, 0x0E, 0x0F, 0x07,
0x03, 0x01, 0x01, 0x01, 0x03, 0x03, 0x03, 0x07, 0x07, 0x0E, 0x0E, 0x0E, 0x0C, 0x1C, 0x1C, 0x38,
0x38, 0x18, 0xF8, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF3, 0xFF, 0x77, 0x7F, 0x7E, 0x7C, 0xF8, 0xE0,
0x80, 0x7E, 0xFF, 0xBF, 0x07, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0F, 0x0F, 0x1F,
0x0F, 0x1F, 0x07, 0x0F, 0x0F, 0x0F, 0x0D, 0x1F, 0x0F, 0x07, 0x03, 0x60, 0xF0, 0xF0, 0xF8, 0xF8,
0xF0, 0xFC, 0xFE, 0xFF, 0x7F, 0x3F, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0xC0, 0xE0, 0xF0, 0xFC, 0xFE,
0xFE, 0x67, 0x7F, 0x3F, 0x0F, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x3F,
0x7F, 0xFF, 0xE3, 0xFF, 0xFC, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x30, 0xF8, 0x7C, 0x7E, 0x3E, 0x3E, 0x3F, 0x0F, 0x1F, 0x0F, 0x0F, 0x07, 0x03, 0x03, 0x01, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x23, 0x7F, 0xFF, 0xFF, 0xFE, 0xF8, 0xE0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x1F, 0x1F, 0x0F, 0x1F, 0x1E, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
  */

//Signal_generation_Sinus_harmoniq_2021.xls
unsigned char Table_Sinus_128_Steps[]=
 { // '=SIN(C6*Coeff2*2*PI()/360)*Amplitude2
   //  + SIN(C6*Coeff2*6*PI()/360)*Amplitude2/3
   //  + SIN(C6*Coeff2*10*PI()/360)*Amplitude2/6
32,36,40,44,48,51,54,56,58,59,60,60,60,60,59,58,
58,57,56,55,55,54,54,54,55,55,56,56,57,57,58,58,
58,58,58,57,57,56,56,55,55,54,54,54,55,55,56,57,
58,58,59,60,60,60,60,59,58,56,54,51,48,44,40,36,
32,28,24,20,16,13,10,8,6,5,4,4,4,4,5,6,
6,7,8,9,9,10,10,10,9,9,8,8,7,7,6,6,
6,6,6,7,7,8,8,9,9,10,10,10,9,9,8,7,
6,6,5,4,4,4,4,5,6,8,10,13,16,20,24,28,
};


const  unsigned char font_regular_6x8[92][6] =
{
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   // sp
    0x00, 0x00, 0x00, 0x2f, 0x00, 0x00,   // !
    0x00, 0x00, 0x07, 0x00, 0x07, 0x00,   // "
    0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14,   // #
    0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12,   // $
    0x00, 0x62, 0x64, 0x08, 0x13, 0x23,   // %
    0x00, 0x36, 0x49, 0x55, 0x22, 0x50,   // &
    0x00, 0x00, 0x05, 0x03, 0x00, 0x00,   // '
    0x00, 0x00, 0x1c, 0x22, 0x41, 0x00,   // (
    0x00, 0x00, 0x41, 0x22, 0x1c, 0x00,   // )
    0x00, 0x14, 0x08, 0x3E, 0x08, 0x14,   // *
    0x00, 0x08, 0x08, 0x3E, 0x08, 0x08,   // +
    0x00, 0x00, 0x00, 0xA0, 0x60, 0x00,   // ,
    0x00, 0x08, 0x08, 0x08, 0x08, 0x08,   // -
    0x00, 0x00, 0x60, 0x60, 0x00, 0x00,   // .
    0x00, 0x20, 0x10, 0x08, 0x04, 0x02,   // /
    0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E,   // 0
    0x00, 0x00, 0x42, 0x7F, 0x40, 0x00,   // 1
    0x00, 0x42, 0x61, 0x51, 0x49, 0x46,   // 2
    0x00, 0x21, 0x41, 0x45, 0x4B, 0x31,   // 3
    0x00, 0x18, 0x14, 0x12, 0x7F, 0x10,   // 4
    0x00, 0x27, 0x45, 0x45, 0x45, 0x39,   // 5
    0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30,   // 6
    0x00, 0x01, 0x71, 0x09, 0x05, 0x03,   // 7
    0x00, 0x36, 0x49, 0x49, 0x49, 0x36,   // 8
    0x00, 0x06, 0x49, 0x49, 0x29, 0x1E,   // 9
    0x00, 0x00, 0x36, 0x36, 0x00, 0x00,   // :
    0x00, 0x00, 0x56, 0x36, 0x00, 0x00,   // ;
    0x00, 0x08, 0x14, 0x22, 0x41, 0x00,   // <
    0x00, 0x14, 0x14, 0x14, 0x14, 0x14,   // =
    0x00, 0x00, 0x41, 0x22, 0x14, 0x08,   // >
    0x00, 0x02, 0x01, 0x51, 0x09, 0x06,   // ?
    0x00, 0x32, 0x49, 0x59, 0x51, 0x3E,   // @
    0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C,   // A
    0x00, 0x7F, 0x49, 0x49, 0x49, 0x36,   // B
    0x00, 0x3E, 0x41, 0x41, 0x41, 0x22,   // C
    0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C,   // D
    0x00, 0x7F, 0x49, 0x49, 0x49, 0x41,   // E
    0x00, 0x7F, 0x09, 0x09, 0x09, 0x01,   // F
    0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A,   // G
    0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F,   // H
    0x00, 0x00, 0x41, 0x7F, 0x41, 0x00,   // I
    0x00, 0x20, 0x40, 0x41, 0x3F, 0x01,   // J
    0x00, 0x7F, 0x08, 0x14, 0x22, 0x41,   // K
    0x00, 0x7F, 0x40, 0x40, 0x40, 0x40,   // L
    0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F,   // M
    0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F,   // N
    0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E,   // O
    0x00, 0x7F, 0x09, 0x09, 0x09, 0x06,   // P
    0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E,   // Q
    0x00, 0x7F, 0x09, 0x19, 0x29, 0x46,   // R
    0x00, 0x46, 0x49, 0x49, 0x49, 0x31,   // S
    0x00, 0x01, 0x01, 0x7F, 0x01, 0x01,   // T
    0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F,   // U
    0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F,   // V
    0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F,   // W
    0x00, 0x63, 0x14, 0x08, 0x14, 0x63,   // X
    0x00, 0x07, 0x08, 0x70, 0x08, 0x07,   // Y
    0x00, 0x61, 0x51, 0x49, 0x45, 0x43,   // Z
    0x00, 0x00, 0x7F, 0x41, 0x41, 0x00,   // [ 91
    0x00, 0x02, 0x04 , 0x08, 0x10, 0x20,    // \92
    0x00, 0x00, 0x41, 0x41, 0x7F, 0x00,   // ]
    0x00, 0x04, 0x02, 0x01, 0x02, 0x04,   // ^
    0x00, 0x40, 0x40, 0x40, 0x40, 0x40,   // _
    0x00, 0x00, 0x01, 0x02, 0x04, 0x00,   // '
    0x00, 0x20, 0x54, 0x54, 0x54, 0x78,   // a
    0x00, 0x7F, 0x48, 0x44, 0x44, 0x38,   // b
    0x00, 0x38, 0x44, 0x44, 0x44, 0x20,   // c
    0x00, 0x38, 0x44, 0x44, 0x48, 0x7F,   // d
    0x00, 0x38, 0x54, 0x54, 0x54, 0x18,   // e
    0x00, 0x08, 0x7E, 0x09, 0x01, 0x02,   // f
    0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C,   // g
    0x00, 0x7F, 0x08, 0x04, 0x04, 0x78,   // h
    0x00, 0x00, 0x44, 0x7D, 0x40, 0x00,   // i
    0x00, 0x40, 0x80, 0x84, 0x7D, 0x00,   // j
    0x00, 0x7F, 0x10, 0x28, 0x44, 0x00,   // k
    0x00, 0x00, 0x41, 0x7F, 0x40, 0x00,   // l
    0x00, 0x7C, 0x04, 0x18, 0x04, 0x78,   // m
    0x00, 0x7C, 0x08, 0x04, 0x04, 0x78,   // n
    0x00, 0x38, 0x44, 0x44, 0x44, 0x38,   // o
    0x00, 0xFC, 0x24, 0x24, 0x24, 0x18,   // p
    0x00, 0x18, 0x24, 0x24, 0x18, 0xFC,   // q
    0x00, 0x7C, 0x08, 0x04, 0x04, 0x08,   // r
    0x00, 0x48, 0x54, 0x54, 0x54, 0x20,   // s
    0x00, 0x04, 0x3F, 0x44, 0x40, 0x20,   // t
    0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C,   // u
    0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C,   // v
    0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C,   // w
    0x00, 0x44, 0x28, 0x10, 0x28, 0x44,   // x
    0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C,   // y
    0x00, 0x44, 0x64, 0x54, 0x4C, 0x44,   // z
    0x14, 0x14, 0x14, 0x14, 0x14, 0x14    // horiz lines
};

unsigned char code F8X16[]=
{
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// 0
  0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00,//! 1
  0x00,0x10,0x0C,0x06,0x10,0x0C,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//" 2
  0x40,0xC0,0x78,0x40,0xC0,0x78,0x40,0x00,0x04,0x3F,0x04,0x04,0x3F,0x04,0x04,0x00,//# 3
  0x00,0x70,0x88,0xFC,0x08,0x30,0x00,0x00,0x00,0x18,0x20,0xFF,0x21,0x1E,0x00,0x00,//$ 4
  0xF0,0x08,0xF0,0x00,0xE0,0x18,0x00,0x00,0x00,0x21,0x1C,0x03,0x1E,0x21,0x1E,0x00,//% 5
  0x00,0xF0,0x08,0x88,0x70,0x00,0x00,0x00,0x1E,0x21,0x23,0x24,0x19,0x27,0x21,0x10,//& 6
  0x10,0x16,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//' 7
  0x00,0x00,0x00,0xE0,0x18,0x04,0x02,0x00,0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x00,//( 8
  0x00,0x02,0x04,0x18,0xE0,0x00,0x00,0x00,0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x00,//) 9
  0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00,//* 10
  0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x1F,0x01,0x01,0x01,0x00,//+ 11
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xB0,0x70,0x00,0x00,0x00,0x00,0x00,//, 12
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,//- 13
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,//. 14
  0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04,0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00,/// 15
  0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,//0 16
  0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//1 17
  0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,//2 18
  0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,//3 19
  0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,//4 20
  0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,//5 21
  0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,//6 22
  0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,//7 23
  0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,//8 24
  0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,//9 25
  0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,//: 26
  0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x00,0x00,0x00,0x00,//; 27
  0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00,//< 28
  0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,//= 29
  0x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00,//> 30
  0x00,0x70,0x48,0x08,0x08,0x08,0xF0,0x00,0x00,0x00,0x00,0x30,0x36,0x01,0x00,0x00,//? 31
  0xC0,0x30,0xC8,0x28,0xE8,0x10,0xE0,0x00,0x07,0x18,0x27,0x24,0x23,0x14,0x0B,0x00,//@ 32
  0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20,//A 33
  0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00,//B 34
  0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,//C 35
  0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,//D 36
  0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00,//E 37
  0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00,//F 38
  0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00,//G 39
  0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20,//H 40
  0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//I 41
  0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00,//J 42
  0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00,0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00,//K 43
  0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00,//L 44
  0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00,//M 45
  0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00,//N 46
  0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,//O 47
  0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00,//P 48
  0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00,//Q 49
  0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20,//R 50
  0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00,//S 51
  0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//T 52
  0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//U 53
  0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00,//V 54
  0xF8,0x08,0x00,0xF8,0x00,0x08,0xF8,0x00,0x03,0x3C,0x07,0x00,0x07,0x3C,0x03,0x00,//W 55
  0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20,//X 56
  0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//Y 57
  0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00,//Z 58
  0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x00,//[ 59
  0x00,0x0C,0x30,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x06,0x38,0xC0,0x00,//\ 60
  0x00,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x7F,0x00,0x00,0x00,//] 61
  0x00,0x00,0x04,0x02,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//^ 62
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,//_ 63
  0x00,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//` 64
  0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20,//a 65
  0x08,0xF8,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00,//b 66
  0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00,//c 67
  0x00,0x00,0x00,0x80,0x80,0x88,0xF8,0x00,0x00,0x0E,0x11,0x20,0x20,0x10,0x3F,0x20,//d 68
  0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00,//e 69
  0x00,0x80,0x80,0xF0,0x88,0x88,0x88,0x18,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//f 70
  0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x6B,0x94,0x94,0x94,0x93,0x60,0x00,//g 71
  0x08,0xF8,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//h 72
  0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//i 73
  0x00,0x00,0x00,0x80,0x98,0x98,0x00,0x00,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,//j 74
  0x08,0xF8,0x00,0x00,0x80,0x80,0x80,0x00,0x20,0x3F,0x24,0x02,0x2D,0x30,0x20,0x00,//k 75
  0x00,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//l 76
  0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,//m 77
  0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//n 78
  0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//o 79
  0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00,0x80,0xFF,0xA1,0x20,0x20,0x11,0x0E,0x00,//p 80
  0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x0E,0x11,0x20,0x20,0xA0,0xFF,0x80,//q 81
  0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x00,//r 82
  0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00,//s 83
  0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x00,0x00,//t 84
  0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20,//u 85
  0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x00,0x01,0x0E,0x30,0x08,0x06,0x01,0x00,//v 86
  0x80,0x80,0x00,0x80,0x00,0x80,0x80,0x80,0x0F,0x30,0x0C,0x03,0x0C,0x30,0x0F,0x00,//w 87
  0x00,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x31,0x2E,0x0E,0x31,0x20,0x00,//x 88
  0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x81,0x8E,0x70,0x18,0x06,0x01,0x00,//y 89
  0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x21,0x30,0x2C,0x22,0x21,0x30,0x00,//z 90
  0x00,0x00,0x00,0x00,0x80,0x7C,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40,//{ 91
  0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,//| 92
  0x00,0x02,0x02,0x7C,0x80,0x00,0x00,0x00,0x00,0x40,0x40,0x3F,0x00,0x00,0x00,0x00,//} 93
  0x00,0x06,0x01,0x01,0x02,0x02,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00//~ 94
};


// File generated by LCD Assistant
// http://en.radzio.dxp.pl/bitmap_converter/


// #include "BMP_128x64_Cheval.h"
/*
#include "BMP_Tigre_128x64.h "
#include "BMP_128x64_Monroe.h"
*/


//  #define  NB_PAGES    8

static unsigned char buffer[1060];     // (128*64) /8

sbit SQA at LATA.B3;
sbit SQA_Dir at TRISA.B3;
sbit Led_R    at LATA.B4;      //tirage au +VCC via 2,7K
sbit Led_R_dir at TRISA.B4;
//sbit OLED_Supply at LATA.B5;
//sbit OLED_Supply at TRISA.B5;

//  SPI1
sbit Chip_Sel at LATC0_bit;//RC0 active ou désactive la transmission
sbit RES at  LATC.B1;  //RC1  reset de l'écran
sbit DC_mode  at  LATC.B2;  //RC2 sélection du mode : commande = 0 , donnée = 1
sbit Sck at  LATC.B3;  // RC3 horloge de synchronisation  SPI
sbit MOSI at LATC.B5; // RC5 envoye les données sur écran oled 128x64

sbit Chip_Sel_Dir at TRISC0_bit;
sbit RES_dir at       TRISC.B1;  //RC1  reset de l'écran
sbit DC_mode_dir  at TRISC.B2;
sbit Sck_dir at  TRISC.B3;  // RC3 horloge de synchronisation  SPI
sbit MOSI_dir at TRISA.B5;


unsigned char TEXTE[128];
unsigned char buffer1[128];
unsigned char buffer2[80];
unsigned char * txt;
int i,j,k,l;
unsigned char Reglage;
unsigned const char *p1;
unsigned char *p2;

unsigned char CRam1[80];
unsigned int Index;
float F1;
unsigned int EA1, SEA1;
unsigned int clk;
volatile char  c1,c2;
volatile int DataReady1;
volatile int CptFO1,CptFE1;
volatile int Index1,i1;
int erreurs;
unsigned long L1 =0;
unsigned char Cde,Donnee;

unsigned char Init_A_Chaine[]={
// init page 14 datasheet  DM-OLED13-625

 0xD5,0x80,
 0xA8,0x3F,
 0xD3,0x00,
 0x40,
 0xAD,0x8B,
 0xA1,
 0xC8,
 0xDA,0x12,
 0x81,0xBF,
 0xD9,0x22,
 0xDB,0x40,
 0x32,0xA6,
 0xA4,0x3F,
 0xAF,
 0xFF
 };

 
 unsigned char BAD_Init_B_Chaine[]={
 // voir Init page 16 datasheet  DM-OLED13-625
  0x02,0x10,0x40,0xB0,0x81,0xBF,0xA1,0xA6,0xA8,0x3F,0xAD,0x8A,0x32,0xC8,
  0xD3,0x20,0xD5,0x80,0xD9,0x22,0xDA,0x12,0xDB,0x40,0xAF,0xFF
  };




void Print_Cte_String (const char * q);
void UART1_Write_CText(const char *txt);
void CRLF1(void);
void WriteCmd(unsigned char I2C_Command);
void WriteDat(unsigned char I2C_Data);
void Write_Char_At(unsigned char X,unsigned char Y, unsigned char C);
Word oldx,oldy;
void OLED_ShowStr(unsigned char x, unsigned char y, unsigned char *ch, unsigned char TextSize)  ;
void Display_Picture(unsigned char pic[]);
void SSD1106_ClearDisplay(void);

// --- Copie le texte depuis FLASH ROM vers RAM
void strConstRamCpy(unsigned char *dest, const code char *source)
 {
  while (*source)*dest++ = *source++ ;
  *dest = 0 ;    // terminateur
}


void Delay_2sec(void)
{
 Delay_1sec();  Delay_1sec();
}

void Delay_300ms(void)
{
  Delay_100ms();  Delay_100ms();  Delay_100ms();
}

#define CPrint  UART1_Write_CText
#define Print  UART1_Write_Text

void UART1_Write_CText(const char *txt)
 {
   while (*txt)  UART1_Write(*txt++);
 }

void CRLF1()
{
  UART1_Write(CR);  UART1_Write(LF);
  }

void WriteDat(unsigned char Donnee)
{
  DC_mode=1;
  Chip_Sel=0;
  SPI1_Write(Donnee);
  Chip_Sel=1;
 }

void WriteCmd(unsigned char Command)
{
  DC_mode=0;
  Chip_Sel=0;
  SPI1_Write(Command);
  Chip_Sel=1;

}


//Set page adress for Page Addressing Mode
 void Set_Page_Address(unsigned char add)
 {
    add=add |0xB0;
     WriteCmd(add);
 }

//Set column adress for Page Addressing Mode
 void Set_Column_Address(unsigned char add)
 {
        WriteCmd(0x80);
        WriteCmd (0x10|(add>>4));    //nible  (LSB)
        WriteCmd(0x80);
        WriteCmd(0x0f&add);         // nible (MSB)
 }


void OLED_SetPos(unsigned char x, unsigned char y)
{
       WriteCmd(0xB0+y);
       WriteCmd(x&0x0f) ;
       WriteCmd(((x&0xf0)>>4)|0x10);
}

void Write_Char_At(unsigned char X,unsigned char Y, unsigned char C)
{ int i;
unsigned char ca;
    if (C>=32)
    {
     ca=C-32;
    OLED_SetPos(X,Y);
    for(i=0;i<6;i++)   WriteDat(font_regular_6x8[ca][i]) ;
    }
}

void OLED_ShowStr(unsigned char x, unsigned char y, unsigned char *ch, unsigned char TextSize)
{
        unsigned char c = 0,i = 0,j = 0, cz=0;
        unsigned char xd=0,yd=0;
        int kx,lx;
        xd=x;
        yd=y;
        OLED_SetPos(xd,yd);
        switch(TextSize)
        {
                case 1:
                  while((*(ch+j) !=0) && ( yd<NB_PAGES))
                    {
                     c = *(ch+j) - 32;
                     if(xd > 120)
                     {
                      xd = x;
                      yd++;
                       OLED_SetPos(xd,yd);
                     }
                      for(i=0;i<6;i++)
                      {
                      cz=font_regular_6x8[c][i];
                       WriteDat(cz) ;
                       // copie aussi dans RamBuffer
                        buffer[yd*128+xd+i]=cz;
                       }
                      xd=xd+6;
                     j++;
                    }
                  // 02/02/2021
                  //  WriteDat(0); WriteDat(0);  // format 8x8 horizontal
                    break;
                case 2:
                     kx=strlen(ch);
                     j=0;
                     while((*(ch+j) !=0) && (j<16) )
                     {
                      c = *(ch+j) - 32;
                      //if(xd > 112)        // width > 14 chars x8
                      //{
                      //  xd = x;      // si deborde la ligne
                      //  yd=yd+1;     // change de ligne
                      //  }
                      OLED_SetPos(xd,yd);
                      for(i=0;i<8;i++)
                      {
                       cz= F8X16[c*16+i];
                       WriteDat(cz);
                       // copie aussi dans RamBuffer
                        buffer[yd*128+xd+i]=cz;
                      }
                     OLED_SetPos(xd,yd+1);
                     for(i=0;i<8;i++)
                     {
                       cz=F8X16[c*16+i+8];
                        WriteDat(cz);
                       buffer[(yd+1)*128+xd+i]=cz;
                      }
                      xd=xd+8;
                      j++;
                     }
                      break;
                 default:
                    break  ;
        }
}


void SSD1106_Display(void)
{
  signed int i;
  //Word i;
  Byte x;
   WriteCmd(0x40);
 //@@
   WriteCmd(0);   // Column start address (0 = reset)
   WriteCmd(SS1106_LCDWIDTH); // Column end address (127 = reset)
 //  WriteCmd(0);   // Column start address (0 = reset)
 //  WriteCmd(SS1106_LCDWIDTH-1); // Column end address (127 = reset)

  WriteCmd(0xB0);
  WriteCmd(0); // Page start address (0 = reset)
  WriteCmd(7); // Page end address

  for (i = 0; i < (SS1106_LCDWIDTH*SS1106_LCDHEIGHT )/ 8; i++)
  {
    WriteDat (0x40);
    for (x = 0; x < 16; x++)
    {
      WriteDat(buffer[i]);
      i++;
    }
    i--;
  }
}

void Rabote(int k)
{
int i,j;
char dot ='.';
// char dot=32; // Space
WordToStrWithZeros(k,txt);
Print(txt); UART1_Write(9);
txt++;
// if (k<10000) *(txt)=dot;
 if (k<1000) {*(txt)=dot;  }
 if (k<100) {*(txt)=dot; *(txt+1)=dot; }
 if (k<10) {*(txt)=dot; *(txt+1)=dot; *(txt+2)=dot;}
 Print(txt); CRLF1();
 }


 void OLED_CLS(void)
{
     unsigned char m,n;
     WriteCmd(0x21); // Setup column start and end address
     WriteCmd(0);   //A[6:0] : Column start address, range : 0-127d,(RESET=0d)
     WriteCmd(127);  // B[6:0]: Column end address, range : 0-127d,(RESET =127d)
     WriteCmd(0x22);
     WriteCmd(0);
     WriteCmd(NB_PAGES);
     WriteCmd(0xD3); //-set display offset
     WriteCmd(0x40); //page 0 à 3
      OLED_SetPos(0,0);
        for(m=0;m<8;m++)  // was <8
        {
                WriteCmd(0xB0+m);                //page0-page1
                WriteCmd(0x00);                //l0x01  Low column start address
                WriteCmd(0x10);                //high column start address
                 Delay_us(10);
                for(n=0;n<132;n++)
               {
                    WriteDat(0x00);
                     Delay_us(20);
                }
        }
        WriteCmd(0x2E);
        OLED_SetPos(0,0);
}

void Hardware_Init()
{
  ANSELA=0x01;
  PORTA=0;
  Led_R_dir=0;
  Led_R=1;
  SQA_Dir=0;
  SQA=0;

  ANSELB=0;
  PORTB=0;
  TRISB=0xFF;

  ANSELC=0;
  PORTC=0;
  Chip_Sel_Dir=0; //RC0
  RES_dir =0 ; //RC1  reset de l'écran
  DC_mode_dir=0;    //RC2;
  Sck_dir=0;   // RC3 horloge de synchronisation  SPI
  MOSI_dir=0;  //RC5;
  Chip_Sel=0;
  Sck=0;
  DC_mode=0;
  RES=0;
  MOSI=0;
  
}

void SSD1106_ClearDisplay(void)
 {
  unsigned int i;
  for (i=0; i < 1059; i++) buffer[i] = 0;
 // for (i=0; i < (  (SSD1306_LCDWIDTH*SSD1306_LCDHEIGHT) / 8); i++) buffer[i] = 0;
}


//Display picture for Page Addressing Mode
void Display_Picture(unsigned const char * pic)
 {
  int k;
  unsigned char i,j,num=0;
      for(i=0; i<8; i++)
       {
       Set_Page_Address(i);
        Set_Column_Address(0x04);  //@@@ was 0
          WriteCmd(0x40);
            for(j=0; j<128; j++)
            {
              k=i*0x80+j;
              WriteDat(*(pic+k));
            }
      }
 }


// main function
void main()
{
 #ifdef FOSC_INTERNE
  OSCCON = 0b01110010  ; //0x72 ;     //Oscillateur à 16Mhz
  //OSCTUNE.PLLEN=0 ;
  OSCTUNE=0;
  //OSCCON = 0b01110000  ; //0x70 ;     //Oscillateur à 16Mhz (avec PLL)
  OSCTUNE.PLLEN=0; //Oscillateur à 16Mhzx4= 64MHz
  while (OSCCON.HFIOFS==0); // wait stable oscillator
  //#else
  // Q=20Mhz
  #endif

  Hardware_Init();
  for (i=0;i<16;i++)
  {
     _asm btg LATA,4 ;
     Delay_ms(100);
    }
  for (i=0;i<6;i++)
  {
     Led_R=0;
     Delay_ms(500);
     Led_R=1;
     Delay_ms(500);
     }
  i1=0;
  Index1=0;
  DataReady1=0;
  CptFO1=CptFE1=0;
  for (i=0;i<sizeof(TEXTE);i++) TEXTE[i]=0;
  txt=TEXTE;
  UART1_Init(115200);
  UART_Set_Active(&UART1_Read, &UART1_Write, &UART1_Data_Ready, &UART1_Tx_Idle);
  Delay_ms(200);

  // ---- Presentation ---------------
  UART1_Write(CLS);
  CRLF1();
  CPrint(" MCU : " MCU"\r\n");
  CPrint(" Power supply: "POWER_Supply"\r\n");
  CPrint(" Directory : " Directory"\r\n");
  CPrint(" Projet : " Project"\r\n");
  CPrint(" Source : "Source" version "Version"\r\n");
  CPrint(" Autres : "OTHER"\r\n");
  CPrint(" Config : "Config"\r\n");
  CPrint(" FOSC  : " FOSC"\r\n");
  CPrint(" Hardware : " HARDWARE"\r\n");
  CRLF1()    ;
  Led_R=OFF;
  Delay_1sec();     // wait a second
  CPrint(" Advanced SPI Hardware Init RC0=Cs  RC3=SCKL  RC5=MOSI \r\n");
 //  SPI1_Init_Advanced(unsigned short master_slav, unsigned short data_sample, unsigned short clock_idle, unsigned short transmit_edge);
  SPI1_Init_Advanced(_SPI_MASTER_OSC_DIV64, _SPI_DATA_SAMPLE_MIDDLE, _SPI_CLK_IDLE_HIGH,_SPI_LOW_2_HIGH);
  SPI_Set_Active(&SPI1_Read, &SPI1_Write); // Sets the SPI1 module active
 
 //*** test ci dessous OK *****
 /*  CPrint(" test SPI with SQA analyser\r\n");
     Chip_Sel=0;
     SQA=1;
     Delay_us(1);
     SQA=0;
     SPI1_Write(0x01);
     SPI1_Write(0x02);
     SPI1_Write(0x04);
     SPI1_Write(0x55);
     SPI1_Write(0xAA);
     SPI1_Write(0x80);
     SPI1_Write(0x40);
     SPI1_Write(0x22);
     SPI1_Write(0x11);
     SPI1_Write(0x00);
     Chip_Sel=1;
    // SQA=0;
     Led_R=0;
     Delay_ms(1000);
     Led_R=1;
      Delay_ms(1000);
 */

  CPrint(" Init (A) OLED 1,3\" SSD1106 LCD 128x64\r\n");
   RES=1;
   Delay_ms(100);
   RES=0;
   Delay_ms(1000);
   RES=1;
   Delay_ms(1000);
   Chip_Sel=0;
   SPI1_Write(0xAE);    // display OFF
   i=0;
    SQA=1;
   Chip_Sel=0;
   SQA=0;
   do
   {
     Led_R=0;
    SPI1_Write(Init_A_Chaine[i]);
    Led_R=1;
   //SQA=0;
  i++ ;
   }while (Init_A_Chaine[i]<0xFF) ;
 do
  {
   SQA=0;
   RES=1;
   Chip_Sel=1;
   Delay_ms(100);
   Chip_Sel=0;
   OLED_CLS();
   OLED_SetPos(0,0);
   Write_Char_At(4,0,'A');
   Write_Char_At(124,0,'Z');
   Delay_ms(2000);
   OLED_CLS();

  CPrint(" ABCD page 0\r\n");
   Chip_Sel=0;
   OLED_CLS();
   OLED_SetPos(0,0);
   Write_Char_At(4,0,'A');
    Write_Char_At(12,0,'B');
     Write_Char_At(20,0,'C');
      Write_Char_At(28,0,'D');
       Chip_Sel=1;
        Delay_ms(1000);
   CPrint(" EFGH page 1\r\n");
   Chip_Sel=0;
   Write_Char_At(36,1,'E');
    Write_Char_At(44,1,'F');
     Write_Char_At(52,1,'G');
      Write_Char_At(60,1,'H');
       Chip_Sel=1;
       Delay_ms(1000);
   CPrint(" IJKL  page 2\r\n");
   Chip_Sel=0;
   Write_Char_At(68,2,'I');
    Write_Char_At(76,2,'J');
     Write_Char_At(84,2,'K');
      Write_Char_At(92,2,'L');
       Chip_Sel=1;
        Delay_ms(1000);
   CPrint(" MNO  page 3\r\n");
   Chip_Sel=0;
   Write_Char_At(100,3,'M');
    Write_Char_At(108,3,'N');
     Write_Char_At(116,3,'O');
       Write_Char_At(124,3,'P');
       Chip_Sel=1;
   CPrint(" PQRST page 4\r\n");
   Chip_Sel=0;
   Write_Char_At(4,4,'Q');
    Write_Char_At(12,4,'R');
     Write_Char_At(20,4,'S');
       Write_Char_At(28,4,'T');
       Chip_Sel=1;
   Delay_ms(1000);
   _asm btg LATA,4
   
    strConstRamCpy(CRam1,"123456789012345678901");
    Print(CRam1);CRLF1();
    OLED_ShowStr(4,5,CRam1,1);
     strConstRamCpy(CRam1,"Hello Chaps ");
    Print(CRam1);CRLF1();
    OLED_ShowStr(4,6,CRam1,1);
      strConstRamCpy(CRam1,"How are you ");
    Print(CRam1);CRLF1();
    OLED_ShowStr(4,6,CRam1,1);
    Delay_ms(2000);

    CPrint(" Display taille 1 \r\n");
    OLED_CLS();
    OLED_SetPos(0,0);
    strConstRamCpy(CRam1,"Taille 1 01234567 ") ;
    OLED_ShowStr(4,0,CRam1,1);
    strConstRamCpy(CRam1,"ABC 0123") ;
    OLED_ShowStr(4,1,CRam1,1);
    Delay_2sec();
    CPrint(" Display taille 2 \r\n");
    strConstRamCpy(CRam1,"Taille 2 012345") ;
    OLED_ShowStr(4,2,CRam1,2);
    Delay_2sec();
    strConstRamCpy(CRam1,"ABC 0123") ;
    OLED_ShowStr(4,4,CRam1,2);
    Delay_2sec();
    strConstRamCpy(CRam1,"derniere ligne    ") ;
    OLED_ShowStr(4,6,CRam1,1);
    Delay_2sec();
    CRLF1();

    CPrint(" image4 128x64 (C) cheval \r\n");
  SSD1106_ClearDisplay();
  //SSD1106_DrawBMP(0,0, cheval,127,63) ;
  p1=&cheval[0];
  Display_Picture(p1)  ;
  SSD1106_Display();
  Delay_2sec();  Delay_2sec();
//  p1=&Monroe_128x64[0] ;
//   Display_Picture(p1)  ;
//  SSD1106_Display();
// Delay_2sec();  Delay_2sec();
   SSD1106_ClearDisplay();
  p1=&Vumetre[0] ;
   Display_Picture(p1)  ;
  SSD1106_Display();
  Delay_2sec();  Delay_2sec();
   SSD1106_ClearDisplay();
  p1=&truck_bmp[0];
   Display_Picture(p1)  ;
  SSD1106_Display();
  Delay_2sec();  Delay_2sec();
  
  

  
  
  
  
  
  }
  while(1);

  //---------------------------------------


  asm reset;

}