#include <U8g2lib.h>
#include <Wire.h>
#include <math.h>
const u8 sanlian[] U8X8_PROGMEM =
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x3E,0x00,0x00,0x00,0x00,0xE0,
0x07,0x00,0x00,0x00,0x00,0xE0,0x00,0x00,
0x00,0x00,0x7E,0x00,0x00,0x00,0x00,0xFC,
0x7F,0x00,0x00,0x00,0x00,0xF0,0x01,0x00,
0x00,0x00,0x7E,0x00,0x00,0x00,0x00,0xFF,
0xFF,0x01,0x00,0x00,0x00,0xF8,0x01,0x00,
0x00,0x00,0x7F,0x00,0x00,0x00,0xC0,0xFF,
0xFF,0x03,0x00,0x00,0x00,0xF8,0x03,0x00,
0x00,0x00,0x7F,0x00,0x00,0x00,0xE0,0xFF,
0xFF,0x07,0x00,0x00,0x00,0xFC,0x03,0x00,
0x00,0x00,0x7F,0x00,0x00,0x00,0xF0,0xFF,
0xFF,0x1F,0x00,0x00,0x00,0xFC,0x03,0x00,
0x00,0x80,0x7F,0x00,0x00,0x00,0xF8,0x01,
0x00,0x1F,0x00,0x00,0x00,0xFC,0x07,0x00,
0x00,0x80,0x7F,0x00,0x00,0x00,0xFC,0x00,
0x00,0x3F,0x00,0x00,0x00,0xFE,0x0F,0x00,
0x00,0xC0,0x7F,0x00,0x00,0x00,0xFC,0x00,
0x00,0x7F,0x00,0x00,0x00,0xFF,0x1F,0x00,
0x00,0xE0,0x7F,0x00,0x00,0x00,0xFE,0x7F,
0xFC,0x7F,0x00,0x00,0xC0,0xFF,0x3F,0x00,
0x00,0xF8,0x7F,0x00,0x00,0x00,0xFE,0x7F,
0xFC,0xFF,0x00,0x00,0xFE,0xFF,0xFF,0x0F,
0xF0,0xF8,0xFF,0xFF,0x01,0x00,0xFE,0x1F,
0xF0,0xFF,0x00,0xC0,0xFF,0xFF,0xFF,0x7F,
0xFC,0xF8,0xFF,0xFF,0x07,0x00,0xFF,0x07,
0xC0,0xFF,0x00,0xE0,0xFF,0xFF,0xFF,0x7F,
0xFC,0xF8,0xFF,0xFF,0x07,0x00,0xFF,0x01,
0x80,0xFF,0x01,0xC0,0xFF,0xFF,0xFF,0x7F,
0xFE,0xF8,0xFF,0xFF,0x07,0x00,0xFF,0x41,
0x00,0xFF,0x01,0xC0,0xFF,0xFF,0xFF,0x3F,
0xFE,0xF8,0xFF,0xFF,0x07,0x00,0xFF,0x70,
0x0C,0xFE,0x01,0x80,0xFF,0xFF,0xFF,0x1F,
0xFE,0xF8,0xFF,0xFF,0x07,0x00,0x7F,0x78,
0x3C,0xFE,0x01,0x00,0xFF,0xFF,0xFF,0x0F,
0xFE,0xF8,0xFF,0xFF,0x07,0x00,0x7F,0x7C,
0x3C,0xFC,0x01,0x00,0xFE,0xFF,0xFF,0x07,
0xFE,0xF8,0xFF,0xFF,0x07,0x00,0x7F,0x7C,
0x3C,0xFC,0x01,0x00,0xFC,0xFF,0xFF,0x03,
0xFE,0xF8,0xFF,0xFF,0x03,0x00,0x7F,0x7C,
0x7C,0xFC,0x01,0x00,0xF8,0xFF,0xFF,0x03,
0xFE,0xF8,0xFF,0xFF,0x03,0x00,0x7F,0x7C,
0x7C,0xFC,0x01,0x00,0xF0,0xFF,0xFF,0x01,
0xFE,0xF8,0xFF,0xFF,0x03,0x00,0x7F,0x7C,
0x7C,0xFC,0x00,0x00,0xF0,0xFF,0xFF,0x01,
0xFE,0xF8,0xFF,0xFF,0x03,0x00,0x7E,0x7C,
0x7C,0xFC,0x00,0x00,0xF0,0xFF,0xFF,0x00,
0xFE,0xF8,0xFF,0xFF,0x01,0x00,0xFE,0x7F,
0xFC,0xFF,0x00,0x00,0xF0,0xFF,0xFF,0x00,
0xFE,0xF8,0xFF,0xFF,0x01,0x00,0xFE,0x7F,
0xFC,0x7F,0x00,0x00,0xF0,0xFF,0xFF,0x00,
0xFE,0xF8,0xFF,0xFF,0x01,0x00,0xFC,0x7F,
0xFC,0x7F,0x00,0x00,0xF0,0xFF,0xFF,0x00,
0xFE,0xF8,0xFF,0xFF,0x01,0x00,0xFC,0x7F,
0xFC,0x3F,0x00,0x00,0xF0,0xFF,0xFF,0x00,
0xFE,0xF8,0xFF,0xFF,0x00,0x00,0xF8,0x7F,
0xFC,0x1F,0x00,0x00,0xF0,0xFF,0xFF,0x01,
0xFE,0xF8,0xFF,0xFF,0x00,0x00,0xF0,0xFF,
0xFF,0x1F,0x00,0x00,0xF0,0xFF,0xFF,0x01,
0xFC,0xF8,0xFF,0x7F,0x00,0x00,0xE0,0xFF,
0xFF,0x0F,0x00,0x00,0xF8,0x0F,0xFF,0x01,
0xFC,0xF8,0xFF,0x3F,0x00,0x00,0xC0,0xFF,
0xFF,0x03,0x00,0x00,0xF8,0x03,0xFC,0x01,
0xF8,0xF8,0xFF,0x1F,0x00,0x00,0x00,0xFF,
0xFF,0x01,0x00,0x00,0xF8,0x01,0xF0,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,
0x7F,0x00,0x00,0x00,0x70,0x00,0xC0,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,
0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"C:\Users\ROG\Desktop\无标题.bmp",0*/
/* (128 X 36 )*/
};
typedef struct
{
byte val;
byte last_val;
}KEY_T;
typedef struct
{
byte id;
byte press;
byte update_flag;
byte res;
}KEY_MSG;
typedef struct
{
char* str;
byte len;
}SETTING_LIST;
SETTING_LIST list[] =
{
{"list",4},
{"ab",2},
{"abc",3},
{"abcd",4},
};
U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);//该驱动是1.3寸的OLED屏幕。---------U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);这是比较常用的0.9寸的OLED显示器的驱动
short x,x_trg; //x当前位置数值,x_trg 目标坐标值
short y = 20,y_trg = 20;
short frame_len,frame_len_trg;//框框的宽度
short frame_y,frame_y_trg;//框框的y
char ui_select = 0;
int state;
KEY_T key[2] = {0};
KEY_MSG key_msg = {0};
byte get_io_val(byte ch)
{
if(ch == 0)
{
return digitalRead(2);
}
else
{
return digitalRead(3);
}
}
void key_init(void)
{
for(int i = 0;i<2;i++)
{
key[i].val = key[i].last_val = get_io_val(i);
}
}
void key_scan(void)
{
for(int i = 0;i<2;i++)
{
key[i].val = get_io_val(i);
if(key[i].val != key[i].last_val)
{
key[i].last_val = key[i].val;
if(key[i].val == 0)
{
key_msg.id = i;
key_msg.press = 1;
key_msg.update_flag = 1;
}
}
}
}
int ui_run(short *a,short *a_trg,u8 step,u8 slow_cnt)
{
u8 temp;
temp = abs(*a_trg-*a) > slow_cnt ? step : 1;
if(*a < *a_trg)
{
*a += temp;
}
else if( *a > *a_trg)
{
*a -= temp;
}
else
{
return 0;
}
return 1;
}
void setup(void)
{
pinMode(2, INPUT_PULLUP);
pinMode(3, INPUT_PULLUP);
key_init();
Serial.begin(9600);
u8g2.begin();
u8g2.setFont(u8g2_font_t0_22_mf ); //设置字体
}
short disapper_temp = 0;
short come_temp = 8;
u8 ui_disapper(void)
{
int len = 8 * u8g2.getBufferTileHeight() * u8g2.getBufferTileWidth();
u8 *p = u8g2.getBufferPtr();
u8 return_flag = 0;
//1 byte = 8 bit
// 1111 1111
// 1111 1111 &
// 0000 0000
// rand()%0xff = 0 ~ 0xff
for( int i = 0;i< len ;i++)
{
p[i] = p[i] & (rand()%0xff) >> disapper_temp;
}
disapper_temp +=2;
if(disapper_temp > 8)
{
return_flag = 1;
disapper_temp = 0;
}
return return_flag ? 0 : 1;
}
u8 ui_come(void)
{
int len = 8 * u8g2.getBufferTileHeight() * u8g2.getBufferTileWidth();
u8 *p = u8g2.getBufferPtr();
u8 return_flag = 0;
for( int i = 0;i< len ;i++)
{
p[i] = p[i] & (rand()%0xff) >> come_temp;
}
come_temp -=2;
if(come_temp < 0)
{
return_flag = 1;
come_temp = 8;
}
return return_flag ? 0 : 1;
}
u8 flag = 0;
u8 stop_flag = 0;
void loop(void)
{
u8g2.clearBuffer(); // 清除内部缓冲区
u8g2.drawXBMP(0,20,128,36,sanlian); // 第一段输出位置
if(flag)
{
if(ui_disapper() == 0)
{
flag = 0;
}
}
else
{
if(ui_come() == 0)
{
flag = 1;
stop_flag = 1;
}
}
u8g2.sendBuffer(); // transfer internal memory to the displa
if(stop_flag == 1)
{
stop_flag = 0;
delay(1000);
}
}