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

STM32 OLED顯示漢字及屏幕滾動(I2C協(xié)議)

這篇具有很好參考價值的文章主要介紹了STM32 OLED顯示漢字及屏幕滾動(I2C協(xié)議)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、任務目標

理解OLED屏顯和漢字點陣編碼原理,使用STM32F103的SPI或IIC接口實現(xiàn)以下功能:

  1. 顯示自己的學號和姓名;

  2. 顯示AHT20的溫度和濕度;

  3. 上下或左右的滑動顯示長字符。

二、材料準備

硬件:

  • STM32F103C8T6最小板
  • AHT20溫濕度傳感器
  • ST-LINK 仿真器
  • 4針腳使用I2C通信協(xié)議的OLED屏
  • 面包板
  • 杜邦線

軟件:

  • KEIL 5
  • 字模軟件

三、AHT20溫濕度傳感器的使用

可以看我上次寫的文章:STM32 I2C協(xié)議讀取溫濕度傳感器

四、OLED的使用

1.硬件

我這里使用的是4針腳的OLED屏,通信協(xié)議是I2C。
oled滾動字幕的原理,stm32,單片機,嵌入式硬件

2.字模

漢字編碼原理

  • 1、所有的漢字或者英文都是下面的原理:
    由左至右,每8個點占用一個字節(jié),最后不足8個字節(jié)的占用一個字節(jié),而且從最高位向最低位排列。

  • 2、生成的字庫說明:(以12×12例子)
    一個漢字占用字節(jié)數(shù):12÷8=1····4也就是占用了2×12=24個字節(jié)。
    編碼排序A0A0→A0FEA1A0→A2FE依次排列。
    以12×12字庫的“我”為例:“我”的編碼為CED2,所以在漢字排在CEH-AOH=2EH區(qū)的D2H-A0H=32H個。所以在12×12字庫的起始位置就是[{FE-A0}*2EH+32H]*24=104976開始的24個字節(jié)就是我的點陣模。

取字模

這里我使用的取字模軟件為PCtoLCD2002,打開軟件之后按下圖進行設置
oled滾動字幕的原理,stm32,單片機,嵌入式硬件
oled滾動字幕的原理,stm32,單片機,嵌入式硬件
輸入要得到的字模,點擊生成字模,再把生成的字模的代碼復制即可
oled滾動字幕的原理,stm32,單片機,嵌入式硬件

3.工程

這里可以用上次的AHT20的工程,復制一個,再添加OLED相關文件即可。
或者也可以直接下載我的代碼。(注意是I2C通信,4針腳屏)
oled滾動字幕的原理,stm32,單片機,嵌入式硬件
原本的字模庫中已經(jīng)有了數(shù)字和相關符號的字模,這里的10x16像素的字模庫是剛才通過軟件提取出來的,需要與數(shù)字的字模庫分開定義,因為定義的像素并不一樣。
除此之外,自帶的函數(shù)里面并沒有輸出中文的方法,需要我們自己定義。

/**
  * @brief  OLED初始化
  * @param  Line 起始行位置
  * @param  Column 起始列位置
  * @retval 無
  */
void OLED_ShowCHINESE(uint8_t Line, uint8_t Column, uint8_t Num)
{
	
	uint8_t i;
	uint8_t wide = 20;//字寬
	
	OLED_SetCursor(( Line - 1 ) * 2, ( Column - 1 )* wide);		//參數(shù)1:把光標設置在第幾頁. 參數(shù)2:把光標設置在第幾列
	for (i = 0; i < wide; i++)
	{
		OLED_WriteData(OLED_F10x16[Num][i]);			//顯示上半部分內(nèi)容
	}
	
	OLED_SetCursor(( Line - 1 ) * 2 + 1,( Column - 1) * wide);		
	for (i = 0; i < wide ; i++)
	{ 
		OLED_WriteData(OLED_F10x16[Num][i+wide]);		//顯示下半部分內(nèi)容
	}

}

這之后要實現(xiàn)滾動效果,代碼及功能如下:

				OLED_WriteCommand(0x2E); //關閉滾動
				OLED_WriteCommand(0x26); //向右滾動,27則向左
				OLED_WriteCommand(0x00); //虛擬字節(jié)
				OLED_WriteCommand(0x00); //起始頁 這里為0
				OLED_WriteCommand(0x07); //滾動速度
				OLED_WriteCommand(0x03); //終止頁 這里為3,也就是之后的姓名,學號
				OLED_WriteCommand(0x00); //虛擬字節(jié)
				OLED_WriteCommand(0xFF); //虛擬字節(jié)
				OLED_WriteCommand(0x2F); //開啟滾動

然后是主函數(shù)main.c

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "AHT20-21_DEMO_V1_3.h"
#include <stdio.h>


int main(void)
{
	
		Init_I2C_Sensor_Port();//初始化SDA,SCL的IO口的函數(shù)
		uint32_t CT_data[2];
		volatile int  c1,t1;
		Delay_1ms(500);
		OLED_Init();//初始化OLED
		if((AHT20_Read_Status()&0x18)!=0x18)
		{
			AHT20_Start_Init(); //重新初始化寄存器
			Delay_1ms(10);
		}


		OLED_ShowCHINESE(1,1,0); //第1行第1列調(diào)用字模庫第0個字 陳
		OLED_ShowCHINESE(1,2,1); //第1行第2列調(diào)用字模庫第1個字 爽
		OLED_ShowString(2,1,"632007060523"); //第二行第一列顯示字符串
		OLED_ShowCHINESE(3,1,3);//第3行第1列調(diào)用字模庫第3個字 濕
		OLED_ShowCHINESE(3,2,4);//第3行第2列調(diào)用字模庫第4個字 度
		OLED_ShowString(3,6,":"); 
		OLED_ShowCHINESE(4,1,2);//第4行第2列調(diào)用字模庫第2個字 溫
		OLED_ShowCHINESE(4,2,4);//第3行第2列調(diào)用字模庫第4個字 度
		OLED_ShowString(4,6,":"); 
		while(1)
		{
				OLED_WriteCommand(0x2E); //關閉滾動
				OLED_WriteCommand(0x26); //向右滾動,27則向左
				OLED_WriteCommand(0x00); //虛擬字節(jié)
				OLED_WriteCommand(0x00); //起始頁 這里為0
				OLED_WriteCommand(0x07); //滾動速度
				OLED_WriteCommand(0x03); //終止頁 這里為3,也就是之后的姓名,學號
				OLED_WriteCommand(0x00); //虛擬字節(jié)
				OLED_WriteCommand(0xFF); //虛擬字節(jié)
				OLED_WriteCommand(0x2F); //開啟滾動
	
				//AHT20_Read_CTdata(CT_data);       
				AHT20_Read_CTdata_crc(CT_data);   //CRC校驗
		
				while(CT_data[0]==0x00&&CT_data[1]==0x00) 
				{
					AHT20_Read_CTdata_crc(CT_data);//CRC校驗后,讀取數(shù)據(jù)
				}
				c1 = CT_data[0]*100*10/1024/1024;  
				t1 = CT_data[1]*200*10/1024/1024-500;
				
				下一步客戶處理數(shù)據(jù),我們這里用兩個字符串來表示計算得到的值
				char str1[5];
				char str2[5];
				sprintf(str1,"%.2f",c1/10.0);
				sprintf(str2,"%.2f",t1/10.0);
				OLED_ShowString(3,7,str1);//把浮點數(shù)轉(zhuǎn)為字符串顯示在屏上
				OLED_ShowString(4,7,str2);
				Delay_1ms(2000);

	}

}

4.電路連接

B1接管腳2,B0接管腳4,其他的按圖接即可,圖二中有幾根線多余,上面的兩根紅線和藍線原本是連接LED燈的,下面的三根線(藍、黃、綠)原本是連接CH340模塊的,可以不用接,本次實驗不需要。
oled滾動字幕的原理,stm32,單片機,嵌入式硬件
oled滾動字幕的原理,stm32,單片機,嵌入式硬件
圖片來源:江科大自化協(xié)

5.實驗效果

可以看到,輸出了自己的學號姓名,顯示了溫濕度,且當手靠近傳感器時,溫濕度有變化,并實現(xiàn)了滾動效果。
oled滾動字幕的原理,stm32,單片機,嵌入式硬件

五、總結(jié)

本次實驗主要使用標準庫導入了AHT20模塊和OLED模塊,實現(xiàn)了顯示溫濕度數(shù)據(jù)和學號姓名的滾動顯示。OLED屏的使用比較方便,用來調(diào)試啥的也很不錯。

六、參考資料

點陣漢字的字模讀取與顯示
基于STM32的0.96OLED基本顯示學習,及 上下或左右的滑動顯示長字符(使用硬件刷屏模式),OLED顯示變量值操作詳細解析文章來源地址http://www.zghlxwxcb.cn/news/detail-780316.html

到了這里,關于STM32 OLED顯示漢字及屏幕滾動(I2C協(xié)議)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關文章

  • STM32 硬件IIC 控制OLED I2C卡死問題

    STM32 硬件IIC 控制OLED I2C卡死問題

    #更新通知:2023-09-06 STM32L151 固件庫 使用I2C 太難了,又宕機了,建議不要在固件庫版本上嘗試硬件IIC 了,一般人真用不了,直接使用軟件模擬的,或者不要使用固件庫了,用HAL 庫吧,據(jù)說HAL 庫沒這么多問題,不死心的我還是死心了,等有空再研究吧 3.1 I2C模式,我這里選的

    2024年02月09日
    瀏覽(33)
  • 【STM32 CubeMX】I2C層次結(jié)構(gòu)、I2C協(xié)議

    【STM32 CubeMX】I2C層次結(jié)構(gòu)、I2C協(xié)議

    在STM32 CubeMX環(huán)境中,I2C(Inter-Integrated Circuit)是一種常用的串行通信協(xié)議,廣泛應用于連接各種外設和傳感器。理解I2C的層次結(jié)構(gòu)、協(xié)議和硬件結(jié)構(gòu)對于STM32微控制器的開發(fā)至關重要。通過STM32 CubeMX提供的圖形化配置工具,我們能夠更輕松地理解和配置I2C通信,同時深入了解

    2024年02月22日
    瀏覽(34)
  • STM32配合cubeMX硬件I2C驅(qū)動0.96寸OLED

    STM32配合cubeMX硬件I2C驅(qū)動0.96寸OLED

    目錄 一、簡單介紹 1.1? ?OLED 1.2? ?I2C協(xié)議 二、實戰(zhàn) 2.1 工程配置 2.2 測試工程 2.3 波形分析 三、驅(qū)動OLED 3.1?初始化代碼 3.2 清屏函數(shù) 3.3 設置坐標函數(shù) 3.4 顯示字符函數(shù) 3.5 顯示字符串函數(shù) 3.6 顯示圖片函數(shù) 附錄 驅(qū)動代碼文件 oled.c oled.h f6x8.h 有機發(fā)光二極管 (英語:Organic

    2024年02月08日
    瀏覽(39)
  • 用OLED屏幕播放視頻(2): 為OLED屏幕開發(fā)I2C驅(qū)動

    用OLED屏幕播放視頻(2): 為OLED屏幕開發(fā)I2C驅(qū)動

    下面的系列文章記錄了如何使用一塊linux開發(fā)扳和一塊OLED屏幕實現(xiàn)視頻的播放: 項目介紹 為OLED屏幕開發(fā)I2C驅(qū)動 使用cuda編程加速視頻處理 這是此系列文章的第2篇, 主要總結(jié)和記錄一個I2C從設備的驅(qū)動, 在linux內(nèi)核中如何實現(xiàn), 如何給用戶態(tài)的程序暴露合適的接口, 讓用戶態(tài)有機

    2024年02月09日
    瀏覽(19)
  • stm32中的i2c協(xié)議

    stm32中的i2c協(xié)議

    協(xié)議通訊圖 I2C上一個總線能掛載多個設備共用信號線,可以連接多個從機 只用了兩個總線,一條雙向串行數(shù)據(jù)線(SDA),一條串行時鐘線(SCL)。數(shù)據(jù)線即用來表示數(shù)據(jù),時鐘線用于數(shù)據(jù)收發(fā)同步。 每個連接到總線的設備都有獨立的地址,主機可以通過該地址進行訪問 I2C空閑

    2024年01月22日
    瀏覽(28)
  • 【【STM32----I2C通信協(xié)議】】

    【【STM32----I2C通信協(xié)議】】

    我們會發(fā)現(xiàn)I2C有兩根通信線: SCL和SDA 同步 半雙工 帶數(shù)據(jù)應答 支持總線掛載多設備(一主多從,多主多從) 硬件電路 所有I2C設備的SCL連在一起,SDA連在一起 設備的SCL和SDA均要配置成開漏輸出模式 SCL和SDA各添加一個上拉電阻,阻值一般為4.7KΩ左右 左邊的CPU就是主機,他的權

    2024年02月12日
    瀏覽(29)
  • 【STM32】STM32學習筆記-I2C通信協(xié)議(31)

    【STM32】STM32學習筆記-I2C通信協(xié)議(31)

    I2C(Inter-Integrated Circuit)總線 是一種由NXP(原PHILIPS)公司開發(fā)的兩線式串行總線,用于連接微控制器及其外圍設備。多用于主控制器和從器件間的主從通信,在小數(shù)據(jù)量場合使用,傳輸距離短,任意時刻只能有一個主機等特性。 串行的 8 位雙向數(shù)據(jù)傳輸位速率在標準模式下可

    2024年01月23日
    瀏覽(25)
  • 【W(wǎng)CH】CH32F203基于內(nèi)部RTC+I2C SSD1306 OLED時鐘和溫度顯示

    【W(wǎng)CH】CH32F203基于內(nèi)部RTC+I2C SSD1306 OLED時鐘和溫度顯示

    ??相關篇《【W(wǎng)CH】CH32F203基于內(nèi)部RTC時鐘+I2C SSD1306 OLED顯示》 ??顯示效果: ?主要是在其基礎 上增加溫度顯示,溫度數(shù)據(jù)來源于DS18B20,更換了OLED驅(qū)動顯示字體相關內(nèi)容。 ??僅作為功能演示,內(nèi)部RTC精度不高,長時間運行需要依賴第三方數(shù)據(jù)校準才行。 ??代碼是從STM32工

    2023年04月26日
    瀏覽(26)
  • 【STM32學習】——I2C通信協(xié)議&MPU6050姿態(tài)傳感器&軟件I2C讀寫MPU6050

    ? ? 目錄 前言 一、I2C通信協(xié)議 1.簡介 2.硬件電路設計 3.I2C時序(軟件)

    2024年02月16日
    瀏覽(29)
  • MSP430F5529 DriverLib 庫函數(shù)I2C驅(qū)動OLED屏幕

    MSP430F5529 DriverLib 庫函數(shù)I2C驅(qū)動OLED屏幕

    平臺:Code Composer Studio 10.4.0 MSP430F5529 LaunchPad? Development Kit (MSP?EXP430F5529LP) P3.0為SDA,P3.1為SCL OLED.c OLED.h OLED_Font.h

    2024年02月15日
    瀏覽(25)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領取紅包

二維碼2

領紅包