Часы-термометр

PRC
Онлайн
Зарегистрирован: 03.02.2019

Проект выходного дня. Дисплей 12864ZW подключен по последовательному интерфейсу (подключение показано в соответствии с нумерацией дисплея схемы, у оригинала нумерация справа налево). Наружний датчик - DHT22, внутренний - BME280, часы - DS3231, пищалка - пассивный пьезоэлемент (есть возможность поставить и активный, в прошивке заложены оба варианта), все управляется ардуиной микро mega328P. Т.к. индикатор хочет 3.3В питания пришлось поставить стабилизатор на LM317 (первое что попало под руку). Все управление и настройки делаются через терминал.

PRC
Онлайн
Зарегистрирован: 03.02.2019

В прошивке не использованы сторонние библиотеки, все свое))

Основной скетч:

/* Часы-термометр
 * Индикация - 12864ZW работающий в последовательном режиме
 * * E      - D13
 * * R/W    - D11
 * * RS     - D10
 * * RESET  - D9 
 * Часы - DS3231
 * Уличный датчик - DHT22
 * Комнатный датчик - BME280
 * I2C
 ** A5 - SCL
 ** A4 - SDA
 * Управление и настройка через терминал
 ** Установка времени: T 23:59:59
 ** Установка даты: D 31.12.18
 ** Сигнал каждый час: S 0/1 08-22
 ** Шрифт часов: B 0/1
 ** Текущие настройки: R
 * Сохранение настроек в DS3231
 * 0x07 - Время включения сигнала каждый час
 * 0х08 - Время выключения сигнала каждый час
 * 0х09 - Сигнал каждый час вкл/выкл
 * 0x0B - Шрифт часов
 * 0x0C - Коррекция влажности DHT22. Старший нибл знак, младший значение
*/
#include "mIO.h"
#include "mI2C.h"
#include "mDHT.h"
#include "mST7290.h"
#include "mBME280.h"

#define DS3231        0x68
#define pinSound      8
#define pinSoundPower 7
unsigned char buffer[512];                       // Буфер экрана
unsigned char sound_en=0,sound_on=0,sound_off=0;  // Сигнал каждый час
unsigned char ds[0x12];                           // Буфер DS3231
unsigned int temp_out;                            // Температура на улице
unsigned int hum_out;                             // Влажность на улице
unsigned char cmd,arg1,arg2,arg3;                 // Аргументы в команде
int temp_in;                                      // Температура в доме
int hum_in;                                       // Влажность в доме
int press_in;                                     // Давление
unsigned char bold=0;                             // Шрифт часов
char hum_corr=0;                                  // Коррекция влажности DHT22
void setup() {
  Serial.begin(9600);
  Serial.println("Meteo-12864ZW started");
  Serial.println("Set time: \"T 23:59:59\"");
  Serial.println("Set date: \"D 31.12.18\"");
  Serial.println("Set sound: \"S 0/1 8-23\"");
  Serial.println("Set correction: \"K -9...9\"");
  Serial.println("Bold font: \"B 0/1\"");
  Serial.println("Read setting: \"R\"");
  // Сигнал каждый час
  pinMode(pinSound,OUTPUT);
  digitalWrite(pinSound,LOW);
  // Питание для бипера, если используется активный зумер
  pinMode(pinSoundPower,OUTPUT);
  digitalWrite(pinSoundPower,LOW);
  // Переферия инициализация и начальная настройка
  unsigned char tmp[6];
  Serial.print("I2C...");
  I2c_Init();
  Serial.println("OK"); Serial.print("BME280...");
  hum_corr=BME280_Init();
  if(!hum_corr) Serial.println("OK");
  else Serial.println("ERROR");
  Serial.print("ST7290...");
  ST7290_Init();
  Serial.println("OK"); Serial.print("DHT22...");
  hum_corr=DHT_Init();
  if(!hum_corr) Serial.println("OK");
  else Serial.println("ERROR");
  // Первоначальный запуск DS3231
  Serial.println("Read setting");
  Read_I2C(DS3231,0x0E,2,tmp);
  if(tmp[1] & 0x80)
  {
    Serial.println("DS3231 restarted. Check time and date");
    tmp[0]=0x20;tmp[1]=8;
    Write_I2C(DS3231,0x0E,2,tmp);
  }  
    Serial.println("Read OK");
  // Чтение настроек
  Read_I2C(DS3231,0x07,6,tmp);
  sound_on=tmp[0];sound_off=tmp[1];sound_en=tmp[2];
  bold=tmp[4];
  if(tmp[5] & 0xF0) hum_corr=0-(tmp[5] & 0x0F);
  else hum_corr=tmp[5];
      Write_Scr();
  Serial.println("Setup end");
}
char tmp=0;
int dht_delay=1;
int bme280_delay=2;
void loop() {
  Read_I2C(DS3231,0,0x12,ds);
  if(tmp!=ds[0])
  {
    // Oпрос датчиков раз в минуту
    dht_delay--;
    if(!dht_delay)
    {
    if(!Read_DHT()) dht_delay=60;
    else dht_delay=2;
    }
    bme280_delay--;
    if(!bme280_delay) {Read_BME280();bme280_delay=60;}
    // Сигнал каждый час
    if(!ds[1] && !ds[0] && sound_en)
    {
      if(ds[2]>=sound_on && ds[2]<=sound_off)
      {
        digitalWrite(pinSoundPower,HIGH);
        tone(8,2000,300);
        delay(300);
        digitalWrite(pinSoundPower,LOW);
      }
    }
    Write_Scr();
    tmp=ds[0];
  }
  if(Serial.available())
  {
    tmp=input_str();
    if(cmd=='T') {ds[2]=arg1;ds[1]=arg2;ds[0]=arg3;Write_I2C(DS3231,0,3,ds);}
    if(cmd=='D')
    {
      ds[4]=arg1;ds[5]=arg2;ds[6]=arg3;
      ds[3]=calc_day();
      Write_I2C(DS3231,3,4,&ds[3]);
    }    
    if(cmd=='S') 
    {
      ds[9]=sound_en=arg1;ds[7]=sound_on=arg2;ds[8]=sound_off=arg3;
      Write_I2C(DS3231,0x07,3,&ds[0x07]);
    }
    if(cmd=='R') {Read_I2C(DS3231,0,0x12,ds);write_all_data(ds);}
    if(cmd=='B') 
    {
      if(arg1) bold=0xFF;
      else bold=0;
      Write_byte_I2C(DS3231,0x0B,bold);
    }
    if(cmd=='K')
    {
      hum_corr=arg1;
      if(hum_corr<0) Write_byte_I2C(DS3231,0x0C,0x10+(0-hum_corr));
      else Write_byte_I2C(DS3231,0x0C,hum_corr);
    }
  }
  delay(250);
}

Управление дисплеем:

//***************************************************************************************
// Заголовок, файл *.h
void ST7290_Init();
void Write_CMD(unsigned char i);
void Write_DATA(unsigned char i);
void Write_Low_Buffer();
void Write_High_Buffer();

// Файл реализации *.cpp
#include "Arduino.h"
#include <SPI.h>
// Bit 2 = RW
// Bit 1 = RS
#define WR_CMD  0xF8
#define WR_DATA 0xFA
#define RESET   9
#define SS      10
extern unsigned char buffer[];
//***************************************************************************************
//* Запись команды
//***************************************************************************************
void Write_CMD(unsigned char i)
{
  digitalWrite(SS,HIGH);
  SPI.transfer(WR_CMD);
  SPI.transfer(i & 0xF0);
  SPI.transfer(i<<4);
  digitalWrite(SS,LOW);
  delayMicroseconds(1000);
}
//***************************************************************************************
//* Запись данных
//***************************************************************************************
void Write_DATA(unsigned char i)
{
  digitalWrite(SS,HIGH);
  SPI.transfer(WR_DATA);
  SPI.transfer(i & 0xF0);
  SPI.transfer(i<<4);
  digitalWrite(SS,LOW);
  delayMicroseconds(50);
}
//***************************************************************************************
//* Вывод буфера
//***************************************************************************************
void Write_Low_Buffer()
{
  int pos=0;
  for(int i=0;i<32;i++)
  {
    Write_CMD(0x80+i);
    Write_CMD(0x80);  
    for(int j=0;j<16;j++) Write_DATA(buffer[pos++]);
  }
}
//***************************************************************************************
void Write_High_Buffer()
{
  int pos=0;
  for(int i=0;i<32;i++)
  {
    Write_CMD(0x80+i);
    Write_CMD(0x88);  
    for(int j=0;j<16;j++) Write_DATA(buffer[pos++]);
  }
}
//***************************************************************************************
//* Очистить графический экран
//***************************************************************************************
void Clear_Scr()
{
  for(int i=0;i<32;i++)
  {
    Write_CMD(0x80+i);
    Write_CMD(0x80);  
    for(int j=0;j<32;j++) Write_DATA(0);
  }  
}
//***************************************************************************************
// * Init
//***************************************************************************************
void ST7290_Init()
{
  pinMode(SS,OUTPUT);
  digitalWrite(SS,LOW);
  pinMode(RESET,OUTPUT);
  pinMode(11,OUTPUT);
  pinMode(13,OUTPUT);
  // Reset display
  digitalWrite(RESET,LOW);
  delay(100); 
  digitalWrite(RESET,HIGH);
  //
  SPI.begin();
  SPI.setDataMode(SPI_MODE3);
  SPI.setBitOrder(MSBFIRST);
  // Init display
  Write_CMD(0x01);
  Write_CMD(0x06);
  Write_CMD(0x0C);
  Write_CMD(0x34);
  Write_CMD(0x36);
}

Чтение DHT22:

//***************************************************************************************
// Заголовок, файл *.h
char DHT_Init();
unsigned char Read_DHT();

// Файл реализации *.cpp
#include "Arduino.h"
#define pinDHT  2
extern unsigned int temp_out;
extern unsigned int hum_out;
//***************************************************************************************
//* 
//***************************************************************************************
unsigned char Read_DHT()
{
  unsigned char dht[5];
  temp_out=32767;
  digitalWrite(pinDHT,LOW);
  delay(10);
  pinMode(pinDHT,INPUT);
  delayMicroseconds(70);
  if(digitalRead(pinDHT)) {pinMode(pinDHT,OUTPUT);digitalWrite(pinDHT,HIGH);return 0xFF;}
  delayMicroseconds(80);
  if(!digitalRead(pinDHT)) {pinMode(pinDHT,OUTPUT);digitalWrite(pinDHT,HIGH);return 0xFF;}
  // Начало чтения датчика
  while (digitalRead(pinDHT));
  for (unsigned char j=0; j<5; j++)
  {
    dht[j]=0;
    for(unsigned char i=0; i<8; i++)
    {
      while (!(digitalRead(pinDHT)));
      delayMicroseconds(30);
      if (digitalRead(pinDHT))dht[j]|=1<<(7-i);
      while (digitalRead(pinDHT));
    }
  }
  pinMode(pinDHT,OUTPUT);digitalWrite(pinDHT,HIGH);
  // KC
  unsigned char ks=dht[0]+dht[1]+dht[2]+dht[3];
  if(ks!=dht[4]) return 0x80;
  // Округление до целого значения
  hum_out=dht[0]<<8; hum_out+=dht[1];hum_out/=10;
  temp_out=dht[2]<<8;temp_out+=dht[3];
  if(temp_out & 0x8000)
  {
    temp_out=temp_out & 0x7FFF;
    temp_out/=10;
    temp_out |=0x8000;
  }
  else temp_out/=10;
  return 0;
}
//***************************************************************************************
// DHT Init
//***************************************************************************************
char DHT_Init()
{
  pinMode(pinDHT,OUTPUT);
  digitalWrite(pinDHT,HIGH);
  return (char) Read_DHT();
}

Шина I2C:

//***************************************************************************************
// Заголовок, файл *.h
void I2c_Init();
void Write_I2C (unsigned char device,unsigned char adr,unsigned char count,unsigned char *data);
void Read_I2C(unsigned char device,unsigned char adr,unsigned char count,unsigned char *data);
void Write_byte_I2C (unsigned char device,unsigned char adr,unsigned char data);
unsigned char Read_byte_I2C(unsigned char device,unsigned char adr);

// Файл реализации *.cpp
#include "Arduino.h"
#include <Wire.h>
//***************************************************************************************
// * Init
//***************************************************************************************
void I2c_Init()
{
  Wire.begin();
  Wire.setClock(400000);
}
//***************************************************************************************
//* Запись I2C
//***************************************************************************************
void Write_I2C (unsigned char device,unsigned char adr,unsigned char count,unsigned char *data)
{
  Wire.beginTransmission(device);
  Wire.write(adr);
  for(char i=0;i<count;i++) Wire.write(data[i]);
  Wire.endTransmission();
}
//***************************************************************************************
//* Чтение I2C
//***************************************************************************************
void Read_I2C(unsigned char device,unsigned char adr,unsigned char count,unsigned char *data)
{
  char i=0;
  // Установить адрес
  Wire.beginTransmission(device);
  Wire.write(adr);
  Wire.endTransmission();
  // Считать данные
  Wire.beginTransmission(device);
  Wire.requestFrom(device, count);
  while(Wire.available()){data[i++] = Wire.read();}
  Wire.endTransmission();
}
//***************************************************************************************
//* Запись байта в I2C
//***************************************************************************************
void Write_byte_I2C (unsigned char device,unsigned char adr,unsigned char data)
{
  Wire.beginTransmission(device);
  Wire.write(adr);
  Wire.write(data);
  Wire.endTransmission();
}
//***************************************************************************************
//* Чтение байта из I2C
//***************************************************************************************
unsigned char Read_byte_I2C(unsigned char device,unsigned char adr)
{
  char i=0;
  // Установить адрес
  Wire.beginTransmission(device);
  Wire.write(adr);
  Wire.endTransmission();
  // Считать данные
  Wire.beginTransmission(device);
  Wire.requestFrom(device,(unsigned char) 1);
  unsigned char c = Wire.read();
  Wire.endTransmission();
  return c;
}

Чтение BME280:

//***************************************************************************************
// Заголовок, файл *.h
char BME280_Init();
void Read_BME280();

// Файл реализации *.cpp
#include "Arduino.h"
#include "mI2C.h"

#define BME280  0x76
#define BME280_CONFIG       0xF5
#define BME280_CONTROL_HUM  0xF2
#define BME280_SOFTRESET    0xE0
#define BME280_CHIPID       0xD0
#define BME280_STATUS       0XF3
#define BME280_CTRL_HUM     0xF2
#define BME280_CTRL_MEAS    0xF4
#define BME280_PRESS        0xF7  // 0xF7-0xF9
#define BME280_TEMP         0xFA  // 0xFA-0xFC
#define BME280_HUM          0xFD  // 0xFD-0xFE

#define BME280_RESET_CODE   0xB6
#define BME280_MEASURING    0x08
#define BME280_UPDATE       0x01

#define BME280_STBY_0_5     0x00
#define BME280_STBY_62_5    0x20
#define BME280_STBY_125     0x40
#define BME280_STBY_250     0x60
#define BME280_STBY_500     0x80
#define BME280_STBY_1000    0xA0
#define BME280_STBY_10      0xC0
#define BME280_STBY_20      0xE0

#define BME280_FILTER_OFF   0x00
#define BME280_FILTER_2     0x04
#define BME280_FILTER_4     0x08
#define BME280_FILTER_8     0x0C
#define BME280_FILTER_16    0x10

#define BME280_MODE_SLEEP   0x00
#define BME280_MODE_FORCED  0x01
#define BME280_MODE_NORMAL  0x03

#define BME280_OSRS_T_SKIP  0x00
#define BME280_OSRS_T_x1    0x20
#define BME280_OSRS_T_x2    0x40
#define BME280_OSRS_T_x4    0x60
#define BME280_OSRS_T_x8    0x80
#define BME280_OSRS_T_x16   0xA0
#define BME280_OSRS_P_SKIP  0x00
#define BME280_OSRS_P_x1    0x04
#define BME280_OSRS_P_x2    0x08
#define BME280_OSRS_P_x4    0x0C
#define BME280_OSRS_P_x8    0x10
#define BME280_OSRS_P_x16   0x14
#define BME280_OSRS_H_SKIP  0x00
#define BME280_OSRS_H_x1    0x01
#define BME280_OSRS_H_x2    0x02
#define BME280_OSRS_H_x4    0x03
#define BME280_OSRS_H_x8    0x04
#define BME280_OSRS_H_x16   0x05

unsigned int dig_T1;
int dig_T2;
int dig_T3;
unsigned int dig_P1;
int dig_P2;
int dig_P3;
int dig_P4;
int dig_P5;
int dig_P6;
int dig_P7;
int dig_P8;
int dig_P9;
unsigned char dig_H1;
int dig_H2;
unsigned char dig_H3;
int dig_H4;
int dig_H5;
char dig_H6;

extern int temp_in;
extern int hum_in;
extern int press_in;

uint32_t t_fine;
//***************************************************************************************
//* Init
//***************************************************************************************
char BME280_Init()
{
  unsigned char tmp[24];
  int del=100;
  // Soft reset
  Write_byte_I2C(BME280,BME280_SOFTRESET,BME280_RESET_CODE);
  do
  {
    del--;delay(1);  
  }
  while (Read_byte_I2C(BME280,BME280_STATUS) & BME280_UPDATE && del);
  if(!del) return -1;
  // Read trimming parameters
  Read_I2C(BME280,0x88,24,tmp);
  dig_T1=(unsigned int) tmp[1]<<8 | tmp[0];
  dig_T2=(int) tmp[3]<<8 | tmp[2];
  dig_T3=tmp[5]<<8 | tmp[4];
  //
  dig_P1=(unsigned int) tmp[7]<<8 | tmp[6];
  dig_P2=(int) tmp[9]<<8 | tmp[8];
  dig_P3=(int) tmp[11]<<8 | tmp[10];
  dig_P4=(int) tmp[13]<<8 | tmp[12];
  dig_P5=(int) tmp[15]<<8 | tmp[14];
  dig_P6=(int) tmp[17]<<8 | tmp[16];
  dig_P7=(int) tmp[19]<<8 | tmp[18];
  dig_P8=(int) tmp[21]<<8 | tmp[20];
  dig_P9=(int) tmp[23]<<8 | tmp[22];
  //
  dig_H1=Read_byte_I2C(BME280,0xA1);
  Read_I2C(BME280,0xE1,7,tmp);
  dig_H2=(int) tmp[1]<<8 | tmp[0];
  dig_H3=tmp[2];
  dig_H4=(int) (tmp[3] << 4) | (tmp[4] & 0x0F);
  dig_H5=(int) (tmp[5] << 4) | ((tmp[4] >> 4) & 0x0F);
  dig_H6=tmp[6];
  // Init
  Write_byte_I2C(BME280,BME280_CTRL_HUM,BME280_OSRS_H_x4);
  Write_byte_I2C(BME280,BME280_CTRL_MEAS,BME280_OSRS_T_x4 | BME280_OSRS_P_x4);
  Write_byte_I2C(BME280,BME280_CONFIG,BME280_STBY_1000 | BME280_FILTER_4);
  Write_byte_I2C(BME280,BME280_CTRL_MEAS,BME280_OSRS_T_x4 | BME280_OSRS_P_x4 | BME280_MODE_FORCED);
  return 0;
}
//***************************************************************************************
//* Чтение температуры
//***************************************************************************************
void Read_Temp(uint32_t temp_raw)
{
  int32_t var1, var2;
  var1 = ((((temp_raw>>3)-((int32_t)dig_T1<<1)))*((int32_t)dig_T2))>>11;
  var2 = (((((temp_raw>>4)-((int32_t)dig_T1))*((temp_raw>>4)-((int32_t)dig_T1)))>>12)*((int32_t)dig_T3))>>14;
  t_fine = var1 + var2;
  temp_in = (t_fine * 5 + 128) >> 8;
  temp_in=temp_in/100;
}
//***************************************************************************************
//* Чтение давления
//***************************************************************************************
void Read_Pressure(uint32_t press_raw)
{
  int64_t var1, var2, p; 
  uint32_t t;
  var1 = ((int64_t)t_fine)-128000;
  var2 = var1 * var1 * (int64_t)dig_P6;
  var2 = var2 + ((var1*(int64_t)dig_P5)<<17);
  var2 = var2 + (((int64_t)dig_P4)<<35);
  var1 = ((var1 * var1 * (int64_t)dig_P3)>>8) + ((var1 * (int64_t)dig_P2)<<12);
  var1 = (((((int64_t)1)<<47)+var1))*((int64_t)dig_P1)>>33;
  if (var1 == 0) return; // avoid exception caused by division by zero
  p = 1048576-press_raw;
  p = (((p<<31)-var2)*3125)/var1;
  var1 = (((int64_t)dig_P9) * (p>>13) * (p>>13)) >> 25;
  var2 = (((int64_t)dig_P8) * p) >> 19;
  p = ((p + var1 + var2) >> 8) + (((int64_t)dig_P7)<<4);
  t=((int32_t)p)/256;
  t*=1000;
  t/=133322;
  press_in=t;
}
//***************************************************************************************
//* Чтение влажности
//***************************************************************************************
void Read_Hum(uint32_t hum_raw)
{
  int32_t var1;
  var1 = (t_fine - ((int32_t)76800));
  var1 = (((((hum_raw << 14) - (((int32_t)dig_H4) << 20) - (((int32_t)dig_H5) * var1)) +
  ((int32_t)16384)) >> 15) * (((((((var1 * ((int32_t)dig_H6)) >> 10) * (((var1 *
  ((int32_t)dig_H3)) >> 11) + ((int32_t)32768))) >> 10) + ((int32_t)2097152)) *
  ((int32_t)dig_H2) + 8192) >> 14));
  var1 = (var1 - (((((var1 >> 15) * (var1 >> 15)) >> 7) * ((int32_t)dig_H1)) >> 4));
  var1 = (var1 < 0 ? 0 : var1);
  var1 = (var1 > 419430400 ? 419430400 : var1);
  hum_in = ((uint32_t)(var1 >> 12))/1024;
}
//***************************************************************************************
//* Чтение всех значение из BME280
//***************************************************************************************
void Read_BME280()
{
  // Restart
  Write_byte_I2C(BME280,BME280_CTRL_MEAS,BME280_OSRS_T_x4 | BME280_OSRS_P_x4 | BME280_MODE_FORCED);
  int32_t temp;
  unsigned char tmp[3];
  //
  Read_I2C(BME280,BME280_TEMP,3,tmp);
  temp=(int32_t)tmp[0]<<12 | tmp[1]<<4 | tmp[2]>>4;
  if(temp==0x8220){temp_in=32767;return;}
  Read_Temp(temp);
  //
  Read_I2C(BME280,BME280_PRESS,3,tmp);
  temp=(int32_t)tmp[0]<<12 | tmp[1]<<4 | tmp[2]>>4;
  Read_Pressure(temp);
	//
  Read_I2C(BME280,BME280_HUM,2,tmp);
  temp=(int32_t)tmp[0]<<8 | tmp[1];
  Read_Hum(temp);
}

Общие подпрограммы ввода-вывода и служебные:

//***************************************************************************************
// Заголовок, файл *.h
unsigned char calc_day();
void Write_Scr();
unsigned char input_str();
void write_all_data(unsigned char *data);

// Файл реализации *.cpp
#include "Arduino.h"
#include <avr/pgmspace.h>
#include "flash_pic.h"
#include "mDHT.h"
#include "mST7290.h"

#define DS3231  0x68
extern unsigned char buffer[];
extern unsigned char ds[];
extern unsigned int temp_out;
extern unsigned int hum_out;
extern unsigned char cmd,arg1,arg2,arg3;
extern unsigned char sound_en,sound_on,sound_off;
extern int temp_in;
extern int hum_in;
extern int press_in;
extern unsigned char bold;
extern char hum_corr;
//***************************************************************************************
//* Вычисление дня недели
//***************************************************************************************
unsigned char calc_day()
{
  const char months[]={5,1,1,4,6,2,4,0,3,5,1,3};
  int year=(ds[6]/16)*10+(ds[6]%16)+2000;
  char month=(ds[5]/16)*10+(ds[5]%16);
  char date=(ds[4]/16)*10+(ds[4]%16);
  // Високостный год
  if(!(year%4) && month<3) month=months[month-1]-1;
  else month=months[month-1];
  int day=year+year/4+month+date;
  day=(day%7)+1;
  return (unsigned char)day;
}
//***************************************************************************************
// Вывод параметров на терминал
//***************************************************************************************
void write_all_data(unsigned char *data)
{
  // Время
  if(data[2]<0x10) Serial.print('0');
  Serial.print(data[2],HEX);
  Serial.print(':');
  if(data[1]<0x10) Serial.print('0');
  Serial.print(data[1],HEX);
  Serial.print(':');
  if(data[0]<0x10) Serial.print('0');
  Serial.println(data[0],HEX);
  // Дата
  if(data[4]<0x10) Serial.print('0');
  Serial.print(data[4],HEX);
  Serial.print('.');
  if(data[5]<0x10) Serial.print('0');
  Serial.print(data[5],HEX);
  Serial.print('.');
  if(data[6]<0x10) Serial.print('0');
  Serial.print(data[6],HEX);
  Serial.print('-');
  Serial.println(data[3],HEX); 
  // Сигнал каждый час
  Serial.print("Signal every hour - ");
  if(sound_en) Serial.println("ON");
  else Serial.println("OFF");
  Serial.print("ON: ");
  if(sound_on<0x10) Serial.print('0');
  Serial.println(sound_on,HEX);
  Serial.print("OFF:");
  if(sound_off<0x10) Serial.print('0');
  Serial.println(sound_off,HEX);
  Serial.print("Humidity correction = ");
  Serial.println(hum_corr,DEC);
  Serial.print("Bold: ");
  if(bold) Serial.println("ON");
  else Serial.println("OFF");
}
//***************************************************************************************
//* Пропуск пустых значений
//***************************************************************************************
void skip_blank()
{
  while(Serial.peek()==' ') Serial.read();
}
//***************************************************************************************
//* Чтение команды
//***************************************************************************************
void read_cmd()
{
  skip_blank();
  cmd=Serial.read();
  if(cmd>='a') cmd-=0x20;
  skip_blank();
}
//***************************************************************************************
//* Проверка символа на цифру
//***************************************************************************************
unsigned char test_char(unsigned char tmp)
{
  if(0x2F<tmp && tmp<0x3A) return 0;
  else return 1;
} 
//***************************************************************************************
//* Проверка разделителя
//***************************************************************************************
unsigned char test_spare(unsigned char tmp)
{
  if(!(tmp=='.' || tmp==':' || tmp=='-' || tmp==' ' || tmp==','))return 1;
  else return 0;
}
//***************************************************************************************
//* Чтение параметра от 0 до 99
//* При ошибке возвращается 0xFF
//***************************************************************************************
unsigned char read_arg()
{
  unsigned char tmp,arg;
  arg=Serial.read();
  if(test_char(arg)) return 0xFF;
  arg-=0x30;
  tmp=Serial.peek();
  if(test_char(tmp)) return arg;
  arg=arg*16+(Serial.read()-0x30);
  tmp=Serial.peek();
  if(!test_char(tmp)) return 0xFF;
  return arg;
}
//***************************************************************************************
//* Чтение команды К, значение -9...+9
//***************************************************************************************
char read_corr()
{
  char tmp;
  arg2=arg3=0;
  tmp=Serial.read();
  if(tmp=='-')
  {
    tmp=Serial.read();
    if(!test_char(tmp)) tmp-=0x30;
    if(test_char(Serial.read()))
    {
      arg1=0-tmp;
      return 0;
    }
    else return 1;
  }
  if(!test_char(tmp)) tmp-=0x30;
  if(test_char(Serial.read()))
  {
    arg1=tmp;
    return 0;
  }
  else return 1;
}
//***************************************************************************************
//* Чтение 3 аргументов с разделителями
//***************************************************************************************
unsigned char read_args()
{
  // Получение 1 параметра
  arg1=read_arg();if(arg1==0xFF) return 1;
  if(test_spare(Serial.read()))return 2;
  // Получение 2 параметра
  arg2=read_arg();if(arg2==0xFF) return 3;
  if(test_spare(Serial.read()))return 4;
  // Получение 3 параметра
  arg3=read_arg();if(arg3==0xFF) return 5;
  return 0;   
}
//***************************************************************************************
//* Разбор входной строки
//***************************************************************************************
  unsigned char input_str() {
  unsigned char tmp=0xFF;
  // Разбор командной строки
  delay(100);
  Serial.print("Recive ");
  Serial.print(Serial.available(),DEC);
  Serial.println(" bytes.");

  read_cmd();
  if(cmd=='R') tmp=0;
  if(cmd=='K') tmp=read_corr();
  if(cmd=='B')
  {
    arg1=tmp=read_arg();
    if(tmp!=0xFF)tmp=0;
  }
  // Команды T,D,S
  if(cmd=='T' || cmd=='D' || cmd=='S') tmp=read_args();
  if(!tmp)
  {
    Serial.print("CMD=");Serial.println((char) cmd);
    Serial.print("ARG1=");Serial.println(arg1,HEX);
    Serial.print("ARG2=");Serial.println(arg2,HEX);
    Serial.print("ARG3=");Serial.println(arg3,HEX);
    Serial.println("OK:0");
  }
  else
  {
    Serial.print("ERR:");
    Serial.println(tmp,DEC);
  }
  while(Serial.available()) Serial.read();
  return tmp;
}
//***************************************************************************************
//* Вывод большого символа в буфер
//***************************************************************************************
void Write_Big_Char(unsigned int x, unsigned int y, unsigned int c)
{
  unsigned int sh,ch;
  //unsigned int ch;

  y*=16;
  sh=x/8;x=(x-sh*8)%8;
  c*=2;
  for(int i=0;i<24;i++)
  {
    if(bold) ch=pgm_read_byte_near(digit_big_bold+c)<<(8-x);
    else ch=pgm_read_byte_near(digit_big+c)<<(8-x);
    buffer[y+sh] |=ch>>8;
    buffer[y+sh+1] |=ch;
    if(bold) ch=pgm_read_byte_near(digit_big_bold+c+1)<<(8-x);
    else ch=pgm_read_byte_near(digit_big+c+1)<<(8-x);
    buffer[y+sh+1] |=ch>>8;
    buffer[y+sh+2] |=ch;
    y+=16;c+=20;
  }
}
//***************************************************************************************
//* Вывод символа в буфер
//***************************************************************************************
void Write_Char(unsigned int x, unsigned int y, unsigned int c)
{
  unsigned char sh;
  unsigned int ch;
  if(y>32) y-=32;
  y*=16;
  sh=x/8;x=(x-sh*8)%8;
  for(int i=0;i<12;i++)
  {
    ch=pgm_read_byte_near(digit+c)<<(8-x);
    buffer[y+sh] |=ch>>8;
    buffer[y+sh+1] |=ch;
    y+=16;c+=19;
  }
}
//***************************************************************************************
//* Вывод фазы луны 0-29
//***************************************************************************************
void Write_Moon()
{
  static char old_day=-1;
  static unsigned int phase;

  unsigned int year=2000;
  unsigned char month,date;
  double i,j;
  // Вычисление фазы луны
  if(old_day!=ds[4])
  {
    year+=(ds[6]>>4)*10+(ds[6] & 0xF);
    month=(ds[5]>>4)*10+(ds[5] & 0xF);
    date=(ds[4]>>4)*10+(ds[4] & 0xF);

    if(month<3) year--;

    i=modf(year/19.0,&j);
    i=round(i*209);
    i+=month;
    if(month<3) i+=12;
    i-=3;i+=date;
    i=modf(i/30.0,&j);
    i=round(i*30);
    phase=(unsigned char) i;
    old_day=ds[4];
  }
//  Вывод фазы луны
  int pos=28,z,pos_m;
  pos_m=phase*4;
  for(int i=0;i<30;i++)
  {
    z=pos;
    for(int j=0;j<4;j++)
    {
      buffer[pos++]=pgm_read_byte_near(moon+pos_m);
      pos_m++;
    }
    pos=z+16;pos_m+=116;
  }
}
//***************************************************************************************
//* Вывод дня недели
//***************************************************************************************
void Write_Day(unsigned char day)
{
  char c1=18,c2=18;
  if(day==1) {c1=10;c2=11;} // ВС 
  if(day==2) {c1=12;c2=13;} // ПН  
  if(day==3) {c1=10;c2=14;} // ВТ 
  if(day==4) {c1=11;c2=15;} // СР 
  if(day==5) {c1=04;c2=14;} // ЧТ 
  if(day==6) {c1=12;c2=14;} // ПТ 
  if(day==7) {c1=11;c2=16;} // СБ 
  Write_Char(0,10,c1); Write_Char(8,10,c2);  
}
//***************************************************************************************
//* Вывод данных в буфер
//***************************************************************************************
void Write_Scr()
{
  // Верхняя часть экрана
  for(int i=0;i<512;i++) buffer[i]=pgm_read_byte_near(main_screen+i);
  // Мигание точек
  if(ds[0] & 1)
  {
    buffer[117]=0;buffer[133]=0;
    buffer[373]=0;buffer[389]=0;
  } 
  // День недели
  Write_Day(ds[3]);
  // Время
  if(ds[2]>9) Write_Big_Char(17,4,ds[2]>>4); 
  Write_Big_Char(30,4,ds[2] & 0xF);  
  Write_Big_Char(48,4,ds[1]>>4); Write_Big_Char(61,4,ds[1] & 0xF);  
  // Дата
  Write_Char(75,2,ds[4]>>4); Write_Char(83,2,ds[4] & 0xF);  
  Write_Char(75,18,ds[5]>>4); Write_Char(83,18,ds[5] & 0xF);  
  // Фаза луны
  Write_Moon();
  Write_Low_Buffer();   
  // Нижняя часть экрана
  int j=0;
  for(int i=512;i<1024;i++) buffer[j++]=pgm_read_byte_near(main_screen+i);  
  // Температура и влажность на улице
  if(temp_out==32767)
  {
    // Ошибка датчика
    Write_Char(0,36,18); Write_Char(9,36,18); Write_Char(17,36,18); 
    Write_Char(9,50,18); Write_Char(17,50,18);
  }
  else
  {
    int tmp=temp_out;
    if(temp_out & 0x8000){Write_Char(0,36,18);tmp=temp_out & 0x7FFF;}
    else Write_Char(0,36,17);
    if(tmp>9) Write_Char(9,36,tmp/10);
    Write_Char(17,36,tmp % 10); 
    j=hum_out+(int)hum_corr;
    Write_Char(9,50,j/10); Write_Char(17,50,j % 10);
  }
  // Температура и влажность в доме
  if(temp_in==32767)
  {
    // Ошибка датчика
    Write_Char(87,36,18); Write_Char(95,36,18); Write_Char(103,36,18); 
    Write_Char(95,50,18); Write_Char(103,50,18);
    // Давление
    Write_Char(52,52,18); Write_Char(60,52,18); Write_Char(68,52,18); 
    Write_High_Buffer();
  }
  else
  {
    Write_Char(87,36,17); Write_Char(95,36,temp_in/10); Write_Char(103,36,temp_in%10); 
    Write_Char(95,50,hum_in/10); Write_Char(103,50,hum_in%10);
    // Давление
    Write_Char(52,52,press_in/100); Write_Char(60,52,(press_in%100)/10); Write_Char(68,52,press_in%10); 
    Write_High_Buffer();
  }  
}

Шрифты, фоновое изображение, фазы луны:

// П  Н  В  Т  С  Р  Ч  Т  П  T  С  Б  +  -
// 12,13,10,14,11,15,04,14,12,14,11,16,17,18
// Size: 8x12
// 0123456789ВСПНТРБ+-
const unsigned char digit[] PROGMEM = {
0x7C,0x10,0xFC,0xFC,0x82,0x7E,0x7E,0xFC,0x7C,0x7C,0xFC,0x7E,0x7C,0x82,0xEC,0x7C,
0x7E,0x00,0x00,0xBA,0x18,0x7A,0x7A,0xC6,0xBC,0xBC,0x7A,0xBA,0xBA,0xBA,0xBC,0xBA,
0xC6,0x7E,0x5A,0xBC,0x00,0x00,0xC6,0x18,0x06,0x06,0xC6,0xC0,0xC0,0x06,0xC6,0xC6,
0xC6,0xC0,0xC6,0xC6,0x10,0x66,0xC0,0x00,0x00,0xC6,0x18,0x06,0x06,0xC6,0xC0,0xC0,
0x06,0xC6,0xC6,0xC6,0xC0,0xC6,0xC6,0x18,0x66,0xC0,0x30,0x00,0xC6,0x18,0x06,0x06,
0xC6,0xC0,0xC0,0x06,0xC6,0xC6,0xC6,0xC0,0xC6,0xC6,0x18,0x66,0xC0,0x30,0x00,0x82,
0x08,0x3A,0x7A,0xBA,0xBC,0xBC,0x06,0x7A,0xBA,0xBA,0x80,0x42,0xBA,0x08,0x5A,0xB8,
0xDC,0xF8,0x44,0x10,0x7C,0x7C,0x7C,0x7A,0x7A,0x04,0xFC,0x7C,0x7C,0x40,0x84,0x7C,
0x10,0x3C,0x7C,0xEC,0x7C,0xC6,0x18,0xC0,0x06,0x02,0x06,0xC6,0x06,0xC6,0x06,0xC6,
0xC0,0xC6,0xC6,0x18,0x60,0xC6,0x30,0x00,0xC6,0x18,0xC0,0x06,0x06,0x06,0xC6,0x06,
0xC6,0x06,0xC6,0xC0,0xC6,0xC6,0x18,0x60,0xC6,0x30,0x00,0xC6,0x18,0xC0,0x06,0x06,
0x06,0xC6,0x06,0xC6,0x06,0xC6,0xC0,0xC6,0xC6,0x18,0x60,0xC6,0x00,0x00,0xBA,0x18,
0xBC,0x7A,0x06,0x7A,0xBA,0x06,0xBA,0x7A,0xBA,0xBC,0xC6,0xC6,0x18,0x60,0xBA,0x00,
0x00,0x7C,0x08,0x7E,0xFC,0x02,0xFC,0x7C,0x04,0x7C,0xFC,0xFC,0x7E,0x82,0x82,0x08,
0x40,0xFC,0x00,0x00
};
const unsigned char digit_big_bold[] PROGMEM = {
0x7F,0xE0,0x01,0x00,0xFF,0xE0,0xFF,0xE0,0x80,0x10,0x7F,0xF0,0x7F,0xE0,0xFF,0xE0,
0x7F,0xE0,0x7F,0xE0,0xBF,0xD0,0x03,0x80,0x7F,0xD0,0x7F,0xD0,0xC0,0x30,0xBF,0xE0,
0xBF,0xF0,0x7F,0xD0,0xBF,0xD0,0xBF,0xD0,0xDF,0xB0,0x03,0x80,0x3F,0xB0,0x3F,0xB0,
0xE0,0x70,0xDF,0xC0,0xDF,0xE0,0x3F,0xB0,0xDF,0xB0,0xDF,0xB0,0xE0,0x70,0x03,0x80,
0x00,0x70,0x00,0x70,0xE0,0x70,0xE0,0x00,0xE0,0x00,0x00,0x70,0xE0,0x30,0xE0,0x70,
0xE0,0x70,0x03,0x80,0x00,0x70,0x00,0x70,0xE0,0x70,0xE0,0x00,0xE0,0x00,0x00,0x70,
0xE0,0x30,0xE0,0x70,0xE0,0x70,0x03,0x80,0x00,0x70,0x00,0x70,0xE0,0x70,0xE0,0x00,
0xE0,0x00,0x00,0x70,0xE0,0x30,0xE0,0x70,0xE0,0x70,0x03,0x80,0x00,0x70,0x00,0x70,
0xE0,0x70,0xE0,0x00,0xE0,0x00,0x00,0x70,0xE0,0x30,0xE0,0x70,0xE0,0x70,0x03,0x80,
0x00,0x70,0x00,0x70,0xE0,0x70,0xE0,0x00,0xE0,0x00,0x00,0x70,0xE0,0x30,0xE0,0x70,
0xE0,0x70,0x03,0x80,0x00,0x70,0x00,0x70,0xE0,0x70,0xE0,0x00,0xE0,0x00,0x00,0x70,
0xE0,0x30,0xE0,0x70,0xE0,0x70,0x03,0x80,0x00,0x70,0x00,0x70,0xE0,0x70,0xE0,0x00,
0xE0,0x00,0x00,0x70,0xE0,0x30,0xE0,0x70,0xE0,0x70,0x03,0x80,0x1F,0xB0,0x3F,0xA0,
0xDF,0xA0,0xDF,0xE0,0x5F,0xE0,0x00,0x20,0x5F,0xA0,0xDF,0xA0,0xE0,0x70,0x01,0x00,
0x3F,0xD0,0x7F,0xF0,0xBF,0xC0,0xBF,0xD0,0x3F,0xD0,0x00,0x50,0xFF,0xF0,0xBF,0xF0,
0xE0,0x70,0x03,0x80,0x5F,0xE0,0x3F,0xA0,0x7F,0xA0,0x7F,0xB0,0x5F,0xB0,0x00,0x20,
0x5F,0xA0,0x7F,0xA0,0xE0,0x70,0x03,0x80,0xE0,0x00,0x00,0x70,0x00,0x70,0x00,0x70,
0xE0,0x70,0x00,0x70,0xE0,0x70,0x00,0x70,0xE0,0x70,0x03,0x80,0xE0,0x00,0x00,0x70,
0x00,0x70,0x00,0x70,0xE0,0x70,0x00,0x70,0xE0,0x70,0x00,0x70,0xE0,0x70,0x03,0x80,
0xE0,0x00,0x00,0x70,0x00,0x70,0x00,0x70,0xE0,0x70,0x00,0x70,0xE0,0x70,0x00,0x70,
0xE0,0x70,0x03,0x80,0xE0,0x00,0x00,0x70,0x00,0x70,0x00,0x70,0xE0,0x70,0x00,0x70,
0xE0,0x70,0x00,0x70,0xE0,0x70,0x03,0x80,0xE0,0x00,0x00,0x70,0x00,0x70,0x00,0x70,
0xE0,0x70,0x00,0x70,0xE0,0x70,0x00,0x70,0xE0,0x70,0x03,0x80,0xE0,0x00,0x00,0x70,
0x00,0x70,0x00,0x70,0xE0,0x70,0x00,0x70,0xE0,0x70,0x00,0x70,0xE0,0x70,0x03,0x80,
0xE0,0x00,0x00,0x70,0x00,0x70,0x00,0x70,0xE0,0x70,0x00,0x70,0xE0,0x70,0x00,0x70,
0xE0,0x70,0x03,0x80,0xE0,0x00,0x00,0x70,0x00,0x70,0x00,0x70,0xE0,0x70,0x00,0x70,
0xE0,0x70,0x00,0x70,0xDF,0xB0,0x03,0x80,0xDF,0xC0,0x3F,0xB0,0x00,0x70,0x3F,0xB0,
0xDF,0xB0,0x00,0x70,0xDF,0xB0,0x3F,0xB0,0xBF,0xD0,0x03,0x80,0xBF,0xE0,0x7F,0xD0,
0x00,0x70,0x7F,0xD0,0xBF,0xD0,0x00,0x30,0xBF,0xD0,0x7F,0xD0,0x7F,0xE0,0x01,0x00,
0x7F,0xF0,0xFF,0xE0,0x00,0x20,0xFF,0xE0,0x7F,0xE0,0x00,0x10,0x7F,0xE0,0xFF,0xE0
};
const unsigned char digit_big[] PROGMEM = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x3F,0xC0,0x02,0x00,0x3F,0xE0,0x7F,0xC0,0x40,0x20,0x3F,0xE0,
0x3F,0xE0,0x7F,0xC0,0x3F,0xC0,0x3F,0xC0,0x5F,0xA0,0x03,0x00,0x1F,0xD0,0x3F,0xA0,
0x60,0x60,0x5F,0xC0,0x5F,0xC0,0x3F,0xA0,0x5F,0xA0,0x5F,0xA0,0x60,0x60,0x03,0x00,
0x00,0x30,0x00,0x60,0x60,0x60,0x60,0x00,0x60,0x00,0x00,0x60,0x60,0x60,0x60,0x60,
0x60,0x60,0x03,0x00,0x00,0x30,0x00,0x60,0x60,0x60,0x60,0x00,0x60,0x00,0x00,0x60,
0x60,0x60,0x60,0x60,0x60,0x60,0x03,0x00,0x00,0x30,0x00,0x60,0x60,0x60,0x60,0x00,
0x60,0x00,0x00,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x03,0x00,0x00,0x30,0x00,0x60,
0x60,0x60,0x60,0x00,0x60,0x00,0x00,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x03,0x00,
0x00,0x30,0x00,0x60,0x60,0x60,0x60,0x00,0x60,0x00,0x00,0x60,0x60,0x60,0x60,0x60,
0x60,0x60,0x03,0x00,0x00,0x30,0x00,0x60,0x60,0x60,0x60,0x00,0x60,0x00,0x00,0x60,
0x60,0x60,0x60,0x60,0x60,0x60,0x03,0x00,0x00,0x30,0x00,0x60,0x60,0x60,0x60,0x00,
0x60,0x00,0x00,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x03,0x00,0x00,0x10,0x00,0x20,
0x40,0x20,0x40,0x00,0x40,0x00,0x00,0x20,0x40,0x60,0x40,0x20,0x40,0x20,0x01,0x00,
0x1F,0xE0,0x7F,0xC0,0x3F,0xC0,0x3F,0xC0,0x3F,0xC0,0x00,0x40,0x3F,0xC0,0x3F,0xC0,
0x20,0x40,0x02,0x00,0x2F,0xF0,0x3F,0xA0,0x7F,0xA0,0x7F,0xA0,0x5F,0xA0,0x00,0x60,
0x5F,0xA0,0x7F,0xA0,0x60,0x60,0x03,0x00,0x30,0x00,0x00,0x60,0x00,0x60,0x00,0x60,
0x60,0x60,0x00,0x60,0x60,0x60,0x00,0x60,0x60,0x60,0x03,0x00,0x30,0x00,0x00,0x60,
0x00,0x60,0x00,0x60,0x60,0x60,0x00,0x60,0x60,0x60,0x00,0x60,0x60,0x60,0x03,0x00,
0x30,0x00,0x00,0x60,0x00,0x60,0x00,0x60,0x60,0x60,0x00,0x60,0x60,0x60,0x00,0x60,
0x60,0x60,0x03,0x00,0x30,0x00,0x00,0x60,0x00,0x60,0x00,0x60,0x60,0x60,0x00,0x60,
0x60,0x60,0x00,0x60,0x60,0x60,0x03,0x00,0x30,0x00,0x00,0x60,0x00,0x60,0x00,0x60,
0x60,0x60,0x00,0x60,0x60,0x60,0x00,0x60,0x60,0x60,0x03,0x00,0x30,0x00,0x00,0x60,
0x00,0x60,0x00,0x60,0x60,0x60,0x00,0x60,0x60,0x60,0x00,0x60,0x60,0x60,0x03,0x00,
0x30,0x00,0x00,0x60,0x00,0x60,0x00,0x60,0x60,0x60,0x00,0x60,0x60,0x60,0x00,0x60,
0x60,0x60,0x03,0x00,0x30,0x00,0x00,0x60,0x00,0x60,0x00,0x60,0x60,0x60,0x00,0x60,
0x60,0x60,0x00,0x60,0x5F,0xA0,0x03,0x00,0x2F,0xE0,0x3F,0xA0,0x00,0x60,0x3F,0xA0,
0x5F,0xA0,0x00,0x60,0x5F,0xA0,0x3F,0xA0,0x3F,0xC0,0x01,0x00,0x1F,0xF0,0x7F,0xC0,
0x00,0x20,0x7F,0xC0,0x3F,0xC0,0x00,0x20,0x3F,0xC0,0x7F,0xC0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
const unsigned char main_screen[] PROGMEM = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xC8,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xC8,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x38,0xA5,0x00,0xEE,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0xF8,0x00,0x6D,0x29,0x01,0xB2,0x00,0x00,0x00,0x00,0x07,0xE0,
0x00,0x00,0x00,0x32,0xF0,0x00,0x49,0x49,0x03,0x1A,0x00,0x00,0x00,0x00,0xCB,0xC0,
0x00,0x00,0x00,0x33,0x00,0x00,0x3A,0x11,0x06,0x0C,0x00,0x00,0x00,0x00,0xCC,0x00,
0x00,0x00,0x00,0x03,0x00,0x01,0x94,0xA1,0x0C,0x06,0x00,0x00,0x00,0x00,0x0C,0x00,
0x00,0x00,0x00,0x03,0x00,0x01,0x54,0x21,0x19,0xF3,0x00,0x00,0x00,0x00,0x0C,0x00,
0x00,0x00,0x00,0x02,0x00,0x03,0x4A,0x41,0x09,0x52,0x00,0x00,0x00,0x00,0x08,0x00,
0x00,0x00,0x00,0x01,0x00,0x02,0xCA,0x59,0x09,0x52,0x00,0x00,0x00,0x00,0x04,0x00,
0x00,0x00,0x00,0x03,0x00,0x01,0x90,0xB5,0x09,0xF2,0x00,0x00,0x00,0x00,0x0C,0x00,
0x00,0x00,0x00,0x03,0x00,0x00,0xA5,0x25,0x08,0x02,0x00,0x00,0x00,0x00,0x0C,0x00,
0x00,0x00,0x00,0x03,0x00,0x00,0xA9,0x55,0x09,0xF2,0x00,0x00,0x00,0x00,0x0C,0x00,
0x00,0x00,0x00,0x02,0xF0,0x00,0x42,0x39,0x09,0x12,0x00,0x00,0x00,0x00,0x0B,0xC0,
0x00,0x00,0x00,0x01,0xF8,0x00,0x94,0x11,0x09,0x12,0x00,0x00,0x00,0x00,0x07,0xE0,
0x00,0x00,0x00,0x00,0x00,0x00,0x94,0x11,0x0F,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x0C,0x18,0x03,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x00,0x30,0x60,
0x00,0x00,0x00,0x1E,0x30,0x02,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x78,0xC0,
0x00,0x00,0x00,0x33,0x30,0x02,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0xCC,0xC0,
0x00,0x00,0x00,0x33,0x60,0x02,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0xCD,0x80,
0x00,0x00,0x00,0x1E,0x40,0x02,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x79,0x00,
0x00,0x00,0x00,0x0C,0x00,0x02,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x30,0x00,
0x00,0x00,0x00,0x00,0x8C,0x02,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x02,0x30,
0x00,0x00,0x00,0x01,0x9E,0x02,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x06,0x78,
0x00,0x00,0x00,0x03,0x33,0x02,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x0C,0xCC,
0x00,0x00,0x00,0x03,0x33,0x02,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x0C,0xCC,
0x00,0x00,0x00,0x06,0x1E,0x02,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x18,0x78,
0x00,0x00,0x00,0x04,0x0C,0x02,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x10,0x30,
0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00
};
const unsigned char moon[] PROGMEM = {
// Bit per pixel:1
// Picture size: 960x30
// Color index:
// Index 0: R=255,G=255,B=255
// Index 1: R=0,G=0,B=0
0x00,0x07,0xF8,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x78,0x00,0x00,0x01,0xF8,0x00,
0x00,0x07,0xF8,0x00,0x00,0x07,0xF8,0x00,0x00,0x0F,0xF8,0x00,0x00,0x00,0x78,0x00,
0x00,0x00,0x38,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0xF8,0x00,0x00,0x01,0xF8,0x00,
0x00,0x07,0xF8,0x00,0x00,0x07,0xF8,0x00,0x00,0x0F,0xFC,0x00,0x00,0x07,0xF8,0x00,
0x00,0x0F,0xFC,0x00,0x00,0x07,0xF8,0x00,0x00,0x07,0xF8,0x00,0x00,0x07,0xE0,0x00,
0x00,0x07,0xC0,0x00,0x00,0x07,0x80,0x00,0x00,0x07,0x00,0x00,0x00,0x07,0x80,0x00,
0x00,0x07,0xFC,0x00,0x00,0x07,0xF8,0x00,0x00,0x07,0xF8,0x00,0x00,0x07,0xE0,0x00,
0x00,0x07,0x80,0x00,0x00,0x07,0x80,0x00,0x00,0x18,0x06,0x00,0x00,0x00,0x1E,0x00,
0x00,0x00,0x3E,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0xFE,0x00,0x00,0x03,0xFE,0x00,
0x00,0x07,0xFE,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0xFE,0x00,
0x00,0x01,0xFE,0x00,0x00,0x03,0xFE,0x00,0x00,0x1F,0xFE,0x00,0x00,0x1F,0xFE,0x00,
0x00,0x1F,0xFE,0x00,0x00,0x1F,0xFE,0x00,0x00,0x1F,0xFE,0x00,0x00,0x1F,0xFE,0x00,
0x00,0x1F,0xFE,0x00,0x00,0x1F,0xF0,0x00,0x00,0x1F,0xE0,0x00,0x00,0x1F,0xC0,0x00,
0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0xF8,0x00,0x00,0x1F,0xF0,0x00,
0x00,0x1F,0xC0,0x00,0x00,0x1F,0xC0,0x00,0x00,0x1F,0x00,0x00,0x00,0x1E,0x00,0x00,
0x00,0x60,0x01,0x80,0x00,0x00,0x07,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x3F,0x80,
0x00,0x00,0x7F,0x80,0x00,0x01,0xFF,0x80,0x00,0x03,0xFF,0x80,0x00,0x00,0x7F,0x80,
0x00,0x00,0x7F,0x80,0x00,0x01,0xFF,0x80,0x00,0x03,0xFF,0x80,0x00,0x07,0xFF,0x80,
0x00,0x1F,0xFF,0x80,0x00,0x7F,0xFF,0x80,0x00,0x7F,0xFF,0x80,0x00,0x7F,0xFF,0x80,
0x00,0x7F,0xFF,0x80,0x00,0x7F,0xFF,0x80,0x00,0x7F,0xFE,0x00,0x00,0x7F,0xF8,0x00,
0x00,0x7F,0xF0,0x00,0x00,0x7F,0xE0,0x00,0x00,0x7F,0x80,0x00,0x00,0x7F,0x80,0x00,
0x00,0x7F,0xF0,0x00,0x00,0x7F,0xE0,0x00,0x00,0x7F,0x80,0x00,0x00,0x7F,0x00,0x00,
0x00,0x7C,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x80,0x00,0x40,0x00,0x00,0x01,0xC0,
0x00,0x00,0x07,0xC0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x3F,0xC0,0x00,0x00,0xFF,0xC0,
0x00,0x01,0xFF,0xC0,0x00,0x00,0x7F,0xC0,0x00,0x00,0x7F,0xC0,0x00,0x01,0xFF,0xC0,
0x00,0x03,0xFF,0xC0,0x00,0x0F,0xFF,0xC0,0x00,0x3F,0xFF,0xC0,0x00,0x7F,0xFF,0xC0,
0x00,0xFF,0xFF,0xC0,0x00,0xFF,0xFF,0xC0,0x00,0xFF,0xFF,0xC0,0x00,0xFF,0xFF,0x80,
0x00,0xFF,0xFF,0x00,0x00,0xFF,0xFC,0x00,0x00,0xFF,0xF0,0x00,0x00,0xFF,0xE0,0x00,
0x00,0xFF,0x80,0x00,0x00,0xFF,0x80,0x00,0x00,0xFF,0xE0,0x00,0x00,0xFF,0xC0,0x00,
0x00,0xFF,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0xE0,0x00,0x00,
0x01,0x00,0x00,0x20,0x00,0x00,0x00,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x0F,0xE0,
0x00,0x00,0x1F,0xE0,0x00,0x00,0x7F,0xE0,0x00,0x01,0xFF,0xE0,0x00,0x00,0x7F,0xE0,
0x00,0x00,0x7F,0xE0,0x00,0x03,0xFF,0xE0,0x00,0x07,0xFF,0xE0,0x00,0x1F,0xFF,0xE0,
0x00,0x3F,0xFF,0xE0,0x00,0xFF,0xFF,0xE0,0x01,0xFF,0xFF,0xE0,0x01,0xFF,0xFF,0xE0,
0x01,0xFF,0xFF,0xE0,0x01,0xFF,0xFF,0xC0,0x01,0xFF,0xFF,0x00,0x01,0xFF,0xFE,0x00,
0x01,0xFF,0xF8,0x00,0x01,0xFF,0xF0,0x00,0x01,0xFF,0x80,0x00,0x01,0xFF,0x80,0x00,
0x01,0xFF,0xE0,0x00,0x01,0xFF,0x80,0x00,0x01,0xFE,0x00,0x00,0x01,0xFC,0x00,0x00,
0x01,0xF0,0x00,0x00,0x01,0xC0,0x00,0x00,0x02,0x00,0x00,0x10,0x00,0x00,0x00,0x70,
0x00,0x00,0x01,0xF0,0x00,0x00,0x07,0xF0,0x00,0x00,0x1F,0xF0,0x00,0x00,0x3F,0xF0,
0x00,0x00,0xFF,0xF0,0x00,0x00,0x7F,0xF0,0x00,0x00,0xFF,0xF0,0x00,0x03,0xFF,0xF0,
0x00,0x07,0xFF,0xF0,0x00,0x1F,0xFF,0xF0,0x00,0x7F,0xFF,0xF0,0x00,0xFF,0xFF,0xF0,
0x03,0xFF,0xFF,0xF0,0x03,0xFF,0xFF,0xF0,0x03,0xFF,0xFF,0xF0,0x03,0xFF,0xFF,0xC0,
0x03,0xFF,0xFF,0x80,0x03,0xFF,0xFE,0x00,0x03,0xFF,0xF8,0x00,0x03,0xFF,0xF0,0x00,
0x03,0xFF,0xC0,0x00,0x03,0xFF,0x80,0x00,0x03,0xFF,0xC0,0x00,0x03,0xFF,0x00,0x00,
0x03,0xFE,0x00,0x00,0x03,0xF8,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0x80,0x00,0x00,
0x04,0x00,0x00,0x08,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0xF8,0x00,0x00,0x03,0xF8,
0x00,0x00,0x0F,0xF8,0x00,0x00,0x3F,0xF8,0x00,0x00,0xFF,0xF8,0x00,0x00,0x7F,0xF8,
0x00,0x00,0xFF,0xF8,0x00,0x03,0xFF,0xF8,0x00,0x0F,0xFF,0xF8,0x00,0x1F,0xFF,0xF8,
0x00,0x7F,0xFF,0xF8,0x01,0xFF,0xFF,0xF8,0x03,0xFF,0xFF,0xF8,0x07,0xFF,0xFF,0xF8,
0x07,0xFF,0xFF,0xF0,0x07,0xFF,0xFF,0xE0,0x07,0xFF,0xFF,0x80,0x07,0xFF,0xFE,0x00,
0x07,0xFF,0xFC,0x00,0x07,0xFF,0xF0,0x00,0x07,0xFF,0xC0,0x00,0x07,0xFF,0x80,0x00,
0x07,0xFF,0xC0,0x00,0x07,0xFF,0x00,0x00,0x07,0xFC,0x00,0x00,0x07,0xF0,0x00,0x00,
0x07,0xC0,0x00,0x00,0x07,0x80,0x00,0x00,0x08,0x00,0x00,0x04,0x00,0x00,0x00,0x3C,
0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xFC,0x00,0x00,0x0F,0xFC,0x00,0x00,0x1F,0xFC,
0x00,0x00,0x7F,0xFC,0x00,0x00,0x7F,0xFC,0x00,0x00,0xFF,0xFC,0x00,0x03,0xFF,0xFC,
0x00,0x0F,0xFF,0xFC,0x00,0x3F,0xFF,0xFC,0x00,0xFF,0xFF,0xFC,0x01,0xFF,0xFF,0xFC,
0x07,0xFF,0xFF,0xFC,0x0F,0xFF,0xFF,0xFC,0x0F,0xFF,0xFF,0xF8,0x0F,0xFF,0xFF,0xE0,
0x0F,0xFF,0xFF,0xC0,0x0F,0xFF,0xFF,0x00,0x0F,0xFF,0xFC,0x00,0x0F,0xFF,0xF0,0x00,
0x0F,0xFF,0xC0,0x00,0x0F,0xFF,0x80,0x00,0x0F,0xFF,0x80,0x00,0x0F,0xFE,0x00,0x00,
0x0F,0xFC,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x0F,0x00,0x00,0x00,
0x08,0x00,0x00,0x04,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x7C,0x00,0x00,0x01,0xFC,
0x00,0x00,0x07,0xFC,0x00,0x00,0x1F,0xFC,0x00,0x00,0x7F,0xFC,0x00,0x00,0x7F,0xFC,
0x00,0x00,0xFF,0xFC,0x00,0x03,0xFF,0xFC,0x00,0x0F,0xFF,0xFC,0x00,0x3F,0xFF,0xFC,
0x00,0xFF,0xFF,0xFC,0x03,0xFF,0xFF,0xFC,0x07,0xFF,0xFF,0xFC,0x0F,0xFF,0xFF,0xFC,
0x0F,0xFF,0xFF,0xF8,0x0F,0xFF,0xFF,0xF0,0x0F,0xFF,0xFF,0xC0,0x0F,0xFF,0xFF,0x00,
0x0F,0xFF,0xFC,0x00,0x0F,0xFF,0xF0,0x00,0x0F,0xFF,0xC0,0x00,0x0F,0xFF,0x80,0x00,
0x0F,0xFF,0x80,0x00,0x0F,0xFE,0x00,0x00,0x0F,0xF8,0x00,0x00,0x0F,0xE0,0x00,0x00,
0x0F,0x80,0x00,0x00,0x0E,0x00,0x00,0x00,0x10,0x00,0x00,0x02,0x00,0x00,0x00,0x1E,
0x00,0x00,0x00,0x7E,0x00,0x00,0x01,0xFE,0x00,0x00,0x07,0xFE,0x00,0x00,0x1F,0xFE,
0x00,0x00,0x7F,0xFE,0x00,0x00,0x7F,0xFE,0x00,0x00,0xFF,0xFE,0x00,0x07,0xFF,0xFE,
0x00,0x1F,0xFF,0xFE,0x00,0x7F,0xFF,0xFE,0x00,0xFF,0xFF,0xFE,0x03,0xFF,0xFF,0xFE,
0x07,0xFF,0xFF,0xFE,0x1F,0xFF,0xFF,0xFE,0x1F,0xFF,0xFF,0xF8,0x1F,0xFF,0xFF,0xF0,
0x1F,0xFF,0xFF,0xC0,0x1F,0xFF,0xFF,0x80,0x1F,0xFF,0xFE,0x00,0x1F,0xFF,0xF8,0x00,
0x1F,0xFF,0xC0,0x00,0x1F,0xFF,0x80,0x00,0x1F,0xFF,0x80,0x00,0x1F,0xFE,0x00,0x00,
0x1F,0xF8,0x00,0x00,0x1F,0xE0,0x00,0x00,0x1F,0x80,0x00,0x00,0x1E,0x00,0x00,0x00,
0x10,0x00,0x00,0x02,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x7E,0x00,0x00,0x01,0xFE,
0x00,0x00,0x07,0xFE,0x00,0x00,0x1F,0xFE,0x00,0x00,0x7F,0xFE,0x00,0x00,0x7F,0xFE,
0x00,0x00,0xFF,0xFE,0x00,0x07,0xFF,0xFE,0x00,0x1F,0xFF,0xFE,0x00,0x7F,0xFF,0xFE,
0x00,0xFF,0xFF,0xFE,0x03,0xFF,0xFF,0xFE,0x0F,0xFF,0xFF,0xFE,0x1F,0xFF,0xFF,0xFE,
0x1F,0xFF,0xFF,0xFC,0x1F,0xFF,0xFF,0xF0,0x1F,0xFF,0xFF,0xC0,0x1F,0xFF,0xFF,0x80,
0x1F,0xFF,0xFE,0x00,0x1F,0xFF,0xF8,0x00,0x1F,0xFF,0xC0,0x00,0x1F,0xFF,0x80,0x00,
0x1F,0xFF,0x80,0x00,0x1F,0xFE,0x00,0x00,0x1F,0xF8,0x00,0x00,0x1F,0xE0,0x00,0x00,
0x1F,0x80,0x00,0x00,0x1E,0x00,0x00,0x00,0x20,0x00,0x00,0x02,0x00,0x00,0x00,0x0E,
0x00,0x00,0x00,0x3E,0x00,0x00,0x01,0xFE,0x00,0x00,0x03,0xFE,0x00,0x00,0x0F,0xFE,
0x00,0x00,0x3F,0xFE,0x00,0x00,0x7F,0xFE,0x00,0x00,0xFF,0xFE,0x00,0x07,0xFF,0xFE,
0x00,0x1F,0xFF,0xFE,0x00,0x7F,0xFF,0xFE,0x01,0xFF,0xFF,0xFE,0x07,0xFF,0xFF,0xFE,
0x0F,0xFF,0xFF,0xFE,0x3F,0xFF,0xFF,0xFE,0x1F,0xFF,0xFF,0xFC,0x1F,0xFF,0xFF,0xF8,
0x1F,0xFF,0xFF,0xE0,0x1F,0xFF,0xFF,0x80,0x1F,0xFF,0xFE,0x00,0x1F,0xFF,0xF8,0x00,
0x1F,0xFF,0xE0,0x00,0x1F,0xFF,0x80,0x00,0x1F,0xFF,0x00,0x00,0x1F,0xFC,0x00,0x00,
0x1F,0xF0,0x00,0x00,0x1F,0xE0,0x00,0x00,0x1F,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,
0x20,0x00,0x00,0x01,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0xFF,
0x00,0x00,0x03,0xFF,0x00,0x00,0x0F,0xFF,0x00,0x00,0x3F,0xFF,0x00,0x00,0x7F,0xFF,
0x00,0x00,0xFF,0xFF,0x00,0x07,0xFF,0xFF,0x00,0x1F,0xFF,0xFF,0x00,0x7F,0xFF,0xFF,
0x01,0xFF,0xFF,0xFF,0x07,0xFF,0xFF,0xFF,0x0F,0xFF,0xFF,0xFF,0x3F,0xFF,0xFF,0xFF,
0x3F,0xFF,0xFF,0xFC,0x3F,0xFF,0xFF,0xF8,0x3F,0xFF,0xFF,0xE0,0x3F,0xFF,0xFF,0x80,
0x3F,0xFF,0xFE,0x00,0x3F,0xFF,0xF8,0x00,0x3F,0xFF,0xE0,0x00,0x3F,0xFF,0x80,0x00,
0x3F,0xFF,0x00,0x00,0x3F,0xFC,0x00,0x00,0x3F,0xF0,0x00,0x00,0x3F,0xC0,0x00,0x00,
0x3F,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x20,0x00,0x00,0x01,0x00,0x00,0x00,0x0F,
0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0xFF,0x00,0x00,0x03,0xFF,0x00,0x00,0x0F,0xFF,
0x00,0x00,0x3F,0xFF,0x00,0x00,0x7F,0xFF,0x00,0x00,0xFF,0xFF,0x00,0x07,0xFF,0xFF,
0x00,0x1F,0xFF,0xFF,0x00,0x7F,0xFF,0xFF,0x01,0xFF,0xFF,0xFF,0x07,0xFF,0xFF,0xFF,
0x0F,0xFF,0xFF,0xFF,0x3F,0xFF,0xFF,0xFF,0x3F,0xFF,0xFF,0xFC,0x3F,0xFF,0xFF,0xF8,
0x3F,0xFF,0xFF,0xE0,0x3F,0xFF,0xFF,0x80,0x3F,0xFF,0xFE,0x00,0x3F,0xFF,0xF8,0x00,
0x3F,0xFF,0xE0,0x00,0x3F,0xFF,0x80,0x00,0x3F,0xFF,0x00,0x00,0x3F,0xFC,0x00,0x00,
0x3F,0xF0,0x00,0x00,0x3F,0xC0,0x00,0x00,0x3F,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,
0x20,0x00,0x00,0x01,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0xFF,
0x00,0x00,0x03,0xFF,0x00,0x00,0x0F,0xFF,0x00,0x00,0x3F,0xFF,0x00,0x00,0x7F,0xFF,
0x00,0x00,0xFF,0xFF,0x00,0x07,0xFF,0xFF,0x00,0x1F,0xFF,0xFF,0x00,0x7F,0xFF,0xFF,
0x01,0xFF,0xFF,0xFF,0x07,0xFF,0xFF,0xFF,0x0F,0xFF,0xFF,0xFF,0x3F,0xFF,0xFF,0xFF,
0x3F,0xFF,0xFF,0xFC,0x3F,0xFF,0xFF,0xF8,0x3F,0xFF,0xFF,0xE0,0x3F,0xFF,0xFF,0x80,
0x3F,0xFF,0xFE,0x00,0x3F,0xFF,0xF8,0x00,0x3F,0xFF,0xE0,0x00,0x3F,0xFF,0x80,0x00,
0x3F,0xFF,0x00,0x00,0x3F,0xFC,0x00,0x00,0x3F,0xF0,0x00,0x00,0x3F,0xC0,0x00,0x00,
0x3F,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x20,0x00,0x00,0x01,0x00,0x00,0x00,0x0F,
0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0xFF,0x00,0x00,0x03,0xFF,0x00,0x00,0x0F,0xFF,
0x00,0x00,0x3F,0xFF,0x00,0x00,0x7F,0xFF,0x00,0x00,0xFF,0xFF,0x00,0x07,0xFF,0xFF,
0x00,0x1F,0xFF,0xFF,0x00,0x7F,0xFF,0xFF,0x01,0xFF,0xFF,0xFF,0x07,0xFF,0xFF,0xFF,
0x0F,0xFF,0xFF,0xFF,0x3F,0xFF,0xFF,0xFF,0x3F,0xFF,0xFF,0xFC,0x3F,0xFF,0xFF,0xF8,
0x3F,0xFF,0xFF,0xE0,0x3F,0xFF,0xFF,0x80,0x3F,0xFF,0xFE,0x00,0x3F,0xFF,0xF8,0x00,
0x3F,0xFF,0xE0,0x00,0x3F,0xFF,0x80,0x00,0x3F,0xFF,0x00,0x00,0x3F,0xFC,0x00,0x00,
0x3F,0xF0,0x00,0x00,0x3F,0xC0,0x00,0x00,0x3F,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,
0x20,0x00,0x00,0x01,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0xFF,
0x00,0x00,0x03,0xFF,0x00,0x00,0x0F,0xFF,0x00,0x00,0x3F,0xFF,0x00,0x00,0x7F,0xFF,
0x00,0x00,0xFF,0xFF,0x00,0x07,0xFF,0xFF,0x00,0x1F,0xFF,0xFF,0x00,0x7F,0xFF,0xFF,
0x01,0xFF,0xFF,0xFF,0x07,0xFF,0xFF,0xFF,0x0F,0xFF,0xFF,0xFF,0x3F,0xFF,0xFF,0xFF,
0x3F,0xFF,0xFF,0xFC,0x3F,0xFF,0xFF,0xF8,0x3F,0xFF,0xFF,0xE0,0x3F,0xFF,0xFF,0x80,
0x3F,0xFF,0xFE,0x00,0x3F,0xFF,0xF8,0x00,0x3F,0xFF,0xE0,0x00,0x3F,0xFF,0x80,0x00,
0x3F,0xFF,0x00,0x00,0x3F,0xFC,0x00,0x00,0x3F,0xF0,0x00,0x00,0x3F,0xC0,0x00,0x00,
0x3F,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x20,0x00,0x00,0x01,0x00,0x00,0x00,0x0F,
0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0xFF,0x00,0x00,0x03,0xFF,0x00,0x00,0x0F,0xFF,
0x00,0x00,0x3F,0xFF,0x00,0x00,0x7F,0xFF,0x00,0x00,0xFF,0xFF,0x00,0x07,0xFF,0xFF,
0x00,0x1F,0xFF,0xFF,0x00,0x7F,0xFF,0xFF,0x01,0xFF,0xFF,0xFF,0x07,0xFF,0xFF,0xFF,
0x0F,0xFF,0xFF,0xFF,0x3F,0xFF,0xFF,0xFF,0x3F,0xFF,0xFF,0xFC,0x3F,0xFF,0xFF,0xF8,
0x3F,0xFF,0xFF,0xE0,0x3F,0xFF,0xFF,0x80,0x3F,0xFF,0xFE,0x00,0x3F,0xFF,0xF8,0x00,
0x3F,0xFF,0xE0,0x00,0x3F,0xFF,0x80,0x00,0x3F,0xFF,0x00,0x00,0x3F,0xFC,0x00,0x00,
0x3F,0xF0,0x00,0x00,0x3F,0xC0,0x00,0x00,0x3F,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,
0x20,0x00,0x00,0x02,0x00,0x00,0x00,0x0E,0x00,0x00,0x00,0x3E,0x00,0x00,0x00,0xFE,
0x00,0x00,0x03,0xFE,0x00,0x00,0x0F,0xFE,0x00,0x00,0x3F,0xFE,0x00,0x00,0x7F,0xFE,
0x00,0x00,0xFF,0xFE,0x00,0x07,0xFF,0xFE,0x00,0x1F,0xFF,0xFE,0x00,0x7F,0xFF,0xFE,
0x01,0xFF,0xFF,0xFE,0x07,0xFF,0xFF,0xFE,0x0F,0xFF,0xFF,0xFE,0x3F,0xFF,0xFF,0xFE,
0x1F,0xFF,0xFF,0xFC,0x1F,0xFF,0xFF,0xF8,0x1F,0xFF,0xFF,0xE0,0x1F,0xFF,0xFF,0x80,
0x1F,0xFF,0xFE,0x00,0x1F,0xFF,0xF8,0x00,0x1F,0xFF,0xC0,0x00,0x1F,0xFF,0x80,0x00,
0x1F,0xFF,0x00,0x00,0x1F,0xFC,0x00,0x00,0x1F,0xF0,0x00,0x00,0x1F,0xC0,0x00,0x00,
0x1F,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x10,0x00,0x00,0x02,0x00,0x00,0x00,0x1E,
0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0xFE,0x00,0x00,0x07,0xFE,0x00,0x00,0x1F,0xFE,
0x00,0x00,0x7F,0xFE,0x00,0x00,0x7F,0xFE,0x00,0x00,0xFF,0xFE,0x00,0x07,0xFF,0xFE,
0x00,0x1F,0xFF,0xFE,0x00,0x7F,0xFF,0xFE,0x00,0xFF,0xFF,0xFE,0x03,0xFF,0xFF,0xFE,
0x07,0xFF,0xFF,0xFE,0x1F,0xFF,0xFF,0xFE,0x1F,0xFF,0xFF,0xF8,0x1F,0xFF,0xFF,0xF0,
0x1F,0xFF,0xFF,0xC0,0x1F,0xFF,0xFF,0x80,0x1F,0xFF,0xFE,0x00,0x1F,0xFF,0xF8,0x00,
0x1F,0xFF,0xC0,0x00,0x1F,0xFF,0x80,0x00,0x1F,0xFF,0x80,0x00,0x1F,0xFE,0x00,0x00,
0x1F,0xF8,0x00,0x00,0x1F,0xC0,0x00,0x00,0x1F,0x80,0x00,0x00,0x1E,0x00,0x00,0x00,
0x10,0x00,0x00,0x02,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x7E,0x00,0x00,0x01,0xFE,
0x00,0x00,0x07,0xFE,0x00,0x00,0x1F,0xFE,0x00,0x00,0x7F,0xFE,0x00,0x00,0x7F,0xFE,
0x00,0x00,0xFF,0xFE,0x00,0x07,0xFF,0xFE,0x00,0x1F,0xFF,0xFE,0x00,0x3F,0xFF,0xFE,
0x00,0xFF,0xFF,0xFE,0x03,0xFF,0xFF,0xFE,0x07,0xFF,0xFF,0xFE,0x1F,0xFF,0xFF,0xFE,
0x1F,0xFF,0xFF,0xF8,0x1F,0xFF,0xFF,0xF0,0x1F,0xFF,0xFF,0xC0,0x1F,0xFF,0xFF,0x00,
0x1F,0xFF,0xFE,0x00,0x1F,0xFF,0xF8,0x00,0x1F,0xFF,0xC0,0x00,0x1F,0xFF,0x80,0x00,
0x1F,0xFF,0x80,0x00,0x1F,0xFE,0x00,0x00,0x1F,0xF8,0x00,0x00,0x1F,0xE0,0x00,0x00,
0x1F,0x80,0x00,0x00,0x1E,0x00,0x00,0x00,0x08,0x00,0x00,0x04,0x00,0x00,0x00,0x1C,
0x00,0x00,0x00,0x7C,0x00,0x00,0x01,0xFC,0x00,0x00,0x07,0xFC,0x00,0x00,0x1F,0xFC,
0x00,0x00,0x7F,0xFC,0x00,0x00,0x7F,0xFC,0x00,0x00,0xFF,0xFC,0x00,0x07,0xFF,0xFC,
0x00,0x0F,0xFF,0xFC,0x00,0x3F,0xFF,0xFC,0x00,0xFF,0xFF,0xFC,0x03,0xFF,0xFF,0xFC,
0x07,0xFF,0xFF,0xFC,0x0F,0xFF,0xFF,0xFC,0x0F,0xFF,0xFF,0xF8,0x0F,0xFF,0xFF,0xF0,
0x0F,0xFF,0xFF,0xC0,0x0F,0xFF,0xFF,0x00,0x0F,0xFF,0xFC,0x00,0x0F,0xFF,0xF8,0x00,
0x0F,0xFF,0xC0,0x00,0x0F,0xFF,0x80,0x00,0x0F,0xFF,0x80,0x00,0x0F,0xFE,0x00,0x00,
0x0F,0xF8,0x00,0x00,0x0F,0xE0,0x00,0x00,0x0F,0x80,0x00,0x00,0x0E,0x00,0x00,0x00,
0x08,0x00,0x00,0x04,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0xFC,0x00,0x00,0x01,0xFC,
0x00,0x00,0x07,0xFC,0x00,0x00,0x1F,0xFC,0x00,0x00,0x7F,0xFC,0x00,0x00,0x7F,0xFC,
0x00,0x00,0xFF,0xFC,0x00,0x03,0xFF,0xFC,0x00,0x0F,0xFF,0xFC,0x00,0x3F,0xFF,0xFC,
0x00,0xFF,0xFF,0xFC,0x03,0xFF,0xFF,0xFC,0x03,0xFF,0xFF,0xFC,0x0F,0xFF,0xFF,0xFC,
0x0F,0xFF,0xFF,0xF0,0x0F,0xFF,0xFF,0xF0,0x0F,0xFF,0xFF,0xC0,0x0F,0xFF,0xFF,0x00,
0x0F,0xFF,0xFC,0x00,0x0F,0xFF,0xF0,0x00,0x0F,0xFF,0xC0,0x00,0x0F,0xFF,0x80,0x00,
0x0F,0xFF,0x80,0x00,0x0F,0xFE,0x00,0x00,0x0F,0xF8,0x00,0x00,0x0F,0xE0,0x00,0x00,
0x0F,0xC0,0x00,0x00,0x0F,0x00,0x00,0x00,0x04,0x00,0x00,0x08,0x00,0x00,0x00,0x78,
0x00,0x00,0x00,0xF8,0x00,0x00,0x03,0xF8,0x00,0x00,0x0F,0xF8,0x00,0x00,0x3F,0xF8,
0x00,0x00,0xFF,0xF8,0x00,0x00,0x7F,0xF8,0x00,0x00,0xFF,0xF8,0x00,0x03,0xFF,0xF8,
0x00,0x0F,0xFF,0xF8,0x00,0x3F,0xFF,0xF8,0x00,0x7F,0xFF,0xF8,0x01,0xFF,0xFF,0xF8,
0x03,0xFF,0xFF,0xF8,0x07,0xFF,0xFF,0xF8,0x07,0xFF,0xFF,0xF0,0x07,0xFF,0xFF,0xE0,
0x07,0xFF,0xFF,0x80,0x07,0xFF,0xFF,0x00,0x07,0xFF,0xFC,0x00,0x07,0xFF,0xF0,0x00,
0x07,0xFF,0xC0,0x00,0x07,0xFF,0x80,0x00,0x07,0xFF,0xC0,0x00,0x07,0xFF,0x00,0x00,
0x07,0xFC,0x00,0x00,0x07,0xF0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0x80,0x00,0x00,
0x02,0x00,0x00,0x10,0x00,0x00,0x00,0x70,0x00,0x00,0x01,0xF0,0x00,0x00,0x03,0xF0,
0x00,0x00,0x1F,0xF0,0x00,0x00,0x3F,0xF0,0x00,0x00,0xFF,0xF0,0x00,0x00,0x7F,0xF0,
0x00,0x00,0xFF,0xF0,0x00,0x03,0xFF,0xF0,0x00,0x07,0xFF,0xF0,0x00,0x1F,0xFF,0xF0,
0x00,0x7F,0xFF,0xF0,0x00,0xFF,0xFF,0xF0,0x01,0xFF,0xFF,0xF0,0x03,0xFF,0xFF,0xF0,
0x03,0xFF,0xFF,0xE0,0x03,0xFF,0xFF,0xC0,0x03,0xFF,0xFF,0x80,0x03,0xFF,0xFE,0x00,
0x03,0xFF,0xF8,0x00,0x03,0xFF,0xF0,0x00,0x03,0xFF,0xC0,0x00,0x03,0xFF,0x80,0x00,
0x03,0xFF,0xC0,0x00,0x03,0xFF,0x00,0x00,0x03,0xFE,0x00,0x00,0x03,0xF0,0x00,0x00,
0x03,0xE0,0x00,0x00,0x03,0x80,0x00,0x00,0x01,0x00,0x00,0x20,0x00,0x00,0x00,0xE0,
0x00,0x00,0x03,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x1F,0xE0,0x00,0x00,0x7F,0xE0,
0x00,0x01,0xFF,0xE0,0x00,0x00,0x7F,0xE0,0x00,0x00,0x7F,0xE0,0x00,0x03,0xFF,0xE0,
0x00,0x07,0xFF,0xE0,0x00,0x1F,0xFF,0xE0,0x00,0x3F,0xFF,0xE0,0x00,0xFF,0xFF,0xE0,
0x00,0xFF,0xFF,0xE0,0x01,0xFF,0xFF,0xE0,0x01,0xFF,0xFF,0xC0,0x01,0xFF,0xFF,0xC0,
0x01,0xFF,0xFF,0x00,0x01,0xFF,0xFE,0x00,0x01,0xFF,0xF8,0x00,0x01,0xFF,0xF0,0x00,
0x01,0xFF,0x80,0x00,0x01,0xFF,0x80,0x00,0x01,0xFF,0xE0,0x00,0x01,0xFF,0x80,0x00,
0x01,0xFE,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xC0,0x00,0x00,
0x00,0x80,0x00,0x40,0x00,0x00,0x01,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x0F,0xC0,
0x00,0x00,0x3F,0xC0,0x00,0x00,0xFF,0xC0,0x00,0x01,0xFF,0xC0,0x00,0x00,0x7F,0xC0,
0x00,0x00,0x7F,0xC0,0x00,0x01,0xFF,0xC0,0x00,0x03,0xFF,0xC0,0x00,0x0F,0xFF,0xC0,
0x00,0x3F,0xFF,0xC0,0x00,0xFF,0xFF,0xC0,0x00,0x7F,0xFF,0xC0,0x00,0xFF,0xFF,0xC0,
0x00,0xFF,0xFF,0x80,0x00,0xFF,0xFF,0xC0,0x00,0xFF,0xFF,0x00,0x00,0xFF,0xFC,0x00,
0x00,0xFF,0xF0,0x00,0x00,0xFF,0xE0,0x00,0x00,0xFF,0x80,0x00,0x00,0xFF,0x80,0x00,
0x00,0xFF,0xE0,0x00,0x00,0xFF,0xC0,0x00,0x00,0xFF,0x00,0x00,0x00,0xFC,0x00,0x00,
0x00,0xF8,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0x60,0x01,0x80,0x00,0x00,0x07,0x80,
0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x7F,0x80,0x00,0x01,0xFF,0x80,
0x00,0x03,0xFF,0x80,0x00,0x00,0x7F,0x80,0x00,0x00,0x7F,0x80,0x00,0x01,0xFF,0x80,
0x00,0x03,0xFF,0x80,0x00,0x07,0xFF,0x80,0x00,0x3F,0xFF,0x80,0x00,0x7F,0xFF,0x80,
0x00,0x3F,0xFF,0x80,0x00,0x7F,0xFF,0x80,0x00,0x7F,0xFF,0x00,0x00,0x7F,0xFF,0x80,
0x00,0x7F,0xFF,0x00,0x00,0x7F,0xF8,0x00,0x00,0x7F,0xF0,0x00,0x00,0x7F,0xE0,0x00,
0x00,0x7F,0x80,0x00,0x00,0x7F,0x80,0x00,0x00,0x7F,0xF0,0x00,0x00,0x7F,0xE0,0x00,
0x00,0x7F,0x80,0x00,0x00,0x7C,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x78,0x00,0x00,
0x00,0x1C,0x0E,0x00,0x00,0x00,0x3E,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x3E,0x00,
0x00,0x01,0xFE,0x00,0x00,0x03,0xFE,0x00,0x00,0x07,0xFE,0x00,0x00,0x00,0x7E,0x00,
0x00,0x00,0x7E,0x00,0x00,0x00,0xFE,0x00,0x00,0x01,0xFE,0x00,0x00,0x07,0xFE,0x00,
0x00,0x1F,0xFE,0x00,0x00,0x1F,0xFE,0x00,0x00,0x1F,0xFE,0x00,0x00,0x1F,0xFE,0x00,
0x00,0x1F,0xFE,0x00,0x00,0x1F,0xFE,0x00,0x00,0x1F,0xFE,0x00,0x00,0x1F,0xF8,0x00,
0x00,0x1F,0xE0,0x00,0x00,0x1F,0xC0,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,
0x00,0x1F,0xF8,0x00,0x00,0x1F,0xF0,0x00,0x00,0x1F,0xE0,0x00,0x00,0x1F,0x00,0x00,
0x00,0x1F,0x80,0x00,0x00,0x1F,0x00,0x00,0x00,0x03,0xF0,0x00,0x00,0x00,0x70,0x00,
0x00,0x00,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x07,0xF0,0x00,
0x00,0x0F,0xF0,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x70,0x00,
0x00,0x00,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xF0,0x00,
0x00,0x03,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xF0,0x00,
0x00,0x03,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xC0,0x00,0x00,0x03,0x80,0x00,
0x00,0x03,0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x03,0xFC,0x00,0x00,0x03,0xF8,0x00,
0x00,0x03,0xF0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xC0,0x00,0x00,0x03,0x80,0x00
};

 

PRC
Онлайн
Зарегистрирован: 03.02.2019

Вывод на экран сделан выводом всего изображения полностью из буфера, что бы не возиться с масками символов и адресацией. Разделение буфера на две части пришлось делать для уменьшения размера массива экрана, что бы IDE не плакала что у нее память кончается))

Команды терминала:

Set time : T 23:59:59    - Установка времени
Set date:  D 31.12.18    - Установка даты
Set sound: S 0/1 8-23    - Сигнал каждый час и его диапазон
Set correction: K -9...9 - Коррекция влажности DHT22
Bold font: B 0/1         - Шрифт времени обычный/утолщенный
Read setting: R          - Текущие настройки

Все настройки хранятся в DS3231 по адресам:

 * 0x07 - Время включения сигнала каждый час
 * 0х08 - Время выключения сигнала каждый час
 * 0х09 - Сигнал каждый час вкл/выкл
 * 0x0B - Шрифт часов
 * 0x0C - Коррекция влажности DHT22. Старший нибл знак, младший значение

Смысла использовать еепром тут я особого не вижу.

soznik
Offline
Зарегистрирован: 20.09.2015

 В IDE делается многостраничный скетч ?

PRC
Онлайн
Зарегистрирован: 03.02.2019

Да, в одной портянке трудно ориентироваться. Да и повторно использовать код так гораздо легче.

ratman
Offline
Зарегистрирован: 11.10.2015

Конечно. В общих чертах, выбрасываешь самостоятельные модули в отдельные файлы. Всё складываешь в папку скетча. При загрузке скетча файлы-модули подтягиваются автоматом. Есто некоторые тонкости с глобальными переменными, но это поймёшь на практике, если оно тебе надо.