-сделано меню, сохранение данных

This commit is contained in:
Pavel 2023-12-25 07:09:08 +03:00
parent f809810017
commit 37dc5e30e8
2 changed files with 595 additions and 14 deletions

336
car.ino
View File

@ -4,14 +4,32 @@
#include <OneWire.h>
#include <DallasTemperature.h>
#include "button.h"
#include <EEPROM.h>
//Для руссификации, нужно glcdfont.c поместить в C:\Users\USER\Documents\Arduino\libraries\Adafruit_GFX_Library. У вас путь до библиотеки может отличаться.
Adafruit_SSD1306 display = Adafruit_SSD1306(128, 64, &Wire);
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
button btn1(3); // указываем пин
int piezoPin = 4;
button btn1(4); // указываем пин кнокпи
button btn2(5); // указываем пин кнокпи
int piezoPin = 3; // пин бипера
// моточасы по умолчанию
int temp=0;
struct SavedData {
byte beeper=0; // 1 - звук кнопок есть, 0 - нет пишем в EEPROM:0
int motoclock_motor=13200; // замена масла двигателя, пишем в EEPROM: 10
int motoclock_kpp=26000; // замена масла МКПП, пишем в EEPROM: 20
long motoclock_most=132000; // замена масла мосты, пишем в EEPROM: 30
long motoclock_grm=132000; // замена масла мосты, пишем в EEPROM: 40
};
SavedData ee_data;
SavedData etalon;
long old_milis,old_milis_2;
byte layout=0; // текущий экран 0 - температура, 1 - моточасы
float celsius1,celsius2,celsius3;
const unsigned char ico_cheb [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,
@ -79,33 +97,323 @@ const unsigned char ico_cheb [] PROGMEM = {
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
};
void setup() {
unsigned char i1,i2,c3;
Serial.begin(9600);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
//Serial.println(EEPROM.length());
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.cp437(true);
display.clearDisplay();
display.drawBitmap(0, 0, ico_cheb, 128, 64, WHITE);
display.display();
display.setTextColor(WHITE, BLACK);
display.setCursor(0, 0);
display.print("Sensors init..");
display.print("\307\300\317\323\321\312...");
display.display();
display.setTextSize(2);
delay(1000);
sensors.begin();
pinMode(3, OUTPUT);
// читаем данные из энергонезависимой памяти
EEPROM.get(2,ee_data);
if (ee_data.beeper>0){
ee_data.beeper=1;
};
if ((ee_data.motoclock_motor<0) or (ee_data.motoclock_kpp<0) or (ee_data.motoclock_most<0) or (ee_data.motoclock_grm<0)){
ee_data=etalon;
};
//Serial.print("motoclock_motor:");Serial.println(ee_data.motoclock_motor);
//Serial.print("motoclock_kpp:");Serial.println(ee_data.motoclock_kpp);
//Serial.print("motoclock_most:");Serial.println(ee_data.motoclock_most);
//Serial.print("motoclock_grm:");Serial.println(ee_data.motoclock_grm);
old_milis=millis(); // засекаем время начало работы адулины
old_milis_2=millis(); // засекаем время начало работы адулины
delay(2000);
//MainMenu();
}
void beep(){
if (ee_data.beeper==1) {
for (int i=0; i <= 100; i++){
digitalWrite(3, HIGH);
delay(1);
digitalWrite(3, LOW);
delay(1);
}
} else {
delay(500);
}
}
String utf8rusNext(String source){
int poz=0;
while (poz<source.length()){
poz++;
};
}
String utf8rus(String source){
int i,k;
String target;
unsigned char n;
char m[2] = { '0', '\0' };
k = source.length(); i = 0;
while (i < k) {
n = source[i]; i++;
if (n >= 0xC0) {
switch (n) {
case 0xD0: {
n = source[i]; i++;
if (n == 0x81) { n = 0xA8; break; }
if (n >= 0x90 && n <= 0xBF) n = n + 0x30;
break;
}
case 0xD1: {
n = source[i]; i++;
if (n == 0x91) { n = 0xB8; break; }
if (n >= 0x80 && n <= 0x8F) n = n + 0x70;
break;
}
}
}
m[0] = n; target = target + String(m);
}
return target;
}
void PutMenu_1(byte curpoz){
display.cp437(true);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
for (int i=0; i <= 3; i++){
if (curpoz==i){
display.print(("> "));
}
if (i==0){display.println("Motoclock");};
if (i==1){display.println("Sound");};
if (i==2){display.println("Light");};
if (i==3){display.println("Exit");};
}
display.display();
};
void PutMenu_2(byte curpoz){
display.cp437(true);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
for (int i=0; i <= 2; i++){
if (curpoz==i){
display.print(("> "));
}
if (i==0){display.println("\304\340\");};
if (i==1){display.println("\315\345\362");};
if (i==2){display.println("\302\373\365\356\344");};
}
display.display();
};
void PutMenu_3(byte curpoz){
display.cp437(true);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
for (int i=0; i <= 4; i++){
if (curpoz==i){
display.print(("> "));
}
if (i==0){
display.print("Reset oil:");
display.println(ee_data.motoclock_motor);
};
if (i==1){
display.print("Reset kpp:");
display.println(ee_data.motoclock_kpp);
};
if (i==2){
display.print("Reset most:");
display.println(ee_data.motoclock_most);
};
if (i==3){
display.print("Reset grm:");
display.println(ee_data.motoclock_grm);
};
if (i==4){display.print("Exit");};
}
display.display();
}
void loop() {
int celsius1,celsius2;
/*void PutMenu(String * tlist,byte msize,byte curpoz){
display.cp437(true);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
for (int i=0; i <= msize; i++){
if (curpoz==i){
display.print(("> "));
}
display.println((tlist[i]));
}
display.display();
}
*/
byte MainMenu(){
byte curpoz=0;
PutMenu_1(curpoz);
while(true){
if (btn1.click()) {
curpoz=curpoz+1;
if (curpoz>3){curpoz=0;};
PutMenu_1(curpoz);
beep();
};
if (btn2.click()) {
beep();
return curpoz;
}
};
}
// отобразить текущий экран
// refresh true/false - стереть всё предварительно
// lay - экарн. 0 - температура, 1 - моточасы
void LayoutScreen(boolean refresh,byte lay){
if (lay==0){
if (refresh==true){
display.clearDisplay();
display.drawBitmap(0, 0, ico_cheb, 128, 64, WHITE);
display.display();
};
display.setTextColor(WHITE, BLACK);
display.setCursor(0, 0);
display.print("\323\353:");display.print(celsius1);
display.setCursor(0, 10);
display.print("\314\370:");display.print(celsius2);
display.setCursor(0, 20);
display.print("\304\342:");display.print(celsius3);
} else {
if (refresh==true){
display.clearDisplay();
display.drawBitmap(0, 0, ico_cheb, 128, 64, WHITE);
display.display();
};
display.setTextColor(WHITE, BLACK);
display.setCursor(0, 0);
display.print("\314\340\361\353\356:");display.print(ee_data.motoclock_motor/60);display.print("\367");
display.setCursor(0, 10);
display.print("\312\317\317:");display.print(ee_data.motoclock_kpp/60);display.print("\367");
display.setCursor(0, 20);
display.print("\314\356\361\362:");display.print(ee_data.motoclock_most/60);display.print("\367");
display.setCursor(0, 30);
display.print("\303\320\314:");display.print(ee_data.motoclock_grm/60);display.print("\367");
};
}
byte MotoChange(){
byte curpoz=0;
PutMenu_3(curpoz);
while(true){
if (btn1.click()) {
curpoz=curpoz+1;
if (curpoz>4){curpoz=0;};
PutMenu_3(curpoz);
beep();
};
if (btn2.click()) {
beep();
return curpoz;
}
};
}
byte YesNo(){
byte curpoz=0;
PutMenu_2(curpoz);
while(true){
if (btn1.click()) {
curpoz=curpoz+1;
if (curpoz>2){curpoz=0;};
PutMenu_2(curpoz);
beep();
};
if (btn2.click()) {
beep();
return curpoz;
}
};
}
void loop() {
sensors.requestTemperatures();
celsius1=sensors.getTempCByIndex(0);
Serial.println("t1="+String(celsius1));
celsius2=sensors.getTempCByIndex(1);
celsius3=sensors.getTempCByIndex(2);
//Serial.println("t1="+String(celsius1));
//Serial.println("t2="+String(celsius2));
display.setTextColor(WHITE, BLACK);
display.setCursor(16, 10);
display.print(String(celsius1)+"c");
if (millis()-old_milis_2>1000){
old_milis_2=millis();
LayoutScreen(false,layout);
//Serial.println("refresh screen");
}
if (millis()-old_milis>60000){
old_milis=millis();
Serial.println("timer! save data to eerom");
if (ee_data.motoclock_motor>0){ee_data.motoclock_motor=ee_data.motoclock_motor-1;};
if (ee_data.motoclock_kpp>0){ee_data.motoclock_kpp=ee_data.motoclock_kpp-1;};
if (ee_data.motoclock_most>0){ee_data.motoclock_most=ee_data.motoclock_most-1;};
if (ee_data.motoclock_grm>0){ee_data.motoclock_grm=ee_data.motoclock_grm-1;};
EEPROM.put(2,ee_data);
}
if (btn1.click()) {
Serial.println("press 1");
tone(piezoPin, 1000, 500);
beep();
byte res=MainMenu();
if (res==1){
byte ress=YesNo();
//Serial.println("return YesNo:="+String(ress));
if (ress==0){ee_data.beeper=1;};
if (ress==1){ee_data.beeper=0;};
EEPROM.put(2,ee_data);
};
if (res==0){
byte ress=MotoChange();
if (ress==0){
byte ressyn=YesNo();
if (ress==0){ee_data.motoclock_motor=etalon.motoclock_motor;EEPROM.put(2,ee_data);};
};
if (ress==1){
byte ressyn=YesNo();
if (ress==0){ee_data.motoclock_kpp=etalon.motoclock_kpp;EEPROM.put(2,ee_data);};
};
if (ress==2){
byte ressyn=YesNo();
if (ress==0){ee_data.motoclock_most=etalon.motoclock_most;EEPROM.put(2,ee_data);};
};
if (ress==3){
byte ressyn=YesNo();
if (ress==0){ee_data.motoclock_grm=etalon.motoclock_grm;EEPROM.put(2,ee_data);};
};
};
LayoutScreen(true,layout);
}
if (btn2.click()) {
layout=layout+1;
if (layout>1){layout=0;};
LayoutScreen(true,layout);
beep();
}
display.display();

273
glcdfont.c Normal file
View File

@ -0,0 +1,273 @@
#ifndef FONT5X7_H
#define FONT5X7_H
#ifdef __AVR__
#include <avr/io.h>
#include <avr/pgmspace.h>
#elif defined(ESP8266)
#include <pgmspace.h>
#else
#define PROGMEM
#endif
// Standard ASCII 5x7 font
static const unsigned char font[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00,
0x3E, 0x55, 0x51, 0x55, 0x3E,
0x3E, 0x6B, 0x6F, 0x6B, 0x3E,
0x0C, 0x1E, 0x3C, 0x1E, 0x0C,
0x08, 0x1C, 0x3E, 0x1C, 0x08,
0x1C, 0x4A, 0x7F, 0x4A, 0x1C,
0x18, 0x5C, 0x7F, 0x5C, 0x18,
0x00, 0x1C, 0x1C, 0x1C, 0x00,
0x7F, 0x63, 0x63, 0x63, 0x7F,
0x00, 0x1C, 0x14, 0x1C, 0x00,
0x7F, 0x63, 0x6B, 0x63, 0x7F,
0x30, 0x48, 0x4D, 0x33, 0x07,
0x06, 0x29, 0x79, 0x29, 0x06,
0x20, 0x50, 0x3F, 0x02, 0x0C,
0x60, 0x7F, 0x05, 0x35, 0x3F,
0x2A, 0x1C, 0x77, 0x1C, 0x2A,
0x00, 0x7F, 0x3E, 0x1C, 0x08,
0x08, 0x1C, 0x3E, 0x7F, 0x00,
0x14, 0x22, 0x7F, 0x22, 0x14,
0x00, 0x5F, 0x00, 0x5F, 0x00,
0x06, 0x09, 0x7F, 0x01, 0x7F,
0x4A, 0x55, 0x55, 0x55, 0x29,
0x60, 0x60, 0x60, 0x60, 0x60,
0x54, 0x62, 0x7F, 0x62, 0x54,
0x08, 0x04, 0x7E, 0x04, 0x08,
0x08, 0x10, 0x3F, 0x10, 0x08,
0x08, 0x08, 0x2A, 0x1C, 0x08,
0x08, 0x1C, 0x2A, 0x08, 0x08,
0x1C, 0x10, 0x10, 0x10, 0x10,
0x1C, 0x3E, 0x08, 0x3E, 0x1C,
0x30, 0x3C, 0x3F, 0x3C, 0x30,
0x06, 0x1E, 0x7E, 0x1E, 0x06,
0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x5F, 0x00, 0x00,
0x00, 0x07, 0x00, 0x07, 0x00,
0x14, 0x7F, 0x14, 0x7F, 0x14,
0x24, 0x2A, 0x7F, 0x2A, 0x12,
0x23, 0x13, 0x08, 0x64, 0x62,
0x36, 0x49, 0x56, 0x20, 0x50,
0x00, 0x00, 0x07, 0x00, 0x00,
0x00, 0x1C, 0x22, 0x41, 0x00,
0x00, 0x41, 0x22, 0x1C, 0x00,
0x14, 0x08, 0x3E, 0x08, 0x14,
0x08, 0x08, 0x3E, 0x08, 0x08,
0x00, 0xA0, 0x60, 0x00, 0x00,
0x08, 0x08, 0x08, 0x08, 0x08,
0x00, 0x60, 0x60, 0x00, 0x00,
0x20, 0x10, 0x08, 0x04, 0x02,
0x3E, 0x51, 0x49, 0x45, 0x3E,
0x44, 0x42, 0x7F, 0x40, 0x40,
0x42, 0x61, 0x51, 0x49, 0x46,
0x21, 0x41, 0x45, 0x4B, 0x31,
0x18, 0x14, 0x12, 0x7F, 0x10,
0x27, 0x45, 0x45, 0x45, 0x39,
0x3C, 0x4A, 0x49, 0x49, 0x30,
0x01, 0x71, 0x09, 0x05, 0x03,
0x36, 0x49, 0x49, 0x49, 0x36,
0x06, 0x49, 0x49, 0x29, 0x1E,
0x00, 0x6C, 0x6C, 0x00, 0x00,
0x00, 0xAC, 0x6C, 0x00, 0x00,
0x08, 0x14, 0x22, 0x41, 0x00,
0x14, 0x14, 0x14, 0x14, 0x14,
0x00, 0x41, 0x22, 0x14, 0x08,
0x02, 0x01, 0x51, 0x09, 0x06,
0x3E, 0x41, 0x5D, 0x55, 0x5E,
0x7C, 0x12, 0x11, 0x12, 0x7C,
0x7F, 0x49, 0x49, 0x49, 0x36,
0x3E, 0x41, 0x41, 0x41, 0x22,
0x7F, 0x41, 0x41, 0x22, 0x1C,
0x7F, 0x49, 0x49, 0x49, 0x41,
0x7F, 0x09, 0x09, 0x09, 0x01,
0x3E, 0x41, 0x49, 0x49, 0x7A,
0x7F, 0x08, 0x08, 0x08, 0x7F,
0x00, 0x41, 0x7F, 0x41, 0x00,
0x20, 0x40, 0x41, 0x3F, 0x01,
0x7F, 0x08, 0x14, 0x22, 0x41,
0x7F, 0x40, 0x40, 0x40, 0x60,
0x7F, 0x02, 0x0C, 0x02, 0x7F,
0x7F, 0x04, 0x08, 0x10, 0x7F,
0x3E, 0x41, 0x41, 0x41, 0x3E,
0x7F, 0x09, 0x09, 0x09, 0x06,
0x3E, 0x41, 0x51, 0x21, 0x5E,
0x7F, 0x09, 0x19, 0x29, 0x46,
0x46, 0x49, 0x49, 0x49, 0x31,
0x03, 0x01, 0x7F, 0x01, 0x03,
0x3F, 0x40, 0x40, 0x40, 0x3F,
0x1F, 0x20, 0x40, 0x20, 0x1F,
0x3F, 0x40, 0x3C, 0x40, 0x3F,
0x63, 0x14, 0x08, 0x14, 0x63,
0x07, 0x08, 0x70, 0x08, 0x07,
0x61, 0x51, 0x49, 0x45, 0x43,
0x00, 0x7F, 0x41, 0x41, 0x00,
0x02, 0x04, 0x08, 0x10, 0x20,
0x00, 0x41, 0x41, 0x7F, 0x00,
0x04, 0x02, 0x01, 0x02, 0x04,
0x40, 0x40, 0x40, 0x40, 0x40,
0x00, 0x01, 0x02, 0x04, 0x00,
0x20, 0x54, 0x54, 0x54, 0x78,
0x7F, 0x48, 0x44, 0x44, 0x38,
0x38, 0x44, 0x44, 0x44, 0x48,
0x38, 0x44, 0x44, 0x48, 0x7F,
0x38, 0x54, 0x54, 0x54, 0x18,
0x08, 0x7E, 0x09, 0x01, 0x02,
0x08, 0x54, 0x54, 0x58, 0x3C,
0x7F, 0x08, 0x04, 0x04, 0x78,
0x00, 0x44, 0x7D, 0x40, 0x00,
0x20, 0x40, 0x44, 0x3D, 0x00,
0x7F, 0x10, 0x10, 0x28, 0x44,
0x00, 0x41, 0x7F, 0x40, 0x00,
0x7C, 0x04, 0x78, 0x04, 0x78,
0x7C, 0x08, 0x04, 0x04, 0x78,
0x38, 0x44, 0x44, 0x44, 0x38,
0x7C, 0x14, 0x14, 0x14, 0x08,
0x08, 0x14, 0x14, 0x0C, 0x7C,
0x7C, 0x08, 0x04, 0x04, 0x08,
0x48, 0x54, 0x54, 0x54, 0x24,
0x04, 0x3F, 0x44, 0x40, 0x20,
0x3C, 0x40, 0x40, 0x20, 0x7C,
0x1C, 0x20, 0x40, 0x20, 0x1C,
0x3C, 0x40, 0x38, 0x40, 0x3C,
0x44, 0x28, 0x10, 0x28, 0x44,
0x0C, 0x50, 0x50, 0x50, 0x3C,
0x44, 0x64, 0x54, 0x4C, 0x44,
0x00, 0x08, 0x36, 0x41, 0x00,
0x00, 0x00, 0x7F, 0x00, 0x00,
0x00, 0x41, 0x36, 0x08, 0x00,
0x02, 0x01, 0x02, 0x04, 0x02,
0x70, 0x48, 0x44, 0x48, 0x70,
0x00, 0x0E, 0x11, 0x0E, 0x00,
0x00, 0x12, 0x1F, 0x10, 0x00,
0x00, 0x12, 0x19, 0x16, 0x00,
0x00, 0x11, 0x15, 0x0B, 0x00,
0x00, 0x07, 0x04, 0x1F, 0x00,
0x00, 0x17, 0x15, 0x09, 0x00,
0x00, 0x0E, 0x15, 0x09, 0x00,
0x00, 0x01, 0x1D, 0x03, 0x00,
0x00, 0x0A, 0x15, 0x0A, 0x00,
0x00, 0x12, 0x15, 0x0E, 0x00,
0x00, 0x04, 0x04, 0x04, 0x00,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x3E, 0x00, 0x00, 0x00, 0x00,
0x3E, 0x3E, 0x00, 0x00, 0x00,
0x3E, 0x3E, 0x00, 0x3E, 0x00,
0x3E, 0x3E, 0x00, 0x3E, 0x3E,
0x80, 0x80, 0x80, 0x80, 0x80,
0xC0, 0xC0, 0xC0, 0xC0, 0xC0,
0xD0, 0xD0, 0xD0, 0xD0, 0xD0,
0xD8, 0xD8, 0xD8, 0xD8, 0xD8,
0xDA, 0xDA, 0xDA, 0xDA, 0xDA,
0xDB, 0xDB, 0xDB, 0xDB, 0xDB,
0x40, 0x00, 0x40, 0x00, 0x40,
0x60, 0x00, 0x40, 0x00, 0x40,
0x60, 0x00, 0x70, 0x00, 0x40,
0x60, 0x00, 0x70, 0x00, 0x78,
0x7C, 0x00, 0x40, 0x00, 0x40,
0x7C, 0x00, 0x7E, 0x00, 0x40,
0x7C, 0x00, 0x7E, 0x00, 0x7F,
0x1C, 0x77, 0x41, 0x41, 0x41,
0x41, 0x41, 0x41, 0x41, 0x41,
0x41, 0x41, 0x41, 0x7F, 0x00,
0x1C, 0x77, 0x41, 0x5D, 0x5D,
0x41, 0x41, 0x41, 0x5D, 0x5D,
0x5D, 0x5D, 0x41, 0x5D, 0x5D,
0x5D, 0x5D, 0x41, 0x7F, 0x00,
0x22, 0x1C, 0x14, 0x1C, 0x22,
0x00, 0x08, 0x1C, 0x08, 0x00,
0x00, 0x00, 0x77, 0x00, 0x00,
0x46, 0x5D, 0x55, 0x5D, 0x31,
0x7C, 0x55, 0x54, 0x55, 0x44,
0x08, 0x08, 0x2A, 0x08, 0x08,
0x00, 0x14, 0x08, 0x14, 0x00,
0x08, 0x14, 0x22, 0x08, 0x14,
0x7F, 0x41, 0x71, 0x31, 0x1F,
0x03, 0x05, 0x7F, 0x05, 0x03,
0x22, 0x14, 0x7F, 0x55, 0x22,
0x02, 0x55, 0x7D, 0x05, 0x02,
0x06, 0x09, 0x09, 0x06, 0x00,
0x44, 0x44, 0x5F, 0x44, 0x44,
0x1C, 0x14, 0x1C, 0x22, 0x7F,
0x20, 0x3E, 0x61, 0x3E, 0x20,
0x20, 0x50, 0x3F, 0x02, 0x0C,
0x80, 0x7C, 0x20, 0x3C, 0x40,
0x44, 0x3C, 0x04, 0x7C, 0x44,
0x00, 0x00, 0x08, 0x00, 0x00,
0x38, 0x55, 0x54, 0x55, 0x18,
0x7E, 0x08, 0x10, 0x7F, 0x01,
0x08, 0x10, 0x08, 0x04, 0x02,
0x14, 0x08, 0x22, 0x14, 0x08,
0x0E, 0x06, 0x0A, 0x10, 0x20,
0x20, 0x10, 0x0A, 0x06, 0x0E,
0x38, 0x30, 0x28, 0x04, 0x02,
0x02, 0x04, 0x28, 0x30, 0x38,
0x7E, 0x11, 0x11, 0x11, 0x7E,
0x7F, 0x49, 0x49, 0x49, 0x31,
0x7F, 0x49, 0x49, 0x49, 0x36,
0x7F, 0x01, 0x01, 0x01, 0x03,
0xC0, 0x7F, 0x41, 0x7F, 0xC0,
0x7F, 0x49, 0x49, 0x49, 0x41,
0x77, 0x08, 0x7F, 0x08, 0x77,
0x41, 0x49, 0x49, 0x49, 0x36,
0x7F, 0x10, 0x08, 0x04, 0x7F,
0x7C, 0x21, 0x12, 0x09, 0x7C,
0x7F, 0x08, 0x14, 0x22, 0x41,
0x40, 0x3E, 0x01, 0x01, 0x7F,
0x7F, 0x02, 0x0C, 0x02, 0x7F,
0x7F, 0x08, 0x08, 0x08, 0x7F,
0x3E, 0x41, 0x41, 0x41, 0x3E,
0x7F, 0x01, 0x01, 0x01, 0x7F,
0x7F, 0x09, 0x09, 0x09, 0x06,
0x3E, 0x41, 0x41, 0x41, 0x22,
0x01, 0x01, 0x7F, 0x01, 0x01,
0x07, 0x48, 0x48, 0x48, 0x3F,
0x0E, 0x11, 0x7F, 0x11, 0x0E,
0x63, 0x14, 0x08, 0x14, 0x63,
0x7F, 0x40, 0x40, 0x7F, 0xC0,
0x07, 0x08, 0x08, 0x08, 0x7F,
0x7F, 0x40, 0x7F, 0x40, 0x7F,
0x7F, 0x40, 0x7F, 0x40, 0xFF,
0x01, 0x7F, 0x48, 0x48, 0x30,
0x7F, 0x48, 0x48, 0x30, 0x7F,
0x7F, 0x48, 0x48, 0x48, 0x30,
0x22, 0x41, 0x49, 0x49, 0x3E,
0x7F, 0x08, 0x3E, 0x41, 0x3E,
0x46, 0x29, 0x19, 0x09, 0x7F,
0x20, 0x54, 0x54, 0x54, 0x78,
0x3C, 0x4A, 0x4A, 0x49, 0x31,
0x7C, 0x54, 0x54, 0x54, 0x28,
0x7C, 0x04, 0x04, 0x04, 0x0C,
0xC0, 0x78, 0x44, 0x7C, 0xC0,
0x38, 0x54, 0x54, 0x54, 0x18,
0x6C, 0x10, 0x7C, 0x10, 0x6C,
0x44, 0x54, 0x54, 0x54, 0x28,
0x7C, 0x20, 0x10, 0x08, 0x7C,
0x7C, 0x40, 0x26, 0x10, 0x7C,
0x7C, 0x10, 0x10, 0x28, 0x44,
0x40, 0x38, 0x04, 0x04, 0x7C,
0x7C, 0x08, 0x10, 0x08, 0x7C,
0x7C, 0x10, 0x10, 0x10, 0x7C,
0x38, 0x44, 0x44, 0x44, 0x38,
0x7C, 0x04, 0x04, 0x04, 0x7C,
0x7C, 0x14, 0x14, 0x14, 0x08,
0x38, 0x44, 0x44, 0x44, 0x48,
0x04, 0x04, 0x7C, 0x04, 0x04,
0x0C, 0x50, 0x50, 0x50, 0x3C,
0x18, 0x24, 0xFC, 0x24, 0x18,
0x44, 0x28, 0x10, 0x28, 0x44,
0x7C, 0x40, 0x40, 0x7C, 0xC0,
0x0C, 0x10, 0x10, 0x10, 0x7C,
0x7C, 0x40, 0x7C, 0x40, 0x7C,
0x7C, 0x40, 0x7C, 0x40, 0xFC,
0x04, 0x7C, 0x50, 0x50, 0x20,
0x7C, 0x50, 0x50, 0x20, 0x7C,
0x7C, 0x50, 0x50, 0x50, 0x20,
0x28, 0x44, 0x54, 0x54, 0x38,
0x7C, 0x10, 0x38, 0x44, 0x38,
0x48, 0x34, 0x14, 0x14, 0x7C
};
#endif // FONT5X7_H