国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

STM32 F103C8T6學習筆記10:OLED顯示屏GIF動圖取?!喴讜r鐘—動圖手表的制作~

這篇具有很好參考價值的文章主要介紹了STM32 F103C8T6學習筆記10:OLED顯示屏GIF動圖取模—簡易時鐘—動圖手表的制作~。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

今日嘗試做一款有動圖的OLED實時時鐘,本文需要現(xiàn)學一個OLED的GIF動圖取模

其余需要的知識點有不會的可以去我? STM32 F103C8T6學習筆記? 系列專欄自己查閱把,閑話不多,直接開肝~~~

文章提供源碼,測試工程下載,測試效果圖。

做個簡易的時鐘,就不把RTC實時時鐘放進來學了,用定時器簡單代替了~~

目錄

原圖GIF:

程序顯示時間的問題:

簡單版定時器2時間計數(shù):

字符串給OLED打印函數(shù):

?十進制數(shù)字轉字符串:

下載程序測試:

?GIF取模問題:

程序貼出:

測試效果圖:

工程下載:


原圖GIF:

這里先提示一下,工程會提供原圖GIF(原圖像素64*64):

STM32 F103C8T6學習筆記10:OLED顯示屏GIF動圖取?!喴讜r鐘—動圖手表的制作~,STM32 F103 C8T6筆記,stm32,學習,筆記

程序顯示時間的問題:

首先解決一下程序顯示時間的問題:

簡單版定時器2時間計數(shù):

這里初始化定時器2 是10ms周期,然后定義變量在定時器2中斷服務函數(shù)刷新1s使得SECOND秒加一:

uint16_t YEAR,HOUR,MINUTE,SECOND;
uint16_t TimeDisplay_cnt,TimeDisplay;


//定時器2中斷服務函數(shù)
void TIM2_IRQHandler(void)
{
	if (TIM_GetITStatus(TIM2, TIM_IT_Update) == SET)
	{		
		if(++TimeDisplay_cnt==100)
		{
			TimeDisplay_cnt=0;SECOND++;
		}

		
		TIM_ClearITPendingBit(TIM2, TIM_IT_Update);//清出中斷寄存器標志位,用于退出中斷
	}
}

別忘了時分秒之間的邏輯:

		if(SECOND==60){SECOND=0;MINUTE++;}
		if(MINUTE==60){MINUTE=0;HOUR++;}
		if(HOUR==12)  {HOUR=0;}

字符串給OLED打印函數(shù):

?然后就是轉化數(shù)字字符串給OLED打印的函數(shù):

//顯示一個字符號串
void OLED_ShowString(u8 x,u8 y,u8 *chr,u8 Char_Size)
{
	unsigned char j=0;
	while (chr[j]!='\0')
	{		OLED_ShowChar(x,y,chr[j],Char_Size);
			x+=8;
		if(x>120){x=0;y+=2;}
			j++;
	}
}

?十進制數(shù)字轉字符串:

?主函數(shù)使用??? sprintf(? );? 函數(shù) ? 把十進制數(shù)字處理轉化到字符串數(shù)組中

#include "main.h"

uint16_t YEAR,HOUR,MINUTE,SECOND;
uint16_t TimeDisplay_cnt,TimeDisplay;
uint16_t BMP_cnt,BMP_FLAG;
char  buf[10];   //用于存儲oled數(shù)據(jù)


int main(void)
{	
	init_ALL();     //初始化所有函數(shù)
  while(1)
	{
		if(SECOND==60){SECOND=0;MINUTE++;}
		if(MINUTE==60){MINUTE=0;HOUR++;}
		if(HOUR==12)  {HOUR=0;}
		
		sprintf(buf,"%d",YEAR);
		OLED_ShowString(80,0,(u8 *)buf,16);
		sprintf(buf,"%d-",HOUR);
		OLED_ShowString(70,3,(u8 *)buf,12);
		sprintf(buf,"%d-",MINUTE);
		OLED_ShowString(70+15,3,(u8 *)buf,12);
		sprintf(buf,"%d",SECOND);
		OLED_ShowString(70+38,3,(u8 *)buf,12);
		
		
	}
}


//初始化所有函數(shù):
void init_ALL(void)
{
	SysTick_Init(72);         //初始化滴答計時器
	Timer2_Init();						//初始化定時器2
	i2c_GPIO_Config();	      //IIC初始化
	OLED_Init();              //初始化OLED屏幕
	OLED_Clear();             //清空屏幕數(shù)據(jù)
	YEAR=2023;
	HOUR=8;
	MINUTE=22;
}


//定時器2中斷服務函數(shù)
void TIM2_IRQHandler(void)
{
	if (TIM_GetITStatus(TIM2, TIM_IT_Update) == SET)
	{		
		if(++TimeDisplay_cnt==100)
		{
			TimeDisplay_cnt=0;SECOND++;
		}
		if(++BMP_cnt==10)										 //定時器   刷新太空人圖片
		{
			BMP_cnt=0;BMP_FLAG++;
			if(BMP_FLAG==8){BMP_FLAG=0;}
			
		}
		
		TIM_ClearITPendingBit(TIM2, TIM_IT_Update);//清出中斷寄存器標志位,用于退出中斷
	}
}

下載程序測試:

STM32 F103C8T6學習筆記10:OLED顯示屏GIF動圖取?!喴讜r鐘—動圖手表的制作~,STM32 F103 C8T6筆記,stm32,學習,筆記

?

?

?GIF取模問題:

?動圖本質是一幀一幀的圖片,因此我們先要將動圖分解,在逐個取模....這是個龐大的工程~~

?然后就是每個圖片調整大小,像素,取模:

STM32 F103C8T6學習筆記10:OLED顯示屏GIF動圖取?!喴讜r鐘—動圖手表的制作~,STM32 F103 C8T6筆記,stm32,學習,筆記

?

程序貼出:

#include "main.h"

uint16_t YEAR,HOUR,MINUTE,SECOND;
uint16_t TimeDisplay_cnt,TimeDisplay;
uint16_t BMP_cnt,BMP_FLAG;
char  buf[10];   //用于存儲oled數(shù)據(jù)

int main(void)
{	
	init_ALL();     //初始化所有函數(shù)
  while(1)
	{
		if(SECOND==60){SECOND=0;MINUTE++;}
		if(MINUTE==60){MINUTE=0;HOUR++;}
		if(HOUR==12)  {HOUR=0;}
		
		sprintf(buf,"%d",YEAR);
		OLED_ShowString(80,0,(u8 *)buf,16);
		sprintf(buf,"%02d-",HOUR);
		OLED_ShowString(65,3,(u8 *)buf,12);
		sprintf(buf,"%02d-",MINUTE);
		OLED_ShowString(65+24,3,(u8 *)buf,12);
		sprintf(buf,"%02d",SECOND);
		OLED_ShowString(65+45,3,(u8 *)buf,12);
		
		OLED_ShowChar(70,5,'N',12);
		OLED_ShowChar(70+8,5,'U',12);		
		OLED_ShowChar(70+16,5,'L',12);		
		OLED_ShowChar(70+24,5,'L',12);		
		
   OLED_ShowCHinese(70,6,0);
   OLED_ShowCHinese(70+16,6,1);		
   OLED_ShowCHinese(70+32,6,2);
		
		switch(BMP_FLAG)
		{
			case 1:OLED_DrawBMP(0,0,64,8,BMP1);  break;
			case 2:OLED_DrawBMP(0,0,64,8,BMP2);  break;
			case 3:OLED_DrawBMP(0,0,64,8,BMP3);  break;
			case 4:OLED_DrawBMP(0,0,64,8,BMP4);  break;
			case 5:OLED_DrawBMP(0,0,64,8,BMP5);  break;
			case 6:OLED_DrawBMP(0,0,64,8,BMP6);  break;
			case 7:OLED_DrawBMP(0,0,64,8,BMP7);  break;
			case 8:OLED_DrawBMP(0,0,64,8,BMP8);  break;
			case 9:OLED_DrawBMP(0,0,64,8,BMP9);  break;
			case 10:OLED_DrawBMP(0,0,64,8,BMP10);  break;
			
			case 11:OLED_DrawBMP(0,0,64,8,BMP11);  break;
			case 12:OLED_DrawBMP(0,0,64,8,BMP12);  break;
			case 13:OLED_DrawBMP(0,0,64,8,BMP13);  break;
			case 14:OLED_DrawBMP(0,0,64,8,BMP14);  break;
			case 15:OLED_DrawBMP(0,0,64,8,BMP15);  break;
			case 16:OLED_DrawBMP(0,0,64,8,BMP16);  break;
			case 17:OLED_DrawBMP(0,0,64,8,BMP17);  break;
			case 18:OLED_DrawBMP(0,0,64,8,BMP18);  break;
			case 19:OLED_DrawBMP(0,0,64,8,BMP19);  break;
			case 20:OLED_DrawBMP(0,0,64,8,BMP20);  break;		

			case 21:OLED_DrawBMP(0,0,64,8,BMP21);  break;
			case 22:OLED_DrawBMP(0,0,64,8,BMP22);  break;
			case 23:OLED_DrawBMP(0,0,64,8,BMP23);  break;
			case 24:OLED_DrawBMP(0,0,64,8,BMP24);  break;
			case 25:OLED_DrawBMP(0,0,64,8,BMP25);  break;
			case 26:OLED_DrawBMP(0,0,64,8,BMP26);  break;
			case 27:OLED_DrawBMP(0,0,64,8,BMP27);  break;
			case 28:OLED_DrawBMP(0,0,64,8,BMP28);  break;

		}
		
	}
}


//初始化所有函數(shù):
void init_ALL(void)
{
	SysTick_Init(72);         //初始化滴答計時器
	Timer2_Init();						//初始化定時器2
	i2c_GPIO_Config();	      //IIC初始化
	OLED_Init();              //初始化OLED屏幕
	OLED_Clear();             //清空屏幕數(shù)據(jù)
	YEAR=2023;
	HOUR=8;
	MINUTE=22;
	SECOND=55;
}


//定時器2中斷服務函數(shù)
void TIM2_IRQHandler(void)
{
	if (TIM_GetITStatus(TIM2, TIM_IT_Update) == SET)
	{		
		if(++TimeDisplay_cnt==100)
		{
			TimeDisplay_cnt=0;SECOND++;		if(SECOND==60){SECOND=0;MINUTE++;}
		}
		if(++BMP_cnt==10)										 //定時器   刷新太空人圖片
		{
			BMP_cnt=0;BMP_FLAG++;
			if(BMP_FLAG==29){BMP_FLAG=1;}
		}
		
		TIM_ClearITPendingBit(TIM2, TIM_IT_Update);//清出中斷寄存器標志位,用于退出中斷
	}
}

測試效果圖:

STM32 F103C8T6學習筆記10:OLED顯示屏GIF動圖取?!喴讜r鐘—動圖手表的制作~,STM32 F103 C8T6筆記,stm32,學習,筆記

?

工程下載:

https://download.csdn.net/download/qq_64257614/88232446?spm=1001.2014.3001.5503文章來源地址http://www.zghlxwxcb.cn/news/detail-660921.html

到了這里,關于STM32 F103C8T6學習筆記10:OLED顯示屏GIF動圖取?!喴讜r鐘—動圖手表的制作~的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • STM32 F103C8T6學習筆記4:時鐘樹、滴答計時器、定時器定時中斷

    STM32 F103C8T6學習筆記4:時鐘樹、滴答計時器、定時器定時中斷

    今日理解一下STM32F103 C8T6的時鐘與時鐘系統(tǒng)、滴答計時器、定時器計時中斷的配置,文章提供原理,代碼,測試工程下載。 目錄 時鐘樹與時鐘系統(tǒng): 滴答計時器: 定時器計時中斷: 測試結果: 測試工程下載: 該系統(tǒng)介紹在 STM32F10x-中文參考手冊 P56頁開始 微控制器的時鐘系

    2024年02月13日
    瀏覽(32)
  • STM32 F103C8T6學習筆記8:0.96寸單色OLED顯示屏顯示字符

    STM32 F103C8T6學習筆記8:0.96寸單色OLED顯示屏顯示字符

    使用STM32F103 C8T6 驅動0.96寸單色OLED顯示屏: OLED顯示屏的驅動,在設計開發(fā)中OLED顯示屏十分常見,因此今日學習一下。一篇文章從程序到顯示都講通。 文章提供源碼、原理解釋、測試工程下載,測試效果圖展示。 ? 目錄 OLED驅動原理—IIC通信: SSD1306 單色 0.96 OLED 顯示屏特性

    2024年02月12日
    瀏覽(23)
  • STM32 F103C8T6學習筆記13:IIC通信—AHT10溫濕度傳感器模塊

    STM32 F103C8T6學習筆記13:IIC通信—AHT10溫濕度傳感器模塊

    今日學習一下這款AHT10 溫濕度傳感器模塊,給我的OLED手環(huán)添加上測溫濕度的功能。 文章提供源碼、測試工程下載、測試效果圖。 目錄 AHT10溫濕度傳感器: 特性: 連接方式: 適用場所范圍: 程序設計: 設計目標: ?程序設計注意點: AHT10代碼: ?主函數(shù)代碼: 測試效果:

    2024年02月11日
    瀏覽(26)
  • STM32 F103C8T6學習筆記2:GPIO的認識—GPIO的基本輸入輸出—點亮一個LED

    STM32 F103C8T6學習筆記2:GPIO的認識—GPIO的基本輸入輸出—點亮一個LED

    今日繼續(xù)學習使用? STM32 F103C8T6開發(fā)板 點亮一個LED燈,文章提供源碼,測試工程,實驗效果圖,希望我的歸納總結會對大家有幫助~ 目錄 GPIO的認識與分類 : 引腳安排整理: 定時器的引腳例舉: 串口的引腳例舉: ?CAN串口通信: SPI通信: IIC通信: ?其余引腳: 燒錄引腳:

    2024年02月11日
    瀏覽(19)
  • STM32 F103C8T6學習筆記5:定時器輸出不同占空比PWM驅動舵機旋轉角度

    現(xiàn)在學習使用STM32 F103C8T6的定時器PWM模式,使用PWM驅動舵機轉動不同角度,文章提供源碼,測試工程,測試動態(tài)效果圖。 目錄 基礎原理: ?實驗目標: 測試視頻結果: 測試工程下載: 這次依舊拿出之前學習過的舵機DS3115,它的基礎原理不多加介紹,在往期講MSP432的文章有所

    2024年02月13日
    瀏覽(25)
  • STM32 HAL庫 CubeMX配置 定時器學習 F103C8T6

    STM32 HAL庫 CubeMX配置 定時器學習 F103C8T6

    開發(fā)板: STM32F103C8T6最小系統(tǒng)板 編譯環(huán)境: Keil5 MDK 輔助軟件: STM32 CubeMX 課程教學: 基于正點原子HAL庫學習教程 其余配件: 江科大STM32配件包?和 示波器一臺 備注: ?因為這塊開發(fā)板沒有基本定時器,所以本文也 沒有基本定時器的內容 ????????????本文1.3和2.1部分的

    2024年04月26日
    瀏覽(21)
  • STM32 F103C8T6學習筆記10:OLED顯示屏GIF動圖取?!喴讜r鐘—動圖手表的制作~

    STM32 F103C8T6學習筆記10:OLED顯示屏GIF動圖取?!喴讜r鐘—動圖手表的制作~

    今日嘗試做一款有動圖的OLED實時時鐘,本文需要現(xiàn)學一個OLED的GIF動圖取模 其余需要的知識點有不會的可以去我? STM32 F103C8T6學習筆記? 系列專欄自己查閱把,閑話不多,直接開肝~~~ 文章提供源碼,測試工程下載,測試效果圖。 做個簡易的時鐘,就不把RTC實時時鐘放進來學了

    2024年02月12日
    瀏覽(41)
  • STM32 F103C8T6學習筆記6:IIC通信__驅動MPU6050 6軸運動處理組件—一階互補濾波

    STM32 F103C8T6學習筆記6:IIC通信__驅動MPU6050 6軸運動處理組件—一階互補濾波

    今日主要學習一款傾角傳感器——MPU6050,往后對單片機原理基礎講的會比較少,更傾向于簡單粗暴地貼代碼,因為經(jīng)過前些日子對MSP432的學習,對原理方面也有些熟絡了,除了在新接觸它時會對其引腳、時鐘、總線等進行仔細一些的研究之外,其余驅動方面便是照搬經(jīng)驗了~

    2024年02月13日
    瀏覽(24)
  • STM32 F103C8T6學習筆記9:0.96寸單色OLED顯示屏—自由取模顯示—顯示漢字與圖片

    STM32 F103C8T6學習筆記9:0.96寸單色OLED顯示屏—自由取模顯示—顯示漢字與圖片

    今日學習0.96寸單色OLED顯示屏的自由取模顯示: 宋體漢字比較復雜,常用字符可以直接復制存下來,畢竟只有那么幾十個字母字符,但漢字實在太多了,基本不會全部放在單片機里存著,一般用到多少個字就取幾個字的模,因此漢字放在這里與自由取模一起講。 文章提供源碼

    2024年02月11日
    瀏覽(25)
  • STM32系列(HAL庫)——F103C8T6獲取DHT11溫濕度串口打印

    STM32系列(HAL庫)——F103C8T6獲取DHT11溫濕度串口打印

    在此特別鳴謝原文博主! (1)編程平臺:Keil5 (2)CubeMX (3)XCOM(串口調試助手) (1)F1的板子,本例使用經(jīng)典F103C8T6 ?(2)DHT11——溫濕度傳感器 (3)ST-link?下載器 (4)USB-TTL模塊 (5)杜邦線若干 (1)芯片選擇 STM32F103C8T6 ?(2)配置RCC、SYS、時鐘樹 配置RCC 配置SYS 配置時鐘樹 (3) 配置GPIO ?(4)配置

    2023年04月08日
    瀏覽(17)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包