在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

用Ai-M61點亮屏幕后,顯示精靈動畫

AIoT行業(yè)洞察 ? 來源:AIoT行業(yè)洞察 ? 作者:AIoT行業(yè)洞察 ? 2025-03-11 13:52 ? 次閱讀

以下作品由安信可社區(qū)用戶

lclight制作

之前筆者用Ai-M61點亮了屏幕,并顯示了圖片(教程在這里:M61 gpio模擬i2c 點亮0.96寸屏幕),這次準備在屏幕上顯示動畫,制作會走路的小人以及會動的背景~

先看效果(如圖),由于視頻太大,轉(zhuǎn)成gif后文件也過大,只能縮小分辨率、幀數(shù)和時長了,原動畫是不斷繞地圖一周。

wKgZPGfPz7aAKe_qABhmmpxrIHE287.gif

上一次教程在屏幕上畫了一張圖,但它是靜態(tài)的,如果想做點有趣的東西,那動畫也是基礎,必不可少,所以這次來學畫動畫。

像電影一樣,一系列不同的“畫面”連續(xù)播放就形成了動畫。而創(chuàng)造不同“畫面”一般有兩種方式,一種是畫面本身不同,另一種是畫面里面的東西在動。想象一下這個畫面,角色從迷宮左上角走到右下角。

第一種:有4張不同的圖,逐次播放,稱為幀動畫。

wKgZO2fPz7aAUUjzAABWie1E4fM35.jpeg

第二種:有一張背景和主角,每次播放時,背景直接畫,角色畫在不同的位置,這樣的角色稱為精靈(精靈本身也可以有幀動畫)。

wKgZPGfPz7eAIUP3AAAUmfMUq4M61.jpegwKgZO2fPz7eACwdaAAACoektNO081.jpeg

顯然需要角色從迷宮左上角走到右下角,第二種更適合,實際應用中需兩種結(jié)合來使用。最典型的例子比如RPG動畫里面,角色精靈移動時的左右腳邁步動畫就是幀動畫,精靈則是畫在地圖中的不同位置。

那其實就很簡單了,每一幀都是先在屏幕畫出背景,再在指定位置畫上角色,如果角色可操控,那只需要用中斷改變其位置。

貌似很容易實現(xiàn),但這時又想到了個問題,圖片沒有透明信息。

如果精靈的圖片直接覆蓋畫上去,會有個矩形白邊,如圖1。

如果是用“位或”的方式畫(暫且不論能不能實現(xiàn)),則連精靈都看不到了,如圖2。

而想要的效果是最后的效果,部分覆蓋,部分透明,如圖3。

wKgZPGfPz7iADquwAAAspIlAYcw77.jpeg

這個問題最經(jīng)典的解決方案就是用遮罩,遮罩如圖1。先用遮罩“位與運算”圖1,得到圖2,再用精靈“位或運算”圖2,得到最終結(jié)果圖3。

wKgZO2fPz7iAToM-AAAys5kdWws48.jpeg

或者就是只畫黑色的部分,白色的部分直接忽略不畫。

為了實現(xiàn)或繪圖的圖片能進行或運算,也為了能提高性能,得換種畫圖方式。

原來的方式是直接在屏幕上逐個繪制圖像,那改為把所有精靈圖像逐個畫在畫板上,畫完之后再把畫板貼到屏幕上。

可以理解畫板是內(nèi)存數(shù)據(jù),操作內(nèi)存肯定比i2c的畫到屏幕快得多,原來要畫多個圖像,現(xiàn)在合并成了只畫一次。而最關(guān)鍵的是內(nèi)存操作可以進行位運算。

那么接下來簡單說下位運算,以上個教程畫的大道寺知世為例:

const uint8_t picture_tab[]={

0x1,0x2,0x4,0x8,0xF0,0xA0,0x0,0x10,0x10,0x10,0x8,0x8,0x8,0x18,0x10,0x11,

圖像的數(shù)據(jù)逐個改為二進制,比如 0x1 = 00000001,0x2 = 00000010,...,0x11 = 00010001,共16個uint8_t,從左到右的每一豎列,在1的位置涂黑,就得到了下圖的0~15列。

wKgZPGfPz7iAfO6-AABmJZ8wr4E55.jpeg

把圖片數(shù)據(jù)全部畫完,就得到下圖

wKgZO2fPz7mARQx6AAFdkuNNanA27.jpeg

那么圖像合并就很明顯了,當兩張圖像使用“或運算”時,只要相同位置有一個是涂黑的,就涂黑。

“與運算”反之,所以我們只需遮罩用&,圖像用|,即可得到目標圖像,再把目標圖像畫到屏幕上。

就像這樣,把左下角的精靈貼到背景上,背景就是知世。

wKgZPGfPz7qACOjlAAFBM8Ccwco77.jpeg

另外一個難點,就是繪制時是8位一起,所以當精靈在豎軸的坐標不是8的整倍數(shù)時,需要跨越兩個page繪制,處理起來麻煩,但不是無法處理,就直接看代碼了。

這次代碼分為3個文件了。main、spirit和resources

main.c

/**

* @file main.c

* @author lclight

* @brief

* @version 0.1

* @date 2023-11-26

*

* @copyright Copyright (c) 2023

*

*/

// 頭文件,為省事直接寫了一大堆

#include

#include

#include

#include

#include

#include

#include

#include "board.h"

#include "log.h"

#include "bflb_mtimer.h"

#include "bflb_i2c.h"

#include "bflb_gpio.h"

#include "bflb_audac.h"

#include "bflb_dma.h"

#include "bl616_glb.h"

#include "bflb_flash.h"

#include "spirit.h"

#include

#include

#include

// 選擇支持i2c的兩個針腳,接線也要按這個來接

#define SDA GPIO_PIN_31

#define SCL GPIO_PIN_30

// sleep函數(shù),封裝一層,方便修改

// 因為精度不夠,這里用1太耗時,改為0比較合適,用usleep同樣不行

#define waittime(t) vTaskDelay(0)

struct bflb_device_s *gpio;

// 從機地址,從手冊或者賣家給的例子中獲得,如果沒有,甚至可以用for從0~127逐個初始化再確定是哪個

uint8_t addr = 0x78;

// i2c協(xié)議的開始位

void i2c_start()

{

bflb_gpio_set(gpio, SDA);

waittime(1);

bflb_gpio_set(gpio, SCL);

waittime(1);

bflb_gpio_reset(gpio, SDA);

waittime(1);

bflb_gpio_reset(gpio, SCL);

}

// i2c協(xié)議的結(jié)束位

void i2c_stop()

{

bflb_gpio_reset(gpio, SDA);

waittime(1);

bflb_gpio_set(gpio, SCL);

waittime(1);

bflb_gpio_set(gpio, SDA);

}

// i2c協(xié)議發(fā)送一個字節(jié)

void send_byte(uint8_t dat)

{

uint8_t i;

for (i = 0; i<8; i++)

{

if (dat & 0x80)

{

bflb_gpio_set(gpio, SDA);

}

else

{

bflb_gpio_reset(gpio, SDA);

}

waittime(1);

bflb_gpio_set(gpio, SCL);

waittime(1);

bflb_gpio_reset(gpio, SCL);

waittime(1);

dat <<= 1;

}

bflb_gpio_set(gpio, SDA);

waittime(1);

bflb_gpio_set(gpio, SCL);

waittime(1);

bflb_gpio_reset(gpio, SCL);

waittime(1);

}

// 發(fā)送一幀數(shù)據(jù)

void oled_wr_byte(uint8_t dat, uint8_t mode)

{

i2c_start();

send_byte(addr);

mode ? send_byte(0x40) : send_byte(0x00);

send_byte(dat);

i2c_stop();

}

// 發(fā)送一幀命令數(shù)據(jù)

void oled_cmd(uint8_t cmd)

{

// printf("cmd:%drn", cmd);

oled_wr_byte(cmd, 0);

}

// 發(fā)送一幀Data數(shù)據(jù)

void oled_data(uint8_t dat)

{

oled_wr_byte(dat, 1);

}

// 發(fā)送定位到頁的命令

void page_set(uint8_t page)

{

oled_cmd(0xb0 + page);

}

// 發(fā)送定位到列的命令

void column_set(uint8_t col)

{

oled_cmd(0x10 | (col >> 4));

oled_cmd(0x00 | (col & 0x0f));

}

// 清屏,就是把填滿數(shù)據(jù)0

void oled_clear()

{

uint8_t page,col;

for (page = 0; page < 8; ++page)

{

page_set(page);

column_set(0);

for (col = 0; col < 128; ++col)

{

oled_data(0x00);

}

}

}

// 清屏,就是把填滿數(shù)據(jù)1

void oled_full()

{

uint8_t page,col;

for (page = 0; page < 8; ++page)

{

page_set(page);

column_set(0);

for (col = 0; col < 128; ++col)

{

oled_data(0xff);

}

}

}

// 顯示圖片

void oled_display(const uint8_t *ptr_pic)

{

uint8_t page,col;

for (page = 0; page < 8; ++page)

{

page_set(page);

column_set(0);

for (col = 0; col < 128; ++col)

{

oled_data(*ptr_pic++);

}

}

}

// 顯示圖片,1和0反轉(zhuǎn),就是反色

void oled_display_r(const uint8_t *ptr_pic)

{

uint8_t page,col,data;

for (page = 0; page < 8; ++page)

{

page_set(page);

column_set(0);

for (col = 0; col < 128; ++col)

{

data=*ptr_pic++;

data=~data;

oled_data(data);

}

}

}

// 刷新,即時把內(nèi)存的圖像畫到屏幕上

// 由于實際上黑底白線比較好看,所以用反色畫

void refresh()

{

uint8_t page,col,data;

dc = dc0;

for (page = 0; page < 8; ++page)

{

page_set(page);

column_set(0);

for (col = 0; col < 128; ++col)

{

data=*dc++;

data=~data;

oled_data(data);

}

}

}

// 初始化,點亮屏幕,按手冊執(zhí)行一些列命令即可,有些命令不是必要的

void init_display()

{

uint8_t cmds[25] =

{

0xAE,//關(guān)閉顯示

0xD5,//設置時鐘分頻因子,震蕩頻率

0x80, //[3:0],分頻因子;[7:4],震蕩頻率

0xA8,//設置驅(qū)動路數(shù)

0X3F,//默認0X3F(1/64)

0xD3,//設置顯示偏移

0X00,//默認為0

0x40,//設置顯示開始行 [5:0],行數(shù).

0x8D,//電荷泵設置

0x14,//bit2,開啟/關(guān)閉

0x20,//設置內(nèi)存地址模式

0x02,//[1:0],00,列地址模式;01,行地址模式;10,頁地址模式;默認10;

0xA1,//段重定義設置,bit0:0,0->0;1,0->127;

0xC8,//設置COM掃描方向;bit3:0,普通模式;1,重定義模式 COM[N-1]->COM0;N:驅(qū)動路數(shù)

0xDA,//設置COM硬件引腳配置

0x12,//[5:4]配置

0x81,//對比度設置

0xEF,//1~255;默認0X7F (亮度設置,越大越亮)

0xD9,//設置預充電周期

0xf1,//[3:0],PHASE 1;[7:4],PHASE 2;

0xDB,//設置VCOMH 電壓倍率

0x30,//[6:4] 000,0.65*vcc;001,0.77*vcc;011,0.83*vcc;

0xA4,//全局顯示開啟;bit0:1,開啟;0,關(guān)閉;(白屏/黑屏)

0xA6,//設置顯示方式;bit0:1,反相顯示;0,正常顯示

0xAF,//開啟顯示

};

uint8_t i;

for (i = 0; i < 25; ++i)

{

oled_cmd(cmds[i]);

}

sleep(1);

}

void led_run(void* param)

{

// 創(chuàng)建我們操控的主角,稱為英雄

uint8_t heroWalkImg1[] = HERO_IMG1;

uint8_t heroWalkImg2[] = HERO_IMG2;

uint8_t heroMask[] = HERO_MASK;

struct frameImg heroFrames[2] = {

// 腳不用覆蓋,所以可以共用一個遮罩

{8, 16, heroWalkImg1, heroMask},

{8, 16, heroWalkImg2, heroMask}

};

//默認左上角{0,0},默認第一幀,總共2幀,當前狀態(tài)1

struct spirit hero = {0,0, 1,2, SPIRIT_STATE_SHOW, heroFrames};

//

uint8_t tmpDir = 0; // 方向,走路demo用到

gpio = bflb_device_get_by_name("gpio");

/* I2C0_SDA */

bflb_gpio_init(gpio, SDA, GPIO_OUTPUT | GPIO_PULLUP);

/* I2C0_SCL */

bflb_gpio_init(gpio, SCL, GPIO_OUTPUT | GPIO_PULLUP);

bflb_gpio_init(gpio, GPIO_PIN_18, GPIO_INPUT | GPIO_FLOAT | GPIO_SMT_EN | GPIO_DRV_0);

bflb_gpio_init(gpio, GPIO_PIN_14, GPIO_OUTPUT | GPIO_FLOAT | GPIO_SMT_EN | GPIO_DRV_1);

// 初始化,點亮屏幕

// 圖片輪播

init_display();

oled_full();

sleep(3);

while (true)

{

clean();

// 背景也是一個精靈,靜態(tài)創(chuàng)建即可

draw(&bg);

draw(&hero);

refresh();

// vTaskDelay(1);

// 讓小人繞屏幕一圈

switch (tmpDir)

{

case 0:

if (hero.px<110)

{move(&hero, 1, 0);}

else

{

if (bg.px>-72)

{move(&bg, -1, 0);}

else

{tmpDir++;}

}

break;

case 1:

if (hero.py<52)

{move(&hero, 0, 1);printf("hero.py:%drn", hero.py);}

else

{tmpDir++;}

break;

case 2:

if (hero.px>10)

{move(&hero, -1, 0);}

else

{

if (bg.px<0)

{move(&bg, 1, 0);}

else

{tmpDir++;}

}

break;

case 3:

if (hero.py>0)

{move(&hero, 0, -1);}

else

{tmpDir=0;}

break;

}

// 小人切換走路動畫幀

nextFrame(&hero);

}

}

int main(void)

{

board_init();

xTaskCreate(led_run, (char*)"led_run", 1024*4, NULL, 1, NULL);

vTaskStartScheduler();

}

文件名:spirit.h

#ifndef SPIRIT_H

#define SPIRIT_H

#include

#include "resources.h"

#define SPIRIT_STATE_HIDE 0

#define SPIRIT_STATE_SHOW 1

struct frameImg

{

uint8_t w; // 1~N

uint8_t h; // 1~N,一定是8的整數(shù)倍

uint8_t *img;

uint8_t *mask;

};

struct spirit

{

short px; // -N~N

short py; // -N~N

uint8_t curFrame;

uint8_t maxFrame;

uint8_t state; // 精靈當前狀態(tài),0是正常,1是隱身

struct frameImg *frames;

};

// 背景,實際上也是精靈

uint8_t bgImg[] = BG_IMG;

struct frameImg bgFrame[] = {

{200, 64, bgImg, NULL}

};

struct spirit bg = {0,0, 1,1, SPIRIT_STATE_SHOW, bgFrame};

// 先把背景和所有精靈都畫到dc上,再畫到屏幕

uint8_t dc0[1024];

uint8_t *dc;

// 讓精靈進入下一幀

uint8_t nextFrame(struct spirit * sp)

{

sp->curFrame ++;

if (sp->curFrame > sp->maxFrame){

sp->curFrame = 1;

}

return sp->curFrame;

}

// 讓精靈進入指定幀

uint8_t frame(struct spirit * sp, uint8_t tarFrame)

{

sp->curFrame = tarFrame;

if (sp->curFrame > sp->maxFrame){

sp->curFrame = 1;

}

return sp->curFrame;

}

// 讓精靈移動,注意需要支持負數(shù)

void move(struct spirit * sp, short opx, short opy)

{

sp->px +=opx;

sp->py +=opy;

}

void draw(struct spirit * sp)

{

short spCol,spLine,spPage,spIdx,dcCol,dcLine,dcIdx,dcNIdx,dcPage,offset;

if (sp->state != SPIRIT_STATE_HIDE){

// 取出要畫的那一幀

struct frameImg * spFrame = & sp->frames[sp->curFrame-1];

// 兩個for從上到下,從左到右,把精靈繪制到內(nèi)存上

for (spCol = 0; spCol < spFrame->w; ++spCol)

{

// 1個像素算一行,每個列有8個像素

for (spLine = 0; spLine < spFrame->h; spLine+=8)

{

// 計算出當前繪制到哪里 (page*8)-col

dcLine = sp->py+spLine; dcCol = sp->px+spCol;

// 超出屏幕范圍的不畫

if (dcLine>=0 && dcLine < 64 && dcCol>=0 && dcCol < 128){

// 分別是繪制位置的page和精靈的page

dcPage = dcLine/8;

spPage = spLine/8;

// Idx就是數(shù)組下標

dcIdx = (dcCol)+(dcPage)*128;

spIdx = spCol+spPage*spFrame->w;

// 精靈位置精確到像素,跨越了page,偏移多少要在下個page繪制

offset = dcLine % 8;

if (offset == 0){

if (spFrame->mask != NULL) { dc0[dcIdx] &= spFrame->mask[spIdx]; }

dc0[dcIdx] |= spFrame->img[spIdx];

}else{

// 為了讓左移后補上的位是1,取反->左移->再取反

if (spFrame->mask != NULL) { dc0[dcIdx] &= (~((~spFrame->mask[spIdx]) << offset)); }

// if (spFrame->mask != NULL) { dc0[dcIdx] &= ((spFrame->mask[spIdx] << offset) | (0xFF >> (8-offset)))); }

dc0[dcIdx] |= (spFrame->img[spIdx] << offset);

// 跨越了page,要在下個page繪制偏移出去的精靈,下個page的數(shù)組下標就是dcNIdx

dcNIdx = (dcCol)+(dcPage+1)*128;

// 選了下個page,需要判斷是否超出屏幕范圍

if (dcNIdx>=0 && dcNIdx < 1024){

// 右移無法保證補位是0還是1,干脆就用|填充1

if (spFrame->mask != NULL) { dc0[dcNIdx] &= ((spFrame->mask[spIdx] >> (8-offset) ) | (0xFF << offset) ); }

dc0[dcNIdx] |= ((spFrame->img[spIdx] >> (8-offset) ) & (~(0xFF << offset))); // 這里是或運算,補0

}

}

}

}

}

}

}

void clean()

{

for (size_t i = 0; i < 1024; ++i)

{

dc0[i] = 0;

}

}

#endif /* MBEDTLS_CONFIG_H */

文件名:resources.h

#ifndef RESOURCES_H

#define RESOURCES_H

#include

// HERO_IMG1 HERO_IMG2

// ████████ ████████

// █______█__█______█

//_█_██_█_█__█_██_█_█

//_█______█__█______█

//_█______█__█______█

//_█__██__█__█__██__█

//_█______█__█______█

//_████████__████████

//___█_█_______█_█___

//__█___█_______█____

//__█___█______█_█___

//__██__██_____████__

#define HERO_IMG1 {0xFF,0x81,0x85,0xA5,0xA1,0x85,0x81,0xFF,0x0,0xE,0x9,0x0,0x1,0xE,0x8,0x0}

#define HERO_IMG2 {0xFF,0x81,0x85,0xA5,0xA1,0x85,0x81,0xFF,0x0,0x0,0xD,0xA,0xD,0x8,0x0,0x0}

#define HERO_MASK {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}

#define BG_IMG {

0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xC0,0x20,0x20,0x20,0x0,0x10,0xF,

0x0,0x0,0x80,0x40,0x20,0x10,0x8,0xC,0x4,0x2,0x2,0x1,0x1,0x0,0x0,0x0,

0x0,0x0,0x0,0x0,0x80,0x40,0x60,0x30,0x30,0x8,0x8,0x8,0x0,0x5,0x9,0xA,

0x34,0x4C,0x18,0x20,0xC0,0x0,0x0,0x0,0x0,0x4C,0x83,0x80,0x80,0x0,0x0,0x0,

0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,

0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,

0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,

0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,

0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,

0x0,0x0,0x60,0x88,0x8,0x4,0x4,0x0,0x0,0x0,0x4,0x3,0x0,0x0,0x0,0x0,

0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0xC,0xC,0x4,0x2,0x12,0x12,0x20,0xC0,

0x0,0x0,0x0,0x2,0x2,0x2,0x4,0x4,0x8,0x8,0x10,0x20,0x40,0x80,0x0,0x0,

0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x4,0x4,0x4,0x4,0x4,0x4,0x4,

0x4,0x4,0x7,0x0,0x0,0x0,0x0,0xE0,0x8,0x2,0x1,0x0,0x0,0x0,0x0,0x0,

0x80,0x80,0x0,0x40,0x40,0x0,0x80,0x80,0x80,0x40,0x6,0x1,0x0,0xF8,0x0,0xFC,

0x0,0x0,0x80,0x80,0x40,0x40,0x20,0x10,0x18,0x4,0x0,0x0,0x0,0x7,0x0,0x0,

0x0,0x0,0x0,0x0,0x0,0x80,0x60,0x11,0xD,0x8,0x8,0x8,0x0,0x10,0x10,0x20,

0x40,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,

0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,

0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,

0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x40,0x60,0x20,0x10,0x10,0x8,0x8,0x8,0x0,

0x0,0x0,0x0,0x8,0x8,0x8,0x10,0x10,0x20,0x10,0x4,0x2,0x1,0x1,0x0,0x2,

0x2,0x2,0x4,0x18,0x10,0x20,0x20,0x20,0x20,0x20,0x10,0x10,0x8,0x4,0x0,0x8,

0x8,0x8,0x8,0x8,0x8,0x0,0x4,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,

0x0,0x0,0x0,0x0,0x0,0x0,0x3,0xC,0x10,0x10,0x8,0x4,0x4,0x2,0x0,0x1,

0x0,0x0,0x81,0x41,0x21,0x12,0xA,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x3E,0x80,

0x0,0x0,0x60,0x18,0xC,0x6,0xC2,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x61,

0x1C,0x2,0x1,0x1,0x1,0x1,0x1,0x1,0x11,0xF1,0x18,0x0,0x0,0x0,0x0,0x0,

0x0,0x0,0x0,0xC0,0x30,0xE,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x4,

0x4,0x4,0x8,0x88,0x88,0x90,0x50,0x20,0x0,0x0,0x3,0x4,0x2,0x2,0x1,0x1,

0x0,0x2,0x4,0x8,0x70,0x40,0x20,0x20,0x10,0x10,0x10,0x0,0x0,0x8,0x8,0x8,

0x8,0x0,0x10,0x10,0x0,0x20,0x40,0x80,0x80,0x60,0x10,0x8,0x8,0x4,0x0,0x2,

0x2,0x2,0x2,0x2,0x2,0x2,0x4,0x4,0x8,0x10,0x10,0x10,0xC,0x3,0x0,0x0,

0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,

0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,

0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,

0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,

0x0,0x80,0x80,0x40,0x40,0x40,0x40,0x40,0x0,0x1,0x2,0x2,0x2,0x2,0xC2,0x22,

0x1C,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x4,0x18,0x26,0x50,0xB0,0xA0,0x3F,0x10,

0x10,0x10,0x8,0x4,0x4,0x2,0x1,0x0,0x0,0x0,0x0,0x8,0x8,0x8,0x8,0x4,

0x3,0x0,0x80,0x80,0x40,0x20,0x20,0x10,0x8,0x6,0x1,0x0,0x0,0x0,0x0,0x0,

0x0,0x0,0x0,0x1C,0x20,0x42,0x42,0x80,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,

0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,

0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,

0x3,0x38,0x40,0x40,0x40,0x80,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,

0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,

0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,

0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,

0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,

0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3E,0x41,0x80,0x80,0x0,0x0,0x0,0x0,0x0,

0x10,0x10,0x10,0x3C,0x22,0x21,0x20,0x20,0x20,0x10,0x10,0x10,0x8,0x8,0x4,0xC4,

0xB4,0x8C,0x80,0x40,0x40,0xC0,0x1,0x1,0x2,0x2,0x0,0x4,0x4,0x84,0x84,0x4,

0x4,0x4,0x4,0x4,0x4,0x2,0x82,0x82,0x81,0x1,0x0,0x0,0x0,0x0,0x0,0xC0,

0x18,0x8,0x4,0x4,0x8,0x8,0x8,0x10,0x10,0x0,0x20,0x20,0x0,0x40,0x40,0x40,

0x81,0x82,0x84,0x88,0x90,0xC0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,

0x60,0x20,0x40,0x80,0x80,0x30,0xC,0x3,0x67,0x20,0x10,0xD0,0x38,0x8,0x0,0x0,

0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x81,

0x86,0x98,0xC0,0x80,0x0,0x0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x0,0x0,

0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0,0x0,0x0,0x10,0x10,0x10,

0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x0,0x0,0x0,

0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x0,0x8,0x8,0x8,0x8,0x8,0x8,0x8,

0x8,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10,0x10,0x10,

0x10,0x10,0x10,0x11,0x11,0x11,0x11,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,

0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x60,0xC,0x83,0x40,0x20,0x10,

0x8,0xC,0x4,0x2,0x1,0x0,0x0,0x3,0x1C,0x60,0x40,0x40,0x30,0xE,0x1,0x0,

0x0,0x1,0xC2,0x4,0x8,0x10,0x90,0x9F,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,

0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x80,0x0,0x40,0x40,0x40,

0x40,0x0,0x20,0x20,0x20,0x0,0x10,0x10,0x10,0x1F,0x10,0x1,0x9,0x8,0x8,0x8,

0x0,0x4,0x6,0x5,0x4,0x4,0x0,0x2,0x2,0x2,0x2,0x2,0x0,0x0,0x1,0x1,

0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,

0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,

0x80,0x70,0x0,0x0,0x80,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,

0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,

0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,

0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,

0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,

0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x20,0xA0,0x40,0x40,0x7C,0x10,0x30,0x8,

0xEE,0x0,0x0,0x80,0x80,0x84,0x5C,0x64,0x48,0x7,0x23,0x22,0x21,0x11,0x1C,0x10,

0x0,0x8,0x8,0x8,0x4,0x4,0x4,0x4,0x2,0x2,0x2,0x2,0x1,0x1,0x1,0x1,

0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,

0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,

0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,

0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,

0x0,0x0,0x0,0x0,0x0,0x3,0x19,0x2,0x1,0x0,0x1,0x11,0x7,0x0,0x0,0x0,

0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,

0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,

0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,

0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,

0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x40,0x40,0x0,0x20,0x20,0x10,0x10,0x0,

0x8,0x8,0x6,0x4,0x4,0x2,0x2,0x2,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,

0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,

0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,

0x0,0x0,0x0,0x0,0x0,0x0,0x20,0xE0,0xC0,0xC0,0x1E,0x7,0x30,0x10,0xE8,0x1C,

0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,

0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,

0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,

0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,

0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,

0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,

0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}

#endif /* MBEDTLS_CONFIG_H */


審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 內(nèi)存
    +關(guān)注

    關(guān)注

    8

    文章

    3096

    瀏覽量

    74828
  • 安信可
    +關(guān)注

    關(guān)注

    0

    文章

    175

    瀏覽量

    4280
收藏 人收藏

    評論

    相關(guān)推薦

    如何利用STM32點亮LED燈?

    如何利用STM32點亮LED燈?
    發(fā)表于 11-29 06:57

    移植屏幕后,液晶顯示的字體顯示模糊有重影怎么解決?

    移植屏幕后(從800*600到1024*768分辨率),字體顯示模糊有重影,請問有什么方法解決嗎,linux3.14.38imx6ul
    發(fā)表于 01-10 07:34

    點亮edp屏幕后在Setting應用里調(diào)節(jié)亮度是相反的怎么解決?

    點亮edp屏幕后在Setting應用里調(diào)節(jié)亮度是相反的怎么解決?
    發(fā)表于 03-10 06:40

    關(guān)于rk3288點亮lvds屏幕的過程記錄

    1、rk3288點亮lvds屏幕之前有點亮過23.6寸的雙8液晶屏,這次手上剛好有塊10.1寸屏幕,記錄一下過程。屏幕的型號。修改firef
    發(fā)表于 05-11 14:16

    網(wǎng)頁顯示幕后技術(shù)

    網(wǎng)頁顯示幕后技術(shù) 如果您希望更詳細地了解將網(wǎng)頁傳送到計算機屏幕上的過程,下面就是幕后發(fā)生的基本步驟: 瀏覽器將URL分解為三個部分:
    發(fā)表于 08-05 08:55 ?558次閱讀

    Arduino來點亮彩色LCD顯示

    Arduino來點亮彩色LCD顯示屏話前為什么是Arduino含有的功能點亮你的LCD吧一些必備的工具需要安裝的開發(fā)環(huán)境編譯程序燒錄程序?qū)嶒灣晒螺d說明
    發(fā)表于 11-15 20:06 ?2次下載
    <b class='flag-5'>用</b>Arduino來<b class='flag-5'>點亮</b>彩色LCD<b class='flag-5'>顯示</b>屏

    高性能、低功耗、可驅(qū)屏,Ai-M61系列模組驅(qū)屏能力介紹

    Ai-M61系列是“WiFi 6+BLE5.3+Thread”高性能的嵌入式無線通信模組,該模組搭載BL618 芯片作為核心處理器,BL618 芯片系統(tǒng)包含帶 FPU 和 DSP 的 32 位
    的頭像 發(fā)表于 05-22 11:47 ?1857次閱讀
    高性能、低功耗、可驅(qū)屏,<b class='flag-5'>Ai-M61</b>系列模組驅(qū)屏能力介紹

    Ai-M61/62系列的固件燒錄指導

    本文介紹Ai-M61/62系列模組/開發(fā)板的固件燒錄。
    的頭像 發(fā)表于 07-02 11:23 ?1898次閱讀
    <b class='flag-5'>Ai-M61</b>/62系列的固件燒錄指導

    安信可Ai-M61/Ai-M62系列連接AWS亞馬遜云

    本文介紹Ai-M61/Ai-M62系列模組/開發(fā)板連接亞馬遜云方法。 Ai-M61 系列模組(下稱模組)是由深圳市安信可科技有限公司開發(fā)的 Wi-Fi6 藍牙雙模模組,搭載BL616芯片作為處理器
    的頭像 發(fā)表于 02-04 15:51 ?1060次閱讀
    安信可<b class='flag-5'>Ai-M61</b>/<b class='flag-5'>Ai-M</b>62系列連接AWS亞馬遜云

    “WiFi 6+BLE5.3+Thread”,安信可Ai-M61系列模組選型

    Ai-M61系列是“WiFi 6+BLE5.3+Thread”高性能的嵌入式無線通信模組,該模組搭載BL618 芯片作為核心處理器,BL618 芯片系統(tǒng)包含帶 FPU 和 DSP 的 32 位
    的頭像 發(fā)表于 03-12 16:22 ?840次閱讀
    “WiFi 6+BLE5.3+Thread”,安信可<b class='flag-5'>Ai-M61</b>系列模組選型

    基于Ai-M61模組打造一個智能魚缸水質(zhì)監(jiān)測系統(tǒng)

    要保證合理的光照,水氧才能讓小魚順利成長,這些對新手來說太難了!! 正好小安發(fā)現(xiàn)手頭上的Ai-M61模組,可以打造一個智能魚缸水質(zhì)檢測系統(tǒng)。來看看怎么做? ? 小安先查詢了下產(chǎn)品的介紹: Ai-M61 系列模組是安信可科技開發(fā)的
    的頭像 發(fā)表于 03-29 11:04 ?733次閱讀

    智能家居之旅(3):Ai-M61/M62 接入HomeAssistant 實現(xiàn)點燈

    上一篇我們介紹了MQTT設備如何接入HomeAssistant(打卡智能家居之旅(2):設備接入HomeAssistant的方法),這一篇就給大家講一下Ai-M61/M62 開發(fā)板或者模組怎么通過
    的頭像 發(fā)表于 06-07 10:07 ?858次閱讀
    智能家居之旅(3):<b class='flag-5'>Ai-M61</b>/<b class='flag-5'>M</b>62 接入HomeAssistant 實現(xiàn)點燈

    安信可Ai-M61/M62系列模組支持CAN接口了?

    hello,小伙伴們,經(jīng)過一段時間的開發(fā)和測試,安信可Ai-M61/M62模組可以支持CAN接口了。 起因是前段時間,突然有客戶想拿小安派-SCP-4.3做電動車的碼盤,但是沒有CAN 接口
    的頭像 發(fā)表于 12-27 10:59 ?522次閱讀
    安信可<b class='flag-5'>Ai-M61</b>/<b class='flag-5'>M</b>62系列模組支持CAN接口了?

    安信可Ai-M61系列模組實現(xiàn)藍牙歌詞播放功能

    以下作品由安信可社區(qū)用戶 sujingliang 制作 Ai-M61 系列模組是由安信可科技開發(fā)的 Wi-Fi6 tid=44962tid=44421 printf("AVRCP
    的頭像 發(fā)表于 02-26 14:16 ?275次閱讀
    安信可<b class='flag-5'>Ai-M61</b>系列模組實現(xiàn)藍牙歌詞播放功能

    能和Ai-M61模組對話了?手搓一個ChatGPT 語音助手

    起猛了, 安信可的Ai-M61模組能說話了! 超低延遲實時秒回 ,對話超絲滑的那種,先來看一段VCR: 小安派+ChatGPT語音實測:對話絲滑到忘記對面是AI_ 人工智能的應用日益廣泛。 各家模型
    的頭像 發(fā)表于 03-12 11:57 ?253次閱讀
    能和<b class='flag-5'>Ai-M61</b>模組對話了?手搓一個ChatGPT 語音助手
    主站蜘蛛池模板: 精品久久天干天天天按摩 | 午夜激情网站 | 国产一线在线观看 | 免费黄色一级 | 禁漫画羞羞动漫入口 | 天天做夜夜爱 | 国产日本久久久久久久久婷婷 | 国产资源视频 | 色综合天天综合给合国产 | 天堂中文在线免费观看 | 综合涩| 性欧美性free| 日本特黄特色特爽大片老鸭 | 久久天天躁狠狠躁夜夜呲 | 狠狠色狠色综合曰曰 | 欧美精品综合一区二区三区 | 看全黄大片狐狸视频在线观看 | 黄网站色 | 噜噜影院无毒不卡 | 欧洲天堂网 | 亚洲精品久久婷婷爱久久婷婷 | 亚洲男人的天堂在线播放 | 香蕉成人999视频 | 国产精品高清久久久久久久 | 午夜视频福利在线 | 夜夜夜夜曰天天天天拍国产 | 五月婷婷在线视频观看 | 69日本xxxxxxxxx29| 免费三级网站 | 老师受不了了好硬好大 | 啪啪黄色 | 亚洲一区免费看 | 日本69xxxx| 51精品视频免费国产专区 | 午夜精品一区二区三区在线视 | 欧美精品色精品一区二区三区 | 四虎影像 | 永久免费看 | 免费澳门一级毛片 | 又黄又爽又猛大片录像 | 在线视频一区二区 |