第13篇:ESP32 idf wifi联网使用SNTP同步网络时间LCD ST7920液晶屏显示

第1篇:Arduino与ESP32开发板的安装方法

第2篇:ESP32 helloword第一个程序示范点亮板载LED

第3篇:vscode搭建esp32 arduino开发环境

第4篇:vscode+platformio搭建esp32 arduino开发环境

​​​​​​第5篇:doit_esp32_devkit_v1使用pmw呼吸灯实验

第6篇:ESP32连接无源喇叭播放音乐《涛声依旧》

第7篇:ESP32连接按钮点亮LED无源喇叭播放声音

​​​​​​第8篇:ESP32连接超声波HC-SR04测距点亮LED无源喇叭播放声音

第9篇:ESP32超声波HC-SR04Arduino类库编写

第10篇:ESP32外部中断功能的使用

第11篇:ESP32vscode_platformio_idf框架helloworld点亮LED

第12篇:ESP32模拟SPI驱动12864LCD_ST7920显示屏

接线方法参考第12篇:

第12篇:ESP32模拟SPI驱动12864LCD_ST7920显示屏 

获取毫秒级时间 和普通系统函数相同

int get_sys_time_ms(void)
{
    struct timeval tv_now;
    gettimeofday(&tv_now, NULL);
    int64_t time_us = (int64_t)tv_now.tv_sec * 1000000L + (int64_t)tv_now.tv_usec;
    return (int)(time_us/1000);
}
2、延时毫秒级时间

void my_delay_ms(u32 time_ms)
{
    vTaskDelay(time_ms / portTICK_RATE_MS);
}
SNTP校时
SNTP 指 简单网络时间协议(Simple Network Time Protocol),一个合格的物联网设备,少不了一个准确的钟。通过SNTP,可以使ESP32设备通过网络校准本地时间。

最简单+基础的方式

sntp_setoperatingmode(SNTP_OPMODE_POLL);
sntp_setservername(0, "ntp.aliyun.com");
sntp_init();
但此时,你的ESP32要联网,否则肯定是获取不了

接下来,你可以通过sntp_get_sync_status()轮询检测同步是否完毕,官方示例提供了这样的代码。除此之外。我们也可以通过回调来完成。更新成功之后,就随时可以获取系统时间了:

首先设置时区方法(这只影响下文时间转换,不影响时间同步。如果你有自己的方法,则可以通过自己的方式设置):

设置时区---时区缩写:


当sntp成功同步时间后,会有一个异步的回调通知应用做出相应更改

sntp_set_time_sync_notification_cb(/* 需要的函数指针 /);

初始化实例:

static void esp_initialize_sntp(void)
{ESP_LOGI("esp32idf_title", "Initializing SNTP");sntp_setoperatingmode(SNTP_OPMODE_POLL);sntp_setservername(0, "ntp1.aliyun.com");sntp_setservername(1, "cn.ntp.org.cn");     // 设置访问服务器sntp_setservername(2, "pool.ntp.org");sntp_setservername(3, "210.72.145.44");     // 国家授时中心服务器 IP 地址sntp_init();
}

连接WIFI:

/*** @description: 用于连接wifi的函数* @return {*}* @note: 这里wifi连接选项设置了使用nvs,会把每次配置的参数存储在nvs中。因此请查看分区表中是否对nvs分区进行了设置*/
void wifi_init_sta(void)
{// 00 创建wifi事件组s_wifi_event_group = xEventGroupCreate();/******************** 01 Wi-Fi/LwIP 初始化阶段 ********************/// 01-1 创建LWIP核心任务ESP_ERROR_CHECK(esp_netif_init());// 01-2 创建系统事件任务,并初始化应用程序事件的回调函数ESP_ERROR_CHECK(esp_event_loop_create_default());// 01-3 创建有 TCP/IP 堆栈的默认网络接口实例绑定 stationesp_netif_create_default_wifi_sta();// 01-4 创建wifi驱动程序任务,并初始化wifi驱动程序wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();ESP_ERROR_CHECK(esp_wifi_init(&cfg));// 01-5 注册,用于处理wifi连接的过程中的事件esp_event_handler_instance_t instance_any_id; // 用于处理wifi连接时候的事件的句柄esp_event_handler_instance_t instance_got_ip; // 用于处理ip分配时候产生的事件的句柄// 该句柄对wifi连接所有事件都产生响应,连接到event_handler回调函数ESP_ERROR_CHECK(esp_event_handler_instance_register(WIFI_EVENT,ESP_EVENT_ANY_ID,&event_handler,NULL,&instance_any_id));// 该句柄仅仅处理IP_EVENT事件组中的从AP中获取ip地址事件,连接到event_handler回调函数ESP_ERROR_CHECK(esp_event_handler_instance_register(IP_EVENT,IP_EVENT_STA_GOT_IP,&event_handler,NULL,&instance_got_ip));/******************** 02 WIFI配置阶段 ********************/wifi_config_t wifi_config = {.sta = {.ssid = EXAMPLE_ESP_WIFI_SSID,.password = EXAMPLE_ESP_WIFI_PASS,/* Setting a password implies station will connect to all security modes including WEP/WPA.* However these modes are deprecated and not advisable to be used. Incase your Access point* doesn't support WPA2, these mode can be enabled by commenting below line */.threshold.authmode = WIFI_AUTH_WPA2_PSK, // 设置快速扫描模式下能接受的最弱的验证模式.sae_pwe_h2e = WPA3_SAE_PWE_BOTH,         // 设置SAE和PWE(wifi协议)的配置},};// 02-2 配置station工作模式ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));// 02-3 配置ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &wifi_config));/******************** 03 wifi启动阶段 ********************/// 03-1 启动wifi驱动程序ESP_ERROR_CHECK(esp_wifi_start()); // 会触发回调函数ESP_LOGI(TAG, "wifi_init_sta finished.");/* Waiting until either the connection is established (WIFI_CONNECTED_BIT) or connection failed for the maximum* number of re-tries (WIFI_FAIL_BIT). The bits are set by event_handler() (see above) *//******************** 输出wifi连接结果 ********************/EventBits_t bits = xEventGroupWaitBits(s_wifi_event_group,WIFI_CONNECTED_BIT | WIFI_FAIL_BIT,pdFALSE,pdFALSE,portMAX_DELAY);/* xEventGroupWaitBits() returns the bits before the call returned, hence we can test which event actually* happened. */if (bits & WIFI_CONNECTED_BIT){ESP_LOGI(TAG, "connected to ap SSID:%s password:%s",EXAMPLE_ESP_WIFI_SSID, EXAMPLE_ESP_WIFI_PASS);}else if (bits & WIFI_FAIL_BIT){ESP_LOGI(TAG, "Failed to connect to SSID:%s, password:%s",EXAMPLE_ESP_WIFI_SSID, EXAMPLE_ESP_WIFI_PASS);}else{ESP_LOGE(TAG, "UNEXPECTED EVENT");}/* The event will not be processed after unregister */// 05 事件注销ESP_ERROR_CHECK(esp_event_handler_instance_unregister(IP_EVENT, IP_EVENT_STA_GOT_IP, instance_got_ip));ESP_ERROR_CHECK(esp_event_handler_instance_unregister(WIFI_EVENT, ESP_EVENT_ANY_ID, instance_any_id));vEventGroupDelete(s_wifi_event_group);
}

main.c代码:

// 联网相关的宏
//#define EXAMPLE_ESP_WIFI_SSID      "xx"               // 账号
//#define EXAMPLE_ESP_WIFI_PASS      "@xx68"          // 密码
#define EXAMPLE_ESP_WIFI_SSID "xxx"    // WIFI名字
#define EXAMPLE_ESP_WIFI_PASS "xx" // WIFI密码#define EXAMPLE_ESP_MAXIMUM_RETRY 5 // wifi连接失败以后可以重新连接的次数
#define WIFI_CONNECTED_BIT BIT0     // wifi连接成功标志位
#define WIFI_FAIL_BIT BIT1          // wifi连接失败标志位
#define AR_SIZE(a) sizeof(a) / sizeof(a[0])unsigned char show1[] = {0xB0, 0xA2, 0xCE, 0xE4, 0xBF, 0xC6, 0xBC, 0xBC}; //阿武科技unsigned char show_we_chat1[] = "wechat:txianwu";
unsigned char show_nick1[] = "txwtech";
unsigned char show_wifi_connecting[]="show_wifi_connecting...";
unsigned char show_wifi_reconnect[]="wifi_reconnecting...";
static const unsigned char logo0[] = { //笑脸0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF,0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF,0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF,0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFE, 0x00,0x7F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xF0, 0x00,0x0F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00,0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00,0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00,0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00,0x00, 0x0F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00,0x00, 0x07, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00,0x00, 0x01, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00,0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00,0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00,0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00,0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x40, 0x00,0x00, 0x80, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x78, 0x03, 0xF8, 0x00,0x07, 0xF0, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x70, 0x07, 0xFE, 0x00,0x0F, 0xFC, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0xF0, 0x1F, 0xBF, 0x00,0x3F, 0x7E, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0xE0, 0x3E, 0x0F, 0x80,0x7C, 0x1F, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0xE0, 0x7C, 0x07, 0xC0,0xF8, 0x0F, 0x87, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x01, 0xE0, 0xF8, 0x01, 0xE1,0xF0, 0x03, 0xC3, 0x80, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x01, 0xC0, 0xF0, 0x01, 0xE1,0xE0, 0x03, 0xC3, 0x80, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x01, 0xC0, 0xE0, 0x00, 0xE1,0xC0, 0x01, 0xC3, 0x80, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x01, 0xC0, 0x00, 0x00, 0x00,0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00,0x00, 0x00, 0x01, 0xC0, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00,0x00, 0x00, 0x01, 0xC0, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00,0x00, 0x00, 0x01, 0xC0, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00,0x00, 0x00, 0x01, 0xC0, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00,0x00, 0x00, 0x01, 0xC0, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00,0x00, 0x00, 0x01, 0xC0, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00,0x00, 0x00, 0x01, 0xC0, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00,0x00, 0x00, 0x01, 0xC0, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00,0x00, 0x00, 0x01, 0xC0, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00,0x00, 0x00, 0x01, 0xC0, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x01, 0xC0, 0x00, 0x00, 0x00,0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x01, 0xC0, 0x00, 0x00, 0x00,0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x01, 0xC0, 0x00, 0x00, 0x00,0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x00,0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00,0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00,0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x0C, 0x00,0x0C, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x1E, 0x00,0x1E, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x1F, 0x00,0x3E, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x07, 0x80,0xF8, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x03, 0xE1,0xF0, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x01, 0xFF,0xE0, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0xFF,0x80, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x3F,0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00,0x00, 0x01, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00,0x00, 0x07, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00,0x00, 0x0F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00,0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00,0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x80, 0x00,0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xE0, 0x00,0x07, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFE, 0x00,0x3F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF,0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF,0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF,0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
const unsigned char ascii[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //0x00, 0x00, 0x70, 0xF8, 0xF8, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x0D, 0x00, 0x00, 0x00, //!0x00, 0x38, 0x38, 0x00, 0x00, 0x38, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //"0x00, 0x20, 0xF8, 0xF8, 0x20, 0xF8, 0xF8, 0x20, 0x00, 0x02, 0x0F, 0x0F, 0x02, 0x0F, 0x0F, 0x02, //#0x00, 0x30, 0x78, 0xCE, 0x8E, 0x18, 0x10, 0x00, 0x00, 0x04, 0x0C, 0x38, 0x39, 0x0F, 0x06, 0x00, //$0x18, 0x3C, 0x24, 0xBC, 0xD8, 0x60, 0x30, 0x00, 0x00, 0x06, 0x03, 0x0D, 0x1E, 0x12, 0x1E, 0x0C, //%0x00, 0xB0, 0xF8, 0x48, 0x78, 0x30, 0x00, 0x00, 0x00, 0x07, 0x0F, 0x08, 0x09, 0x07, 0x0F, 0x09, //&0x00, 0x00, 0x00, 0x38, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //'0x00, 0x00, 0xC0, 0xF0, 0x38, 0x08, 0x00, 0x00, 0x00, 0x00, 0x07, 0x1F, 0x38, 0x20, 0x00, 0x00, //(0x00, 0x00, 0x08, 0x38, 0xF0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x20, 0x38, 0x1F, 0x07, 0x00, 0x00, //)0x00, 0x80, 0xA0, 0xE0, 0xC0, 0xE0, 0xA0, 0x80, 0x00, 0x00, 0x02, 0x03, 0x01, 0x03, 0x02, 0x00, //*0x00, 0x80, 0x80, 0xE0, 0xE0, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, //+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2C, 0x3C, 0x1C, 0x00, 0x00, //,0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x0C, 0x00, 0x00, //.0x00, 0x00, 0x00, 0x80, 0xE0, 0x78, 0x18, 0x00, 0x00, 0x18, 0x1E, 0x07, 0x01, 0x00, 0x00, 0x00, ///0x00, 0x00, 0xF0, 0xF8, 0x08, 0x68, 0xF8, 0xF0, 0x00, 0x00, 0x07, 0x0F, 0x0B, 0x08, 0x0F, 0x07, // 00x00, 0x20, 0x20, 0x30, 0xF8, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, // 10x00, 0x30, 0x38, 0x08, 0x88, 0xF8, 0x70, 0x00, 0x00, 0x0C, 0x0E, 0x0B, 0x09, 0x08, 0x08, 0x00, // 20x00, 0x30, 0x38, 0x88, 0x88, 0xF8, 0x70, 0x00, 0x00, 0x06, 0x0E, 0x08, 0x08, 0x0F, 0x07, 0x00, // 30x00, 0x00, 0xF8, 0xF8, 0x00, 0xE0, 0xE0, 0x00, 0x00, 0x03, 0x03, 0x02, 0x02, 0x0F, 0x0F, 0x02, // 40x00, 0xF8, 0xF8, 0x88, 0x88, 0x88, 0x08, 0x00, 0x00, 0x08, 0x08, 0x08, 0x0C, 0x07, 0x03, 0x00, // 50x00, 0xC0, 0xE0, 0x78, 0x58, 0xC8, 0x80, 0x00, 0x00, 0x07, 0x0F, 0x08, 0x08, 0x0F, 0x07, 0x00, // 60x00, 0x08, 0x08, 0x88, 0xE8, 0x78, 0x18, 0x00, 0x00, 0x00, 0x0E, 0x0F, 0x01, 0x00, 0x00, 0x00, // 70x00, 0x70, 0xF8, 0xC8, 0x88, 0xF8, 0x70, 0x00, 0x00, 0x07, 0x0F, 0x08, 0x09, 0x0F, 0x07, 0x00, // 80x00, 0xF0, 0xF8, 0x08, 0x08, 0xF8, 0xF0, 0x00, 0x00, 0x00, 0x09, 0x0D, 0x0F, 0x03, 0x01, 0x00, // 90x00, 0x00, 0x00, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x0C, 0x00, 0x00, //:0x00, 0x00, 0x00, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2C, 0x3C, 0x1C, 0x00, 0x00, //;0x00, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x08, 0x00, 0x00, 0x00, 0x01, 0x03, 0x06, 0x0C, 0x08, 0x00, //<0x00, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, //=0x00, 0x08, 0x18, 0x30, 0x60, 0xC0, 0x80, 0x00, 0x00, 0x08, 0x0C, 0x06, 0x03, 0x01, 0x00, 0x00, //>0x00, 0x30, 0x38, 0x88, 0xC8, 0x78, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x0D, 0x00, 0x00, 0x00, //?0xF0, 0xF8, 0x08, 0x88, 0xC8, 0x48, 0xF8, 0xF0, 0x07, 0x0F, 0x08, 0x09, 0x0B, 0x0A, 0x0B, 0x0B, //@0x00, 0xE0, 0xF0, 0x18, 0x18, 0xF0, 0xE0, 0x00, 0x00, 0x0F, 0x0F, 0x01, 0x01, 0x0F, 0x0F, 0x00, // A0x00, 0xF8, 0xF8, 0x88, 0x88, 0xF8, 0x70, 0x00, 0x00, 0x0F, 0x0F, 0x08, 0x08, 0x0F, 0x07, 0x00, // B0x00, 0xF0, 0xF8, 0x08, 0x08, 0x38, 0x30, 0x00, 0x00, 0x07, 0x0F, 0x08, 0x08, 0x0E, 0x06, 0x00, // C0x00, 0xF8, 0xF8, 0x08, 0x18, 0xF0, 0xE0, 0x00, 0x00, 0x0F, 0x0F, 0x08, 0x0C, 0x07, 0x03, 0x00, // D0x00, 0xF8, 0xF8, 0x88, 0x88, 0x88, 0x08, 0x00, 0x00, 0x0F, 0x0F, 0x08, 0x08, 0x08, 0x08, 0x00, // E0x00, 0xF8, 0xF8, 0x88, 0x88, 0x88, 0x08, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, // F0x00, 0xF0, 0xF8, 0x08, 0x08, 0x38, 0x30, 0x00, 0x00, 0x07, 0x0F, 0x08, 0x09, 0x0F, 0x0F, 0x00, // G0x00, 0xF8, 0xF8, 0x80, 0x80, 0xF8, 0xF8, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, 0x0F, 0x0F, 0x00, // H0x00, 0x00, 0x08, 0xF8, 0xF8, 0x08, 0x00, 0x00, 0x00, 0x00, 0x08, 0x0F, 0x0F, 0x08, 0x00, 0x00, // I0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xF8, 0x00, 0x00, 0x06, 0x0E, 0x08, 0x08, 0x0F, 0x07, 0x00, // J0x00, 0xF8, 0xF8, 0x80, 0xE0, 0x78, 0x18, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x03, 0x0F, 0x0C, 0x00, // K0x00, 0xF8, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x08, 0x08, 0x08, 0x08, 0x00, // L0x00, 0xF8, 0xF8, 0x20, 0xC0, 0x20, 0xF8, 0xF8, 0x00, 0x0F, 0x0F, 0x00, 0x01, 0x00, 0x0F, 0x0F, // M0x00, 0xF8, 0xF8, 0x60, 0xC0, 0x80, 0xF8, 0xF8, 0x00, 0x0F, 0x0F, 0x00, 0x00, 0x01, 0x0F, 0x0F, // N0x00, 0xF0, 0xF8, 0x08, 0x08, 0xF8, 0xF0, 0x00, 0x00, 0x07, 0x0F, 0x08, 0x08, 0x0F, 0x07, 0x00, // O0x00, 0xF8, 0xF8, 0x88, 0x88, 0xF8, 0x70, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, // P0x00, 0xF0, 0xF8, 0x08, 0x08, 0xF8, 0xF0, 0x00, 0x00, 0x07, 0x0F, 0x08, 0x18, 0x3F, 0x27, 0x00, // Q0x00, 0xF8, 0xF8, 0x88, 0x88, 0xF8, 0x70, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x01, 0x0F, 0x0E, 0x00, // R0x00, 0x30, 0x78, 0xC8, 0x88, 0x18, 0x10, 0x00, 0x00, 0x04, 0x0C, 0x08, 0x09, 0x0F, 0x06, 0x00, // S0x00, 0x08, 0x08, 0xF8, 0xF8, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, 0x00, // T0x00, 0xF8, 0xF8, 0x00, 0x00, 0xF8, 0xF8, 0x00, 0x00, 0x07, 0x0F, 0x08, 0x08, 0x0F, 0x07, 0x00, // U0x00, 0xF8, 0xF8, 0x00, 0x00, 0xF8, 0xF8, 0x00, 0x00, 0x03, 0x07, 0x0C, 0x0C, 0x07, 0x03, 0x00, // V0x00, 0xF8, 0xF8, 0x00, 0xC0, 0x00, 0xF8, 0xF8, 0x00, 0x01, 0x0F, 0x0E, 0x01, 0x0E, 0x0F, 0x01, // W0x00, 0x18, 0x38, 0xE0, 0xC0, 0x38, 0x18, 0x00, 0x00, 0x0E, 0x0F, 0x00, 0x01, 0x0F, 0x0E, 0x00, // X0x00, 0x78, 0xF8, 0x80, 0x80, 0xF8, 0x78, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, 0x00, // Y0x00, 0x08, 0x08, 0x88, 0xC8, 0x78, 0x38, 0x00, 0x00, 0x0E, 0x0F, 0x09, 0x08, 0x08, 0x08, 0x00, // Z0x00, 0x00, 0xF8, 0xF8, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x40, 0x40, 0x00, 0x00, //[0x00, 0x18, 0x78, 0xE0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x1E, 0x18, 0x00, //0x00, 0x00, 0x08, 0x08, 0xF8, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x7F, 0x7F, 0x00, 0x00, //]0x00, 0x08, 0x0C, 0x06, 0x06, 0x0C, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //^0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, //_0x00, 0x00, 0x02, 0x06, 0x0E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //`0x00, 0x00, 0x20, 0x20, 0x20, 0xE0, 0xC0, 0x00, 0x00, 0x06, 0x0F, 0x09, 0x09, 0x0F, 0x0F, 0x00, // a0x00, 0xF8, 0xF8, 0x20, 0x20, 0xE0, 0xC0, 0x00, 0x00, 0x0F, 0x0F, 0x08, 0x08, 0x0F, 0x07, 0x00, // b0x00, 0xC0, 0xE0, 0x20, 0x20, 0x60, 0x40, 0x00, 0x00, 0x07, 0x0F, 0x08, 0x08, 0x0C, 0x04, 0x00, // c0x00, 0xC0, 0xE0, 0x20, 0x20, 0xF8, 0xF8, 0x00, 0x00, 0x07, 0x0F, 0x08, 0x08, 0x0F, 0x0F, 0x00, // d0x00, 0xC0, 0xE0, 0x20, 0x20, 0xE0, 0xC0, 0x00, 0x00, 0x07, 0x0F, 0x09, 0x09, 0x09, 0x01, 0x00, // e0x00, 0x80, 0xF0, 0xF8, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00, // f0x00, 0xC0, 0xE0, 0x20, 0x20, 0xE0, 0xE0, 0x00, 0x00, 0x47, 0x4F, 0x48, 0x48, 0x7F, 0x3F, 0x00, // g0x00, 0xF8, 0xF8, 0x20, 0x20, 0xE0, 0xC0, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, 0x0F, 0x0F, 0x00, // h0x00, 0x20, 0x20, 0xEC, 0xEC, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x0F, 0x0F, 0x08, 0x08, 0x00, // i0x00, 0x00, 0x20, 0x20, 0xEC, 0xEC, 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, 0x7F, 0x3F, 0x00, 0x00, // j0x00, 0xF8, 0xF8, 0x00, 0x80, 0xE0, 0x60, 0x00, 0x00, 0x0F, 0x0F, 0x01, 0x03, 0x0E, 0x0C, 0x00, // k0x00, 0x08, 0x08, 0xF8, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x0F, 0x0F, 0x08, 0x08, 0x00, // l0x00, 0xE0, 0xE0, 0x20, 0xE0, 0x20, 0xE0, 0xC0, 0x00, 0x0F, 0x0F, 0x00, 0x07, 0x00, 0x0F, 0x0F, // m0x00, 0xE0, 0xE0, 0x20, 0x20, 0xE0, 0xC0, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, 0x0F, 0x0F, 0x00, // n0x00, 0xC0, 0xE0, 0x20, 0x20, 0xE0, 0xC0, 0x00, 0x00, 0x07, 0x0F, 0x08, 0x08, 0x0F, 0x07, 0x00, // o0x00, 0xE0, 0xE0, 0x20, 0x20, 0xE0, 0xC0, 0x00, 0x00, 0x7F, 0x7F, 0x08, 0x08, 0x0F, 0x07, 0x00, // p0x00, 0xC0, 0xE0, 0x20, 0x20, 0xE0, 0xE0, 0x00, 0x00, 0x07, 0x0F, 0x08, 0x08, 0x7F, 0x7F, 0x00, // q0x00, 0xE0, 0xE0, 0x80, 0x40, 0x60, 0x60, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, // r0x00, 0xC0, 0xE0, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x08, 0x09, 0x09, 0x09, 0x0F, 0x06, 0x00, // s0x00, 0x20, 0xF8, 0xF8, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x07, 0x0F, 0x08, 0x08, 0x08, 0x00, // t0x00, 0xE0, 0xE0, 0x00, 0x00, 0xE0, 0xE0, 0x00, 0x00, 0x07, 0x0F, 0x08, 0x08, 0x0F, 0x0F, 0x00, // u0x00, 0xE0, 0xE0, 0x00, 0x00, 0xE0, 0xE0, 0x00, 0x00, 0x03, 0x07, 0x0C, 0x0C, 0x07, 0x03, 0x00, // v0x00, 0xE0, 0xE0, 0x00, 0xC0, 0x00, 0xE0, 0xE0, 0x00, 0x03, 0x0F, 0x0C, 0x03, 0x0C, 0x0F, 0x03, // w0x00, 0x60, 0xE0, 0x80, 0x80, 0xE0, 0x60, 0x00, 0x00, 0x0C, 0x0E, 0x03, 0x03, 0x0E, 0x0C, 0x00, // x0x00, 0xE0, 0xE0, 0x00, 0x00, 0xE0, 0xE0, 0x00, 0x40, 0x47, 0x4F, 0x68, 0x38, 0x1F, 0x07, 0x00, // y0x00, 0x20, 0x20, 0x20, 0xA0, 0xE0, 0x60, 0x00, 0x00, 0x0C, 0x0E, 0x0B, 0x09, 0x08, 0x08, 0x00, // z0x00, 0x00, 0x80, 0xF0, 0x78, 0x08, 0x00, 0x00, 0x00, 0x01, 0x03, 0x1E, 0x3C, 0x20, 0x00, 0x00, //{0x00, 0x00, 0x00, 0xF8, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x00, //|0x00, 0x00, 0x08, 0x78, 0xF0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x20, 0x3C, 0x1E, 0x03, 0x01, 0x00, //}0x30, 0x18, 0x08, 0x18, 0x30, 0x20, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00  //~
};// ok image
const unsigned char bmp1[] = {//--  调入了一幅图像:D:\我的文档\My Pictures\12864-555.bmp  -- //--  宽度 x 高度=128x64  --0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0xC0,0xC0,0xC0,0xC0,0xE0,0x60,0xE0,0xE0,0xE0,0xE0,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0xE0,0xE0,0xE0,0xE0,0xC0,0xC0,0xC0,0xC0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0x70,0x38,0x18,0x1C,0x0C,0x0E,0x07,0x03,0x03,0x01,0x81,0xE0,0x78,0x1C,0x0E,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x0E,0x1C,0x79,0xE1,0x83,0x03,0x07,0x0E,0x0C,0x1C,0x18,0x38,0x70,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0xC0,0xC0,0xC0,0xC0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xC0,0xC0,0xC0,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xF0,0x78,0x1E,0x07,0x03,0x81,0x80,0xC0,0xC0,0xC0,0xE0,0x60,0x60,0x60,0x70,0xF0,0xFE,0x3F,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x38,0x31,0x3F,0xFE,0xF0,0x60,0x60,0xE0,0xC0,0xC0,0xC0,0x80,0x81,0x03,0x07,0x1E,0x78,0xF0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFC,0xFF,0x7F,0x07,0x0F,0x1F,0x3D,0x79,0x71,0xF0,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0xC0,0xE0,0xF0,0x71,0x79,0x3D,0x1F,0x0F,0xFF,0xFE,0xFC,0x00,0x00,0x00,0x00,0x00,0x80,0xFE,0xFF,0xF9,0x1C,0x0E,0x07,0x03,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x03,0x07,0x0E,0x1C,0xF9,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x0F,0x0E,0x9E,0xFC,0xF8,0xF0,0xE0,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0xE0,0xF0,0xF8,0xF8,0xFC,0x9E,0x0F,0x07,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xDF,0x38,0x70,0xE0,0xC0,0xC0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x80,0x80,0xC0,0xC0,0xE0,0x70,0x38,0xDF,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xF0,0x78,0x3C,0x1E,0x0F,0x07,0x03,0x01,0x00,0x01,0x01,0x03,0x07,0x0F,0x1E,0x1E,0x0E,0x0F,0x07,0x03,0x01,0x01,0x00,0x01,0x01,0x03,0x07,0x0F,0x1E,0x3C,0x78,0xF0,0xE0,0xC0,0x80,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x0F,0x3C,0x70,0xE0,0xC1,0x81,0x03,0x03,0x03,0x07,0x06,0x06,0x06,0x0E,0x0F,0x7F,0xFC,0x98,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x0C,0x8C,0xFC,0x7F,0x0F,0x06,0x06,0x07,0x03,0x03,0x03,0x81,0xC1,0xE0,0x70,0x3C,0x0F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x1F,0x3F,0x7C,0xFC,0xFE,0xEF,0xE7,0xE3,0xE1,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE1,0xE3,0xE7,0xEF,0xFE,0x7C,0x3F,0x1F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x0E,0x0C,0x1C,0x18,0x38,0x70,0x60,0xE0,0xC0,0xC1,0x87,0x9E,0xB8,0xF0,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xB8,0xDE,0xC7,0xE1,0x60,0x70,0x38,0x18,0x1C,0x0C,0x0E,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x03,0x03,0x03,0x03,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x03,0x03,0x03,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};const unsigned char txw_tech[] = {/*--  文字:  阿  --*//*--  幼圆20;  此字体下对应的点阵为:宽x高=28x27   --*//*--  高度不是8的倍数,现调整为:宽度x高度=28x32  --*/0x00,0xF0,0xF8,0xF8,0x08,0x88,0xF8,0xF8,0x38,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0xF8,0xF8,0xF8,0x08,0x08,0x08,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x1F,0x7F,0xF9,0xE0,0x80,0xFE,0xFF,0xFF,0x01,0x01,0x01,0x01,0x01,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x08,0x08,0x08,0x0F,0x0F,0x07,0x0F,0x0F,0x0F,0x08,0x08,0x08,0x08,0x08,0x0F,0x0F,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x06,0x06,0x06,0x04,0x07,0x07,0x03,0x00,0x00,0x00,0x00,/*--  文字:  武  --*//*--  幼圆20;  此字体下对应的点阵为:宽x高=28x27   --*//*--  高度不是8的倍数,现调整为:宽度x高度=28x32  --*/0x00,0x00,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x00,0xFC,0xFC,0xF8,0x0C,0x1C,0x3C,0x78,0x70,0x40,0x00,0x00,0x00,0x01,0x01,0x01,0xF1,0xF1,0xF1,0x01,0x01,0x01,0xFF,0xFF,0xFF,0xC1,0xC1,0xC1,0xC1,0xC3,0xFF,0xFF,0xF1,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x80,0xFF,0xFF,0xFF,0xC0,0xC0,0xC0,0x40,0x60,0x60,0x27,0x3F,0xFF,0xF0,0xC0,0x00,0xFC,0xFC,0xFC,0x00,0x02,0x02,0x03,0x03,0x03,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x07,0x07,0x01,0x00,/*--  文字:  科  --*//*--  幼圆20;  此字体下对应的点阵为:宽x高=28x27   --*//*--  高度不是8的倍数,现调整为:宽度x高度=28x32  --*/0x00,0x08,0x08,0x08,0x08,0xF8,0xF8,0xF8,0x0C,0x0C,0x0C,0x04,0x00,0x08,0x18,0x38,0x70,0xE0,0xC0,0x80,0x00,0xFC,0xFC,0xFC,0x00,0x00,0x00,0x00,0x02,0x06,0x06,0x86,0xF6,0xFF,0xFF,0xFF,0x7E,0xF6,0xC6,0x86,0x0C,0x0C,0x1C,0x38,0x70,0xE0,0xC1,0x87,0x07,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x10,0x1C,0x1E,0x0F,0x03,0xFF,0xFF,0xFF,0x00,0x01,0x13,0x13,0x12,0x18,0x18,0x18,0x18,0x09,0x09,0x09,0x08,0xFF,0xFF,0xFF,0x0C,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x07,0x00,0x00,0x00,0x00,/*--  文字:  技  --*//*--  幼圆20;  此字体下对应的点阵为:宽x高=28x27   --*//*--  高度不是8的倍数,现调整为:宽度x高度=28x32  --*/0x00,0x00,0x00,0x00,0xFC,0xFC,0xFC,0x00,0x40,0x60,0x60,0x60,0x60,0x60,0x60,0xFC,0xFC,0xFC,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x00,0x00,0x01,0x01,0x01,0x01,0xFF,0xFF,0xFF,0xC1,0xC1,0x49,0x09,0x78,0xF8,0xE8,0x88,0x0F,0x0F,0x0F,0x08,0x08,0x88,0xE8,0xF8,0x78,0x10,0x00,0x00,0x00,0x04,0x06,0x06,0x07,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x00,0x80,0x81,0xC3,0xCF,0x7E,0x7C,0x78,0x7C,0xEE,0xC7,0x83,0x81,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x03,0x03,0x03,0x02,0x02,0x03,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x03,0x06,0x06,0x00,0x00,/*--  文字:  鸿  --*//*--  幼圆20;  此字体下对应的点阵为:宽x高=28x27   --*//*--  高度不是8的倍数,现调整为:宽度x高度=28x32  --*/0x00,0x08,0x18,0x38,0xF0,0xE0,0xD0,0x10,0x10,0xF0,0xF0,0x10,0x10,0xF0,0xE0,0xF0,0xB0,0xBC,0xBC,0x3C,0x30,0xF0,0xE0,0xE0,0x00,0x00,0x00,0x00,0x00,0x04,0x1C,0x3C,0x78,0x70,0xC0,0x80,0x00,0xFF,0xFF,0x00,0x00,0x7F,0xFF,0xFF,0x80,0x91,0x93,0x93,0x92,0x9F,0x9F,0x9F,0x80,0x00,0x00,0x00,0x00,0x00,0xC0,0xF0,0xFC,0x3F,0x8F,0x81,0xC0,0xFF,0x7F,0x38,0x1C,0x1C,0x14,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x03,0x03,0x01,0x00,0x03,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x01,0x00,0x00,/*--  文字:  蒙  --*//*--  幼圆20;  此字体下对应的点阵为:宽x高=28x27   --*//*--  高度不是8的倍数,现调整为:宽度x高度=28x32  --*/0x00,0x18,0x18,0x98,0x98,0x98,0x98,0xBC,0xBE,0xBE,0x98,0x98,0x98,0x98,0x98,0x98,0x98,0xBE,0xBE,0xBC,0x98,0x98,0x98,0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x0F,0x1F,0x3F,0x34,0xB6,0xB6,0xB6,0xF6,0xF6,0xF6,0xF6,0x36,0x36,0x36,0x36,0x36,0x36,0xB6,0xB4,0xBC,0x3F,0x0F,0x03,0x00,0x00,0x00,0x00,0x03,0x13,0x13,0x19,0x99,0x89,0x8D,0xCD,0xCE,0x66,0x77,0x3F,0xFF,0xFE,0xF6,0x0F,0x1F,0x3F,0x71,0x61,0xC0,0xC0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x01,0x01,0x01,0x01,0x02,0x06,0x06,0x06,0x06,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x00,/*--  文字:  之  --*//*--  幼圆20;  此字体下对应的点阵为:宽x高=28x27   --*//*--  高度不是8的倍数,现调整为:宽度x高度=28x32  --*/0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x86,0x9E,0xFC,0xF8,0xE0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x81,0xC1,0xC1,0xE1,0x79,0x3D,0x1F,0x0F,0x03,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0xC0,0x60,0x60,0xF0,0xF0,0xB8,0x18,0x1C,0x0C,0x06,0x07,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x03,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,/*--  文字:  家  --*//*--  幼圆20;  此字体下对应的点阵为:宽x高=28x27   --*//*--  高度不是8的倍数,现调整为:宽度x高度=28x32  --*/0x00,0xC0,0xF0,0xF0,0x30,0x10,0x10,0x10,0x10,0x10,0x10,0x14,0x1E,0x1E,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x30,0xF0,0xF0,0xE0,0x00,0x00,0x00,0x03,0x87,0xC7,0xC1,0x41,0x61,0x61,0x31,0x39,0x19,0xBD,0xFF,0xE7,0xC3,0xC1,0xE1,0xF1,0xF9,0x39,0x19,0x01,0x06,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x10,0x18,0x98,0x98,0x8C,0xCC,0xC6,0x66,0x73,0x33,0x39,0x9F,0xFF,0xFF,0x79,0x07,0x1F,0x3E,0x78,0xF0,0xE0,0xC0,0x80,0x80,0x00,0x00,0x00,0x02,0x03,0x03,0x01,0x01,0x03,0x06,0x06,0x06,0x04,0x06,0x06,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x00,};/
// Bitmap点阵数据表                                                    //
// 图片: E:\..H砑223.bmp,横向取模左高位,数据排列:从左到右从上到下   //
// 图片尺寸: 104 * 46                                                  //
/
static const unsigned char nPianWoFish[] = {/// Bitmap点阵数据表                                                    //// 图片: E:\..H砑328.bmp,横向取模左高位,数据排列:从左到右从上到下   //// 图片尺寸: 104 * 46                                                  ///0x00, 0x00, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFE, 0x00,0x00, 0x00, 0x00, 0x00, 0x7E, 0x03, 0x00, 0x00,0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFE, 0x00,0x00, 0x00, 0x00, 0x00, 0xFE, 0x1F, 0x00, 0x00,0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xC0, 0x00,0x00, 0x00, 0x00, 0x01, 0xFE, 0x7C, 0x00, 0x00,0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFC, 0x00, 0x00,0x00, 0x00, 0x00, 0x03, 0xFF, 0xF0, 0x00, 0x00,0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xE0, 0x00, 0x00,0x00, 0x00, 0x00, 0x07, 0xFF, 0xC0, 0x00, 0x00,0x00, 0x00, 0x7C, 0xFF, 0xFF, 0x80, 0x00, 0x00,0x00, 0x00, 0x00, 0x07, 0xFF, 0x00, 0x3F, 0xFF,0xFF, 0xFF, 0xF1, 0x1F, 0xFF, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x0F, 0xFE, 0x7F, 0xFF, 0xFF,0xF1, 0xEF, 0xC0, 0xFF, 0xFE, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0x0C, 0x67,0xBF, 0xFF, 0xE0, 0x3F, 0xFC, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0xEF, 0x79,0xFF, 0xBB, 0xE7, 0xFF, 0xF8, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x7F, 0xF0, 0x06, 0xF3, 0x9F,0xFB, 0xFF, 0xE3, 0xDF, 0xF8, 0x00, 0x00, 0x00,0x00, 0x00, 0x03, 0xFF, 0xE0, 0xE7, 0x3F, 0xFF,0xFF, 0xF7, 0xC0, 0x7F, 0xF0, 0x00, 0x00, 0x00,0x00, 0x00, 0x1F, 0xBF, 0x80, 0xF3, 0xBF, 0x7F,0xFF, 0xFF, 0xE0, 0x7F, 0xFE, 0x00, 0x00, 0x00,0x00, 0x00, 0x7C, 0x7C, 0x03, 0x3F, 0xF7, 0xFF,0xFF, 0xDF, 0xE0, 0x87, 0xFE, 0x00, 0x00, 0x00,0x00, 0x01, 0xF0, 0xF8, 0x13, 0xFE, 0xFF, 0xCF,0xFD, 0xFF, 0xE0, 0xFF, 0xFF, 0xC0, 0x00, 0x00,0x00, 0x03, 0xE1, 0xF0, 0x1C, 0xEF, 0xFF, 0xFF,0xDF, 0xFF, 0xC0, 0x7F, 0xFD, 0xF0, 0x00, 0x00,0x00, 0x0F, 0xF3, 0xF0, 0x8E, 0xFF, 0xDF, 0xBF,0xFF, 0xFF, 0xF8, 0x20, 0xFF, 0xF8, 0x00, 0x00,0x00, 0x1F, 0x07, 0xE0, 0xFF, 0xFF, 0xFB, 0xFF,0xE0, 0x00, 0x3E, 0x3F, 0xFF, 0xFE, 0x00, 0x00,0x00, 0x3F, 0x07, 0xE0, 0x7B, 0xFF, 0x7F, 0xFC,0x00, 0x00, 0x07, 0xCF, 0xFF, 0xFF, 0xE0, 0x00,0x00, 0x7B, 0xF7, 0xE1, 0xBF, 0xF7, 0xFF, 0xFF,0xE0, 0x00, 0x01, 0xF9, 0xFF, 0xFF, 0xF0, 0x00,0x00, 0x7B, 0xF7, 0xE3, 0xFF, 0x7E, 0xFF, 0xFF,0xE0, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0x00,0x00, 0xFF, 0xD7, 0xE0, 0xFF, 0xFF, 0xF3, 0xF8,0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFC,0x01, 0xCE, 0xF7, 0xE0, 0xFD, 0xFF, 0x8F, 0xE0,0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF,0x01, 0xFE, 0xE7, 0xE3, 0xFF, 0xFE, 0x0F, 0x80,0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x9F,0x03, 0xF7, 0xC7, 0xE3, 0xFB, 0xF8, 0x1F, 0x80,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x03, 0xE7, 0x9B, 0xF0, 0x3F, 0xE0, 0xFF, 0xC0,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x03, 0xBF, 0xB9, 0xF0, 0x3F, 0xFF, 0xFF, 0xF8,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x07, 0x3D, 0xF0, 0xF0, 0x37, 0xFF, 0xFF, 0xFE,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x07, 0xF9, 0xE6, 0xF0, 0x3F, 0x00, 0x0F, 0xFE,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x07, 0xEF, 0xFF, 0x38, 0x1C, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x07, 0xCF, 0x78, 0xC0, 0x0E, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x07, 0xFE, 0xF9, 0xC0, 0x07, 0x80, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x06, 0x77, 0xFF, 0xCE, 0x0B, 0xE0, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x07, 0xF3, 0x9F, 0xFC, 0x00, 0xFC, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x07, 0xBF, 0xBC, 0xF9, 0xC0, 0x3F, 0xF0, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x07, 0x9E, 0xFD, 0xF7, 0xCE, 0x03, 0xFF, 0x80,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x07, 0xFC, 0xE7, 0xBF, 0xBE, 0x20, 0x0F, 0xE0,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x03, 0xEF, 0xEF, 0x3D, 0xFC, 0xF3, 0x00, 0xFC,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x03, 0xEF, 0x3F, 0xFC, 0xEF, 0xCF, 0x80, 0x1F,0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x01, 0xFF, 0x79, 0xEF, 0xE7, 0x1E, 0x00, 0x03,0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x01, 0xFB, 0xFB, 0xCF, 0x7F, 0x78, 0x00, 0x3F,0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0xFB, 0xDF, 0xFE, 0x7F, 0xF9, 0xC1, 0x7F,0x09, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x7F, 0xDE, 0x7B, 0xF9, 0xDF, 0xC0, 0xE0,0x7F, 0xB8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0xFF, 0x3E, 0xFE, 0xF3, 0xDF, 0xDE, 0x00, 0xC0,0x7F, 0x9E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0xFF, 0xFF, 0xF7, 0xFF, 0xDE, 0xFE, 0xF1, 0xC0,0x7F, 0x87, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,0x1F, 0xFF, 0xFF, 0x9E, 0xDE, 0xF7, 0xE1, 0xC0,0x1C, 0x0F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00,0x03, 0xFF, 0xFF, 0xBC, 0xFF, 0xF3, 0x80, 0xC0,0x00, 0x1F, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00,0x01, 0xFF, 0xFD, 0xFD, 0xE7, 0xBF, 0x80, 0xC2,0x00, 0x3F, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0xFF, 0xFF, 0xEF, 0xFF, 0xBD, 0xC0, 0xE3,0x80, 0x3F, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00,0x00, 0x39, 0xFF, 0xEF, 0x3D, 0xFC, 0xE0, 0xF3,0xC0, 0x1F, 0xFB, 0xE0, 0x00, 0x00, 0x00, 0x00,0x00, 0x0F, 0xFE, 0x7F, 0x79, 0xEC, 0x60, 0xFA,0xFF, 0xFD, 0xF7, 0xFE, 0x00, 0x00, 0x00, 0x00,0x00, 0x3E, 0x0F, 0xBB, 0xFF, 0xC6, 0x00, 0xF8,0x7F, 0xFF, 0xFF, 0xE6, 0x00, 0x00, 0x00, 0x00,0x00, 0x3F, 0xFF, 0xF9, 0xCF, 0x7F, 0x00, 0x7E,0x0F, 0x83, 0xF7, 0xE6, 0x00, 0x00, 0x00, 0x00,0x00, 0x7F, 0xF0, 0x7E, 0xCF, 0xFF, 0x80, 0x3F,0x00, 0x0E, 0x0F, 0xD6, 0x00, 0x00, 0x00, 0x00,0x00, 0x7F, 0x80, 0x0F, 0xFF, 0xF6, 0x00, 0x3F,0x98, 0x7E, 0x0F, 0xCE, 0x00, 0x00, 0x00, 0x00,0x00, 0xFE, 0x00, 0x01, 0xFF, 0xDE, 0x00, 0x3F,0xFF, 0xF0, 0x1F, 0x8C, 0x00, 0x00, 0x00, 0x00,0x03, 0xFC, 0x00, 0x07, 0xFF, 0xFF, 0xC0, 0x1F,0xFF, 0xFF, 0xFE, 0x1C, 0x00, 0x00, 0x00, 0x00,0x03, 0xF0, 0x00, 0x1F, 0xFF, 0xFF, 0xF8, 0x07,0xFF, 0x9F, 0xF0, 0x78, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x3F, 0xFF, 0xF9, 0x9F, 0xFF,0xFF, 0xF8, 0x1F, 0xE0, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x7F, 0x0F, 0x87, 0x01, 0xFC,0x00, 0x7F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00};
/
// Bitmap点阵数据表                                                    //
// 图片: E:\..hmos_副本.bmp,横向取模左高位,数据排列:从左到右从上到下   //
// 图片尺寸: 128 * 64                                                  //
/
const unsigned char hmosLogo[] = // 数据表{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x0F, 0xF8, 0x20, 0x82, 0x22, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x80, 0x11, 0x02, 0x22, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x80, 0x0A, 0x01, 0x54, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x80, 0x04, 0x01, 0x54, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x80, 0x0A, 0x00, 0x88, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x80, 0x11, 0x00, 0x88, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x80, 0x20, 0x80, 0x88, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x0F, 0x00, 0xE0, 0x00, 0x00,0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x3F, 0x81, 0x98, 0x00, 0x00,0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x60, 0xC2, 0x08, 0x00, 0x00,0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x40, 0x42, 0x08, 0x00, 0x00,0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x80, 0x22, 0x00, 0x00, 0x00,0x00, 0x02, 0x01, 0x06, 0x00, 0x02, 0x08, 0x04,0x00, 0x00, 0x00, 0x80, 0x22, 0x00, 0x00, 0x00,0x00, 0x02, 0x01, 0x1F, 0x0B, 0x87, 0x1C, 0x1F,0x07, 0xC4, 0x08, 0x80, 0x12, 0x00, 0x00, 0x00,0x00, 0x02, 0x01, 0x10, 0x8C, 0x08, 0x42, 0x31,0x88, 0x24, 0x09, 0x00, 0x11, 0x00, 0x00, 0x00,0x00, 0x03, 0xFF, 0x00, 0x88, 0x08, 0x42, 0x20,0x88, 0x22, 0x11, 0x00, 0x11, 0xC0, 0x00, 0x00,0x00, 0x03, 0xFF, 0x00, 0x88, 0x08, 0x42, 0x40,0x88, 0x22, 0x11, 0x00, 0x10, 0x70, 0x00, 0x00,0x00, 0x02, 0x01, 0x00, 0x88, 0x08, 0x42, 0x40,0x88, 0x22, 0x11, 0x00, 0x10, 0x18, 0x00, 0x00,0x00, 0x02, 0x01, 0x0F, 0x88, 0x08, 0x42, 0x40,0x88, 0x22, 0x11, 0x00, 0x10, 0x0C, 0x00, 0x00,0x00, 0x02, 0x01, 0x10, 0x88, 0x08, 0x42, 0x40,0x88, 0x21, 0x20, 0x80, 0x20, 0x04, 0x00, 0x00,0x00, 0x02, 0x01, 0x20, 0x88, 0x08, 0x42, 0x40,0x88, 0x21, 0x40, 0x80, 0x20, 0x04, 0x00, 0x00,0x00, 0x02, 0x01, 0x20, 0x88, 0x08, 0x42, 0x40,0x88, 0x20, 0x80, 0x40, 0x20, 0x04, 0x00, 0x00,0x00, 0x02, 0x01, 0x20, 0x88, 0x08, 0x42, 0x20,0x88, 0x20, 0x80, 0x60, 0x42, 0x04, 0x00, 0x00,0x00, 0x02, 0x01, 0x11, 0x88, 0x08, 0x42, 0x11,0x08, 0x20, 0x80, 0x31, 0x83, 0x08, 0x00, 0x00,0x00, 0x02, 0x01, 0x1E, 0x88, 0x08, 0x42, 0x0E,0x08, 0x20, 0x80, 0x1F, 0x00, 0xF0, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x80, 0x7F, 0xE0, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x80, 0x7F, 0xE0, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x01, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x02, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
// 联网相关的变量
static EventGroupHandle_t s_wifi_event_group; // 事件组,用于对wifi响应结果进行标记
static int s_retry_num = 0;                   // 记录wifi重新连接尝试的次数static const char *TAG = "esp32idf_title_txwtech";
static void obtain_time(void);
static void initialize_sntp(void);/*** @description: 处理wifi连接和ip分配时候事件的回调函数* @return {*}* @note:*/
static void event_handler(void *arg, esp_event_base_t event_base,int32_t event_id, void *event_data)
{// 如果是wifi station开始连接事件,就尝试将station连接到APif (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_START){esp_wifi_connect();}// 如果是wifi station从AP断连事件else if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_DISCONNECTED){// 如果没有达到最高尝试次数,继续尝试if (s_retry_num < EXAMPLE_ESP_MAXIMUM_RETRY){esp_wifi_connect();s_retry_num++;ESP_LOGI(TAG, "retry to connect to the AP ^_^");}// 如果达到了最高尝试次数,就标记连接失败else{xEventGroupSetBits(s_wifi_event_group, WIFI_FAIL_BIT);}ESP_LOGI(TAG, "connect to the AP fail *_*");}else if (event_base == IP_EVENT && event_id == IP_EVENT_STA_GOT_IP){ip_event_got_ip_t *event = (ip_event_got_ip_t *)event_data;ESP_LOGI(TAG, "got ip:" IPSTR, IP2STR(&event->ip_info.ip));s_retry_num = 0;xEventGroupSetBits(s_wifi_event_group, WIFI_CONNECTED_BIT); // 成功获取到了ip,就标记这次wifi连接成功}
}/*** @description: 用于连接wifi的函数* @return {*}* @note: 这里wifi连接选项设置了使用nvs,会把每次配置的参数存储在nvs中。因此请查看分区表中是否对nvs分区进行了设置*/
void wifi_init_sta(void)
{// 00 创建wifi事件组s_wifi_event_group = xEventGroupCreate();/******************** 01 Wi-Fi/LwIP 初始化阶段 ********************/// 01-1 创建LWIP核心任务ESP_ERROR_CHECK(esp_netif_init());// 01-2 创建系统事件任务,并初始化应用程序事件的回调函数ESP_ERROR_CHECK(esp_event_loop_create_default());// 01-3 创建有 TCP/IP 堆栈的默认网络接口实例绑定 stationesp_netif_create_default_wifi_sta();// 01-4 创建wifi驱动程序任务,并初始化wifi驱动程序wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();ESP_ERROR_CHECK(esp_wifi_init(&cfg));// 01-5 注册,用于处理wifi连接的过程中的事件esp_event_handler_instance_t instance_any_id; // 用于处理wifi连接时候的事件的句柄esp_event_handler_instance_t instance_got_ip; // 用于处理ip分配时候产生的事件的句柄// 该句柄对wifi连接所有事件都产生响应,连接到event_handler回调函数ESP_ERROR_CHECK(esp_event_handler_instance_register(WIFI_EVENT,ESP_EVENT_ANY_ID,&event_handler,NULL,&instance_any_id));// 该句柄仅仅处理IP_EVENT事件组中的从AP中获取ip地址事件,连接到event_handler回调函数ESP_ERROR_CHECK(esp_event_handler_instance_register(IP_EVENT,IP_EVENT_STA_GOT_IP,&event_handler,NULL,&instance_got_ip));/******************** 02 WIFI配置阶段 ********************/wifi_config_t wifi_config = {.sta = {.ssid = EXAMPLE_ESP_WIFI_SSID,.password = EXAMPLE_ESP_WIFI_PASS,/* Setting a password implies station will connect to all security modes including WEP/WPA.* However these modes are deprecated and not advisable to be used. Incase your Access point* doesn't support WPA2, these mode can be enabled by commenting below line */.threshold.authmode = WIFI_AUTH_WPA2_PSK, // 设置快速扫描模式下能接受的最弱的验证模式.sae_pwe_h2e = WPA3_SAE_PWE_BOTH,         // 设置SAE和PWE(wifi协议)的配置},};// 02-2 配置station工作模式ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));// 02-3 配置ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &wifi_config));/******************** 03 wifi启动阶段 ********************/// 03-1 启动wifi驱动程序ESP_ERROR_CHECK(esp_wifi_start()); // 会触发回调函数ESP_LOGI(TAG, "wifi_init_sta finished.");/* Waiting until either the connection is established (WIFI_CONNECTED_BIT) or connection failed for the maximum* number of re-tries (WIFI_FAIL_BIT). The bits are set by event_handler() (see above) *//******************** 输出wifi连接结果 ********************/EventBits_t bits = xEventGroupWaitBits(s_wifi_event_group,WIFI_CONNECTED_BIT | WIFI_FAIL_BIT,pdFALSE,pdFALSE,portMAX_DELAY);/* xEventGroupWaitBits() returns the bits before the call returned, hence we can test which event actually* happened. */if (bits & WIFI_CONNECTED_BIT){ESP_LOGI(TAG, "connected to ap SSID:%s password:%s",EXAMPLE_ESP_WIFI_SSID, EXAMPLE_ESP_WIFI_PASS);}else if (bits & WIFI_FAIL_BIT){ESP_LOGI(TAG, "Failed to connect to SSID:%s, password:%s",EXAMPLE_ESP_WIFI_SSID, EXAMPLE_ESP_WIFI_PASS);}else{ESP_LOGE(TAG, "UNEXPECTED EVENT");}/* The event will not be processed after unregister */// 05 事件注销ESP_ERROR_CHECK(esp_event_handler_instance_unregister(IP_EVENT, IP_EVENT_STA_GOT_IP, instance_got_ip));ESP_ERROR_CHECK(esp_event_handler_instance_unregister(WIFI_EVENT, ESP_EVENT_ANY_ID, instance_any_id));vEventGroupDelete(s_wifi_event_group);
}static void esp_initialize_sntp(void)
{ESP_LOGI("esp32idf_title", "Initializing SNTP");sntp_setoperatingmode(SNTP_OPMODE_POLL);sntp_setservername(0, "ntp1.aliyun.com");sntp_setservername(1, "cn.ntp.org.cn");     // 设置访问服务器sntp_setservername(2, "pool.ntp.org");sntp_setservername(3, "210.72.145.44");     // 国家授时中心服务器 IP 地址sntp_init();
}
int get_sys_time_ms(void)
{struct timeval tv_now;gettimeofday(&tv_now, NULL);int64_t time_us = (int64_t)tv_now.tv_sec * 1000000L + (int64_t)tv_now.tv_usec;return (int)(time_us / 1000);
}void time_sync_notification_cb(struct timeval *tv)
{ESP_LOGI(TAG, "Notification of a time synchronization event");
}void user_sntp_init(void)
{char strftime_buf[64];time_t now;struct tm timeinfo;time(&now);                   //获取网络时间, 64bit的秒计数localtime_r(&now, &timeinfo); //转换成具体的时间参数// Is time set? If not, tm_year will be (1970 - 1900).if (timeinfo.tm_year < (2025 - 1900)){ESP_LOGI(TAG, "Time is not set yet. Connecting to WiFi and getting time over NTP.");obtain_time();// update 'now' variable with current timetime(&now);}// Set timezone to China Standard Timesetenv("TZ", "CST-8", 1);tzset();localtime_r(&now, &timeinfo);strftime(strftime_buf, sizeof(strftime_buf), "%c", &timeinfo);ESP_LOGI(TAG, "The current date/time in Shanghai is: %s", strftime_buf);while (1){time(&now);localtime_r(&now, &timeinfo);ESP_LOGI(TAG, "timeinfo.tm_isdst: %d", timeinfo.tm_isdst);ESP_LOGI(TAG, "timeinfo.tm_yday: %d", timeinfo.tm_yday);ESP_LOGI(TAG, "timeinfo.tm_wday: %d", timeinfo.tm_wday);ESP_LOGI(TAG, "timeinfo.tm_year: %d", timeinfo.tm_year + 1900);ESP_LOGI(TAG, "timeinfo.tm_mon: %d", timeinfo.tm_mon + 1);ESP_LOGI(TAG, "timeinfo.tm_mday: %d", timeinfo.tm_mday);ESP_LOGI(TAG, "timeinfo.tm_hour: %d", timeinfo.tm_hour);ESP_LOGI(TAG, "timeinfo.tm_min: %d", timeinfo.tm_min);ESP_LOGI(TAG, "timeinfo.tm_sec: %d", timeinfo.tm_sec);strftime(strftime_buf, sizeof(strftime_buf), "%c", &timeinfo);ESP_LOGI(TAG, "The current date/time in Shanghai is: %s", strftime_buf);vTaskDelay(1000 / portTICK_PERIOD_MS);}
}static void obtain_time(void)
{/*** NTP server address could be aquired via DHCP,* see LWIP_DHCP_GET_NTP_SRV menuconfig option*/
#ifdef LWIP_DHCP_GET_NTP_SRVsntp_servermode_dhcp(1);
#endifinitialize_sntp();// wait for time to be settime_t now = 0;struct tm timeinfo = {0};int retry = 0;const int retry_count = 10;while (sntp_get_sync_status() == SNTP_SYNC_STATUS_RESET && ++retry < retry_count){ESP_LOGI(TAG, "Waiting for system time to be set... (%d/%d)", retry, retry_count);vTaskDelay(2000 / portTICK_PERIOD_MS);}time(&now);localtime_r(&now, &timeinfo);
}static void initialize_sntp2(void)
{ESP_LOGI(TAG, "Initializing SNTP");sntp_setoperatingmode(SNTP_OPMODE_POLL);// sntp_setservername(0, "pool.ntp.org");sntp_setservername(0, "1.cn.pool.ntp.org");sntp_setservername(1, "1.hk.pool.ntp.org");sntp_setservername(2, "ntp1.aliyun.com");sntp_setservername(3, "ntp.aliyun.com");sntp_setservername(4, "cn.ntp.org.cn");     // 设置访问服务器sntp_setservername(5, "pool.ntp.org");sntp_setservername(6, "210.72.145.44");     // 国家授时中心服务器 IP 地址sntp_setservername(7, "ntp2.aliyun.com");sntp_set_time_sync_notification_cb(time_sync_notification_cb); //当sntp成功同步时间后,会有一个异步的回调通知应用做出相应更改sntp_set_sync_mode(SNTP_SYNC_MODE_IMMED);setenv("TZ", "CST-8", 1); //东八区tzset();sntp_init();
}
void convertStrToUnChar(char* str, unsigned char* UnChar)
{int i = strlen(str), j = 0, counter = 0;char c[2];unsigned int bytes[2];for (j = 0; j < i; j += 2) {if(0 == j % 2){c[0] = str[j];c[1] = str[j + 1];sscanf(c, "%02x" , &bytes[0]);UnChar[counter] = bytes[0];counter++;}}return;
}void app_main()
{Initialise();DisplayString(5, 1, show_wifi_reconnect, AR_SIZE(show_wifi_reconnect)); int mLevel = 0;int temp = 0;// esp_initialize_sntp();esp_err_t ret = nvs_flash_init();if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND){ESP_ERROR_CHECK(nvs_flash_erase());ret = nvs_flash_init();}ESP_ERROR_CHECK(ret);// 连wifiESP_LOGI(TAG, "ESP_WIFI_MODE_STA");wifi_init_sta();initialize_sntp2();gpio_set_direction(16, GPIO_MODE_INPUT);gpio_set_direction(2, GPIO_MODE_OUTPUT);gpio_set_pull_mode(16, GPIO_PULLUP_ONLY);gpio_get_level(16);int sync_state = sntp_get_sync_status();DrawFullScreen(nPianWoFish);DrawFullScreen(logo0);//  CLEAR();int clear_counter = 0;while (true){char ori_str[]="1970-01-01";// if (mLevel != (temp = gpio_get_level(16))){temp = gpio_get_level(16);// mLevel = temp;if (temp){printf("HIGH Level\n");gpio_set_level(2, 0);}else{gpio_set_level(2, 1);printf("LOW Level\n");}}// usleep(1000 * 1000 * 1); //微秒,1000微秒=1毫秒,1000毫秒=1秒// vTaskDelay(1000/portTICK_PERIOD_MS);time_t timer; // time_t就是long int 类型// struct tm *timeinfo;struct tm timeinfo;timer = time(NULL);// tblock = localtime(&timer);// printf("Local time is: %s,sync state:%d\n", asctime(tblock), sync_state);// ESP_LOGI(TAG, "Initializing SNTP");localtime_r(&timer, &timeinfo); // 转换成具体的时间参数ESP_LOGI(TAG, "%4d-%02d-%02d %02d:%02d:%02d week:%d", timeinfo.tm_year + 1900, timeinfo.tm_mon + 1,timeinfo.tm_mday, timeinfo.tm_hour, timeinfo.tm_min, timeinfo.tm_sec, timeinfo.tm_wday);char str2date[30];char str2time[30];unsigned char date3[30];unsigned char time3[30];//sprintf(str2, "%4d-%02d-%02d %02d:%02d:%02d week:%d", timeinfo.tm_year + 1900, timeinfo.tm_mon + 1,//timeinfo.tm_mday, timeinfo.tm_hour, timeinfo.tm_min, timeinfo.tm_sec, timeinfo.tm_wday);sprintf(str2date, "%4d-%02d-%02d", timeinfo.tm_year + 1900, timeinfo.tm_mon + 1,timeinfo.tm_mday);sprintf(str2time, "%02d:%02d:%02d",  timeinfo.tm_hour, timeinfo.tm_min, timeinfo.tm_sec);for(int i=0;i<20;i++){date3[i]=(unsigned char)str2date[i]; time3[i]=(unsigned char)str2time[i]; }// CLEAR();if(strcmp(str2date,ori_str)==0)//相等说明数据没有更新,需要主动去同步{//CLEAR();printf("strcmp is 0, equal,str2date:%s,ori_str:%s,str2time:%s\n",str2date,ori_str,str2time);sntp_stop(); sntp_init(); //调用sntp_init()会立刻请求服务器同步一次时间。usleep(1000 * 1000 * 10);  continue; }else {if(clear_counter==0){CLEAR();clear_counter = 1;}printf("not equal,str2date:%s,ori_str:%s\n",str2date,ori_str);}printf("str2:%s %s\n", str2date,str2time); // 输出:// printf("str3:%s\n",str3);// DrawFullScreen(nPianWoFish);// usleep(1000 * 1000 * 2);// CLEAR();// DisplayString(0, 2, show1, AR_SIZE(show1));// usleep(1000 * 1000 * 2);// CLEAR();// DrawFullScreen(hmosLogo);// usleep(1000*1000*2);// CLEAR();// DrawFullScreen(logo0);//usleep(1000 * 1000 * 2);// CLEAR();DisplayString(0, 2, show1, AR_SIZE(show1)); //第一行第三格开始// DisplayString(1,2,show_hm,AR_SIZE(show_hm));//第一行第三格开始DisplayString(1, 1, date3, 10); DisplayString(2, 1, time3, 10); // DisplayString(2, 1, show_we_chat1, AR_SIZE(show_we_chat1)); //第一行第三格开始DisplayString(3, 2, show_nick1, AR_SIZE(show_nick1));       //usleep(1000 * 1000 * 1);                                    //微秒,1000微秒=1毫秒,1000毫秒=1秒}
}

包含的头文件:

#include "driver/gpio.h"
#include <stdio.h>
#include "unistd.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/event_groups.h"
#include <stddef.h>
#include <time.h>#include <string.h>
#include <time.h>
#include <sys/time.h>
#include "esp_system.h"
#include "esp_event.h"
#include "esp_log.h"
#include "esp_attr.h"
#include "esp_sleep.h"
#include "nvs_flash.h"
#include "esp_sntp.h"
#include "esp_wifi.h"
#include "lcd12864st7920idf.h"

lcd12864st7920idf.c ——LCD屏幕初始化:

void Initialise()
{IOT_GPIO_VALUE00 = 0;IOT_GPIO_VALUE11 = 1;gpio_set_direction(lcd_rs, GPIO_MODE_OUTPUT); //gpio_set_direction(lcd_sclk, GPIO_MODE_OUTPUT);gpio_set_direction(lcd_sid, GPIO_MODE_OUTPUT); //// digitalWrite(latchPin, LOW);gpio_set_level(lcd_rs, IOT_GPIO_VALUE00);// delayns();delay_ms(10);WriteCommand(0x30); //功能设定控制字WriteCommand(0x0c); //显示开关控制字WriteCommand(0x01); //清除屏幕控制字WriteCommand(0x06); //进入设定点控制字
}

效果:

第13篇:ESP32 idf wifi联网使用SNTP同步网络时间LCD显示

项目工程代码:

待更新:...

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/78583.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实时云渲染应用之虚拟仿真项目的四大优势

虚拟仿真在教育领域的应用越来越广&#xff0c;尤其在科研和实验教学领域&#xff0c;这主要是因为虚拟仿真具有操作简单、场景逼真、更安全、易维护的优势。比如在实验教学过程中&#xff0c;一些实验对象相对于学生来说过于宏观或微观&#xff0c;学生不易理解&#xff0c;而…

机器学习——贝叶斯(三种分布)/鸢尾花分类分界图/文本分类应用

0、前言&#xff1a; 机器学习中的贝叶斯的理论基础是数学当中的贝叶斯公式。这篇博客强调使用方法&#xff0c;至于理论未作深究。机器学习中三种类型的贝叶斯公式&#xff1a;高斯分布&#xff08;多分类&#xff09;、多项式分布&#xff08;文本分类&#xff09;、伯努利分…

【PyTorch 08】如果要手动安装对应的包

例如有时候我们要下载 PyG &#xff0c;但是需要手动下载&#xff0c;需要进行以下步骤&#xff1a; 网站链接&#xff1a;https://data.pyg.org/whl/ 首先查看当前安装好的Pytorch版本和对应的cuda版本 1. pip list&#xff1a;查看torch版本 2. torch.version.cuda&#xf…

性能测试 —— 吞吐量和并发量的关系? 有什么区别?

吞吐量&#xff08;Throughput&#xff09;和并发量&#xff08;Concurrency&#xff09;是性能测试中常用的两个指标&#xff0c;它们描述了系统处理能力的不同方面。 吞吐量&#xff08;Throughput&#xff09; 是指系统在单位时间内能够处理的请求数量或事务数量。它常用于…

【深度学习 AIGC】stablediffusion-infinity 在无界限画布中输出绘画 Outpainting

代码&#xff1a;https://github.com/lkwq007/stablediffusion-infinity/tree/master 启动环境&#xff1a; git clone --recurse-submodules https://github.com/lkwq007/stablediffusion-infinity cd stablediffusion-infinity conda env create -f environment.yml conda …

ChatGPT 网站合集/NovelAI tag生成器/Novel资源大全

ChatGPT 网站合集 https://github.com/xx025/carrot NovelAI tag生成器 https://wolfchen.top/tag/ Novel资源大全 https://wolfchen.top/tag/doc.html 简单地说&#xff0c;Stable Diffusion被修改后做出了NovelAI&#xff0c;NovelAI离家出走便有了Naifu Naifu简单好上手&am…

Solidity 小白教程:15. 异常

Solidity 小白教程&#xff1a;15. 异常 这一讲&#xff0c;我们介绍solidity三种抛出异常的方法&#xff1a;error&#xff0c;require和assert&#xff0c;并比较三种方法的gas消耗。 异常 写智能合约经常会出bug&#xff0c;solidity中的异常命令帮助我们debug。 Error …

QT实战之翻金币游戏【详细过程及介绍】

目录 前言 一、游戏整体分析 二、创建项目 三、添加资源 四、主界面实现 1、设置游戏主场景基本配置 2、设置背景图片 3、创建开始按钮并设置动画 4、创建关卡选择界面并实现主界面与其的切换 五、关卡选择界面实现 1、设置关卡选择场景基本配置 2、设置关卡选择场…

c++day7---9.14

思维导图&#xff1a; #include <iostream> using namespace std;template<typename T> class myVector { private:T* arr;size_t size; //元素数量size_t max_size; //数组容量 public://构造函数myVector() :arr(nullptr), size(0), max_size(0) {}myVector(i…

JenniAI:基于AI的文章生成器写作助手

【产品介绍】 • 名称 JenniAI • 成立/上线时间 2022年 • 具体描述 Jenni AI是一个基于AI的文章写作助手&#xff0c;通过使用先进的人工智能技术帮助用户更快、更好、更有创意地写作。无论用户需要写一篇论文、一篇博客、一封邮件、…

virtualbox虚拟机中安装FreeDOS系统和DJGPP编译环境

一、安装FreeDOS系统 1、从官网下载FreeDOS系统镜像&#xff0c;下载的压缩包中包含两个文件&#xff1a;后缀为.iso和.img的镜像 ​​​下载页面 http://www.freedos.org/download/ 直接下载链接 https://www.ibiblio.org/pub/micro/pc-stuff/freedos/files/distributions/1.…

软件架构设计(十三) 构件与中间件技术

中间件的定义 其实中间件是属于构件的一种。是一种独立的系统软件或服务程序,可以帮助分布式应用软件在不同技术之间共享资源。 我们把它定性为一类系统软件,比如我们常说的消息中间件,数据库中间件等等都是中间件的一种体现。一般情况都是给应用系统提供服务,而不是直接…

行业追踪,2023-09-14

自动复盘 2023-09-14 凡所有相&#xff0c;皆是虚妄。若见诸相非相&#xff0c;即见如来。 k 线图是最好的老师&#xff0c;每天持续发布板块的rps排名&#xff0c;追踪板块&#xff0c;板块来开仓&#xff0c;板块去清仓&#xff0c;丢弃自以为是的想法&#xff0c;板块去留让…

http实现文件分片下载

文章目录 检测是否支持HTTP Range 语法Range请求cURL示例单一范围多重范围条件式分片请求 Range分片请求的响应文件整体下载文件分片下载文本下载图片下载封装下载方法 HTTP分片异步下载是一种下载文件的技术&#xff0c;它允许将一个大文件分成多个小块&#xff08;分片&#…

C生万物之函数

前言&#xff1a; &#x1f4d5;作者简介&#xff1a;热爱编程的小七&#xff0c;致力于C、Java、Python等多编程语言&#xff0c;热爱编程和长板的运动少年&#xff01; &#x1f4d8;相关专栏Java基础语法&#xff0c;JavaEE初阶&#xff0c;数据库&#xff0c;数据结构和算法…

Redis Cluster集群运维与核心原理剖析

Redis集群方案比较 哨兵模式 在redis3.0以前的版本要实现集群一般是借助哨兵sentinel工具来监控master节点的状态&#xff0c;如果master节点异常&#xff0c;则会做主从切换&#xff0c;将某一台slave作为master&#xff0c;哨兵的配置略微复杂&#xff0c;并且性能和高可用性…

Sentinel控制台配置 持久化到nacos

sentinel控制台&#xff0c;使用方便&#xff0c;功能强大。使用官方的jar包&#xff0c;配置不会持久化&#xff0c;sentinel重启后会导致&#xff0c;之前的规则全部丢失&#xff0c;下面一起改造源码实现规则数据的持久化 sentinel源码地址 &#xff08;github访问太慢&am…

git-命令行显示当前目录分支

1. 打开家目录.bashrc隐藏文件&#xff0c;找到如下内容 forlinxubuntu:~$ vi ~/.bashrcif [ "$color_prompt" yes ]; thenPS1${debian_chroot:($debian_chroot)}\[\033[01;32m\]\u\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ elsePS1${debian_chroot:($debi…

LeetCode刷题笔记【31】:动态规划专题-3(整数拆分、不同的二叉搜索树)

文章目录 前置知识343. 整数拆分题目描述解题思路代码进一步优化 96.不同的二叉搜索树题目描述解题思路代码优化改进 总结 前置知识 参考前文 参考文章&#xff1a; LeetCode刷题笔记【29】&#xff1a;动态规划专题-1&#xff08;斐波那契数、爬楼梯、使用最小花费爬楼梯&…

算法笔记——循环链表

带环链表 算法题中&#xff0c;会有一种题目让我们去判断链表里的是否有循环。 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 这里就需要我们要用快慢指针来进行搜索&#xff0c;直接提供代码 class Solution { public:bool hasCycle(ListNode *…