Our Blockchain Village Badge in 2021 saw a great response at DEF CON. So I wanted to build further on the same lineup with new renewed challenges.
Without changing the form factor, I wanted to experiment with what things can be put to test the limits of Atmel chips. And so the Web 3.0 badge took its shape from all the variety of crypto as well as smart contract puzzles it holds.
After sliding the top right corner switch, the badge boots up in default animation mode and rotates the event name and attendee name (if programmed).
Puzzle Mode: Pressing and holding the S1 key for 4 seconds will launch the "Insert Code" mode. On this screen, puzzle flags in binary can be entered for validation or further clues.
S2 key will clear the binary inputs. Badge responds to the binary code as soon as all required characters are entered.
Reprogramming:
All badges are equipped with male headers and pinouts for reference.
The only thing required to program the badges is jumper wires and ISP Programmer. Attach the Jumper wires from their corresponding pins to the ISP Programmer connected to the system.
Launch Microchip Studio or any of your favourite IDE to program the badge. From there, you can edit the code or make your own build from scratch.
Lanyards:
The lanyards are custom designed by Doc for this very particular badge by taking into account the unique design the lanyards needed to have.
So lanyards we designed with different colour accents on each side and the same block design.
The CodeThe attached code is to add your own name to the badge. Simply replace "HUMAN" on line 827 with your name and upload the new hex file using your favourite ISP programmer. This code does not hold the puzzles so it'd not be possible to do both the names and the puzzles at the same time. Thereby, if one intends to play the puzzles - they should certainly avoid flashing the badge with any code.
The RewardsThe badge puzzles are linear in terms of their structure. Means - solving one puzzle leads to the next one and so on. Until one reaches the very end where the puzzle leads to a crypto wallet and directions to cash it out as a reward.
As always, feel free to experiment with the badge as well as the puzzles.
#define F_CPU 2000000UL
#include<avr/io.h>
#include<util/delay.h>
#include <stdlib.h>
#include <avr/pgmspace.h>
int image_cnt=0;
int ioled,joled;
int *icount;
int *icount=&image_cnt;
int password=0;
char store_buffer[1024];
#define char_pages_required 2
#define char_columns_required 9
#define no_of_bytes_char 21
#define first_char_ascii_code 32
//int check_code[8] = {0,0,0,0,1,1,1,1};
/*char bitmap[8][128] PROGMEM ={
{0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,128 ,224 ,192 ,48 ,112 ,240 ,240 ,240 ,240 ,240 ,240 ,240 ,240 ,240 ,240 ,192 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,192 ,224 ,240 ,240 ,240 ,240 ,240 ,240 ,240 ,240 ,240 ,240 ,48 ,192 ,224 ,128 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0},
{0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,192 ,240 ,252 ,255 ,255 ,255 ,255 ,255 ,252 ,241 ,231 ,31 ,63 ,127 ,127 ,127 ,127 ,127 ,127 ,127 ,127 ,126 ,120 ,112 ,96 ,96 ,64 ,64 ,64 ,0 ,0 ,64 ,64 ,64 ,96 ,96 ,112 ,120 ,126 ,127 ,127 ,127 ,127 ,127 ,127 ,127 ,127 ,63 ,159 ,231 ,241 ,252 ,255 ,255 ,255 ,255 ,255 ,252 ,240 ,192 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0},
{0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,1 ,7 ,31 ,63 ,255 ,255 ,255 ,63 ,143 ,231 ,249 ,252 ,255 ,255 ,255 ,255 ,255 ,255 ,255 ,255 ,127 ,63 ,143 ,135 ,3 ,193 ,193 ,192 ,192 ,192 ,192 ,192 ,192 ,193 ,193 ,195 ,199 ,15 ,31 ,127 ,255 ,255 ,255 ,255 ,255 ,255 ,255 ,255 ,252 ,241 ,231 ,159 ,63 ,255 ,255 ,255 ,63 ,15 ,135 ,193 ,192 ,192 ,192 ,192 ,192 ,192 ,192 ,192 ,192 ,192 ,0 ,128 ,128 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0},
{0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,1 ,0 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,195 ,225 ,248 ,254 ,255 ,255 ,254 ,252 ,241 ,199 ,31 ,63 ,255 ,255 ,255 ,255 ,255 ,255 ,255 ,255 ,252 ,248 ,225 ,195 ,131 ,131 ,131 ,3 ,3 ,3 ,3 ,3 ,131 ,131 ,194 ,192 ,225 ,240 ,252 ,255 ,255 ,255 ,255 ,255 ,255 ,255 ,255 ,127 ,31 ,199 ,243 ,248 ,254 ,255 ,255 ,254 ,248 ,240 ,192 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0},
{0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,128 ,128 ,128 ,128 ,128 ,128 ,128 ,128 ,128 ,128 ,129 ,135 ,31 ,63 ,255 ,255 ,255 ,255 ,127 ,31 ,199 ,241 ,248 ,254 ,254 ,254 ,254 ,254 ,254 ,254 ,254 ,254 ,62 ,30 ,142 ,134 ,130 ,130 ,130 ,128 ,128 ,128 ,128 ,130 ,130 ,130 ,6 ,14 ,62 ,126 ,254 ,254 ,254 ,254 ,254 ,254 ,254 ,254 ,252 ,241 ,199 ,159 ,63 ,255 ,255 ,255 ,255 ,127 ,31 ,7 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0},
{0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,192 ,224 ,248 ,254 ,255 ,254 ,248 ,227 ,207 ,63 ,127 ,255 ,255 ,255 ,255 ,255 ,255 ,255 ,255 ,252 ,240 ,195 ,131 ,137 ,12 ,15 ,15 ,15 ,15 ,15 ,15 ,15 ,15 ,15 ,143 ,135 ,225 ,240 ,252 ,255 ,255 ,255 ,255 ,255 ,255 ,255 ,255 ,127 ,63 ,207 ,227 ,248 ,254 ,255 ,254 ,248 ,225 ,199 ,15 ,15 ,15 ,15 ,15 ,15 ,15 ,15 ,15 ,15 ,14 ,8 ,3 ,3 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0},
{0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,15 ,63 ,127 ,255 ,255 ,255 ,255 ,255 ,127 ,31 ,207 ,240 ,249 ,249 ,249 ,249 ,249 ,249 ,249 ,249 ,249 ,249 ,121 ,25 ,25 ,9 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,1 ,9 ,9 ,25 ,57 ,249 ,249 ,249 ,249 ,249 ,249 ,249 ,249 ,249 ,249 ,224 ,207 ,63 ,127 ,255 ,255 ,255 ,255 ,255 ,127 ,31 ,15 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0},
{0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,1 ,7 ,15 ,3 ,25 ,30 ,31 ,31 ,31 ,31 ,31 ,31 ,31 ,31 ,31 ,31 ,15 ,3 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,3 ,15 ,31 ,31 ,31 ,31 ,31 ,31 ,31 ,31 ,31 ,31 ,28 ,25 ,7 ,15 ,7 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0},
};
*/
char bitmap1[8][128] PROGMEM ={
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0xFF,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,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0xFF,0x80,0x80,0x40,0x20,0x20,0x10,0x08,0x08,0x04,0x02,0x03,0x03,
0x02,0x04,0x08,0x08,0x10,0x20,0x20,0x40,0x80,0x80,0x00,0x80,0x80,0x40,0x20,0x20,
0x10,0x08,0x08,0x04,0x02,0x02,0x01,0x02,0x02,0x04,0x08,0x08,0x10,0x10,0x20,0x40,
0x40,0x80,0x80,0x80,0x40,0x20,0x20,0x10,0x08,0x08,0x04,0x02,0x02,0xFF,0x00,0x00},
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x80,0x40,0x40,0x20,0x10,0x10,
0x08,0x08,0x04,0x02,0x02,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x80,0x40,0x40,0x20,0x10,0x10,0x08,0x04,0x04,0x02,0x01,0x01,0xFF,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x80,0x40,0x40,0x20,0x10,0x10,0x08,0x04,
0x04,0x02,0x01,0xFF,0x01,0x01,0x02,0x04,0x04,0x08,0x10,0x10,0x20,0x40,0x40,0x80,
0x40,0x40,0x20,0x10,0x10,0x08,0x04,0x04,0x02,0x01,0x01,0x02,0x02,0x04,0x08,0x08,
0x10,0x10,0x20,0x40,0x40,0x80,0x80,0x40,0x40,0x20,0x10,0x10,0x08,0x08,0x04,0x02,
0x02,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00},
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x80,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0xFF,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x80,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x40,0x20,0x10,0x10,
0x08,0x04,0x04,0x02,0x01,0x01,0xFF,0x01,0x02,0x04,0x04,0x08,0x10,0x10,0x20,0x40,
0x40,0xFF,0x40,0x40,0x20,0x10,0x10,0x08,0x04,0x04,0x02,0x01,0x01,0x00,0x00,0x00},
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0xFF,0x20,0x20,0x10,0x08,0x08,0x04,
0x02,0x02,0x01,0x00,0x00,0xFF,0x01,0x02,0x02,0x04,0x04,0x08,0x10,0x10,0x20,0x20,
0xFF,0x20,0x20,0x10,0x08,0x08,0x04,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x80,0x80,0xFF,0x20,0x20,0x10,0x08,0x08,0x04,0x04,0x02,
0x01,0x01,0x00,0xFF,0x01,0x01,0x02,0x02,0x04,0x04,0x08,0x10,0x10,0x20,0x20,0xFF,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x80,0x80,0xFF,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{
0x10,0x08,0x08,0x04,0x02,0x02,0x01,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x80,0x40,0x40,0x7F,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x10,0x10,0x08,
0x04,0x04,0x02,0x02,0x01,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x80,0x40,0x60,0x7F,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x60,0x50,0x90,0x08,0x04,
0x04,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x04,0x08,0x88,0x90,
0x60,0xFF,0x40,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x20,0x10},
{
0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x40,0x3F,0x10,0x10,0x08,0x04,0x04,0x02,
0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x04,0x04,0x08,0x10,0x10,
0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x80,0x40,0x20,0xFF,0x30,0x50,0x48,0x84,0x04,0x02,0x01,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x04,0x04,0x08,0x10,0x10,0x20,0x3F,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x01,0x01,
0x02,0x04,0x04,0x08,0x08,0x10,0xE0,0x30,0x50,0x88,0x84,0x04,0x02,0x01,0x00,0x00,
0x00,0xFF,0x00,0x00,0x00,0x01,0x01,0x02,0x04,0x04,0x08,0x10,0x10,0xFF,0x00,0x00},
{
0x48,0x84,0x84,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x80,0x80,0x40,0x20,0x20,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x08,0x08,0x04,
0x02,0x02,0x01,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x04,
0x08,0x10,0x10,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x40,0x20,0x20,0xFF,0x20,0x20,0x40,0x80,0x80,
0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x01,0x02,0x82,0x44,0x28,
0x28,0xFF,0x20,0x20,0x40,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x30,0x30},
{
0x00,0x00,0x00,0x01,0x01,0x02,0x04,0x04,0x08,0xF8,0x18,0x08,0x04,0x02,0x02,0x01,
0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x40,0x40,0x80,0x80,0x00,0x00,
0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x08,
0x08,0x04,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,
0x01,0x02,0x02,0x04,0x04,0x08,0x1F,0x18,0x28,0x44,0x42,0x81,0x01,0x00,0x00,0x00,
0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x04,0x04,0x08,0xFF,0x00,0x00},
};
char cyber_week[8][128] PROGMEM ={
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xF8,0xF8,0xF8,0xF8,0x00,0x00,0x00,0x00,0x00,0xF8,0xF8,0xF8,
0xF8,0xF8,0x00,0xF8,0xF8,0xF8,0xF8,0xF8,0x00,0xF8,0xF8,0xF8,0xF8,0x78,0xF8,0xF8,
0xF8,0xF8,0x78,0xF8,0xF8,0xF8,0xF8,0x00,0xF8,0xF8,0xF8,0xF8,0x78,0x78,0x78,0x78,
0xF8,0xF8,0xF0,0xF0,0xE0,0x00,0x80,0x80,0xE0,0xE0,0xE0,0x80,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,0xFF,0xFF,0xFF,0xFF,0xF0,0xF0,0xF0,0xF0,0xF0,0xFF,0xFF,0xFF,
0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,
0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x78,0x78,0x78,0x78,
0x78,0xFF,0xFF,0xFF,0xCF,0x00,0x03,0x03,0x1F,0x1F,0x1F,0x03,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},
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,
0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,
0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xF0,0xF0,0xF0,0xF0,
0xF0,0xFF,0xFF,0x7F,0x7F,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{
0xC0,0xF0,0xF8,0xFC,0xFC,0x3E,0x3E,0x3E,0x3C,0x3C,0x3C,0x3C,0x3C,0x80,0x80,0x80,
0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0xFF,0xFF,0xFF,0xFF,
0xFF,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,
0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,
0x00,0x1C,0xFC,0xFC,0xFC,0xF8,0x80,0x00,0x00,0x00,0x80,0xF8,0xFC,0xFC,0xFC,0x1C,
0x00,0x00,0x00,0xC0,0xFC,0xFC,0xFC,0xFC,0x0C,0x00,0x00,0x00,0x00,0x80,0x80,0x80,
0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,
0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80},
{
0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x1F,0xFF,
0xFF,0xFF,0xF8,0x00,0x00,0xC0,0xFC,0xFF,0xFF,0xFF,0x0F,0x00,0xFF,0xFF,0xFF,0xFF,
0xFF,0x07,0x07,0x07,0xFF,0xFF,0xFF,0xFE,0xF8,0x00,0xFC,0xFF,0xFF,0xFF,0xC7,0xC7,
0xC7,0xEF,0xFF,0xFF,0xFF,0x7C,0x00,0xFF,0xFF,0xFF,0xFF,0x1F,0x0F,0x0F,0x0F,0x0F,
0x00,0x00,0x01,0x0F,0xFF,0xFF,0xFF,0xFC,0xC0,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,
0xE0,0x80,0xFC,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0xF0,0xFE,0xFF,0xFF,0xFF,0xC7,0xC7,
0xC7,0xFF,0xFF,0xFF,0xFE,0x00,0xF8,0xFE,0xFF,0xFF,0xFF,0xC7,0xC7,0xC7,0xFF,0xFF,
0xFF,0xFE,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0xFC,0xFE,0xFF,0x1F,0x0F,0x03,0x01},
{
0x03,0x1F,0x3F,0x3F,0x7F,0x7C,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x00,0x00,0x01,
0x1F,0x3F,0x7F,0x7F,0xF8,0xFF,0xFF,0xFF,0x1F,0x01,0x00,0x00,0x7F,0x7F,0x7F,0x7F,
0x3F,0x78,0x78,0x78,0x7F,0x7F,0x3F,0x1F,0x07,0x00,0x1F,0x3F,0x7F,0x7F,0x79,0x79,
0x79,0x79,0x79,0x79,0x78,0x38,0x00,0x7F,0x7F,0x7F,0x7F,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x07,0x7F,0x7F,0x7F,0x7F,0x7F,0x3F,0x03,0x03,0x1F,0x7F,
0x7F,0x7F,0x7F,0x7F,0x0F,0x00,0x00,0x00,0x00,0x07,0x3F,0x7F,0x7F,0x7F,0x79,0x79,
0x79,0x79,0x79,0x79,0x78,0x00,0x07,0x3F,0x7F,0x7F,0x7D,0x79,0x79,0x79,0x79,0x79,
0x79,0x78,0x00,0x7F,0x7F,0x7F,0x7F,0x7E,0x03,0x07,0x1F,0x7F,0x7F,0x7C,0x78,0x60},
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x78,0x7F,0x7F,0x3F,0x0F,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,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
};
/*char village_name[1][128] PROGMEM ={
{
0x00,0x7E,0x40,0x40,0x40,0x40,0x70,0x00,0x00,0x0C,0x60,0x48,0x78,0x1E,0x02,0x00,
0x3C,0x7E,0x40,0x42,0x42,0x42,0x00,0x7E,0x7E,0x10,0x30,0x40,0x0E,0x00,0x00,0x7E,
0x42,0x40,0x42,0x42,0x00,0x00,0x40,0x40,0x7E,0x40,0x40,0x00,0x00,0x00,0x00,0x00,
0x00,0x7E,0x00,0x00,0x00,0x00,0x7E,0x00,0x02,0x1C,0x40,0x48,0x78,0x1E,0x02,0x00,
0x7E,0x42,0x40,0x42,0x42,0x42,0x00,0x7E,0x42,0x10,0x30,0x40,0x0E,0x00,0x00,0x00,
0x00,0x00,0x00,0x70,0x1E,0x02,0x02,0x18,0x40,0x00,0x00,0x7E,0x00,0x40,0x7E,0x00,
0x02,0x02,0x00,0x00,0x7E,0x02,0x02,0x02,0x00,0x00,0x02,0x18,0x40,0x48,0x78,0x0E,
0x00,0x00,0x7E,0x42,0x40,0x42,0x42,0x4E,0x00,0x00,0x7E,0x42,0x42,0x42,0x42,0x00},
};*/
const unsigned short font21[] PROGMEM = {
0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char
0x02, 0x00, 0x00, 0xFE, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char !
0x03, 0x1E, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char "
0x06, 0x20, 0x1E, 0xF0, 0x03, 0x2E, 0x1E, 0xF0, 0x03, 0x2E, 0x02, 0x20, 0x02, 0x00, 0x00, 0x00, 0x00, // Code for char #
0x04, 0x3C, 0x0E, 0x42, 0x10, 0x83, 0x30, 0x1E, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char $
0x08, 0xFE, 0x00, 0x82, 0x00, 0xFE, 0x18, 0x80, 0x07, 0x78, 0x00, 0xC6, 0x1F, 0x40, 0x10, 0xC0, 0x1F, // Code for char %
0x04, 0x7C, 0x0F, 0x82, 0x10, 0x82, 0x10, 0x9C, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char &
0x01, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char '
0x02, 0xFC, 0x0F, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char (
0x02, 0x02, 0x10, 0xFC, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char )
0x04, 0x00, 0x00, 0x04, 0x00, 0x0E, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char *
0x04, 0x00, 0x00, 0x80, 0x00, 0xE0, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char +
0x01, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ,
0x03, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char -
0x01, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char .
0x02, 0x80, 0x1F, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char /
0x04, 0xFC, 0x0F, 0x02, 0x10, 0x02, 0x10, 0xFC, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char 0
0x01, 0xFE, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char 1
0x04, 0x1C, 0x1F, 0x82, 0x10, 0x42, 0x10, 0x3C, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char 2
0x04, 0x1C, 0x0E, 0x42, 0x10, 0x42, 0x10, 0xBC, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char 3
0x04, 0xF0, 0x03, 0x08, 0x02, 0xFE, 0x1F, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char 4
0x04, 0x7E, 0x0E, 0x42, 0x10, 0x42, 0x10, 0x9E, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char 5
0x04, 0xFC, 0x0F, 0x42, 0x10, 0x42, 0x10, 0x9C, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char 6
0x04, 0x1E, 0x00, 0x02, 0x1C, 0xE2, 0x03, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char 7
0x04, 0xBC, 0x0F, 0x42, 0x10, 0x42, 0x10, 0xBC, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char 8
0x04, 0x7C, 0x0E, 0x82, 0x10, 0x82, 0x10, 0xFC, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char 9
0x01, 0x80, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char :
0x01, 0x80, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ;
0x04, 0x00, 0x00, 0x40, 0x00, 0xA0, 0x00, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char <
0x04, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char =
0x04, 0x00, 0x00, 0xA0, 0x00, 0xA0, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char >
0x04, 0x1C, 0x00, 0x82, 0x1B, 0x42, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ?
0x06, 0xF0, 0x07, 0x18, 0x08, 0xF8, 0x0B, 0xF8, 0x09, 0x08, 0x02, 0xF0, 0x03, 0x00, 0x00, 0x00, 0x00, // Code for char @
0x03, 0xF8, 0x1F, 0x06, 0x01, 0xF8, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char A
0x04, 0xFE, 0x1F, 0x42, 0x10, 0x42, 0x10, 0xBC, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char B
0x04, 0xFC, 0x0F, 0x02, 0x10, 0x02, 0x10, 0x1C, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char C
0x04, 0xFE, 0x1F, 0x02, 0x10, 0x02, 0x10, 0xFC, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char D
0x04, 0xFE, 0x1F, 0x42, 0x10, 0x42, 0x10, 0x1E, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char E
0x03, 0xFE, 0x1F, 0x82, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char F
0x04, 0xFC, 0x0F, 0x02, 0x10, 0x82, 0x10, 0x9C, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char G
0x04, 0xFE, 0x1F, 0x80, 0x00, 0x80, 0x00, 0xFE, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char H
0x01, 0xFE, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char I
0x04, 0x00, 0x0E, 0x00, 0x10, 0x00, 0x10, 0xFE, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char J
0x03, 0xFE, 0x1F, 0xE0, 0x03, 0x1E, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char K
0x03, 0xFE, 0x1F, 0x00, 0x10, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char L
0x07, 0xFE, 0x1F, 0x38, 0x00, 0xC0, 0x03, 0x00, 0x1C, 0xC0, 0x03, 0x38, 0x00, 0xFE, 0x1F, 0x00, 0x00, // Code for char M
0x04, 0xFE, 0x1F, 0x70, 0x00, 0x80, 0x07, 0xFE, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char N
0x04, 0xFC, 0x0F, 0x02, 0x10, 0x02, 0x10, 0xFC, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char O
0x04, 0xFE, 0x1F, 0x82, 0x00, 0x82, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char P
0x04, 0xFC, 0x0F, 0x02, 0x10, 0x02, 0x38, 0xFC, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char Q
0x04, 0xFE, 0x1F, 0x82, 0x00, 0x82, 0x00, 0x7C, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char R
0x04, 0x3C, 0x0E, 0x42, 0x10, 0x82, 0x10, 0x1C, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char S
0x05, 0x1E, 0x00, 0x02, 0x00, 0xFE, 0x1F, 0x02, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char T
0x04, 0xFE, 0x0F, 0x00, 0x10, 0x00, 0x10, 0xFE, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char U
0x03, 0xFE, 0x07, 0x00, 0x18, 0xFE, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char V
0x07, 0xFE, 0x07, 0x00, 0x18, 0xF8, 0x07, 0x06, 0x00, 0xF8, 0x07, 0x00, 0x18, 0xFE, 0x07, 0x00, 0x00, // Code for char W
0x03, 0x0E, 0x1E, 0xF0, 0x01, 0x0E, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char X
0x03, 0x3E, 0x00, 0xC0, 0x1F, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char Y
0x04, 0x1E, 0x1C, 0x82, 0x13, 0x72, 0x10, 0x0E, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char Z
0x02, 0xFE, 0x1F, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char [
0x02, 0x7E, 0x00, 0x80, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char BackSlash
0x02, 0x02, 0x10, 0xFE, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ]
0x05, 0x10, 0x00, 0x0C, 0x00, 0x02, 0x00, 0x0C, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ^
0x04, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char _
0x03, 0x00, 0x00, 0x02, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char `
0x03, 0x70, 0x1F, 0x10, 0x11, 0xF0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char a
0x04, 0xFE, 0x1F, 0x10, 0x10, 0x10, 0x10, 0xF0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char b
0x04, 0xE0, 0x0F, 0x10, 0x10, 0x10, 0x10, 0x60, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char c
0x04, 0xF0, 0x1F, 0x10, 0x10, 0x10, 0x10, 0xFE, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char d
0x04, 0xE0, 0x0F, 0x10, 0x11, 0x10, 0x11, 0xE0, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char e
0x02, 0xFE, 0x1F, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char f
0x04, 0xF0, 0x5F, 0x10, 0x50, 0x10, 0x50, 0xF0, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char g
0x04, 0xFE, 0x1F, 0x10, 0x00, 0x10, 0x00, 0xF0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char h
0x01, 0xF6, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char i
0x02, 0x00, 0x40, 0xF6, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char j
0x04, 0xFE, 0x1F, 0x80, 0x03, 0x40, 0x0C, 0x30, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char k
0x01, 0xFE, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char l
0x07, 0xF0, 0x1F, 0x10, 0x00, 0x10, 0x00, 0xE0, 0x1F, 0x10, 0x00, 0x10, 0x00, 0xF0, 0x1F, 0x00, 0x00, // Code for char m
0x04, 0xF0, 0x1F, 0x10, 0x00, 0x10, 0x00, 0xF0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char n
0x04, 0xE0, 0x0F, 0x10, 0x10, 0x10, 0x10, 0xE0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char o
0x04, 0xF0, 0x7F, 0x10, 0x10, 0x10, 0x10, 0xF0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char p
0x04, 0xF0, 0x1F, 0x10, 0x10, 0x10, 0x10, 0xF0, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char q
0x03, 0xF0, 0x1F, 0x10, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char r
0x03, 0x60, 0x0C, 0x90, 0x11, 0x60, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char s
0x03, 0xFE, 0x0F, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char t
0x04, 0xF0, 0x1F, 0x00, 0x10, 0x00, 0x10, 0xF0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char u
0x03, 0xF0, 0x07, 0x00, 0x18, 0xF0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char v
0x07, 0xF0, 0x07, 0x00, 0x18, 0xC0, 0x07, 0x30, 0x00, 0xC0, 0x07, 0x00, 0x18, 0xF0, 0x07, 0x00, 0x00, // Code for char w
0x03, 0x70, 0x18, 0x80, 0x07, 0x70, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char x
0x04, 0xF0, 0x5F, 0x00, 0x50, 0x00, 0x50, 0xF0, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char y
0x03, 0x70, 0x1C, 0x90, 0x13, 0x70, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char z
0x03, 0x40, 0x00, 0xBC, 0x0F, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char {
0x02, 0x00, 0x00, 0xFE, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char |
0x04, 0x00, 0x00, 0x02, 0x10, 0xBC, 0x0F, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char }
0x05, 0xC0, 0x00, 0x40, 0x00, 0x80, 0x00, 0x80, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ~
0x05, 0xFF, 0x1F, 0x01, 0x10, 0x01, 0x10, 0x01, 0x10, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // Code for char
};
const unsigned short font2[] PROGMEM = {
0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char
0x04, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x0D, 0xFC, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char !
0x05, 0x1C, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char "
0x08, 0x20, 0x01, 0x20, 0x0D, 0xE0, 0x03, 0x38, 0x01, 0x20, 0x0D, 0xE0, 0x03, 0x38, 0x01, 0x20, 0x01, 0x00, 0x00, 0x00, 0x00, // Code for char #
0x06, 0x00, 0x00, 0x38, 0x06, 0x7C, 0x0E, 0xCE, 0x1C, 0xDC, 0x0F, 0x98, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char $
0x09, 0xFC, 0x00, 0x84, 0x00, 0xFC, 0x0C, 0x00, 0x03, 0xC0, 0x00, 0x30, 0x00, 0xCC, 0x0F, 0x40, 0x08, 0xC0, 0x0F, 0x00, 0x00, // Code for char %
0x07, 0x60, 0x07, 0xF0, 0x0F, 0x90, 0x0C, 0xF0, 0x0F, 0x60, 0x07, 0x00, 0x0E, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char &
0x02, 0x1C, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char '
0x03, 0xFC, 0x0F, 0xFC, 0x0F, 0x04, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char (
0x03, 0x04, 0x08, 0xFC, 0x0F, 0xFC, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char )
0x04, 0x00, 0x00, 0x18, 0x00, 0x0C, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char *
0x07, 0x00, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xF0, 0x03, 0xF0, 0x03, 0xC0, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char +
0x02, 0x00, 0x1C, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ,
0x04, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char -
0x02, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char .
0x05, 0x00, 0x00, 0x00, 0x0E, 0xE0, 0x0F, 0xFC, 0x01, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char /
0x07, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x07, 0xFC, 0x0F, 0x04, 0x08, 0xFC, 0x0F, 0xF8, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char 0
0x06, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0xF8, 0x0F, 0xFC, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char 1
0x07, 0x00, 0x00, 0x00, 0x00, 0x18, 0x0C, 0x1C, 0x0F, 0xC4, 0x0F, 0xFC, 0x09, 0x78, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char 2
0x07, 0x00, 0x00, 0x00, 0x00, 0x18, 0x07, 0x1C, 0x0F, 0x44, 0x08, 0xFC, 0x0F, 0xB8, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char 3
0x08, 0x00, 0x00, 0x80, 0x03, 0xE0, 0x03, 0x78, 0x03, 0x1C, 0x03, 0xFC, 0x0F, 0xFC, 0x0F, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, // Code for char 4
0x07, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x07, 0x7C, 0x0F, 0x24, 0x08, 0xE4, 0x0F, 0xE4, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char 5
0x07, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x07, 0xFC, 0x0F, 0x24, 0x08, 0xEC, 0x0F, 0xC8, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char 6
0x07, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x0C, 0xE4, 0x0F, 0xFC, 0x03, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char 7
0x07, 0x00, 0x00, 0x00, 0x00, 0xB8, 0x07, 0xFC, 0x0F, 0x44, 0x08, 0xFC, 0x0F, 0xB8, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char 8
0x07, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x04, 0xFC, 0x0D, 0x04, 0x09, 0xFC, 0x0F, 0xF8, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char 9
0x02, 0x60, 0x0C, 0x60, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char :
0x02, 0x60, 0x1C, 0x60, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ;
0x07, 0x40, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xF0, 0x01, 0xB0, 0x01, 0xB0, 0x01, 0x18, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char <
0x07, 0xB0, 0x01, 0xB0, 0x01, 0xB0, 0x01, 0xB0, 0x01, 0xB0, 0x01, 0xB0, 0x01, 0xB0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char =
0x07, 0x18, 0x03, 0xB0, 0x01, 0xB0, 0x01, 0xF0, 0x01, 0xE0, 0x00, 0xE0, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char >
0x06, 0xD8, 0x0D, 0xDC, 0x0D, 0x04, 0x01, 0x04, 0x01, 0xFC, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ?
0x0A, 0xE0, 0x01, 0x18, 0x06, 0xC8, 0x05, 0x24, 0x0A, 0x14, 0x0A, 0x14, 0x0B, 0xF4, 0x0B, 0x3C, 0x0A, 0x08, 0x05, 0xF0, 0x04, // Code for char @
0x07, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x0F, 0xFC, 0x0F, 0x0C, 0x02, 0xFC, 0x0F, 0xC0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char A
0x06, 0x00, 0x00, 0xFC, 0x0F, 0xFC, 0x0F, 0x44, 0x08, 0xFC, 0x0F, 0xB8, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char B
0x06, 0x00, 0x00, 0xF8, 0x07, 0xFC, 0x0F, 0x04, 0x08, 0xBC, 0x0F, 0xB8, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char C
0x06, 0x00, 0x00, 0xFC, 0x0F, 0xFC, 0x0F, 0x04, 0x08, 0xFC, 0x0F, 0xF8, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char D
0x07, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x0F, 0xFC, 0x0F, 0x44, 0x08, 0x44, 0x08, 0x04, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char E
0x06, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x0F, 0xFC, 0x0F, 0x44, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char F
0x07, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x07, 0xFC, 0x0F, 0x04, 0x08, 0xBC, 0x07, 0xB8, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char G
0x07, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x0F, 0xFC, 0x0F, 0x80, 0x00, 0xFC, 0x0F, 0xFC, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char H
0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x0F, 0xFC, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char I
0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xFC, 0x0F, 0xFC, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char J
0x07, 0x00, 0x00, 0xFC, 0x0F, 0xFC, 0x0F, 0xE0, 0x01, 0xF0, 0x03, 0x1C, 0x0E, 0x0C, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char K
0x06, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x0F, 0xFC, 0x0F, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char L
0x08, 0x00, 0x00, 0xFC, 0x0F, 0xFC, 0x0F, 0x18, 0x00, 0xE0, 0x0F, 0x18, 0x00, 0xFC, 0x0F, 0xFC, 0x0F, 0x00, 0x00, 0x00, 0x00, // Code for char M
0x07, 0x00, 0x00, 0xFC, 0x0F, 0xFC, 0x0F, 0x78, 0x00, 0xC0, 0x03, 0xFC, 0x0F, 0xFC, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char N
0x07, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x07, 0xFC, 0x0F, 0x04, 0x08, 0xFC, 0x0F, 0xF8, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char O
0x07, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x0F, 0xFC, 0x0F, 0x84, 0x00, 0xFC, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char P
0x07, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x07, 0xFC, 0x0F, 0x04, 0x08, 0xFC, 0x17, 0xF8, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char Q
0x07, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x0F, 0xFC, 0x0F, 0x44, 0x00, 0xFC, 0x0F, 0xB8, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char R
0x07, 0x00, 0x00, 0x00, 0x00, 0x78, 0x06, 0x7C, 0x0E, 0xC4, 0x08, 0xDC, 0x0F, 0x98, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char S
0x07, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0xFC, 0x0F, 0xFC, 0x0F, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char T
0x07, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x07, 0xFC, 0x0F, 0x00, 0x08, 0xFC, 0x0F, 0xFC, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char U
0x07, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x03, 0xFC, 0x0F, 0x00, 0x0C, 0xFC, 0x0F, 0xFC, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char V
0x09, 0x3C, 0x00, 0xFC, 0x0F, 0x00, 0x0C, 0xF0, 0x0F, 0x3C, 0x00, 0xF0, 0x0F, 0x00, 0x0C, 0xFC, 0x0F, 0x3C, 0x00, 0x00, 0x00, // Code for char W
0x08, 0x00, 0x00, 0x1C, 0x0C, 0x3C, 0x0E, 0x60, 0x03, 0xC0, 0x01, 0x60, 0x03, 0x3C, 0x0E, 0x1C, 0x0C, 0x00, 0x00, 0x00, 0x00, // Code for char X
0x07, 0x00, 0x00, 0x0C, 0x00, 0x7C, 0x00, 0xC0, 0x0F, 0xC0, 0x0F, 0x7C, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char Y
0x07, 0x00, 0x00, 0x00, 0x00, 0x04, 0x0C, 0x84, 0x0F, 0xF4, 0x0B, 0x7C, 0x08, 0x0C, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char Z
0x03, 0xFC, 0x0F, 0xFC, 0x0F, 0x0C, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char [
0x05, 0x0C, 0x00, 0x7C, 0x00, 0xF0, 0x03, 0x80, 0x0F, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char BackSlash
0x03, 0x0C, 0x0C, 0xFC, 0x0F, 0xFC, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ]
0x07, 0x40, 0x00, 0x70, 0x00, 0x38, 0x00, 0x1C, 0x00, 0x38, 0x00, 0x70, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ^
0x07, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char _
0x03, 0x01, 0x00, 0x03, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char `
0x06, 0x00, 0x00, 0x60, 0x0F, 0x70, 0x0F, 0x90, 0x09, 0xF0, 0x0F, 0xE0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char a
0x06, 0x00, 0x00, 0xFC, 0x0F, 0xFC, 0x0F, 0x10, 0x08, 0xF0, 0x0F, 0xF0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char b
0x05, 0x00, 0x00, 0xE0, 0x07, 0xF0, 0x0F, 0x10, 0x08, 0x60, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char c
0x06, 0x00, 0x00, 0xF0, 0x0F, 0xF0, 0x0F, 0x10, 0x08, 0xFC, 0x0F, 0xFC, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char d
0x06, 0x00, 0x00, 0xE0, 0x07, 0xF0, 0x0F, 0x90, 0x08, 0xF0, 0x0E, 0xE0, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char e
0x04, 0x10, 0x00, 0xFC, 0x0F, 0xFC, 0x0F, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char f
0x06, 0x00, 0x00, 0xF0, 0x0B, 0xF0, 0x1B, 0x10, 0x12, 0xF0, 0x1F, 0xF0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char g
0x06, 0x00, 0x00, 0xFC, 0x0F, 0xFC, 0x0F, 0x10, 0x00, 0xF0, 0x0F, 0xF0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char h
0x03, 0x00, 0x00, 0xF4, 0x0F, 0xF4, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char i
0x03, 0x00, 0x10, 0xF4, 0x1F, 0xF4, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char j
0x06, 0x00, 0x00, 0xFC, 0x0F, 0xFC, 0x0F, 0x80, 0x01, 0xF0, 0x0F, 0x10, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char k
0x03, 0x00, 0x00, 0xFC, 0x0F, 0xFC, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char l
0x09, 0x00, 0x00, 0xF0, 0x0F, 0xF0, 0x0F, 0x10, 0x00, 0xF0, 0x0F, 0xF0, 0x0F, 0x10, 0x00, 0xF0, 0x0F, 0xF0, 0x0F, 0x00, 0x00, // Code for char m
0x06, 0x00, 0x00, 0xF0, 0x0F, 0xF0, 0x0F, 0x10, 0x00, 0xF0, 0x0F, 0xF0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char n
0x06, 0x00, 0x00, 0xE0, 0x07, 0xF0, 0x0F, 0x10, 0x08, 0xF0, 0x0F, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char o
0x06, 0x00, 0x00, 0xF0, 0x1F, 0xF0, 0x1F, 0x10, 0x08, 0xF0, 0x0F, 0xF0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char p
0x06, 0x00, 0x00, 0xF0, 0x0F, 0xF0, 0x0F, 0x10, 0x08, 0xF0, 0x1F, 0xF0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char q
0x05, 0x00, 0x00, 0xF0, 0x0F, 0xF0, 0x0F, 0x20, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char r
0x05, 0x00, 0x00, 0xE0, 0x06, 0xF0, 0x09, 0x90, 0x0F, 0x60, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char s
0x04, 0x10, 0x00, 0xFC, 0x0F, 0xFC, 0x0F, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char t
0x06, 0x00, 0x00, 0xF0, 0x0F, 0xF0, 0x0F, 0x00, 0x08, 0xF0, 0x0F, 0xF0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char u
0x05, 0xF0, 0x00, 0xF0, 0x0F, 0x00, 0x08, 0xF0, 0x0F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char v
0x09, 0x70, 0x00, 0xF0, 0x0F, 0x00, 0x0C, 0xF0, 0x0F, 0x70, 0x00, 0xF0, 0x0F, 0x00, 0x0C, 0xF0, 0x0F, 0x70, 0x00, 0x00, 0x00, // Code for char w
0x05, 0x30, 0x0C, 0xF0, 0x0F, 0x00, 0x01, 0xF0, 0x0F, 0x30, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char x
0x06, 0x30, 0x00, 0xF0, 0x11, 0x80, 0x1F, 0x00, 0x1C, 0xF0, 0x0F, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char y
0x05, 0x10, 0x0C, 0x10, 0x0F, 0xD0, 0x0B, 0xF0, 0x08, 0x30, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char z
0x04, 0x80, 0x01, 0xF8, 0x1F, 0x7C, 0x3E, 0x0C, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char {
0x02, 0x00, 0x00, 0xFC, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char |
0x05, 0x00, 0x00, 0x0C, 0x30, 0x7C, 0x3E, 0xF8, 0x1F, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char }
0x07, 0xC0, 0x00, 0x60, 0x00, 0x60, 0x00, 0xE0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code for char ~
0x03, 0xFE, 0x07, 0x02, 0x04, 0xFE, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // Code for char
};
char detc[90]={' ','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','0','1','2','3','4','5','6','7','8','9','!','#','$','%','&','(',')','*','+','-',',','.','/',':',';','<','=','>','?','@','[',']','_','{','}','|','~'};
char alpc[90][6] PROGMEM ={
{0,0,0,0,0,0},//space
{126,17,17,17,126,0},//A
{127,73,73,73,54,0},//B
{62,65,65,65,34,0},//C
{127,65,65,34,28,0},//D
{127,73,73,73,65,0},//E
{127,9,9,9,1,0},//F
{62,65,73,73,122,0},//G
{127,8,8,8,127,0},//H
{0,65,127,65,0,0},//I
{32,64,65,63,1,0},//J
{127,8,20,34,65,0},//K
{127,64,64,64,64,0},//L
{127,2,12,2,127,0},//M
{127,4,8,16,127,0},//N
{62,65,65,65,62,0},//O
{127,9,9,9,6,0},//P
{62,65,81,33,94,0},//Q
{127,9,25,41,70,0},//R
{70,73,73,73,49,0},//S
{1,1,127,1,1,0},//T
{63,64,64,64,63,0},//U
{31,32,64,32,31,0},//V
{63,64,56,64,63,0},//W
{99,20,8,20,99,0},//X
{7,8,112,8,7,0},//Y
{97,81,73,69,67,0},//Z
{32,84,84,84,120,0},//a
{127,68,68,68,120,0},//b
{56,68,68,68,68,0},//c
{56,68,68,68,127,0},//d
{56,84,84,84,24,0},//e
{4,4,126,5,5,0},//f
{8,84,84,84,60,0},//g
{127,8,4,4,120,0},//h
{0,68,125,64,0,0},//i
{32,64,68,61,0,0},//j
{127,16,40,68,0,0},//k
{0,65,127,64,0,0},//l
{124,4,120,4,120,0},//m
{124,8,4,4,120,0},//n
{56,68,68,68,56,0},//o
{124,20,20,20,8,0},//p
{8,20,20,20,124,0},//q
{0,124,8,4,4,0},//r
{72,84,84,84,36,0},//s
{4,4,63,68,68,0},//t
{60,64,64,32,124,0},//u
{28,32,64,32,28,0},//v
{60,64,48,64,60,0},//w
{68,40,16,40,68,0},//x
{12,80,80,80,60,0},//y
{68,100,84,76,68,0},//z
{62,81,73,69,62,0},//0
{4,2,127,0,0,0},//1
{66,97,81,73,70,0},//2
{34,65,73,73,54,0},//3
{24,20,18,127,16,0},//4
{39,69,69,69,57,0},//5
{62,73,73,73,50,0},//6
{1,1,113,9,7,0},//7
{54,73,73,73,54,0},//8
{38,73,73,73,62,0},//9
{0,0,95,0,0,0},//!
{20,62,20,62,20,0},//#
{36,42,127,42,18,0},//$
{67,51,8,102,97,0},//%
{54,73,85,34,80,0},//&
{0,28,34,65,0,0},//(
{0,65,34,28,0,0},//)
{20,8,62,8,20,0},//*
{8,8,62,8,8,0},//+
{8,8,8,8,8,0},//-
{0,80,48,0,0,0},//,
{0,96,96,0,0,0},//.
{32,16,8,4,2,0},///
{0,54,54,0,0,0},//:
{0,86,54,0,0,0},//;
{8,20,34,65,0,0},//<
{20,20,20,20,20,0},//=
{0,65,34,20,8,0},//>
{2,1,81,9,6,0},//?
{62,65,89,85,94,0},//@
{0,127,65,0,0,0},//[
{0,0,65,127,0,0},//]
{64,64,64,64,64,0},//_
{0,8,54,65,65,0},//{
{65,65,54,8,0,0},//}
{0,0,127,0,0,0},//|
{2,1,2,4,2,0}//~
};
void uart_send(unsigned char d)
{
while((UCSRA & 0X20)==0)
{
}
UDR=d;
}
unsigned char uart_rec(void)
{
if((UCSRA & 0X80)==0x80)
return UDR;
else
return 0;
}
void init_uart(void)
{
UCSRA |= (1<<U2X);
UCSRB |= (1<<TXEN)|(1<<RXEN);
UBRRL=12;
}
void uart_string(char *data)
{
while(*data)
{
uart_send(*data);
*data++;
}
}
void uart_transmit(int value)
{
char buffer[5]={0};
itoa(value,buffer,10);
uart_string(buffer);
uart_send(32);
}
void twi_init()
{
TWSR=0x00;
TWBR=0x02;
}
unsigned char twi_send_start()
{
TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
while (!(TWCR & (1<<TWINT)))
;
return (TWSR & 0xf8);
while((TWSR & 0xf8) != 0x08)
;
}
unsigned char twi_send_repeated_start(void)
{
TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
while (!(TWCR & (1<<TWINT))) ;
return (TWSR & 0xf8);
while((TWSR & 0xf8) != 0x10)
;
}
unsigned char twi_send_address_rw(unsigned char address_rw)
{
TWDR = address_rw;
TWCR = (1<<TWINT)|(1<<TWEN);
while (!(TWCR & (1<<TWINT)))
;
return (TWSR & 0xf8);
while(((TWSR & 0xf8) != 0x18) || ((TWSR & 0xf8) != 0x40))
;
}
unsigned char twi_master_send_data(unsigned char data)
{
TWDR = data;
TWCR = (1<<TWINT) |(1<<TWEN);
while (!(TWCR & (1<<TWINT)))
;
return (TWSR & 0xf8);
while((TWSR & 0xf8) != 0x28)
;
}
unsigned char twi_master_send_string(unsigned char *string)
{
while (*string)
{
TWDR = *string++;
TWCR = (1<<TWINT) |(1<<TWEN);
while (!(TWCR & (1<<TWINT)))
;
while((TWSR & 0xf8) != 0x28)
;
}
return (TWSR & 0xf8);
}
unsigned char twi_master_receive_data()
{
TWCR =(1<<TWEA)|(1<<TWINT)|(1<<TWEN);
while (!(TWCR & (1<<TWINT)))
;
return(TWDR);
while((TWSR & 0xf8) != 0x50)
;
}
unsigned char twi_master_receive_last_data()
{
TWCR =(1<<TWINT)|(1<<TWEN);
while (!(TWCR & (1<<TWINT)))
;
return(TWDR);
while((TWSR & 0xf8) != 0x58)
;
}
void twi_send_stop()
{
TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO);
while ((TWCR & (1<<TWSTO)))
;
}
void oled_write_command(unsigned char oledcommand)
{
unsigned char twi_status;
twi_send_start();
twi_status=twi_send_address_rw(0x78);
twi_status=twi_master_send_data(0x80);
twi_status=twi_master_send_data(oledcommand);
twi_send_stop();
}
void oled_write_data(unsigned char oleddata)
{
unsigned char twi_status;
twi_send_start();
twi_status=twi_send_address_rw(0x78);
twi_status=twi_master_send_data(0x40);
twi_status=twi_master_send_data(oleddata);
twi_send_stop();
}
void oled_write_idata(unsigned char oleddata)
{
unsigned char twi_status;
twi_send_start();
twi_status=twi_send_address_rw(0x78);
twi_status=twi_master_send_data(0x40);
twi_status=twi_master_send_data(~oleddata);
twi_send_stop();
}
void oled_write_pixeldata(unsigned char oledpixeldata)
{
unsigned char twi_status;
twi_send_start();
twi_status=twi_send_address_rw(0x78);
twi_status=twi_master_send_data(0x40);
twi_status=twi_master_send_data(oledpixeldata);
twi_send_stop();
}
void oled_goto(uint8_t,uint8_t);
void oled_goto(uint8_t x,uint8_t y)
{
oled_write_command(0xB0|y);
oled_write_command(0x00|(x & 0x0F));
oled_write_command(0x10|((x>>4) & 0x0F));
}
void oled_clrscr()
{
unsigned char clry=0;
unsigned char clrx=0;
for(clry=0;clry<=7;clry++)
{
for(clrx=0;clrx<=127;clrx++)
{
oled_goto(clrx,clry);
oled_write_data(0x00);
}
}
}
void oled_fillscr()
{
unsigned char filly=0;
unsigned char fillx=0;
for(filly=0;filly<=7;filly++)
{
for(fillx=0;fillx<=127;fillx++)
{
oled_goto(fillx,filly);
oled_write_data(0xff);
}
}
}
void oled_printc(char det)
{
int loc=0;
for(ioled=0;ioled<=89;ioled++)
{
if(detc[ioled]==det)
{
loc=ioled;
for(joled=0;joled<=5;joled++)
{
oled_write_data(pgm_read_byte(&(alpc[loc][joled])));
}
break;
}
}
}
void oled_prints(char *data)
{
while(*data)
{
oled_printc(*data);
*data++;
}
}
void oled_printi(int value)
{
char buffer[5]={'0','0','0','0','0'};
itoa(value,buffer,10);
oled_prints(buffer);
}
void oled_image()
{
int line_image=0;
int col_image=0;
for(line_image=0;line_image<=7;line_image++)
{
oled_goto(0,line_image);
for(col_image=0;col_image<=127;col_image++)
{
//oled_write_idata(bitmap[line_image][col_image]);
oled_write_idata(pgm_read_byte(&(bitmap1[line_image][col_image])));
}
}
}
void oled_image2()
{
int line_image=0;
int col_image=0;
for(line_image=0;line_image<=7;line_image++)
{
oled_goto(0,line_image);
for(col_image=0;col_image<=127;col_image++)
{
//oled_write_idata(bitmap[line_image][col_image]);
oled_write_idata(pgm_read_byte(&(cyber_week[line_image][col_image])));
}
}
}
void oled_init()
{
oled_write_command(0xA8); //Set MUX ratio
oled_write_command(0x3F); //SET MUX RATIO
oled_write_command(0xD3); //SET DISPLAY OFFSET
oled_write_command(0x00); //SET DISPLAY OFFSET
oled_write_command(0x40); //SET DISPLAY START LINE
oled_write_command(0xA1); //SET SEGMENT RE-MAP
oled_write_command(0xC8); //SET COM OUTPUT SCAN DIRECTION
oled_write_command(0xDA); //SET COM PINS HARDWARE CONFIGURATION
oled_write_command(0x12); //SET COM PINS HARDWARE CONFIGURATION
oled_write_command(0x81); //SET CONTRAST CONTROL
oled_write_command(0x7F); //SET CONTRAST CONTROL
oled_write_command(0xA4); //DISABLE ENTIRE DISPLAY ON
oled_write_command(0xA6); //SET NORMAL DISPLAY
oled_write_command(0xD5); //SET OSCILLATOR FREQUENCY
oled_write_command(0x80); //SET OSCILLATOR FREQUENCY
oled_write_command(0x8D); //ENABLE CHARGE PUMP REGULATOR
oled_write_command(0x14); //ENABLE CHARGE PUMP REGULATOR
oled_write_command(0xAF); //DISPLAY ON
oled_clrscr();
}
void oled_scroll_ver()
{
oled_write_command(0x29); //VERTICAL AND RIGHT HORIZONTAL SCROLL
oled_write_command(0x00); //DUMMY BYTE SET TO 00H
oled_write_command(0x00); //STAR PAGE (000 - 111)
oled_write_command(0x00); //FRAME INTERVAL (00H 5 FRAMES)
oled_write_command(0x07); //END PAGE (000 - 111)
oled_write_command(0x01); //SET VERTICAL OFFSET AS 1 ROW
oled_write_command(0x2F); //ACTIVATE SCROLLING
}
void oled_scroll_hor()
{
oled_write_command(0x26); //VERTICAL AND RIGHT HORIZONTAL SCROLL
oled_write_command(0x00); //DUMMY BYTE SET TO 00H
oled_write_command(0x00); //STAR PAGE (000 - 111)
oled_write_command(0x07); //FRAME INTERVAL (00H 5 FRAMES)
oled_write_command(0x07); //END PAGE (000 - 111)
oled_write_command(0x00); //SET VERTICAL OFFSET AS 1 ROW
oled_write_command(0xFF); //ACTIVATE SCROLLING
}
void print_fchar(char ch, unsigned char x_cord, unsigned char y_cord)
{
unsigned char ascii_to_array_index = ch - first_char_ascii_code;
int char_start_in_array = ((ascii_to_array_index * no_of_bytes_char) + 1);
for(unsigned char jff = x_cord; jff < (x_cord + char_columns_required); jff++)
{
for(unsigned char iff = y_cord; iff < (y_cord + char_pages_required); iff++)
{
oled_goto(jff,iff);
int array_index = char_start_in_array + (jff - x_cord) * char_pages_required + (iff - y_cord);
unsigned char char_byte = pgm_read_byte(&font2[array_index]);
oled_write_data(char_byte);
}
}
}
void print_fstring(char *stringf, unsigned char x_cordf, unsigned char y_cordf)
{
while(*stringf)
{
print_fchar(*stringf,x_cordf,y_cordf);
x_cordf = ( x_cordf + char_columns_required);
*stringf++;
}
}
void write_your_name_here()
{
print_fstring(" HUMAN",1,3); // Write your name here
}
void vscroll_1()
{
oled_scroll_ver();
oled_scroll_ver();
}
void hscroll_1()
{
oled_scroll_hor();
oled_scroll_hor();
}
int main()
{
twi_init(); /*TWI initialisaiton*/
oled_init();
DDRA=0b00000000;
while(1)
{
oled_write_command(0x2E);
oled_clrscr();
oled_image(); //Display logo
hscroll_1();
oled_write_command(0x2F);
for(int one_v_scroll=0;one_v_scroll<=120;one_v_scroll++)
{
_delay_ms(1000);
}
oled_write_command(0x2E);
oled_clrscr();
print_fstring(" HACKERWARE",1,2);
print_fstring(" WEB 3. ",0,4);
print_fstring("0",83,4);
for(int one_v_scroll=0;one_v_scroll<=120;one_v_scroll++)
{
_delay_ms(1000);
}
oled_clrscr();
write_your_name_here(); // name here in this function
for(int one_v_scroll=0;one_v_scroll<=120;one_v_scroll++)
{
_delay_ms(1000);
}
oled_clrscr();
print_fstring(" DEF CON 30",1,2);
print_fstring(" HOMECOMING",0,4);
for(int one_v_scroll=0;one_v_scroll<=120;one_v_scroll++)
{
_delay_ms(1000);
}
}
}
Comments
Please log in or sign up to comment.