讓菜單循環播放只要用到的函數
void rotateRight(uint8_t *arr[], int n);讓數組右移
void rotateLeft( uint8_t *arr[], int n);讓數組左移
int ui_run(int *a,int *a_tag,uint8_t speed,uint8_t slow_cnt);設置菜單移動以及移動速度,返回值為bool放在while循環里使用。
首先我們要創建一個指針數組存放我們圖片的指針地址uint8_t *p[]={bmp_img,bmp_clock,bmp_gear,bmp_led,bmp_pin};
因為u8g2_DrawXBMP(); 函數畫圖需要的是我們圖片的地址而不是整個圖片數組。
下面是源碼:
int ui_run(int *a,int *a_tag,uint8_t speed,uint8_t slow_cnt) //UI滑動效果放入while里
int ui_run(int *a,int *a_tag,uint8_t speed,uint8_t slow_cnt)
{
uint8_t temp;
temp = abs(*a_tag - *a) > slow_cnt ? speed : 1;
if(*a < *a_tag)
{
*a += temp;
}
else if (*a > *a_tag)
{
*a -= temp;
}
else
{
return 0;
}
return 1;
}
#include
void rotateRight( uint8_t *arr[], int n) {
uint8_t *temp= arr[n-1]; // 保存最后一個元素
for (int i = n-1; i > 0; i--) {
arr[i] = arr[i-1]; // 右移元素
}
arr[0] = temp; // 將保存的最后一個元素放到第一個位置
}
void rotateLeft( uint8_t *arr[], int n) {
uint8_t *temp= arr[0]; // 保存第一個元素
for (int i = 0; i > n-1; i++) {
arr[i] = arr[i+1]; // 左移元素
}
arr[n-1] = temp; // 將保存的元素放到最后位置
}
while (1)
{
Coordinate.Menu_x=8;
while(ui_run(&Coordinate.Menu_x,&meun,Coordinate.speed,Coordinate.Lspeed) )
{
u8g2_DrawXBMP(&u8g2,Coordinate.Menu_x-80,Coordinate.Menu_y,32,32,p[0]);
u8g2_DrawXBMP(&u8g2,Coordinate.Menu_x-40,Coordinate.Menu_y,32,32,p[1]);
u8g2_DrawXBMP(&u8g2,Coordinate.Menu_x,Coordinate.Menu_y,32,32,p[2]);
u8g2_DrawXBMP(&u8g2,Coordinate.Menu_x+40,Coordinate.Menu_y,32,32,p[3]);
u8g2_DrawXBMP(&u8g2,Coordinate.Menu_x+80,Coordinate.Menu_y,32,32,p[4]);
u8g2_SendBuffer(&u8g2);
u8g2_ClearBuffer(&u8g2);
}
rotateRight(p,5);
HAL_Delay(2000);
//u8g2_ClearBuffer(&u8g2);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
STM32
+關注
關注
2309文章
11162瀏覽量
373397 -
u8g2
+關注
關注
0文章
18瀏覽量
2342
發布評論請先 登錄
相關推薦
熱點推薦
【CH32V208開發板】圖形庫u8g2的oled顯示
*64,I2C接口。u8g2是單色顯示庫的第二個版本,其是開源的。u8g2支持lcd和oled,支持眾多驅動芯片,包含了SSD1306,具體支持驅動情況可以資源庫查看到。硬件連接如下:
發表于 07-29 23:11
怎樣去使用NodeMCU的U8G2庫呢
NodeMCU 之 U8G2 庫使用詳解1.指令1 u8g2.clearDisplay(); // 清除顯示數據及屏幕2 u8g2.clearBuffer(); // 清Buffer緩
發表于 11-01 09:05
oled—u8g2庫使用說明
[arduino][u8g2][12864] oled—u8g2庫使用說明(例子是12864液晶屏)首先說一下寫這個文檔的目的,一是給自己做
發表于 01-11 06:51
【平頭哥RVB2601創意應用開發】實踐2-移植U8g2圖形庫
界面的設計。由于前段時間剛好在用另一個支持單色顯示的圖形庫——U8g2,所以就想著嘗試將U8g2庫移植到RVB2601板子中。U8g2簡介U8g2
發表于 03-27 20:06
NodeMCU 之 U8G2 庫使用詳解
NodeMCU 之 U8G2 庫使用詳解1.指令1 u8g2.clearDisplay(); // 清除顯示數據及屏幕2 u8g2.clearBuffer(); // 清B
發表于 10-26 20:36
?43次下載
esp8266學習筆記⑨:OLED 屏幕的使用(u8g2圖形庫模塊)
一、使用前的準備首先先將u8g2的模塊燒錄到nodemcu中,選擇OLED 屏幕所支持的u8g圖形庫,和所需要的字體,如下圖:構建完成之后,下載燒錄到開發板中。二、u8g2模塊的主要函
發表于 11-26 09:36
?18次下載
ESP8266驅動SH1306-1.3寸OLED屏幕(u8g2圖形庫)
Arduino IDE庫管理器中搜索“u8g2”,然后安裝即可。現在我們打開u8g2官方給出的幾個Demo,以"Weather"為例:打開后,發現SH1106 OLED屏幕關于I2C驅
發表于 12-22 18:43
?14次下載
關于stm32,u8g2菜單之間切換(二)u8g2的移植
移植是基于stm32cubeide,oled屏是1306驅動128x64的。接口用iic軟件模擬,hal庫iic硬件貌似有bug。 1,先在網上下載u8g2包。 2,解壓后找到源文件文
關于stm32,u8g2菜單之間切換(三)寫u8g2的一些必要函數
_msg_cb byte_cb這個參數直接使用自帶的 u8x8_byte_sw_i2c即可,我們只要實現 u8x8_msg_cb gpio_and_delay_cb這個參數寫一
關于stm32,u8g2菜單之間切換(三)用u8g2寫一個菜單無限左右循環
評論