master
tjlab-jf3hzb 2020-07-13 00:13:12 +09:00
rodzic 57a2da019b
commit 04f8974fc9
17 zmienionych plików z 3295 dodań i 0 usunięć

Wyświetl plik

@ -0,0 +1,271 @@
/*------------------------------------------------------------------
VFO System for ESP32-DevKitC Ver 1.00
by T.Uebo / JF3HZB
Feb. 10, 2019
--------------------------------------------------------------------*/
/*------Hard ware Configuration ---------------------
<<ESP32-DevKitC>>
pin No. Connection
17 : Rotary Encoder A
16 : Rotary Encoder B
22 : si5351A SCL
21 : si5351A SDA
18 : SCK / ST7735,SEPS525(128x160 display)
23 : MOSI / ST7735,SEPS525(128x160 display)
5 : CS / ST7735,SEPS525(128x160 display)
2 : DC(A0) / ST7735,SEPS525(128x160 display)
15 : RESET / ST7735,SEPS525(128x160 display)
<<si5351A>>
CLK0 : Car Signal (I)
CLK1 : Car Signal (Q)
CLK2 : Lo Signal
------------------------------------------------*/
/*-------------------------------------------------------
Frequency settings
--------------------------------------------------------*/
#define init_freq 7100000 // Initial Frequncy[Hz]
int32_t offset_frq = 8998500; // Offset Frequency[Hz]
int32_t car_frq = 8998500; // Carrier Frequncy[Hz]
unsigned char f_carON = 1; // ON/OFF Car signal
#define fmax 150000000 // Max frequency[Hz]
#define fmin 100000 // Min frequency[Hz]
#define freq_step 10 // Min step[Hz]
/*----------------------------------------------------------
Adaptive step control parameters
-----------------------------------------------------------*/
uint32_t vth=2; // Velocity threshold for acceleration
float Racc=0.002; // Rate of acceleration
float Rdec=1.0; // Rate of deceleration
float MaxL=1500.0; // Max Step[Hz] = freq_step + Racc*MaxL*MaxL
/*----------------------------------------------------------------------------------
Control flags
-----------------------------------------------------------------------------------*/
uint8_t f_fchange; // if frequency changed, set this flag to 1
uint8_t f_cchange; // if Car frequency and/or "f_carON" changed, set this flag to 1
uint8_t f_dchange; // if need to renew display, set this flag to 1
/*--------------------------------------------------------
pin assign
----------------------------------------------------------*/
//#define LED_BUILTIN 13
#define PULSE_INPUT_PIN 16 // Rotaty Encoder A
#define PULSE_CTRL_PIN 17 // Rotaty Encoder B
//------------------------------------------------------------------------------
#define NAME "VFO System"
#define VERSION "Ver. 1.00"
#define ID "by JF3HZB"
#include "driver/pcnt.h"
#include "display.h"
#include "graph.h"
#include "dial.h"
#include "si5351.h"
/*-----------------------------------------------------------------------------
* Global
-----------------------------------------------------------------------------*/
float L=0.0;
long afstp;
long frq=init_freq;
int16_t RE_Count = 0;
uint8_t f_redraw;
extern char f_rev;
extern uint32_t cl_BG;
/*--------------------------------------------------------------------------
Timer ISR
---------------------------------------------------------------------------*/
hw_timer_t * timer = NULL;
void IRAM_ATTR onTimer(){}
//-----------------------------------------------------------------------------------------------
void setup() {
//-----------------------------------------------------------------------------------------------
char str[64];
//--------- create tasks on core0 --------------------------------
xTaskCreatePinnedToCore(task0, "Task0", 4096, NULL, 1, NULL, 0);
//--------- Set up Interrupt Timer -------------------------------
timer = timerBegin(0, 80, true); //use Timer0, div80 for 1us clock
timerAttachInterrupt(timer, &onTimer, true);
timerAlarmWrite(timer, 10000, true); // T=10000us
timerAlarmEnable(timer); // Start Timer
//pinMode(LED_BUILTIN, OUTPUT); //LED
//--- Counter setup for Rotary Encoder ---------------------
pcnt_config_t pcnt_config_A;// structure for A
pcnt_config_t pcnt_config_B;// structure for B
//
pcnt_config_A.pulse_gpio_num = PULSE_INPUT_PIN;
pcnt_config_A.ctrl_gpio_num = PULSE_CTRL_PIN;
pcnt_config_A.lctrl_mode = PCNT_MODE_REVERSE;
pcnt_config_A.hctrl_mode = PCNT_MODE_KEEP;
pcnt_config_A.channel = PCNT_CHANNEL_0;
pcnt_config_A.unit = PCNT_UNIT_0;
pcnt_config_A.pos_mode = PCNT_COUNT_INC;
pcnt_config_A.neg_mode = PCNT_COUNT_DEC;
pcnt_config_A.counter_h_lim = 10000;
pcnt_config_A.counter_l_lim = -10000;
//
pcnt_config_B.pulse_gpio_num = PULSE_CTRL_PIN;
pcnt_config_B.ctrl_gpio_num = PULSE_INPUT_PIN;
pcnt_config_B.lctrl_mode = PCNT_MODE_KEEP;
pcnt_config_B.hctrl_mode = PCNT_MODE_REVERSE;
pcnt_config_B.channel = PCNT_CHANNEL_1;
pcnt_config_B.unit = PCNT_UNIT_0;
pcnt_config_B.pos_mode = PCNT_COUNT_INC;
pcnt_config_B.neg_mode = PCNT_COUNT_DEC;
pcnt_config_B.counter_h_lim = 10000;
pcnt_config_B.counter_l_lim = -10000;
//
pcnt_unit_config(&pcnt_config_A);//Initialize A
pcnt_unit_config(&pcnt_config_B);//Initialize B
pcnt_counter_pause(PCNT_UNIT_0);
pcnt_counter_clear(PCNT_UNIT_0);
pcnt_counter_resume(PCNT_UNIT_0); //Start
display_init();
GRAM_clr();
sprintf(str, NAME ); disp_str16(str,20, 90, 0x00ffff);
sprintf(str, VERSION); disp_str12(str,36, 50, 0x00ffff);
sprintf(str, ID ); disp_str8(str,50, 20, 0x00ffff);
trans65k();
f_redraw=1;
delay(1000);
init_Dial();
GRAM_clr();
si5351_init();
f_fchange = 1;
f_cchange = 1;
f_dchange = 1;
f_redraw=0;
}
//-----------------------------------------------------------------------------------------------
void loop() { // (core1)
//-----------------------------------------------------------------------------------------------
char str[64];
if(f_dchange==1){
f_dchange=0;
//GRAM_clr();
boxfill(0,0,Nx-1,Ny-1,cl_BG);
//Display Dial
Dial(frq);
box(7,100,153,126, 0xa0a0a0);
box(6,99,154,127, 0xa0a0a0);
//-------- Display Digital Frquency ---------------------------------------
sprintf(str, "%3d.%03d,%02d", frq/1000000, (frq/1000)%1000, (frq/10)%100 );
disp_str16(str,17, 105, 0xffd080);
sprintf(str, "MHz" );
disp_str12(str,120, 106, 0xffd080);
if(f_redraw==0){
trans65k();
f_redraw=1;
}
}
//digitalWrite(LED_BUILTIN, 1^digitalRead(LED_BUILTIN) ); // Toggle LED
}
/*-----------------------------------------------------------------------------------------------
Alternative Loop (core0)
------------------------------------------------------------------------------------------------*/
void task0(void* arg)
{
while (1)
{
pcnt_get_counter_value(PCNT_UNIT_0, &RE_Count);
int count=RE_Count;
pcnt_counter_clear(PCNT_UNIT_0);
if(f_rev==1) count=-count;
if(count!=0){
afstp=(long)(0.5 + (float)(count)*((float)freq_step + Racc*L*L) );
if(abs(count)>=vth) L+=1.0*(float)( abs(count) - vth );
if(L>MaxL) L=MaxL;
}else{
L-=Rdec;
if(L<0) L=0;
}
//---Update frequency -------------------------------
if(afstp!=0){
frq+=afstp;
if(frq>fmax) frq=fmax;
if(frq<fmin) frq=fmin;
afstp=0;
f_dchange=1;
f_fchange=1;
}
//-------------------------------------
if(f_fchange==1){
f_fchange=0;
// Output Lo freq
set_freq( frq + offset_frq );
}
//-------------------------------------
if(f_cchange==1){
f_cchange=0;
// Output Car freq
set_car_freq(car_frq, f_carON, 0);
}
if(f_redraw==1){
Transfer_Image();
f_redraw=0;
}
delay(1);
}
}

1307
VFOsys_astep/dial.cpp 100644

Plik diff jest za duży Load Diff

Wyświetl plik

@ -0,0 +1,20 @@
/*
* File: dial.h
* Author: JF3HZB / T.UEBO
*
* Created on 2019/02/10, 22:13
*/
#ifndef DIAL_H
#define DIAL_H
void init_Dial(void);
void Dial(long freq);
void dot(float, float);
void Sel_font12(void);
void Sel_font14(void);
void Sel_font16(void);
#endif /* DIAL_H */

Wyświetl plik

@ -0,0 +1,56 @@
/*
* File: dial_font.h
* Author: JF3HZB / T.UEBO
*
* Created on 2019/02/10, 22:13
*/
#ifndef _dial_font_
#define _dial_font_
const int Dial_font16[10][13] =
{
{0x000007E0, 0x00001FF8, 0x0000381C, 0x00002004, 0x00002004, 0x0000381C, 0x00001FF8, 0x000007E0, 0,0,0,0,0},
{0x00000000, 0x00001004, 0x00001004, 0x00003FFC, 0x00003FFC, 0x00000004, 0x00000004, 0x00000000, 0,0,0,0,0},
{0x00000C1C, 0x00001C3C, 0x00003064, 0x000020C4, 0x00002184, 0x0000330C, 0x00001E3C, 0x00000C30, 0,0,0,0,0},
{0x00000830, 0x00001838, 0x0000310C, 0x00002104, 0x00002104, 0x0000338C, 0x00001EF8, 0x00000C70, 0,0,0,0,0},
{0x00000060, 0x000001E0, 0x000007A0, 0x00001E20, 0x00003824, 0x00003FFC, 0x00003FFC, 0x00000024, 0,0,0,0,0},
{0x00000010, 0x00003F18, 0x00003F0C, 0x00002204, 0x00002204, 0x0000230C, 0x000021F8, 0x000020F0, 0,0,0,0,0},
{0x00000FF0, 0x00001FF8, 0x0000330C, 0x00002204, 0x00002204, 0x0000330C, 0x000019F8, 0x000008F0, 0,0,0,0,0},
{0x00000C00, 0x00003C00, 0x00003000, 0x0000203C, 0x000021FC, 0x000027C0, 0x00003E00, 0x00003800, 0,0,0,0,0},
{0x00000C70, 0x00001EF8, 0x0000338C, 0x00002104, 0x00002104, 0x0000338C, 0x00001EF8, 0x00000C70, 0,0,0,0,0},
{0x00000F10, 0x00001F98, 0x000030CC, 0x00002044, 0x00002044, 0x000030CC, 0x00001FF8, 0x00000FF0, 0,0,0,0,0}
};
const int Dial_font14[10][13]={
{0x00000000, 0x00000FF8, 0x00001FFC, 0x00003006, 0x00003006, 0x00003006, 0x00001FFC, 0x00000FF8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 },
{0x00000000, 0x00000000, 0x00000800, 0x00001800, 0x00003FFE, 0x00003FFE, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 },
{0x00000000, 0x00001C1E, 0x0000383E, 0x00003076, 0x000030E6, 0x000031C6, 0x00003F86, 0x00001F06, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 },
{0x00000000, 0x00001C1C, 0x0000380E, 0x00003186, 0x00003186, 0x00003186, 0x00003FFE, 0x00001EFC, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 },
{0x00000000, 0x000000F0, 0x000003F0, 0x00000F30, 0x00001C30, 0x00003830, 0x00003FFE, 0x00003FFE, 0x00000030, 0x00000000, 0x00000000, 0x00000000, 0 },
{0x00000000, 0x00003F8C, 0x00003F8E, 0x00003186, 0x00003186, 0x00003186, 0x000031FE, 0x000000FC, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 },
{0x00000000, 0x00001FFC, 0x00003FFE, 0x00003186, 0x00003186, 0x00003186, 0x000039FE, 0x000018FC, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 },
{0x00000000, 0x00003800, 0x00003000, 0x0000301E, 0x000030FE, 0x000033F0, 0x00003F80, 0x00003E00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 },
{0x00000000, 0x00001EFC, 0x00003FFE, 0x00003186, 0x00003186, 0x00003186, 0x00003FFE, 0x00001EFC, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 },
{0x00000000, 0x00001F8C, 0x00003FCE, 0x000030C6, 0x000030C6, 0x000030C6, 0x00003FFE, 0x00001FFC, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 }
};
const int Dial_font12[10][13] =
{
{0x00000000, 0x000007FC, 0x00000FFE, 0x00000C06, 0x00000C06, 0x00000FFE, 0x000007FC, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 },
{0x00000000, 0x00000000, 0x00000600, 0x00000FFE, 0x00000FFE, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 },
{0x00000000, 0x0000060E, 0x00000E1E, 0x00000C36, 0x00000C66, 0x00000FC6, 0x00000786, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 },
{0x00000000, 0x0000060C, 0x00000E0E, 0x00000CC6, 0x00000CC6, 0x00000FFE, 0x0000077C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 },
{0x00000000, 0x00000078, 0x000001F8, 0x00000798, 0x00000E18, 0x00000FFE, 0x00000FFE, 0x00000018, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 },
{0x00000000, 0x00000FCC, 0x00000FCE, 0x00000CC6, 0x00000CC6, 0x00000CFE, 0x00000C7C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 },
{0x00000000, 0x000007FC, 0x00000FFE, 0x00000CC6, 0x00000CC6, 0x00000CFE, 0x0000067C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 },
{0x00000000, 0x00000E00, 0x00000C00, 0x00000C3E, 0x00000DFE, 0x00000FE0, 0x00000F00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 },
{0x00000000, 0x0000077C, 0x00000FFE, 0x00000CC6, 0x00000CC6, 0x00000FFE, 0x0000077C, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 },
{0x00000000, 0x000007CC, 0x00000FE6, 0x00000C66, 0x00000C66, 0x00000FFE, 0x000007FC, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0 }
};
#endif

Wyświetl plik

@ -0,0 +1,76 @@
/*----------------------------------------------------------------------------------
Dial parameter
-----------------------------------------------------------------------------------*/
char f_dispmode = 0; // 0:Normal / 1: Rotate 90 degrees
char f_main_outside = 0; // 0:Main dial is inside / 1:Main dial is outside
char f_FONT = 0; // Font 0, 1, or 2
char f_rev = 0; // Increasing Direction of dial rotation 0: CW / 1: CCW
char f_maintick1 = 1; // Main Tick(1) display on/off
char f_maintick5 = 1; // Main Tick(5) display on/off
char f_maintick10 = 1; // Main Tick(10) display on/off
char f_mainnum = 1; // Main Number display on/off
char f_subtick1 = 1; // Sub Tick(1) display on/off
char f_subtick5 = 1; // Sub Tick(5) display on/off
char f_subtick10 = 1; // Sub Tick(10) display on/off
char f_subnum = 1; // Sub Number display on/off
//メインダイアル1目盛あたりの周波数 ------------------------------------------------------------
int freq_tick_main = 10000; // Frequency/tikcs of Main dial (if 10000: 10kHz / else 100kHz)
//ダイアル表示エリア------------------------------------------------------------
int D_height = 80; // Display position
//ダイアル半径------------------------------------------------------------------
int D_R = 160; //Dial radius (if 45000, Linear scale)
//メイン,サブダイアルの間隔----------------------------------------------------
int Dial_space = 40; // Space bitween Main and Sub Dial
//目盛り間隔--------------------------------------------------------------------
int tick_pitch_main = 50; // Main Tick Pitch
int tick_pitch = 60; // Sub Tick Pitch
//目盛りの太さ------------------------------------------------------------------
int tick_width = 1; // Width of Tick( 0 or 1 )
//目盛りの長さ(main)------------------------------------------------------------
int tick_main1 = 4; // Length of Main Tick(1)
int tick_main5 = 9; // Length of Main Tick(5)
int tick_main10 = 12; // Length of Main Tick(10)
//目盛りの長さ(sub)-------------------------------------------------------------
int tick1 = 8; // Length of Sub Tick(1)
int tick5 = 11; // Length of Sub Tick(5)
int tick10 = 15; // Length of Sub Tick(10)
//目盛り・数字間のスペース------------------------------------------------------
int TNCL_main = 13; // Space bitween Number and Tick (Main)
int TNCL = 16; // Space bitween Number and Tick (Sub)
// 指針長さ,幅-----------------------------------------------------------------
int DP_len = 90; // Length of Dial pointer
int DP_width = 1; // Width of Dial pointer
int DP_pos = 12; // Position of Dial pointer
//Coloring 0xRRGGBB -----------------------------------------------------------
// 背景
unsigned long cl_BG = 0x000000; // Background
// 指針色
unsigned long cl_POINTER = 0xFF0000; // Dial pointer
// main目盛
unsigned long cl_TICK_main = 0x00FF00; // Main Tick
// main数字
unsigned long cl_NUM_main = 0xFFFFFF; //Main Number
// sub目盛
unsigned long cl_TICK = 0x00FFFF; // Sub Tick
// sub数字
unsigned long cl_NUM = 0xFFFFFF; // Sub Number
// ダイアルベース
unsigned long cl_DIAL_BG = 0x000000; // Dial base
/*---------------------------------------------------------------------------------
---------------------------------------------------------------------------------*/

Wyświetl plik

@ -0,0 +1,308 @@
/*
* File: display.cpp
* Author: JF3HZB / T.UEBO
*
* Created on 2019/02/10, 22:13
*
* -------------------------------------------
* Dedicated Display Interface for ESP32
*--------------------------------------------
*
*/
#include <arduino.h>
#include <SPI.h>
#include "soc/spi_reg.h"
#include "display.h"
#define VSPI 3
#define HSPI 2
#define sel_SPI VSPI
#define SCLK 18 // SPI clock pin
#define SDI -1 // MISO(master input slave output) not using
#define SDO 23 // MOSI(master output slave input) pin
#define CS 5 // Chip Select pin
#define DC 2 // Data/Command pin
#define RST 15 // Reset pin
//#define RST 0 // Reset pin
uint8_t R_GRAM[Nx][Ny];
uint8_t G_GRAM[Nx][Ny];
uint8_t B_GRAM[Nx][Ny];
uint16_t GRAM65k[Nx][Ny];
//-------------------------------------------------------
#ifdef ST7735
//-------------------------------------------------------
void Transfer_Image() {
#define block_size 512
int kxy, pt=0, xp, yp;
uint32_t col_data;
d_Command(0x2A);
SPI.write(0); SPI.write(0);
SPI.write((Xw-1)>>8); SPI.write(Xw-1);
d_Command(0x2B);
SPI.write(0); SPI.write(0);
SPI.write((Yw-1)>>8); SPI.write(Yw-1);
d_Command(0x2C);
SET_PERI_REG_BITS( SPI_MOSI_DLEN_REG(sel_SPI),
SPI_USR_MOSI_DBITLEN,
(block_size-1),
SPI_USR_MOSI_DBITLEN_S
);
for(kxy=0; kxy<(Nx*Ny*16/block_size); kxy++) {
while (READ_PERI_REG(SPI_CMD_REG(sel_SPI)) & SPI_USR);
for (uint32_t i = 0; i < 16; i++){
xp=pt/Ny; yp=pt%Ny;
col_data=GRAM65k[xp][yp];
pt++;
xp=pt/Ny; yp=pt%Ny;
col_data|=(GRAM65k[xp][yp]<<16);
pt++;
WRITE_PERI_REG((SPI_W0_REG(sel_SPI) + (i << 2)), col_data);
}
SET_PERI_REG_MASK(SPI_CMD_REG(sel_SPI), SPI_USR);
}
}
/*-----------------------------------------------------------------
Initialize ST7735
------------------------------------------------------------------ */
void display_init(void){
pinMode(RST, OUTPUT); //Set RESET pin
pinMode(DC, OUTPUT); //Set Data/Command pin
SPI.begin(SCLK, SDI, SDO, CS); //VSPI setting
SPI.setBitOrder(MSBFIRST);
//SPI.setFrequency(10000000);
//SPI.setFrequency(20000000);
SPI.setFrequency(27000000);
//SPI.setFrequency(40000000);
SPI.setDataMode(SPI_MODE0);
SPI.setHwCs(true); //Set Hardware CS pin
//Hardware Reset------------
digitalWrite(RST, HIGH);
delay(10);
digitalWrite(RST, LOW);
delay(10);
digitalWrite(RST, HIGH);
delay(100);
digitalWrite(DC, HIGH);
d_Command(0x01); // Software reset
delay (150); //Delay 150ms
d_Command(0x11); //Sleep out
delay (300);
d_Command(0xB1); SPI.write(0x01); SPI.write(0x2C); SPI.write(0x2D);
d_Command(0xB2); SPI.write(0x01); SPI.write(0x2C); SPI.write(0x2D);
d_Command(0xB3); SPI.write(0x01); SPI.write(0x2C); SPI.write(0x2D);
SPI.write(0x01); SPI.write(0x2C); SPI.write(0x2D);
d_Command(0xB4); SPI.write(0x07); //Column inversion
d_Command(0xC0); SPI.write(0xA2); SPI.write(0x02); SPI.write(0x84);
d_Command(0xC1); SPI.write(0xC5);
d_Command(0xC2); SPI.write(0x0A); SPI.write(0x00);
d_Command(0xC3); SPI.write(0x8A); SPI.write(0x2A);
d_Command(0xC4); SPI.write(0x8A); SPI.write(0xEE);
d_Command(0xC5); SPI.write(0x0E); //VCOM
d_Command(0x20); // not invert display,
d_Command(0x36); SPI.write(0xC8); //Mem access ctl (directions),
d_Command(0x3A); // set color mode
SPI.write(0x05); //65k mode
d_Command(0x2A); // Column addr set x=0 to 127
SPI.write(0x00); SPI.write(0x00); SPI.write(0x00); SPI.write(0x7F);
d_Command(0x2B); // Raw addr set y=0 to 159
SPI.write(0x00); SPI.write(0x00); SPI.write(0x00); SPI.write(0x9F);
d_Command(0xE0);
SPI.write(0x02); SPI.write(0x1C); SPI.write(0x07); SPI.write(0x12);
SPI.write(0x37); SPI.write(0x32); SPI.write(0x29); SPI.write(0x2D);
SPI.write(0x29); SPI.write(0x25); SPI.write(0x2B); SPI.write(0x39);
SPI.write(0x00); SPI.write(0x01); SPI.write(0x03); SPI.write(0x10);
d_Command(0xE1);
SPI.write(0x03); SPI.write(0x1D); SPI.write(0x07); SPI.write(0x06);
SPI.write(0x2E); SPI.write(0x2C); SPI.write(0x29); SPI.write(0x2D);
SPI.write(0x2E); SPI.write(0x2E); SPI.write(0x37); SPI.write(0x3F);
SPI.write(0x00); SPI.write(0x00); SPI.write(0x02); SPI.write(0x10);
d_Command(0x13);
delay(10);
d_Command(0x29);
delay(100);
d_Command(0x36); SPI.write(0xC0);
delay(10);
}
#endif
//---------------------------------------------------------------------------------
#ifdef SEPS525
//---------------------------------------------------------------------------------
void Transfer_Image() {
int pt=0, xp, yp;
d_Command(0x17);
SPI.write(0);
d_Command(0x18);
SPI.write(0x9F);
d_Command(0x19);
SPI.write(0);
d_Command(0x1A);
SPI.write(0x7F);
d_Command(0x22);
SET_PERI_REG_BITS( SPI_MOSI_DLEN_REG(sel_SPI),
SPI_USR_MOSI_DBITLEN,
15,
SPI_USR_MOSI_DBITLEN_S
);
for(pt=0; pt<Nx*Ny; pt++) {
while (READ_PERI_REG(SPI_CMD_REG(sel_SPI)) & SPI_USR);
xp=pt%Nx; yp=pt/Nx;
WRITE_PERI_REG( SPI_W0_REG(sel_SPI), GRAM65k[xp][yp]);
SET_PERI_REG_MASK(SPI_CMD_REG(sel_SPI), SPI_USR);
}
}
/*-----------------------------------------------------------------
Initialize SEPS525
------------------------------------------------------------------ */
void display_init(void){
pinMode(RST, OUTPUT); //Set RESET pin
pinMode(DC, OUTPUT); //Set Data/Command pin
SPI.begin(SCLK, SDI, SDO, CS); //VSPI setting
SPI.setBitOrder(MSBFIRST);
//SPI.setFrequency(10000000);
//SPI.setFrequency(20000000);
SPI.setFrequency(27000000);
//SPI.setFrequency(40000000);
SPI.setDataMode(SPI_MODE3); //OLED;
SPI.setHwCs(true); //Set Hardware CS pin
//Hardware Reset------------
digitalWrite(RST, HIGH);
delay(100);
digitalWrite(RST, LOW);
delay(500);
digitalWrite(RST, HIGH);
delay(500);
digitalWrite(DC, HIGH);
d_Command(0x04);// Set Normal Driving Current
SPI.write(0x03);// Disable Oscillator Power Down
delay(10);
d_Command(0x04); // Enable Power Save Mode
SPI.write(0x00); // Set Normal Driving Current
delay(10); // Disable Oscillator Power Down
d_Command(0x3B);
SPI.write(0x00);
d_Command(0x02);
SPI.write(0x01); // Set EXPORT1 Pin at Internal Clock
// Oscillator operates with external resister.
// Internal Oscillator On
d_Command(0x03);
SPI.write(0x90); // Set Frame Rate as 120Hz
//SPI.write(0x30); // default 40Hz
d_Command(0x80);
SPI.write(0x01); // Set Reference Voltage Controlled by External Resister
d_Command(0x08);// Set Pre-Charge Time of Red
SPI.write(0x08); //(0x04);
d_Command(0x09);// Set Pre-Charge Time of Green
SPI.write(0x0A); //(0x05);
d_Command(0x0A);// Set Pre-Charge Time of Blue
SPI.write(0x0A); //(0x05);
d_Command(0x0B);// Set Pre-Charge Current of Red
SPI.write(0xC0); //(0x9D);
d_Command(0x0C);// Set Pre-Charge Current of Green
SPI.write(0xB0); //(0x8C);
d_Command(0x0D);// Set Pre-Charge Current of Blue
SPI.write(0x98); //(0x57);
d_Command(0x10);// Set Driving Current of Red
SPI.write(0xA0); //(0x56);
d_Command(0x11);// Set Driving Current of Green
SPI.write(0x93); //(0x4D);
d_Command(0x12);// Set Driving Current of Blue
SPI.write(0x8C); //(0x46);
d_Command(0x13);
SPI.write(0x20); // Set Color Sequence
d_Command(0x14);
SPI.write(0x11); // Set MCU Interface Mode, 65k
d_Command(0x16);
SPI.write(0x66);
d_Command(0x20);
SPI.write(0x00); // Shift Mapping RAM Counter
d_Command(0x21);
SPI.write(0x00); // Shift Mapping RAM Counter
d_Command(0x28);
SPI.write(0x7F); // 1/128 Duty (0x0F~0x7F)
d_Command(0x29);
SPI.write(0x00); // Set Mapping RAM Display Start Line (0x00~0x7F)
d_Command(0x06);
SPI.write(0x01); // Display On (0x00/0x01)
d_Command(0x05); // Disable Power Save Mode
SPI.write(0x00); // Set All Internal Register Value as Normal Mode
d_Command(0x15);
SPI.write(0x00); // Set RGB Interface Polarity as Active Low
delay(10);
}
#endif
/*------------------------------------------
Command write
-------------------------------------------*/
void d_Command(uint8_t d){
digitalWrite(DC, LOW);
SPI.write(d);
digitalWrite(DC, HIGH);
}
/*------------------------------------------
Convert 24bit image to 16bit image
-------------------------------------------*/
void trans65k(void){
int xps, yps;
uint16_t col16;
for(xps=0; xps<Nx; xps++){
for(yps=0; yps<Ny; yps++){
col16=(0xf800&(R_GRAM[xps][yps]<<8)) | (0x07E0&(G_GRAM[xps][yps]<<3)) | (0x001F&(B_GRAM[xps][yps]>>3));
GRAM65k[xps][yps]=(col16 >> 8) | (col16 << 8);
}
}
}

Wyświetl plik

@ -0,0 +1,34 @@
/*
* File: display.h
* Author: JF3HZB / T.UEBO
*
* Created on 2019/02/10, 22:13
*/
#ifndef _display_
#define _display_
/*----------------------------------------
Select Display controller
ST7735 : LCD (1.8inch 128x160 TFT)
SEPS525: OLED ( NHD-1.69-160128UGC3 )
-----------------------------------------*/
//#define SEPS525
#define ST7735
/*---------------------------------------*/
#define Xw 128
#define Yw 160
#define Nx Yw
#define Ny Xw
void display_init(void);
void Transfer_Image(void);
void trans65k(void);
void d_Command(uint8_t d);
#endif

217
VFOsys_astep/font.h 100644
Wyświetl plik

@ -0,0 +1,217 @@
/*
* File: font.h
* Author: JF3HZB / T.UEBO
*
* Created on 2018/03/21, 23:04
*/
#ifndef _font_
#define _font_
#include "font12.h"
#include "font16.h"
#include "font20.h"
/***********************************
* Font Data 0x20 to 0xDF 192
***********************************/
const char font[192][5] =
{
{ 0x00, 0x00, 0x00, 0x00, 0x00 }, // " " 0x20
{ 0x00, 0x00, 0x4f, 0x00, 0x00 }, // ! 0x21
{ 0x00, 0x07, 0x00, 0x07, 0x00 }, // " 0x22
{ 0x14, 0x7f, 0x14, 0x7f, 0x14 }, // # 0x23
{ 0x24, 0x2a, 0x7f, 0x2a, 0x12 }, // $ 0x24
{ 0x23, 0x13, 0x08, 0x64, 0x62 }, // % 0x25
{ 0x36, 0x49, 0x55, 0x22, 0x50 }, // & 0x26
{ 0x00, 0x05, 0x03, 0x00, 0x00 }, // ' 0x27
{ 0x00, 0x1c, 0x22, 0x41, 0x00 }, // ( 0x28
{ 0x00, 0x41, 0x22, 0x1c, 0x00 }, // ) 0x29
{ 0x14, 0x08, 0x3e, 0x08, 0x14 }, // * 0x2A
{ 0x08, 0x08, 0x3e, 0x08, 0x08 }, // + 0x2B
{ 0x00, 0x50, 0x30, 0x00, 0x00 }, // , 0x2C
{ 0x08, 0x08, 0x08, 0x08, 0x08 }, // - 0x2D
{ 0x00, 0x60, 0x60, 0x00, 0x00 }, // . 0x2E
{ 0x20, 0x10, 0x08, 0x04, 0x02 }, // / 0x2F
{ 0x3e, 0x51, 0x49, 0x45, 0x3e }, // 0 0x30
{ 0x00, 0x42, 0x7f, 0x40, 0x00 }, // 1 0x31
{ 0x42, 0x61, 0x51, 0x49, 0x46 }, // 2 0x32
{ 0x21, 0x41, 0x45, 0x4b, 0x31 }, // 3 0x33
{ 0x18, 0x14, 0x12, 0x7f, 0x10 }, // 4 0x34
{ 0x27, 0x45, 0x45, 0x45, 0x39 }, // 5 0x35
{ 0x3c, 0x4a, 0x49, 0x49, 0x30 }, // 6 0x36
{ 0x01, 0x71, 0x09, 0x05, 0x03 }, // 7 0x37
{ 0x36, 0x49, 0x49, 0x49, 0x36 }, // 8 0x38
{ 0x06, 0x49, 0x49, 0x29, 0x1e }, // 9 0x39
{ 0x00, 0x36, 0x36, 0x00, 0x00 }, // : 0x3A
{ 0x00, 0x56, 0x36, 0x00, 0x00 }, // ; 0x3B
{ 0x08, 0x14, 0x22, 0x41, 0x00 }, // < 0x3C
{ 0x14, 0x14, 0x14, 0x14, 0x14 }, // = 0x3D
{ 0x00, 0x41, 0x22, 0x14, 0x08 }, // > 0x3E
{ 0x02, 0x01, 0x51, 0x09, 0x06 }, // ? 0x3F
{ 0x32, 0x49, 0x79, 0x41, 0x3e }, // @ 0x40
{ 0x7e, 0x11, 0x11, 0x11, 0x7e }, // A 0x41
{ 0x7f, 0x49, 0x49, 0x49, 0x36 }, // B 0x42
{ 0x3e, 0x41, 0x41, 0x41, 0x22 }, // C 0x43
{ 0x7f, 0x41, 0x41, 0x22, 0x1c }, // D 0x44
{ 0x7f, 0x49, 0x49, 0x49, 0x41 }, // E 0x45
{ 0x7f, 0x09, 0x09, 0x09, 0x01 }, // F 0x46
{ 0x3e, 0x41, 0x49, 0x49, 0x7a }, // G 0x47
{ 0x7f, 0x08, 0x08, 0x08, 0x7f }, // H 0x48
{ 0x00, 0x41, 0x7f, 0x41, 0x00 }, // I 0x49
{ 0x20, 0x40, 0x41, 0x3f, 0x01 }, // J 0x4A
{ 0x7f, 0x08, 0x14, 0x22, 0x41 }, // K 0x4B
{ 0x7f, 0x40, 0x40, 0x40, 0x40 }, // L 0x4C
{ 0x7f, 0x02, 0x0c, 0x02, 0x7f }, // M 0x4D
{ 0x7f, 0x04, 0x08, 0x10, 0x7f }, // N 0x4E
{ 0x3e, 0x41, 0x41, 0x41, 0x3e }, // O 0x4F
{ 0x7f, 0x09, 0x09, 0x09, 0x06 }, // P 0X50
{ 0x3e, 0x41, 0x51, 0x21, 0x5e }, // Q 0X51
{ 0x7f, 0x09, 0x19, 0x29, 0x46 }, // R 0X52
{ 0x46, 0x49, 0x49, 0x49, 0x31 }, // S 0X53
{ 0x01, 0x01, 0x7f, 0x01, 0x01 }, // T 0X54
{ 0x3f, 0x40, 0x40, 0x40, 0x3f }, // U 0X55
{ 0x1f, 0x20, 0x40, 0x20, 0x1f }, // V 0X56
{ 0x3f, 0x40, 0x38, 0x40, 0x3f }, // W 0X57
{ 0x63, 0x14, 0x08, 0x14, 0x63 }, // X 0X58
{ 0x07, 0x08, 0x70, 0x08, 0x07 }, // Y 0X59
{ 0x61, 0x51, 0x49, 0x45, 0x43 }, // Z 0X5A
{ 0x00, 0x7f, 0x41, 0x41, 0x00 }, // [ 0X5B
{ 0x02, 0x04, 0x08, 0x10, 0x20 }, // "\" 0X5C
{ 0x00, 0x41, 0x41, 0x7f, 0x00 }, // ] 0X5D
{ 0x04, 0x02, 0x01, 0x02, 0x04 }, // ^ 0X5E
{ 0x40, 0x40, 0x40, 0x40, 0x40 }, // _ 0X5F
{ 0x00, 0x01, 0x02, 0x04, 0x00 }, // ` 0X60
{ 0x20, 0x54, 0x54, 0x54, 0x78 }, // a 0X61
{ 0x7f, 0x48, 0x44, 0x44, 0x38 }, // b 0X62
{ 0x38, 0x44, 0x44, 0x44, 0x20 }, // c 0X63
{ 0x38, 0x44, 0x44, 0x48, 0x7f }, // d 0X64
{ 0x38, 0x54, 0x54, 0x54, 0x18 }, // e 0X65
{ 0x08, 0x7e, 0x09, 0x01, 0x02 }, // f 0X66
{ 0x0c, 0x52, 0x52, 0x52, 0x3e }, // g 0X67
{ 0x7f, 0x08, 0x04, 0x04, 0x78 }, // h 0X68
{ 0x00, 0x44, 0x7d, 0x40, 0x00 }, // i 0X69
{ 0x20, 0x40, 0x44, 0x3d, 0x00 }, // j 0X6A
{ 0x7f, 0x10, 0x28, 0x44, 0x00 }, // k 0X6B
{ 0x00, 0x41, 0x7f, 0x40, 0x00 }, // l 0X6C
{ 0x7c, 0x04, 0x18, 0x04, 0x78 }, // m 0X6D
{ 0x7c, 0x08, 0x04, 0x04, 0x78 }, // n 0X6E
{ 0x38, 0x44, 0x44, 0x44, 0x38 }, // o 0X6F
{ 0x7c, 0x14, 0x14, 0x14, 0x08 }, // p 0X70
{ 0x08, 0x14, 0x14, 0x18, 0x7c }, // q 0X71
{ 0x7c, 0x08, 0x04, 0x04, 0x08 }, // r 0X72
{ 0x48, 0x54, 0x54, 0x54, 0x20 }, // s 0X73
{ 0x04, 0x3f, 0x44, 0x40, 0x20 }, // t 0X74
{ 0x3c, 0x40, 0x40, 0x20, 0x7c }, // u 0X75
{ 0x1c, 0x20, 0x40, 0x20, 0x1c }, // v 0X76
{ 0x3c, 0x40, 0x30, 0x40, 0x3c }, // w 0X77
{ 0x44, 0x28, 0x10, 0x28, 0x44 }, // x 0X78
{ 0x0c, 0x50, 0x50, 0x50, 0x3c }, // y 0X79
{ 0x44, 0x64, 0x54, 0x4c, 0x44 }, // z 0X7A
{ 0x00, 0x08, 0x36, 0x41, 0x00 }, // { 0X7B
{ 0x00, 0x00, 0x7f, 0x00, 0x00 }, // | 0X7C
{ 0x00, 0x41, 0x36, 0x08, 0x00 }, // } 0X7D
{ 0x08, 0x08, 0x2a, 0x1c, 0x08 }, // -> 0X7E
{ 0x08, 0x1c, 0x2a, 0x08, 0x08 }, // <- 0X7F
{ 0x00, 0x00, 0x0f, 0x08, 0x08 }, // 0x80
{ 0x08, 0x08, 0x0f, 0x00, 0x00 }, // 0x81
{ 0x2c, 0x32, 0x02, 0x32, 0x2c }, // ohm 0x82
{ 0x44, 0x3c, 0x04, 0x7c, 0x44 }, // pi 0x83
{ 0x63, 0x55, 0x49, 0x41, 0x41 }, // siguma0x84
{ 0x14, 0x14, 0x7c, 0x14, 0x12 }, // sec 0x85
{ 0x44, 0x3c, 0x14, 0x14, 0x74 }, // man 0x86
{ 0x7c, 0x14, 0x1c, 0x14, 0x7c }, // en 0x87
{ 0x10, 0x10, 0x54, 0x10, 0x10 }, // waru0x88
{ 0x7f, 0x7f, 0x7f, 0x7f, 0x7f }, // 0x89
{ 0x0f, 0x0f, 0x0f, 0x0f, 0x0f }, // 0x8A
{ 0x00, 0x00, 0x00, 0x00, 0x00 }, // 0x8B
{ 0x00, 0x00, 0x00, 0x00, 0x00 }, // 0x8C
{ 0x00, 0x00, 0x00, 0x00, 0x00 }, // 0x8D
{ 0x00, 0x00, 0x00, 0x00, 0x00 }, // 0x8E
{ 0x00, 0x00, 0x00, 0x00, 0x00 }, // 0x8F
{ 0x00, 0x00, 0x00, 0x00, 0x00 }, // 0x90
{ 0x00, 0x00, 0x00, 0x00, 0x00 }, // 0x91
{ 0x00, 0x00, 0x00, 0x00, 0x00 }, // 0x92
{ 0x00, 0x00, 0x00, 0x00, 0x00 }, // 0x93
{ 0x00, 0x00, 0x00, 0x00, 0x00 }, // 0x94
{ 0x00, 0x00, 0x00, 0x00, 0x00 }, // 0x95
{ 0x00, 0x00, 0x00, 0x00, 0x00 }, // 0x96
{ 0x00, 0x00, 0x00, 0x00, 0x00 }, // 0x97
{ 0x00, 0x00, 0x00, 0x00, 0x00 }, // 0x98
{ 0x00, 0x00, 0x00, 0x00, 0x00 }, // 0x99
{ 0x00, 0x00, 0x00, 0x00, 0x00 }, // 0x9A
{ 0x00, 0x00, 0x00, 0x00, 0x00 }, // 0x9B
{ 0x00, 0x00, 0x00, 0x00, 0x00 }, // 0x9C
{ 0x00, 0x00, 0x00, 0x00, 0x00 }, // 0x9D
{ 0x00, 0x00, 0x00, 0x00, 0x00 }, // 0x9E
{ 0x00, 0x00, 0x00, 0x00, 0x00 }, // 0x9F
{ 0x00, 0x00, 0x00, 0x00, 0x00 }, // 0xA0
{ 0x70, 0x50, 0x70, 0x00, 0x00 }, // . 0xA1
{ 0x00, 0x00, 0x0f, 0x01, 0x01 }, // [ 0xA2
{ 0x40, 0x40, 0x78, 0x00, 0x00 }, // ] 0xA3
{ 0x10, 0x20, 0x40, 0x00, 0x00 }, // , 0xA4
{ 0x00, 0x18, 0x18, 0x00, 0x00 }, // . 0xA5
{ 0x0a, 0x0a, 0x4a, 0x2a, 0x1e }, // wo 0xA6
{ 0x04, 0x24, 0x34, 0x14, 0x0c }, // a 0xA7
{ 0x20, 0x10, 0x78, 0x04, 0x00 }, // i 0xA8
{ 0x18, 0x08, 0x4c, 0x48, 0x38 }, // u 0xA9
{ 0x48, 0x48, 0x78, 0x48, 0x48 }, // e 0xAA
{ 0x48, 0x28, 0x18, 0x7c, 0x08 }, // o 0xAB
{ 0x08, 0x7c, 0x08, 0x28, 0x18 }, // ya 0xAC
{ 0x40, 0x48, 0x48, 0x78, 0x40 }, // yu 0xAD
{ 0x54, 0x54, 0x54, 0x7c, 0x00 }, // yo 0xAE
{ 0x18, 0x00, 0x58, 0x40, 0x38 }, // tu 0xAF
{ 0x08, 0x08, 0x08, 0x08, 0x08 }, // - 0xB0
{ 0x01, 0x41, 0x3d, 0x09, 0x07 }, // a 0xB1
{ 0x20, 0x10, 0x7c, 0x02, 0x01 }, // i 0xB2
{ 0x0e, 0x02, 0x43, 0x22, 0x1e }, // u 0xB3
{ 0x42, 0x42, 0x7e, 0x42, 0x42 }, // e 0xB4
{ 0x22, 0x12, 0x0a, 0x7f, 0x02 }, // o 0xB5
{ 0x42, 0x3f, 0x02, 0x42, 0x3e }, // ka 0xB6
{ 0x0a, 0x0a, 0x7f, 0x0a, 0x0a }, // ki 0xB7
{ 0x08, 0x46, 0x42, 0x22, 0x1e }, // ku 0xB8
{ 0x04, 0x03, 0x42, 0x3e, 0x04 }, // ke 0xB9
{ 0x42, 0x42, 0x42, 0x42, 0x7e }, // ko 0xBA
{ 0x02, 0x4f, 0x22, 0x1f, 0x02 }, // sa 0xBB
{ 0x4a, 0x4a, 0x40, 0x20, 0x1c }, // si 0xBC
{ 0x42, 0x22, 0x12, 0x2a, 0x46 }, // su 0xBD
{ 0x02, 0x3f, 0x42, 0x4a, 0x46 }, // se 0xBE
{ 0x06, 0x48, 0x40, 0x20, 0x1e }, // so 0xBF
{ 0x08, 0x46, 0x4a, 0x32, 0x1e }, // ta 0xC0
{ 0x0a, 0x4a, 0x3e, 0x09, 0x08 }, // ti 0xC1
{ 0x0e, 0x00, 0x4e, 0x20, 0x1e }, // tu 0xC2
{ 0x04, 0x45, 0x3d, 0x05, 0x04 }, // te 0xC3
{ 0x00, 0x7f, 0x08, 0x10, 0x00 }, // to 0xC4
{ 0x44, 0x24, 0x1f, 0x04, 0x04 }, // na 0xC5
{ 0x40, 0x42, 0x42, 0x42, 0x40 }, // ni 0xC6
{ 0x42, 0x2a, 0x12, 0x2a, 0x06 }, // nu 0xC7
{ 0x22, 0x12, 0x7b, 0x16, 0x22 }, // ne 0xC8
{ 0x00, 0x40, 0x20, 0x1f, 0x00 }, // no 0xC9
{ 0x78, 0x00, 0x02, 0x04, 0x78 }, // ha 0xCA
{ 0x3f, 0x44, 0x44, 0x44, 0x44 }, // hi 0xCB
{ 0x02, 0x42, 0x42, 0x22, 0x1e }, // hu 0xCC
{ 0x04, 0x02, 0x04, 0x08, 0x30 }, // he 0xCD
{ 0x32, 0x02, 0x7f, 0x02, 0x32 }, // ho 0xCE
{ 0x02, 0x12, 0x22, 0x52, 0x0e }, // ma 0xCF
{ 0x00, 0x2a, 0x2a, 0x2a, 0x40 }, // mi 0xD0
{ 0x38, 0x24, 0x22, 0x20, 0x70 }, // mu 0xD1
{ 0x40, 0x28, 0x10, 0x28, 0x06 }, // me 0xD2
{ 0x0a, 0x3e, 0x4a, 0x4a, 0x4a }, // mo 0xD3
{ 0x04, 0x7f, 0x04, 0x14, 0x0c }, // ya 0xD4
{ 0x40, 0x42, 0x42, 0x7e, 0x40 }, // yu 0xD5
{ 0x4a, 0x4a, 0x4a, 0x4a, 0x7e }, // yo 0xD6
{ 0x04, 0x05, 0x45, 0x25, 0x1c }, // ra 0xD7
{ 0x0f, 0x40, 0x20, 0x1f, 0x00 }, // ri 0xD8
{ 0x7c, 0x00, 0x7e, 0x80, 0x30 }, // ru 0xD9
{ 0x7e, 0x40, 0x20, 0x10, 0x08 }, // re 0xDA
{ 0x7e, 0x42, 0x42, 0x42, 0x7e }, // ro 0xDB
{ 0x0e, 0x02, 0x42, 0x22, 0x1e }, // wa 0xDC
{ 0x42, 0x42, 0x40, 0x20, 0x18 }, // n 0xDD
{ 0x02, 0x04, 0x01, 0x02, 0x00 }, // " 0xDE
{ 0x07, 0x05, 0x07, 0x00, 0x00 } // . 0xDF
};
#endif

Wyświetl plik

@ -0,0 +1,97 @@
const int font12[95][13]={
{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x00000000, 0x00000380, 0x000007E6, 0x00000380, 0x00000000, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x00000000, 0x00000380, 0x00000040, 0x00000380, 0x00000000, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x00000090, 0x000007FE, 0x000007FE, 0x00000090, 0x000007FE, 0x000007FE, 0x00000090, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x00000398, 0x000006CC, 0x00000FFE, 0x0000066C, 0x00000338, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x00000006, 0x0000030C, 0x00000498, 0x000004B0, 0x0000036C, 0x000000D2, 0x00000192, 0x0000030C, 0x00000600, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x00000018, 0x0000003C, 0x00000766, 0x00000DC2, 0x000008E6, 0x00000DBC, 0x0000071C, 0x00000036, 0x00000022, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x00000000, 0x00000080, 0x00000300, 0x00000300, 0x00000000, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x00000000, 0x000001F8, 0x000003FC, 0x00000606, 0x00000000, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x00000000, 0x00000606, 0x000003FC, 0x000001F8, 0x00000000, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x000001B0, 0x000000E0, 0x000003F8, 0x000003F8, 0x000000E0, 0x000001B0, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x00000040, 0x00000040, 0x000001F0, 0x00000040, 0x00000040, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x00000000, 0x00000001, 0x00000007, 0x00000006, 0x00000000, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x00000040, 0x00000040, 0x00000040, 0x00000040, 0x00000040, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x00000000, 0x00000000, 0x00000006, 0x00000006, 0x00000000, 0x00000000, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x00000007, 0x0000001C, 0x000000F0, 0x00000380, 0x00000E00, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x000003FC, 0x000007FE, 0x00000402, 0x00000402, 0x000007FE, 0x000003FC, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x00000000, 0x00000202, 0x000007FE, 0x000007FE, 0x00000002, 0x00000000, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x0000038E, 0x0000079E, 0x00000432, 0x00000462, 0x000007C6, 0x00000386, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x0000031C, 0x0000071E, 0x00000442, 0x00000442, 0x000007FE, 0x000003BC, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x00000038, 0x000001F8, 0x000007C8, 0x00000608, 0x000007FE, 0x000007FE, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x000007CC, 0x0000078E, 0x00000482, 0x00000482, 0x000004FE, 0x0000047C, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x000003FC, 0x000007FE, 0x00000442, 0x00000442, 0x0000077E, 0x0000033C, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x00000700, 0x00000600, 0x0000040E, 0x0000047E, 0x000007F0, 0x00000780, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x000003BC, 0x000007FE, 0x00000442, 0x00000442, 0x000007FE, 0x000003BC, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x000003CC, 0x000007EE, 0x00000422, 0x00000422, 0x000007FE, 0x000003FC, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x00000000, 0x00000000, 0x0000018C, 0x00000000, 0x00000000, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x00000000, 0x00000002, 0x0000018C, 0x00000000, 0x00000000, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x00000040, 0x000000E0, 0x000001B0, 0x00000318, 0x0000060C, 0x00000000, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x00000000, 0x00000090, 0x00000090, 0x00000090, 0x00000090, 0x00000000, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x00000000, 0x0000060C, 0x00000318, 0x000001B0, 0x000000E0, 0x00000040, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x00000380, 0x00000780, 0x00000436, 0x000007E0, 0x000003C0, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x000000F8, 0x00000104, 0x00000272, 0x00000492, 0x000004B2, 0x000004F2, 0x00000294, 0x00000130, 0x000000E0, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x00000006, 0x0000001E, 0x0000007E, 0x000001E8, 0x00000788, 0x00000788, 0x000001E8, 0x0000007E, 0x0000001E, 0x00000006, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x000007FE, 0x000007FE, 0x00000442, 0x00000442, 0x00000442, 0x000007E6, 0x000003BC, 0x00000018, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x000001F8, 0x000003FC, 0x00000606, 0x00000402, 0x00000402, 0x00000606, 0x0000079E, 0x0000039C, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x000007FE, 0x000007FE, 0x00000402, 0x00000402, 0x00000402, 0x00000606, 0x000003FC, 0x000001F8, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x000007FE, 0x000007FE, 0x00000442, 0x00000442, 0x000004E2, 0x00000606, 0x0000030C, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x000007FE, 0x000007FE, 0x00000440, 0x00000440, 0x000004E0, 0x00000600, 0x00000300, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x000001F8, 0x000003FC, 0x00000606, 0x00000402, 0x00000422, 0x00000626, 0x0000073E, 0x0000033C, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x000007FE, 0x000007FE, 0x00000040, 0x00000040, 0x00000040, 0x00000040, 0x000007FE, 0x000007FE, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x00000606, 0x000007FE, 0x000007FE, 0x00000606, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x0000000C, 0x0000000E, 0x00000002, 0x00000002, 0x000007FE, 0x000007FC, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x000007FE, 0x000007FE, 0x000000E0, 0x000001B0, 0x00000318, 0x0000060C, 0x00000406, 0x00000002, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x000007FE, 0x000007FE, 0x00000002, 0x00000002, 0x00000002, 0x00000006, 0x0000000C, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x000007FE, 0x000007FE, 0x000001C0, 0x00000070, 0x0000001E, 0x0000001E, 0x00000070, 0x000001C0, 0x000007FE, 0x000007FE, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x000007FE, 0x000007FE, 0x00000180, 0x000000C0, 0x00000060, 0x00000030, 0x000007FE, 0x000007FE, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x000001F8, 0x000003FC, 0x00000204, 0x00000402, 0x00000402, 0x00000204, 0x000003FC, 0x000001F8, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x000007FE, 0x000007FE, 0x00000410, 0x00000410, 0x00000630, 0x000003E0, 0x000001C0, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x000001F8, 0x000003FC, 0x00000204, 0x00000402, 0x0000041A, 0x0000041A, 0x0000020C, 0x000003FE, 0x000001FA, 0x00000002, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x000007FE, 0x000007FE, 0x00000410, 0x00000418, 0x0000063C, 0x000003EE, 0x000001C6, 0x00000002, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x0000039C, 0x000007DE, 0x000004C2, 0x00000442, 0x00000462, 0x0000077E, 0x0000033C, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x00000700, 0x00000600, 0x00000400, 0x000007FE, 0x000007FE, 0x00000400, 0x00000600, 0x00000700, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x000007F8, 0x000007FC, 0x00000002, 0x00000002, 0x00000002, 0x000007FC, 0x000007F8, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x00000700, 0x000007E0, 0x000000F8, 0x0000001E, 0x0000001E, 0x000000F8, 0x000007E0, 0x00000700, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x00000000, 0x000007E0, 0x000007FE, 0x0000003E, 0x000000E0, 0x000003C0, 0x000000E0, 0x0000003E, 0x000007FE, 0x000007E0, 0x00000000, 0x00000FFF, 0x00000FFF},
{0x00000606, 0x0000070E, 0x0000039C, 0x000000F0, 0x00000060, 0x000000F0, 0x0000039C, 0x0000070E, 0x00000606, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x00000700, 0x00000780, 0x000001C0, 0x0000007E, 0x0000007E, 0x000001C0, 0x00000780, 0x00000700, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x00000706, 0x0000060E, 0x0000041E, 0x00000472, 0x000004E2, 0x00000782, 0x00000706, 0x0000060E, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x00000000, 0x000007FE, 0x000007FE, 0x00000402, 0x00000000, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x00000700, 0x000003C0, 0x000000F0, 0x0000003C, 0x0000000E, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x00000000, 0x00000402, 0x000007FE, 0x000007FE, 0x00000000, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x00000180, 0x00000300, 0x00000600, 0x00000600, 0x00000300, 0x00000180, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x00000000, 0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000000, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x00000000, 0x00000200, 0x00000300, 0x00000180, 0x00000000, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x0000004C, 0x000000DE, 0x00000092, 0x00000092, 0x000000FE, 0x0000007E, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x000007FE, 0x000007FE, 0x00000082, 0x00000082, 0x000000FE, 0x0000007C, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x0000007C, 0x000000FE, 0x00000082, 0x00000082, 0x000000EE, 0x0000006C, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x0000007C, 0x000000FE, 0x00000082, 0x00000082, 0x000007FE, 0x000007FE, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x0000007C, 0x000000FE, 0x00000092, 0x00000092, 0x000000F6, 0x00000074, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x00000080, 0x000003FE, 0x000007FE, 0x00000680, 0x00000280, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x00000072, 0x000000F9, 0x00000089, 0x0000008B, 0x0000007F, 0x000000FE, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x000007FE, 0x000007FE, 0x00000080, 0x00000080, 0x000000FE, 0x0000007E, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x00000000, 0x000006FE, 0x000006FE, 0x00000000, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x0000000E, 0x0000000F, 0x00000001, 0x00000001, 0x000006FF, 0x000006FE, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x000007FE, 0x000007FE, 0x00000030, 0x00000078, 0x000000CC, 0x00000086, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x00000000, 0x000007FE, 0x000007FE, 0x00000400, 0x00000000, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x000000FE, 0x000000FE, 0x00000080, 0x00000080, 0x000000FE, 0x000000FE, 0x00000080, 0x00000080, 0x000000FE, 0x0000007E, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x000000FE, 0x000000FE, 0x00000080, 0x00000080, 0x000000FE, 0x0000007E, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x0000007C, 0x000000FE, 0x00000082, 0x00000082, 0x000000FE, 0x0000007C, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x000000FF, 0x000000FF, 0x00000084, 0x00000084, 0x000000FC, 0x00000078, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x00000038, 0x0000007C, 0x00000082, 0x00000082, 0x000000FF, 0x0000007F, 0x00000001, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x000000C0, 0x0000007E, 0x0000007E, 0x000000C0, 0x000000C0, 0x00000060, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x00000064, 0x000000F6, 0x00000092, 0x00000092, 0x000000DE, 0x0000004C, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x00000040, 0x000001FC, 0x000001FE, 0x00000046, 0x0000004C, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x000000FC, 0x000000FE, 0x00000002, 0x00000002, 0x000000FE, 0x000000FC, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x000000F8, 0x000000FC, 0x00000006, 0x00000006, 0x000000FC, 0x000000F8, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x000000F0, 0x000000F8, 0x0000000E, 0x0000000E, 0x000000F8, 0x000000F8, 0x0000000E, 0x0000000E, 0x000000F8, 0x000000F0, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x000000C6, 0x000000EE, 0x00000038, 0x00000010, 0x00000038, 0x000000EE, 0x000000C6, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x000000C0, 0x000000F3, 0x0000003F, 0x0000000E, 0x00000038, 0x000000F0, 0x000000C0, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x000000E6, 0x000000CE, 0x00000092, 0x000000E6, 0x000000CE, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x00000000, 0x00000060, 0x000003FC, 0x00000606, 0x00000000, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x00000000, 0x00000000, 0x000007FE, 0x00000000, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x00000000, 0x00000606, 0x000003FC, 0x00000060, 0x00000000, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF},
{0x00000020, 0x00000060, 0x00000040, 0x00000060, 0x00000020, 0x00000060, 0x00000040, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF, 0x00000FFF}
};

Wyświetl plik

@ -0,0 +1,104 @@
/*
* File: font.h
* Author: JF3HZB / T.UEBO
*
* Created on 2018/03/21, 23:04
*/
const int font16[95][21]={
{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00000000, 0x00000000, 0x00003FCC, 0x00003FCC, 0x00000000, 0x00000000, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00000000, 0x00000000, 0x00003800, 0x00003800, 0x00000000, 0x00003800, 0x00003800, 0x00000000, 0x00000000, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00000058, 0x000004F8, 0x000007E0, 0x00001F58, 0x00003CF8, 0x000027E0, 0x00001F40, 0x00003C40, 0x00002400, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00000610, 0x00000F1C, 0x0000198C, 0x00007FFF, 0x00007FFF, 0x000018CC, 0x00001C78, 0x00000430, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00001C00, 0x00003E04, 0x0000621C, 0x00004638, 0x00007CE0, 0x000039C0, 0x00001738, 0x00001E7C, 0x000038C4, 0x0000708C, 0x000040F8, 0x00000070, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00000070, 0x000000F8, 0x0000398C, 0x00007F04, 0x00004784, 0x000047E4, 0x00007D7C, 0x0000391C, 0x000001F4, 0x000001E4, 0x0000010C, 0x00000108, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00000000, 0x00000000, 0x00003800, 0x00003800, 0x00000000, 0x00000000, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00000000, 0x00000000, 0x00000FF0, 0x00003FFC, 0x0000700E, 0x00004002, 0x00000000, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00000000, 0x00004002, 0x0000700E, 0x00003FFC, 0x00000FF0, 0x00000000, 0x00000000, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00000440, 0x000006C0, 0x00000380, 0x00001FF0, 0x00001FF0, 0x00000380, 0x000006C0, 0x00000440, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00000100, 0x00000100, 0x00000100, 0x00000FE0, 0x00000FE0, 0x00000100, 0x00000100, 0x00000100, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00000000, 0x00000000, 0x00000002, 0x0000000E, 0x0000000C, 0x00000000, 0x00000000, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00000000, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000100, 0x00000000, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00000000, 0x00000000, 0x0000000C, 0x0000000C, 0x00000000, 0x00000000, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00000006, 0x0000001E, 0x00000078, 0x000001E0, 0x00000780, 0x00001E00, 0x00007800, 0x00006000, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x000007E0, 0x00001FF8, 0x0000381C, 0x00002004, 0x00002004, 0x0000381C, 0x00001FF8, 0x000007E0, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00000000, 0x00001004, 0x00001004, 0x00003FFC, 0x00003FFC, 0x00000004, 0x00000004, 0x00000000, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00000C1C, 0x00001C3C, 0x00003064, 0x000020C4, 0x00002184, 0x0000330C, 0x00001E3C, 0x00000C30, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00000830, 0x00001838, 0x0000310C, 0x00002104, 0x00002104, 0x0000338C, 0x00001EF8, 0x00000C70, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00000060, 0x000001E0, 0x000007A0, 0x00001E20, 0x00003824, 0x00003FFC, 0x00003FFC, 0x00000024, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00000010, 0x00003F18, 0x00003F0C, 0x00002204, 0x00002204, 0x0000230C, 0x000021F8, 0x000020F0, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00000FF0, 0x00001FF8, 0x0000330C, 0x00002204, 0x00002204, 0x0000330C, 0x000019F8, 0x000008F0, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00000C00, 0x00003C00, 0x00003000, 0x0000203C, 0x000021FC, 0x000027C0, 0x00003E00, 0x00003800, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00000C70, 0x00001EF8, 0x0000338C, 0x00002104, 0x00002104, 0x0000338C, 0x00001EF8, 0x00000C70, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00000F10, 0x00001F98, 0x000030CC, 0x00002044, 0x00002044, 0x000030CC, 0x00001FF8, 0x00000FF0, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00000000, 0x00000000, 0x00000000, 0x00000C18, 0x00000C18, 0x00000000, 0x00000000, 0x00000000, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00000000, 0x00000000, 0x00000004, 0x00000C1C, 0x00000C18, 0x00000000, 0x00000000, 0x00000000, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00000100, 0x00000380, 0x000006C0, 0x00000C60, 0x00001830, 0x00003018, 0x00002008, 0x00000000, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00000000, 0x00000240, 0x00000240, 0x00000240, 0x00000240, 0x00000240, 0x00000240, 0x00000000, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00000000, 0x00002008, 0x00003018, 0x00001830, 0x00000C60, 0x000006C0, 0x00000380, 0x00000100, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00000C00, 0x00001C00, 0x00003000, 0x0000206C, 0x000020EC, 0x00003180, 0x00001F00, 0x00000E00, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x000003E0, 0x000007F0, 0x00000C18, 0x000019CC, 0x000033E4, 0x00002624, 0x00002464, 0x000027C4, 0x000027E4, 0x0000362C, 0x00001868, 0x00000FC0, 0x00000780, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00000004, 0x0000001C, 0x000000FC, 0x000003E4, 0x00000F40, 0x00003C40, 0x00003C40, 0x00000F40, 0x000003E4, 0x000000FC, 0x0000001C, 0x00000004, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00002004, 0x00003FFC, 0x00003FFC, 0x00002104, 0x00002104, 0x00002104, 0x00002104, 0x00003304, 0x00001F8C, 0x00000CF8, 0x00000070, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x000003C0, 0x00000FF0, 0x00001C38, 0x0000300C, 0x00002004, 0x00002004, 0x00002004, 0x00003004, 0x0000300C, 0x00003C18, 0x00000C10, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00002004, 0x00003FFC, 0x00003FFC, 0x00002004, 0x00002004, 0x00002004, 0x00002004, 0x0000300C, 0x00001C38, 0x00000FF0, 0x000003C0, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00002004, 0x00003FFC, 0x00003FFC, 0x00002104, 0x00002104, 0x00002104, 0x00002384, 0x000027C4, 0x0000300C, 0x00001818, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00002004, 0x00003FFC, 0x00003FFC, 0x00002104, 0x00002104, 0x00002100, 0x00002380, 0x000027C0, 0x00003000, 0x00001800, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x000003C0, 0x00000FF0, 0x00001C38, 0x0000300C, 0x00002004, 0x00002004, 0x00002084, 0x00002084, 0x0000308C, 0x000038FC, 0x000008FC, 0x00000080, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00002004, 0x00003FFC, 0x00003FFC, 0x00002104, 0x00000100, 0x00000100, 0x00000100, 0x00002104, 0x00003FFC, 0x00003FFC, 0x00002004, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00002004, 0x00002004, 0x00003FFC, 0x00003FFC, 0x00002004, 0x00002004, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00000018, 0x0000001C, 0x00002004, 0x00002004, 0x00003FFC, 0x00003FF8, 0x00002000, 0x00002000, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00000000, 0x00002004, 0x00003FFC, 0x00003FFC, 0x00002184, 0x00000300, 0x00000780, 0x00002DC0, 0x00003874, 0x0000303C, 0x0000200C, 0x00002004, 0x00000004, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00002004, 0x00003FFC, 0x00003FFC, 0x00002004, 0x00002004, 0x00000004, 0x00000004, 0x0000000C, 0x00000018, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00002004, 0x00003FFC, 0x00003FFC, 0x00001E04, 0x00000784, 0x000001E0, 0x00000078, 0x00000078, 0x000001E0, 0x00000784, 0x00001E04, 0x00003FFC, 0x00003FFC, 0x00002004, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00002004, 0x00003FFC, 0x00003FFC, 0x00001E04, 0x00000704, 0x000001C0, 0x000020E0, 0x00002038, 0x00003FFC, 0x00003FFC, 0x00002000, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x000003C0, 0x00000FF0, 0x00001C38, 0x0000300C, 0x00002004, 0x00002004, 0x00002004, 0x00002004, 0x0000300C, 0x00001C38, 0x00000FF0, 0x000003C0, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00002004, 0x00003FFC, 0x00003FFC, 0x00002084, 0x00002084, 0x00002080, 0x00002080, 0x00003180, 0x00001F00, 0x00000E00, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x000003C0, 0x00000FF0, 0x00001C38, 0x0000301C, 0x00002034, 0x00002024, 0x00002024, 0x00002034, 0x0000301C, 0x00001C3E, 0x00000FF2, 0x000003C6, 0x00000004, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00002004, 0x00003FFC, 0x00003FFC, 0x00002104, 0x00002104, 0x00002100, 0x000021C0, 0x000033F0, 0x00001E3C, 0x00000C0C, 0x00000004, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00000C30, 0x00001E3C, 0x0000320C, 0x00002304, 0x00002104, 0x00002184, 0x0000308C, 0x00003CF8, 0x00000C70, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00003800, 0x00003000, 0x00002004, 0x00002004, 0x00003FFC, 0x00003FFC, 0x00002004, 0x00002004, 0x00003000, 0x00003800, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00002000, 0x00003FF0, 0x00003FF8, 0x0000200C, 0x00000004, 0x00000004, 0x00000004, 0x00000004, 0x0000200C, 0x00003FF8, 0x00003FF0, 0x00002000, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00002000, 0x00003800, 0x00003F00, 0x000027C0, 0x000000F0, 0x0000003C, 0x0000003C, 0x000000F0, 0x000027C0, 0x00003F00, 0x00003800, 0x00002000, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00002000, 0x00003800, 0x00003F00, 0x000027E0, 0x000000FC, 0x0000207C, 0x000039E0, 0x00003F80, 0x000027E0, 0x000000FC, 0x000000FC, 0x000027E0, 0x00003F00, 0x00003800, 0x00002000, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00002004, 0x0000300C, 0x00003C3C, 0x00002E74, 0x000003C0, 0x000003C0, 0x00002E74, 0x00003C3C, 0x0000300C, 0x00002004, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00002000, 0x00003000, 0x00003C04, 0x00002F04, 0x000003FC, 0x000003FC, 0x00002F04, 0x00003C04, 0x00003000, 0x00002000, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00000004, 0x0000380C, 0x0000303C, 0x00002074, 0x000021C4, 0x00002384, 0x00002E04, 0x00003C0C, 0x0000301C, 0x00002000, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00000000, 0x00000000, 0x00007FFE, 0x00007FFE, 0x00004002, 0x00004002, 0x00000000, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00006000, 0x00007800, 0x00001E00, 0x00000780, 0x000001E0, 0x00000078, 0x0000001E, 0x00000006, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00000000, 0x00004002, 0x00004002, 0x00007FFE, 0x00007FFE, 0x00000000, 0x00000000, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00000400, 0x00000C00, 0x00001800, 0x00003000, 0x00003000, 0x00001800, 0x00000C00, 0x00000400, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x00000002, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00000000, 0x00000000, 0x00001000, 0x00001800, 0x00000C00, 0x00000400, 0x00000000, 0x00000000, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00000118, 0x0000033C, 0x00000224, 0x00000264, 0x0000024C, 0x000003FC, 0x000001FC, 0x00000004, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00002000, 0x00003FFC, 0x00003FFC, 0x0000030C, 0x00000204, 0x00000204, 0x0000030C, 0x000001F8, 0x000000F0, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x000000F0, 0x000001F8, 0x0000030C, 0x00000204, 0x00000204, 0x00000204, 0x0000030C, 0x00000188, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x000000F0, 0x000001F8, 0x0000030C, 0x00000204, 0x00000204, 0x0000230C, 0x00003FFC, 0x00003FFC, 0x00000004, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x000000F0, 0x000001F8, 0x0000034C, 0x00000244, 0x00000244, 0x00000344, 0x000001CC, 0x000000C8, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00000200, 0x00000204, 0x00001FFC, 0x00003FFC, 0x00002204, 0x00003200, 0x00001200, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00000016, 0x000001FF, 0x000003E9, 0x00000229, 0x00000229, 0x000003E9, 0x000003CF, 0x00000206, 0x00000200, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00002004, 0x00003FFC, 0x00003FFC, 0x00000304, 0x00000200, 0x00000204, 0x000003FC, 0x000001FC, 0x00000004, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00000000, 0x00000204, 0x000033FC, 0x000033FC, 0x00000004, 0x00000000, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00000002, 0x00000003, 0x00000201, 0x000033FF, 0x000033FE, 0x00000000, 0x00000000, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00002004, 0x00003FFC, 0x00003FFC, 0x00000064, 0x000002E0, 0x000003B4, 0x0000031C, 0x0000020C, 0x00000004, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00000000, 0x00002004, 0x00003FFC, 0x00003FFC, 0x00000004, 0x00000000, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00000204, 0x000003FC, 0x000003FC, 0x00000304, 0x00000200, 0x00000204, 0x000003FC, 0x000003FC, 0x00000204, 0x00000200, 0x00000204, 0x000003FC, 0x000001FC, 0x00000004, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00000204, 0x000003FC, 0x000003FC, 0x00000304, 0x00000200, 0x00000204, 0x000003FC, 0x000001FC, 0x00000004, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x000000F0, 0x000001F8, 0x0000030C, 0x00000204, 0x00000204, 0x00000204, 0x0000030C, 0x000001F8, 0x000000F0, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00000201, 0x000003FF, 0x000003FF, 0x0000030D, 0x00000204, 0x00000204, 0x0000030C, 0x000001F8, 0x000000F0, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x000000F0, 0x000001F8, 0x0000030C, 0x00000204, 0x00000204, 0x0000030D, 0x000003FF, 0x000003FF, 0x00000001, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00000204, 0x000003FC, 0x000003FC, 0x00000304, 0x00000200, 0x00000300, 0x00000100, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00000190, 0x000003DC, 0x0000024C, 0x00000244, 0x00000264, 0x00000324, 0x000003BC, 0x00000098, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00000200, 0x00000200, 0x00001FF8, 0x00001FFC, 0x00000204, 0x0000020C, 0x00000008, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00000200, 0x000003F8, 0x000003FC, 0x00000004, 0x00000004, 0x0000020C, 0x000003FC, 0x000003FC, 0x00000004, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00000200, 0x00000300, 0x000003C0, 0x000002F0, 0x0000003C, 0x0000003C, 0x000002F0, 0x000003C0, 0x00000300, 0x00000200, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00000200, 0x00000380, 0x000003E0, 0x0000027C, 0x0000027C, 0x000003E0, 0x000003E0, 0x0000027C, 0x0000027C, 0x000003E0, 0x00000380, 0x00000200, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00000204, 0x0000030C, 0x0000039C, 0x000002F4, 0x00000060, 0x000002F4, 0x0000039C, 0x0000030C, 0x00000204, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00000202, 0x00000303, 0x000003C3, 0x000002F3, 0x0000003E, 0x0000003C, 0x000002F0, 0x000003C0, 0x00000300, 0x00000200, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x0000008C, 0x0000039C, 0x00000334, 0x00000264, 0x000002CC, 0x0000039C, 0x00000310, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00000000, 0x00000100, 0x00000100, 0x00003FFC, 0x00007EFE, 0x00004002, 0x00000000, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00000000, 0x00000000, 0x00007FFE, 0x00007FFE, 0x00000000, 0x00000000, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00000000, 0x00004002, 0x00007EFE, 0x00003FFC, 0x00000100, 0x00000100, 0x00000000, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF},
{0x00000080, 0x00000180, 0x00000100, 0x00000100, 0x00000180, 0x00000080, 0x00000080, 0x00000180, 0x00000100, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF, 0x0000FFFF}
};

Wyświetl plik

@ -0,0 +1,104 @@
/*
* File: font.h
* Author: JF3HZB / T.UEBO
*
* Created on 2018/03/21, 23:04
*/
const long font20[95][23]={
{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x00000000, 0x00000000, 0x00000000, 0x0003FF9C, 0x0003FF9C, 0x00000000, 0x00000000, 0x00000000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x00000000, 0x00000000, 0x00000000, 0x0003C000, 0x0003C000, 0x00000000, 0x00000000, 0x0003C000, 0x0003C000, 0x00000000, 0x00000000, 0x00000000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x000001B8, 0x000033F8, 0x00003FE0, 0x0000FF80, 0x0003F980, 0x0003B1B8, 0x000033F8, 0x00003FE0, 0x0000FF80, 0x0003F980, 0x0003B000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x0000F9E0, 0x0001FC70, 0x00039C38, 0x00030E18, 0x000FFFFE, 0x000FFFFE, 0x00030E18, 0x00038738, 0x0001C7F0, 0x0000F3E0, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x0001F038, 0x0003F870, 0x000718E0, 0x000619C0, 0x00063B80, 0x0007F700, 0x0003EE00, 0x00001C00, 0x000039F0, 0x000073F8, 0x0000E718, 0x0001C618, 0x00038638, 0x000307F0, 0x000003E0, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x000003F8, 0x000007FC, 0x0001EE1C, 0x0003FC0C, 0x00073C0C, 0x00061E0C, 0x0006379C, 0x000663F8, 0x0003C0F8, 0x0001843C, 0x000007FC, 0x000007EC, 0x0000079C, 0x00000418, 0x00000410, 0x000FEFFF, 0x00000000, 0x00000000, 0x00000000, 0x0003C000, 0x0003C000, 0x00000000, 0x000FFFFF},
{0x00000000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x00000000, 0x00000000, 0x00007FE0, 0x0001FFF8, 0x0003C03C, 0x0007000E, 0x00060006, 0x00040002, 0x00000000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x00000000, 0x00040002, 0x00060006, 0x0007000E, 0x0003C03C, 0x0001FFF8, 0x00007FE0, 0x00000000, 0x00000000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x00006180, 0x00007380, 0x00003F00, 0x00001E00, 0x0001FFE0, 0x0001FFE0, 0x00001E00, 0x00003F00, 0x00007380, 0x00006180, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x00000C00, 0x00000C00, 0x00000C00, 0x00000C00, 0x0000FFC0, 0x0000FFC0, 0x00000C00, 0x00000C00, 0x00000C00, 0x00000C00, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x00000000, 0x00000000, 0x00000000, 0x00000002, 0x00000036, 0x0000003C, 0x00000038, 0x00000000, 0x00000000, 0x00000000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x00000000, 0x00000C00, 0x00000C00, 0x00000C00, 0x00000C00, 0x00000C00, 0x00000C00, 0x00000C00, 0x00000C00, 0x00000000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x00000000, 0x00000000, 0x0000001C, 0x0000001C, 0x0000001C, 0x00000000, 0x00000000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x00000006, 0x0000001E, 0x0000007E, 0x000001F0, 0x000007C0, 0x00001F00, 0x00007C00, 0x0001F000, 0x0007C000, 0x00070000, 0x00060000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x00007FE0, 0x0000FFF0, 0x0001C038, 0x0003801C, 0x0003000C, 0x0003000C, 0x0003801C, 0x0001C038, 0x0000FFF0, 0x00007FE0, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x00000000, 0x0000800C, 0x0000800C, 0x0001800C, 0x0003FFFC, 0x0003FFFC, 0x0000000C, 0x0000000C, 0x0000000C, 0x00000000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x0000F03C, 0x0001C07C, 0x000380FC, 0x000301CC, 0x0003038C, 0x0003070C, 0x00038E0C, 0x0003FC1C, 0x0001F87C, 0x0000F078, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x0000E0F0, 0x0001C038, 0x0003801C, 0x00030C0C, 0x00030C0C, 0x00030C0C, 0x00031E1C, 0x00039F3C, 0x0001FBF8, 0x0000F1F0, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x000001C0, 0x000007C0, 0x00000EC0, 0x00003CC0, 0x000070C0, 0x0001E0C0, 0x0003C0CC, 0x0003FFFC, 0x0003FFFC, 0x000000CC, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x00000070, 0x0003FC38, 0x0003FC1C, 0x00031C1C, 0x0003180C, 0x0003180C, 0x00031C0C, 0x00031E1C, 0x00030FF8, 0x000307F0, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x00007FF0, 0x0000FFF8, 0x0001C61C, 0x00038C0C, 0x00030C0C, 0x00030C0C, 0x00030C0C, 0x00038E1C, 0x000187F8, 0x0000C3F0, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x0001E000, 0x0003C000, 0x00038000, 0x00030000, 0x000300FC, 0x000307FC, 0x00031F80, 0x00033C00, 0x0003F800, 0x0003E000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x0000F1F0, 0x0001FBF8, 0x00019F1C, 0x00030E0C, 0x00030C0C, 0x00030C0C, 0x00030E0C, 0x00019F1C, 0x0001FBF8, 0x0000F1F0, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x0000FC30, 0x0001FE18, 0x0003871C, 0x0003030C, 0x0003030C, 0x0003030C, 0x0003030C, 0x0003861C, 0x0001FFF8, 0x0000FFF0, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00007070, 0x00007070, 0x00007070, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x00000000, 0x00000000, 0x00000000, 0x00000004, 0x0000706C, 0x00007078, 0x00007070, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x00000E00, 0x00001F00, 0x00003B80, 0x000071C0, 0x0000E0E0, 0x0001C070, 0x00038038, 0x00030018, 0x00020008, 0x00000000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x00000000, 0x00001980, 0x00001980, 0x00001980, 0x00001980, 0x00001980, 0x00001980, 0x00001980, 0x00001980, 0x00000000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x00000000, 0x00020008, 0x00030018, 0x00038038, 0x0001C070, 0x0000E0E0, 0x000071C0, 0x00003B80, 0x00001F00, 0x00000E00, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x00007000, 0x0000E000, 0x0001C000, 0x00038000, 0x000300DC, 0x000301DC, 0x000303DC, 0x00038700, 0x0001CE00, 0x0000FC00, 0x00007800, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x00001FC0, 0x00003FE0, 0x00007078, 0x0000E73C, 0x0001CF9C, 0x00039FCC, 0x000338CC, 0x000330CC, 0x0003318C, 0x00033F8C, 0x00033FCC, 0x0003B0CC, 0x0001C1D8, 0x0000E398, 0x00007F30, 0x00003E00, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x0000000C, 0x0000001C, 0x000000FC, 0x000007FC, 0x00001FCC, 0x0000FD80, 0x0003F180, 0x0003C180, 0x0003E180, 0x0000F980, 0x00003F8C, 0x000007CC, 0x000001FC, 0x0000003C, 0x0000000C, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x0003000C, 0x0003000C, 0x0003FFFC, 0x0003FFFC, 0x00030C0C, 0x00030C0C, 0x00030C0C, 0x00030C0C, 0x00030C0C, 0x00030C0C, 0x00039E0C, 0x0001FF1C, 0x0000F3F8, 0x000001F0, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x00003FC0, 0x00007FE0, 0x0000E070, 0x0001C038, 0x0003801C, 0x0003000C, 0x0003000C, 0x0003000C, 0x0003000C, 0x0003000C, 0x0003800C, 0x0001C01C, 0x0000E038, 0x00006070, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x0003000C, 0x0003000C, 0x0003FFFC, 0x0003FFFC, 0x0003000C, 0x0003000C, 0x0003000C, 0x0003000C, 0x0003000C, 0x0003801C, 0x0001C038, 0x0000F0F0, 0x00007FE0, 0x00001F80, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x0003000C, 0x0003000C, 0x0003FFFC, 0x0003FFFC, 0x00031E0C, 0x00030C0C, 0x00030C0C, 0x00030C0C, 0x00031E0C, 0x00033F0C, 0x0003000C, 0x0003801C, 0x0001C038, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x0003000C, 0x0003000C, 0x0003FFFC, 0x0003FFFC, 0x00031E0C, 0x00030C0C, 0x00030C00, 0x00030C00, 0x00031E00, 0x00033F00, 0x00030000, 0x00038000, 0x0001C000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x00007FE0, 0x0000FFF0, 0x0001E078, 0x0003803C, 0x0003001C, 0x0003000C, 0x0003000C, 0x0003030C, 0x0003030C, 0x0003030C, 0x0003031C, 0x000383FC, 0x0001C3FC, 0x0000E3F8, 0x00000300, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x0003000C, 0x0003FFFC, 0x0003FFFC, 0x0003060C, 0x00000600, 0x00000600, 0x00000600, 0x00000600, 0x00000600, 0x00000600, 0x0003060C, 0x0003FFFC, 0x0003FFFC, 0x0003000C, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x00000000, 0x0003000C, 0x0003000C, 0x0003FFFC, 0x0003FFFC, 0x0003000C, 0x0003000C, 0x00000000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x00000078, 0x0000001C, 0x0003000C, 0x0003000C, 0x0003000C, 0x0003001C, 0x0003FFF8, 0x0003FFF0, 0x00030000, 0x00030000, 0x00030000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x0003000C, 0x0003000C, 0x0003FFFC, 0x0003FFFC, 0x0003070C, 0x00030E0C, 0x00001E00, 0x00003F00, 0x00037380, 0x0003E1CC, 0x0003C0EC, 0x0003807C, 0x0003003C, 0x0003001C, 0x0000000C, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x0003000C, 0x0003000C, 0x0003FFFC, 0x0003FFFC, 0x0003000C, 0x0003000C, 0x0000000C, 0x0000000C, 0x0000000C, 0x0000000C, 0x0000001C, 0x00000038, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x0003000C, 0x0003FFFC, 0x0003FFFC, 0x0000F00C, 0x0000780C, 0x00001E00, 0x00000F00, 0x00000380, 0x000001E0, 0x000001E0, 0x00000380, 0x00000F00, 0x00001E00, 0x0000780C, 0x0000F00C, 0x0003FFFC, 0x0003FFFC, 0x0003000C, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x0003000C, 0x0003FFFC, 0x0003FFFC, 0x0003E00C, 0x0000F00C, 0x00007C00, 0x00001E00, 0x00000F80, 0x000003C0, 0x000300F0, 0x0003007C, 0x0003FFFC, 0x0003FFFC, 0x0003000C, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x00003FC0, 0x00007FE0, 0x0000E070, 0x0001C038, 0x0003801C, 0x0003000C, 0x0003000C, 0x0003000C, 0x0003000C, 0x0003000C, 0x0003801C, 0x0001C038, 0x0000E070, 0x00007FE0, 0x00003FC0, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x0003000C, 0x0003000C, 0x0003FFFC, 0x0003FFFC, 0x0003030C, 0x0003030C, 0x00030300, 0x00030300, 0x00030300, 0x00038700, 0x0001CE00, 0x0000FC00, 0x00007800, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x00003FC0, 0x00007FE0, 0x0000E070, 0x0001C038, 0x0003807C, 0x0003006C, 0x000300CC, 0x000300CC, 0x000300CC, 0x0003006C, 0x0003807C, 0x0001C03E, 0x0000E0FE, 0x00007FE6, 0x00003F8E, 0x0000000C, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x0003000C, 0x0003000C, 0x0003FFFC, 0x0003FFFC, 0x00030C0C, 0x00030C0C, 0x00030E0C, 0x00030F00, 0x00030F80, 0x00030DE4, 0x00039CFC, 0x0001F83C, 0x0000F01C, 0x0000000C, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x000071E0, 0x0001F870, 0x00039838, 0x00030C1C, 0x00030C0C, 0x00030C0C, 0x0003060C, 0x0003060C, 0x0003831C, 0x0001C398, 0x0000E1F0, 0x000070E0, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x0003C000, 0x00038000, 0x00030000, 0x0003000C, 0x0003000C, 0x0003FFFC, 0x0003FFFC, 0x0003000C, 0x0003000C, 0x00030000, 0x00038000, 0x0003C000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x00030000, 0x0003FFE0, 0x0003FFF0, 0x00030038, 0x0000001C, 0x0000000C, 0x0000000C, 0x0000000C, 0x0000001C, 0x00030038, 0x0003FFF0, 0x0003FFE0, 0x00030000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x00030000, 0x0003E000, 0x0003F800, 0x00033E00, 0x00000F80, 0x000003E0, 0x000000F8, 0x0000003C, 0x000000F8, 0x000003E0, 0x00000F80, 0x00033E00, 0x0003F800, 0x0003E000, 0x00030000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x00030000, 0x0003E000, 0x0003FC00, 0x00033F00, 0x00030FE0, 0x000001FC, 0x0000007C, 0x000003E0, 0x00031F80, 0x0003FC00, 0x0003FC00, 0x00031F80, 0x000003E0, 0x0000007C, 0x000001FC, 0x00030FE0, 0x00033F00, 0x0003FC00, 0x0003E000, 0x00030000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x0003801C, 0x0003C03C, 0x0003E07C, 0x000370EC, 0x000039C0, 0x00001F80, 0x00000F00, 0x00000F00, 0x00001F80, 0x000039C0, 0x000370EC, 0x0003E07C, 0x0003C03C, 0x0003801C, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x00030000, 0x0003C000, 0x0003E000, 0x00037000, 0x0000380C, 0x00001C0C, 0x00000FFC, 0x00000FFC, 0x00001C0C, 0x0000380C, 0x00037000, 0x0003E000, 0x0003C000, 0x00030000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x0000003C, 0x0003E07C, 0x000380EC, 0x000301CC, 0x0003038C, 0x0003070C, 0x00030E0C, 0x00031C0C, 0x0003380C, 0x0003701C, 0x0003E07C, 0x0003C000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x00000000, 0x00000000, 0x00000000, 0x0007FFFE, 0x0007FFFE, 0x00060006, 0x00060006, 0x00060006, 0x00000000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x00060000, 0x00078000, 0x0007E000, 0x0000F800, 0x00003E00, 0x00000F80, 0x000003E0, 0x000000F8, 0x0000003E, 0x0000000E, 0x00000006, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x00000000, 0x00060006, 0x00060006, 0x00060006, 0x0007FFFE, 0x0007FFFE, 0x00000000, 0x00000000, 0x00000000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x00003000, 0x00007000, 0x0000E000, 0x0001C000, 0x00038000, 0x00038000, 0x0001C000, 0x0000E000, 0x00007000, 0x00003000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x00000006, 0x00000006, 0x00000006, 0x00000006, 0x00000006, 0x00000006, 0x00000006, 0x00000006, 0x00000006, 0x00000006, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x00000000, 0x00000000, 0x00018000, 0x0001C000, 0x0000E000, 0x00007000, 0x00003000, 0x00000000, 0x00000000, 0x00000000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x00000630, 0x00000C78, 0x00001CFC, 0x000018CC, 0x0000198C, 0x0000198C, 0x00001D9C, 0x00000FFC, 0x000007F8, 0x0000003C, 0x0000000C, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x0003000C, 0x0003FFFC, 0x0003FFFC, 0x00001C1C, 0x0000180C, 0x0000180C, 0x0000180C, 0x00001C1C, 0x00000E38, 0x000007F0, 0x000003E0, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x000003E0, 0x000007F0, 0x00000E38, 0x00001C1C, 0x0000180C, 0x0000180C, 0x0000180C, 0x0000180C, 0x0000180C, 0x00000C18, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x000003E0, 0x000007F0, 0x00000E38, 0x00001C1C, 0x0000180C, 0x0000180C, 0x0000180C, 0x00031C1C, 0x0003FFFC, 0x0003FFFC, 0x0000001C, 0x00000004, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x000007F0, 0x00000FF8, 0x00001D9C, 0x0000198C, 0x0000198C, 0x0000198C, 0x0000198C, 0x0000198C, 0x00000D8C, 0x00000798, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x00001800, 0x0000180C, 0x0000180C, 0x0001FFFC, 0x0003FFFC, 0x0003180C, 0x0003180C, 0x00039800, 0x00019800, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x000000FC, 0x00001FFE, 0x00003FB7, 0x00007363, 0x00006363, 0x00006363, 0x00006363, 0x00006763, 0x00007E77, 0x00007C3E, 0x0000601C, 0x00006000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x0003000C, 0x0003FFFC, 0x0001FFFC, 0x00000C0C, 0x00001800, 0x00001800, 0x00001800, 0x00001C0C, 0x00000FFC, 0x000007FC, 0x0000000C, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x00000000, 0x0000000C, 0x0003980C, 0x00039FFC, 0x00039FFC, 0x0000000C, 0x0000000C, 0x00000000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x00000000, 0x00000006, 0x00000007, 0x00001803, 0x00039803, 0x00039FFF, 0x00039FFE, 0x00000000, 0x00000000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x0003000C, 0x0003FFFC, 0x0003FFFC, 0x000000EC, 0x000001C0, 0x00001BC0, 0x00001FE0, 0x00001E7C, 0x00001C3C, 0x0000181C, 0x0000000C, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x00000000, 0x0000000C, 0x0003000C, 0x0003FFFC, 0x0003FFFC, 0x0000000C, 0x0000000C, 0x00000000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x0000180C, 0x00001FFC, 0x00001FFC, 0x00001C0C, 0x00001800, 0x00001800, 0x0000180C, 0x00001C0C, 0x00001FFC, 0x00001FFC, 0x00001C0C, 0x0000180C, 0x00001800, 0x00001800, 0x00001C0C, 0x00000FFC, 0x000007FC, 0x0000000C, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x0000180C, 0x00001FFC, 0x00001FFC, 0x00001C0C, 0x00001800, 0x00001800, 0x00001C00, 0x00001C0C, 0x00000FFC, 0x000007FC, 0x0000000C, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x000003E0, 0x000007F0, 0x00000E38, 0x00001C1C, 0x0000180C, 0x0000180C, 0x0000180C, 0x0000180C, 0x00001C1C, 0x00000E38, 0x000007F0, 0x000003E0, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x00001803, 0x00001FFF, 0x00001FFF, 0x00001C33, 0x00001830, 0x00001818, 0x00001818, 0x00001818, 0x00001C30, 0x00000FF0, 0x000007E0, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x000007E0, 0x00000FF0, 0x00001C30, 0x00001818, 0x00001818, 0x00001818, 0x00001818, 0x00001C30, 0x00001C33, 0x00001FFF, 0x00000FFF, 0x00000003, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x0000180C, 0x00001FFC, 0x00000FFC, 0x00001E0C, 0x00001800, 0x00001800, 0x00001800, 0x00000C00, 0x00000600, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x00000620, 0x00000F38, 0x00001F9C, 0x0000198C, 0x0000198C, 0x000019CC, 0x000018CC, 0x00001CFC, 0x00000E78, 0x00000230, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x00001800, 0x00001800, 0x00001800, 0x0000FFF8, 0x0000FFFC, 0x0000180C, 0x0000180C, 0x0000180C, 0x00000038, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x00001800, 0x00001FF0, 0x00001FF8, 0x0000001C, 0x0000000C, 0x0000000C, 0x0000000C, 0x0000001C, 0x00001838, 0x00001FFC, 0x00001FFC, 0x0000000C, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x00001800, 0x00001E00, 0x00001F80, 0x000019C0, 0x000000F0, 0x0000003C, 0x0000003C, 0x000000F0, 0x000019C0, 0x00001F80, 0x00001E00, 0x00001800, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x00001800, 0x00001E00, 0x00001F80, 0x000019E0, 0x0000007C, 0x0000003C, 0x000018F0, 0x00001FC0, 0x00001FC0, 0x000018F0, 0x0000003C, 0x0000007C, 0x000019E0, 0x00001F80, 0x00001E00, 0x00001800, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x0000180C, 0x00001C1C, 0x00001E3C, 0x00001B6C, 0x000001C0, 0x00000080, 0x000001C0, 0x00001B6C, 0x00001E3C, 0x00001C1C, 0x0000180C, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x00001806, 0x00001E03, 0x00001F03, 0x00001B87, 0x000019CE, 0x000000FC, 0x00000078, 0x000000F0, 0x000019E0, 0x00001B80, 0x00001F00, 0x00001E00, 0x00001800, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x00000C1C, 0x0000183C, 0x0000187C, 0x000018EC, 0x000019CC, 0x00001B8C, 0x00001F0C, 0x00001E0C, 0x00001C18, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x00000000, 0x00000400, 0x00000400, 0x00000E00, 0x0003FFFC, 0x0007FBFE, 0x00060006, 0x00040002, 0x00000000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x00000000, 0x00000000, 0x00000000, 0x0007FFFE, 0x0007FFFE, 0x00000000, 0x00000000, 0x00000000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x00000000, 0x00040002, 0x00060006, 0x0007FBFE, 0x0003FFFC, 0x00000E00, 0x00000400, 0x00000400, 0x00000000, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF},
{0x00000300, 0x00000600, 0x00000E00, 0x00000C00, 0x00000C00, 0x00000600, 0x00000700, 0x00000300, 0x00000300, 0x00000600, 0x00000C00, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF, 0x000FFFFF}
};

Wyświetl plik

@ -0,0 +1,364 @@
/*
* File: graph.cpp
* Author: JF3HZB / T.UEBO
*
* Created on 2017/12/08, 00:21
*/
#include <arduino.h>
#include "display.h"
#include "graph.h"
#include "font.h"
extern uint8_t R_GRAM[Nx][Ny];
extern uint8_t B_GRAM[Nx][Ny];
extern uint8_t G_GRAM[Nx][Ny];
// Claer GRAM ------------------------------------------------------------------
void GRAM_clr(void)
{
boxfill(0,0,Nx-1,Ny-1,0);
}
//--------------------------------------------------------------------------
void boxfill(int x_min, int y_min, int x_max, int y_max, unsigned long color)
{
int k, j;
union {
unsigned long lw[1];
unsigned char byte[4];
} cl_data;
cl_data.lw[0]=color;
if(x_min<0) x_min=0;
if(y_min<0) y_min=0;
if(x_max>=Nx) x_max=Nx-1;
if(y_max>=Ny) y_max=Ny-1;
for(k=x_min;k<=x_max; k++){
for(j=y_min; j<=y_max; j++){
R_GRAM[k][j]=cl_data.byte[2];
G_GRAM[k][j]=cl_data.byte[1];
B_GRAM[k][j]=cl_data.byte[0];
}
}
}
//--------------------------------------------------------------------------
void line(int xs, int ys,int xe, int ye, unsigned long color)
{
union {
unsigned long lw[1];
unsigned char byte[4];
} cl_data;
cl_data.lw[0]=color;
int dx = (xe > xs ? xe - xs : xs - xe);
int xstep = xe > xs ? 1 : -1;
int dy = (ye > ys ? ye - ys : ys - ye);
int ystep = ye > ys ? 1 : -1;
int j;
if(dx==0 && dy==0){
R_GRAM[xs][ys]=cl_data.byte[2];
G_GRAM[xs][ys]=cl_data.byte[1];
B_GRAM[xs][ys]=cl_data.byte[0];
} else if(dx==0){
if(ystep>0) for(j=ys; j<=ye; j++){
R_GRAM[xs][j]=cl_data.byte[2];
G_GRAM[xs][j]=cl_data.byte[1];
B_GRAM[xs][j]=cl_data.byte[0];
}
if(ystep<0) for(j=ye; j<=ys; j++){
R_GRAM[xs][j]=cl_data.byte[2];
G_GRAM[xs][j]=cl_data.byte[1];
B_GRAM[xs][j]=cl_data.byte[0];
}
} else if(dy==0){
if(xstep>0) for(j=xs; j<=xe; j++){
R_GRAM[j][ys]=cl_data.byte[2];
G_GRAM[j][ys]=cl_data.byte[1];
B_GRAM[j][ys]=cl_data.byte[0];
}
if(xstep<0) for(j=xe; j<=xs; j++){
R_GRAM[j][ys]=cl_data.byte[2];
G_GRAM[j][ys]=cl_data.byte[1];
B_GRAM[j][ys]=cl_data.byte[0];
}
} else {
int xx=xs, yy=ys;
if(dx>dy){
int t = - (dx >> 1);
while (1)
{
R_GRAM[xx][yy]=cl_data.byte[2];
G_GRAM[xx][yy]=cl_data.byte[1];
B_GRAM[xx][yy]=cl_data.byte[0];
if (xx == xe) break;
xx += xstep;
t += dy;
if (t >= 0){ yy += ystep; t-= dx;}
}
} else {
int t = - (dy >> 1);
while (1)
{
R_GRAM[xx][yy]=cl_data.byte[2];
G_GRAM[xx][yy]=cl_data.byte[1];
B_GRAM[xx][yy]=cl_data.byte[0];
if (yy == ye) break;
yy += ystep;
t += dx;
if (t >= 0){ xx += xstep; t-= dy;}
}
}
}
}
//--------------------------------------------------------------------------
void box(int x_min, int y_min, int x_max, int y_max, unsigned long color)
{
int k,j;
if(x_min<0) x_min=0;
if(y_min<0) y_min=0;
if(x_max>=Nx) x_max=Nx-1;
if(y_max>=Ny) y_max=Ny-1;
line(x_min, y_min, x_max, y_min, color);
line(x_min, y_max, x_max, y_max, color);
line(x_min, y_min, x_min, y_max, color);
line(x_max, y_min, x_max, y_max, color);
}
//----------------------------------------------------------------------------
// Draw String
//----------------------------------------------------------------------------
//------font 5x7----------------------------------------
void disp_str8( char *s, int x, int y, unsigned long color)
{
unsigned char c;
int k,N;
N=x;
for(k=0; k<128; k++)
{
c=*(s+k);
if(c==0) break;
N=disp_chr8(c, N, y, color);
N+=1;
}
}
//------font12--------------------------------------------
void disp_str12( char *s, int x, int y, unsigned long color)
{
unsigned char c;
int k,N;
N=x;
for(k=0; k<128; k++)
{
c=*(s+k);
if(c==0) break;
N=disp_chr12(c,N,y,color);
N+=1;
}
}
//------font16--------------------------------------------
void disp_str16( char *s, int x, int y, unsigned long color)
{
unsigned char c;
int k,N;
N=x;
for(k=0; k<128; k++)
{
c=*(s+k);
if(c==0) break;
N=disp_chr16(c,N,y,color);
N+=1;
}
}
//------font20--------------------------------------------
void disp_str20( char *s, int x, int y, unsigned long color)
{
unsigned char c;
int k,N;
N=x;
for(k=0; k<128; k++)
{
c=*(s+k);
if(c==0) break;
N=disp_chr20(c,N,y,color);
N+=1;
}
}
//-----------------------------------------------------------------------------
// Draw a character
//-----------------------------------------------------------------------------
//------font 5x7 -------------------------------------
int disp_chr8(char c, int x, int y, unsigned long color)
{
union {
unsigned long lw[1];
unsigned char byte[4];
} cl_data;
cl_data.lw[0]=color;
int k, j;
unsigned char f8;
if(c=='\\') c=' ';
for(k=0; k<5; k++){
f8=(unsigned char)bitrev8(font[c-0x20][k]);
if(x>=0){
for(j=0; j<8; j++){
if( (f8&0x01)==0x01 ){
R_GRAM[x][y+j]=cl_data.byte[2];
G_GRAM[x][y+j]=cl_data.byte[1];
B_GRAM[x][y+j]=cl_data.byte[0];
}
f8>>=1;
}
}
x++;
}
return(x);
}
//--------- bit reverse(8bit)-----------------
unsigned char bitrev8(unsigned char x)
{
x = ((x & 0xaa) >> 1) | ((x & 0x55) << 1);
x = ((x & 0xcc) >> 2) | ((x & 0x33) << 2);
x = (x >> 4) | (x << 4);
return(x);
}
//------font12-----------------------------------------
int disp_chr12(char c, int x, int y, unsigned long color)
{
union {
unsigned long lw[1];
unsigned char byte[4];
} cl_data;
cl_data.lw[0]=color;
int k, j, yj;
unsigned short int f12;
if(c=='\\') c=' ';
for(k=0; k<24; k++){
f12=(unsigned short int)font12[c-0x20][k];
if(f12==0x0fff) break;
if(x>=0){
for(j=0; j<12; j++){
yj=y+j;
if( (f12&0x0001)==0x0001){
if( x>=0 && x<Nx && yj>=0 && yj<Ny ){
R_GRAM[x][yj]=cl_data.byte[2];
G_GRAM[x][yj]=cl_data.byte[1];
B_GRAM[x][yj]=cl_data.byte[0];
}
}
f12>>=1;
}
}
x++;
}
return(x+1);
}
//------font16-----------------------------------------
int disp_chr16(char c, int x, int y, unsigned long color)
{
union {
unsigned long lw[1];
unsigned char byte[4];
} cl_data;
cl_data.lw[0]=color;
int k, j, yj;
unsigned short int f16;
if(c=='\\') c=' ';
for(k=0; k<24; k++){
f16=(unsigned short int)font16[c-0x20][k];
if(f16==0xffff) break;
if(x>=0){
for(j=0; j<16; j++){
yj=y+j;
if( (f16&0x0001)==0x0001){
if( x>=0 && x<Nx && yj>=0 && yj<Ny ){
R_GRAM[x][yj]=cl_data.byte[2];
G_GRAM[x][yj]=cl_data.byte[1];
B_GRAM[x][yj]=cl_data.byte[0];
}
}
f16>>=1;
}
}
x++;
}
return(x+1);
}
//------font20-----------------------------------------
int disp_chr20(char c, int x, int y, unsigned long color)
{
union {
unsigned long lw[1];
unsigned char byte[4];
} cl_data;
cl_data.lw[0]=color;
int k, j, yj;
unsigned long f20;
if(c=='\\') c=' ';
for(k=0; k<24; k++){
f20=(unsigned long)font20[c-0x20][k];
if(f20==0xfffff) break;
if(x>=0){
for(j=0; j<20; j++){
yj=y+j;
if( (f20&0x00001)==0x00001){
if( x>=0 && x<Nx && yj>=0 && yj<Ny ){
R_GRAM[x][yj]=cl_data.byte[2];
G_GRAM[x][yj]=cl_data.byte[1];
B_GRAM[x][yj]=cl_data.byte[0];
}
}
f20>>=1;
}
}
x++;
}
return(x+1);
}

Wyświetl plik

@ -0,0 +1,29 @@
/*
* File: graph.h
* Author: JF3HZB / T.UEBO
*
* Created on 2017/12/08, 00:21
*/
#ifndef _graph_
#define _graph_
void GRAM_clr(void);
void line(int,int,int,int, unsigned long);
void boxfill(int, int, int, int, unsigned long);
void box(int, int, int, int, unsigned long);
void disp_str8(char*, int, int, unsigned long);
void disp_str12(char*, int, int, unsigned long);
void disp_str16(char*, int, int, unsigned long);
void disp_str20(char*, int, int, unsigned long);
int disp_chr8(char, int, int, unsigned long);
unsigned char bitrev8(unsigned char );
int disp_chr12(char, int, int, unsigned long);
int disp_chr16(char, int, int, unsigned long);
int disp_chr20(char, int, int, unsigned long);
#endif

Wyświetl plik

@ -0,0 +1,279 @@
/*
* File: si5351.cpp
* Author: JF3HZB / T.UEBO
*
* Created on 2019/02/11, 23:07
*/
#include <arduino.h>
#define SDA 21
#define SCL 22
#define fxtal (25000000)
volatile uint32_t oMf=0;
volatile uint32_t oMc=0;
void wr_I2C(unsigned char d){
int k;
for(k=0;k<8;k++){
if(d & 0x80) digitalWrite(SDA, HIGH); else digitalWrite(SDA, LOW);
delayMicroseconds(1);
digitalWrite(SCL, HIGH);
delayMicroseconds(1);
digitalWrite(SCL, LOW);
delayMicroseconds(1);
digitalWrite(SDA, LOW);
d <<= 1;
}
digitalWrite(SCL, HIGH);
delayMicroseconds(1);
digitalWrite(SCL, LOW);
}
void cmd_si5351(unsigned char reg_No, unsigned char d){
digitalWrite(SDA, LOW); // start condition
delayMicroseconds(1);
digitalWrite(SCL, LOW); //
delayMicroseconds(1);
wr_I2C(0xC0);
wr_I2C(reg_No);
wr_I2C(d);
delayMicroseconds(1);
digitalWrite(SCL, HIGH); // stop condition
delayMicroseconds(1);
digitalWrite(SDA, HIGH); //
delayMicroseconds(10);
}
void set_car_freq(unsigned long freq, unsigned char EN, unsigned char RST){
// freq [Hz]
//
// fvco= fxtal*(a+b/c) ( a:15 -- 90, b:0 -- 1048575, c:1 -- 1048575 )
// freq= fvco /(a+b/c) ( a:4, 6--1800, b:0 -- 1048575, c:1 -- 1048575 )
//
// P1= 128*a + floor(128*b/c) - 512
// P2= 128*b - c*floor(128*b/c)
// P3= c
//
int k;
uint32_t M;
uint32_t R;
if(EN==1){
cmd_si5351(16,0x4F);
cmd_si5351(17,0x4F);
if(freq<1500) freq=1500; else if(freq>280000000) freq=280000000;
if( freq> 150000000){M=4; R=0;}
else if(freq>=63000000){M=6; R=0;}
else if(freq>=27500000){M=14; R=0;}
else if(freq>=13000000){M=30; R=0;}
else if(freq>= 6500000){M=62; R=0;}
else if(freq>= 3000000){M=126; R=0;}
else if(freq>= 1500000){M=280; R=0;}
else if(freq>= 700000){M=600; R=0;}
else if(freq>= 330000){M=1280; R=0;}
else if(freq>= 150000){M=1300; R=1;}
else if(freq>= 67000){M=1500; R=2;}
else if(freq>= 30300){M=1600; R=3;}
else if(freq>= 14000){M=1800; R=4;}
else if(freq>= 7000){M=1800; R=5;}
else if(freq>= 3500){M=1800; R=6;}
else{M=1800; R=7;}
freq*=M;
freq<<=R;
unsigned long c=0xFFFFF;
unsigned long a=freq/fxtal;
unsigned long b=(long)((float)(freq-a*fxtal)*(float)c/(float)fxtal);
unsigned long dd=(128*b)/c;
unsigned long P1=128*a+dd-512;
unsigned long P2=128*b-c*dd;
unsigned long P3=c;
//Set fvco of PLL_A
cmd_si5351(26,(P3>>8)&0xFF); //MSNA_P3[15:8]
cmd_si5351(27,P3&0xFF); //MSNA_P3[7:0]
cmd_si5351(28,(P1>>16)&0x03); //MSNA_P1[17:16]
cmd_si5351(29,(P1>>8)&0xFF); //MSNA_P1[15:8]
cmd_si5351(30,P1&0xFF); //MSNA_P1[7:0]
cmd_si5351(31,(P3>>12)&0xF0|(P2>>16)&0x0F);//MSNA_P3[19:16], MSNA_P2[19:16]
cmd_si5351(32,(P2>>8)&0xFF); //MSNA_P2[15:8]
cmd_si5351(33,P2&0xFF); //MSNA_P2[7:0]
// Set MS0, MS1
// a=M, b=0, c=1 ---> P1=128*M-512, P2=0, P3=1
if(M==4){
P1=0;
cmd_si5351(42,0); //MS0_P3[15:8]
cmd_si5351(43,1); //MS0_P3[7:0]
cmd_si5351(44,0b00001100); //0,R0_DIV[2:0],MS0_DIVBY4[1:0],MS0_P1[17:16]
cmd_si5351(45,0); //MS0_P1[15:8]
cmd_si5351(46,0); //MS0_P1[7:0]
cmd_si5351(47,0); //MS0_P3[19:16], MS0_P2[19:16]
cmd_si5351(48,0); //MS0_P2[15:8]
cmd_si5351(49,0); //MS0_P2[7:0]
cmd_si5351(50,0); //MS1_P3[15:8]
cmd_si5351(51,1); //MS1_P3[7:0]
cmd_si5351(52,0b00001100); //0,R1_DIV[2:0],MS1_DIVBY4[1:0],MS1_P1[17:16]
cmd_si5351(53,0); //MS1_P1[15:8]
cmd_si5351(54,0); //MS1_P1[7:0]
cmd_si5351(55,0); //MS1_P3[19:16], MS0_P2[19:16]
cmd_si5351(56,0); //MS1_P2[15:8]
cmd_si5351(57,0); //MS1_P2[7:0]
}else{
P1=128*M-512;
cmd_si5351(42,0); //MS0_P3[15:8]
cmd_si5351(43,1); //MS0_P3[7:0]
cmd_si5351(44,(R<<4)&0x70|(P1>>16)&0x03);//0,R0_DIV[2:0],MS0_DIVBY4[1:0],MS0_P1[17:16]
cmd_si5351(45,(P1>>8)&0xFF); //MS0_P1[15:8]
cmd_si5351(46,P1&0xFF); //MS0_P1[7:0]
cmd_si5351(47,0); //MS0_P3[19:16], MS0_P2[19:16]
cmd_si5351(48,0); //MS0_P2[15:8]
cmd_si5351(49,0); //MS0_P2[7:0]
cmd_si5351(50,0); //MS1_P3[15:8]
cmd_si5351(51,1); //MS1_P3[7:0]
cmd_si5351(52,(R<<4)&0x70|(P1>>16)&0x03);//0,R1_DIV[2:0],MS1_DIVBY4[1:0],MS1_P1[17:16]
cmd_si5351(53,(P1>>8)&0xFF); //MS1_P1[15:8]
cmd_si5351(54,P1&0xFF); //MS1_P1[7:0]
cmd_si5351(55,0); //MS1_P3[19:16], MS0_P2[19:16]
cmd_si5351(56,0); //MS1_P2[15:8]
cmd_si5351(57,0); //MS1_P2[7:0]
}
cmd_si5351(165,0);
cmd_si5351(166,M);
if( (oMc!=M)||(RST==1) ){
cmd_si5351(177,0x20); // Reset PLLA
}
oMc=M;
}else{
cmd_si5351(16,0x80);
cmd_si5351(17,0x80);
}
}
void set_freq(unsigned long freq){
// freq [Hz]
//
// fvco= fxtal*(a+b/c) ( a:15 -- 90, b:0 -- 1048575, c:1 -- 1048575 )
// freq= fvco /(a+b/c) ( a:4, 6--1800, b:0 -- 1048575, c:1 -- 1048575 )
//
// P1= 128*a + floor(128*b/c) - 512
// P2= 128*b - c*floor(128*b/c)
// P3= c
//
int k;
uint32_t M;
uint32_t R;
if(freq<1500) freq=1500; else if(freq>280000000) freq=280000000;
if( freq> 150000000){M=4; R=0;}
else if(freq>=63000000){M=6; R=0;}
else if(freq>=27500000){M=14; R=0;}
else if(freq>=13000000){M=30; R=0;}
else if(freq>= 6500000){M=62; R=0;}
else if(freq>= 3000000){M=126; R=0;}
else if(freq>= 1500000){M=280; R=0;}
else if(freq>= 700000){M=600; R=0;}
else if(freq>= 330000){M=1280; R=0;}
else if(freq>= 150000){M=1300; R=1;}
else if(freq>= 67000){M=1500; R=2;}
else if(freq>= 30300){M=1600; R=3;}
else if(freq>= 14000){M=1800; R=4;}
else if(freq>= 7000){M=1800; R=5;}
else if(freq>= 3500){M=1800; R=6;}
else{M=1800; R=7;}
freq*=M;
freq<<=R;
unsigned long c=0xFFFFF;
unsigned long a=freq/fxtal;
unsigned long b=(long)((float)(freq-a*fxtal)*(float)c/(float)fxtal);
unsigned long dd=(128*b)/c;
unsigned long P1=128*a+dd-512;
unsigned long P2=128*b-c*dd;
unsigned long P3=c;
//Set fvco of PLL_B
cmd_si5351(34,(P3>>8)&0xFF); //MSNB_P3[15:8]
cmd_si5351(35,P3&0xFF); //MSNB_P3[7:0]
cmd_si5351(36,(P1>>16)&0x03); //MSNB_P1[17:16]
cmd_si5351(37,(P1>>8)&0xFF); //MSNB_P1[15:8]
cmd_si5351(38,P1&0xFF); //MSNB_P1[7:0]
cmd_si5351(39,(P3>>12)&0xF0|(P2>>16)&0x0F);//MSNB_P3[19:16], MSNB_P2[19:16]
cmd_si5351(40,(P2>>8)&0xFF); //MSNB_P2[15:8]
cmd_si5351(41,P2&0xFF); //MSNB_P2[7:0]
// Set MS2
// a=M, b=0, c=1 ---> P1=128*M-512, P2=0, P3=1
if(M==4){
P1=0;
cmd_si5351(58,0); //MS2_P3[15:8]
cmd_si5351(59,1); //MS2_P3[7:0]
cmd_si5351(60,0b00001100); //0,R0_DIV[2:0],MS2_DIVBY4[1:0],MS2_P1[17:16]
cmd_si5351(61,0); //MS2_P1[15:8]
cmd_si5351(62,0); //MS2_P1[7:0]
cmd_si5351(63,0); //MS2_P3[19:16], MS2_P2[19:16]
cmd_si5351(64,0); //MS2_P2[15:8]
cmd_si5351(65,0); //MS2_P2[7:0]
}else{
P1=128*M-512;
cmd_si5351(58,0); //MS2_P3[15:8]
cmd_si5351(59,1); //MS2_P3[7:0]
cmd_si5351(60,(R<<4)&0x70|(P1>>16)&0x03);//0,R0_DIV[2:0],MS2_DIVBY4[1:0],MS2_P1[17:16]
cmd_si5351(61,(P1>>8)&0xFF); //MS2_P1[15:8]
cmd_si5351(62,P1&0xFF); //MS2_P1[7:0]
cmd_si5351(63,0); //MS2_P3[19:16], MS2_P2[19:16]
cmd_si5351(64,0); //MS2_P2[15:8]
cmd_si5351(65,0); //MS2_P2[7:0]
}
if(oMf!=M){
cmd_si5351(177,0x80); // Reset PLLB
}
oMf=M;
}
void si5351_init(void){
pinMode(SDA, OUTPUT);
pinMode(SCL, OUTPUT);
digitalWrite(SDA, HIGH);
digitalWrite(SCL, HIGH);
delay(10);
cmd_si5351(183,0b10010010); // CL=8pF
cmd_si5351(16,0x80); // Disable CLK0
cmd_si5351(17,0x80); // Disable CLK1
cmd_si5351(18,0x80); // Disable CLK2
cmd_si5351(177,0xA0); // Reset PLL_A and B
cmd_si5351(16,0x80); // Disable CLK0 (MS0=Integer Mode, Source=PLL_A)
cmd_si5351(17,0x80); // Disable CLK1 (MS1=Integer Mode, Source=PLL_A)
cmd_si5351(18,0x6F); // Enable CLK2 (MS2=Integer Mode, Source=PLL_B)
}

Wyświetl plik

@ -0,0 +1,16 @@
/*
* File: si5351.h
* Author: JF3HZB / T.UEBO
*
* Created on 2019/02/11, 23:07
*/
#ifndef __si5351H___
#define __si5351H___
void si5351_init(void);
void set_freq(unsigned long freq);
void set_car_freq(unsigned long freq, unsigned char EN, unsigned char RST);
#endif

13
readme.txt 100644
Wyświetl plik

@ -0,0 +1,13 @@
VFOsys : fixed step tuning
VFOsys_astep : with adaptive step control
JF3HZB T. Uebo
Tj Lab
https://tj-lab.org
https://tj-lab.org/2019/02/17/vfo5/
https://tj-lab.org/2019/02/27/vfo6/