STM32F1開發(fā)標(biāo)準(zhǔn)教程 課件 ch11實(shí)驗(yàn)10-OLED顯示_第1頁(yè)
STM32F1開發(fā)標(biāo)準(zhǔn)教程 課件 ch11實(shí)驗(yàn)10-OLED顯示_第2頁(yè)
STM32F1開發(fā)標(biāo)準(zhǔn)教程 課件 ch11實(shí)驗(yàn)10-OLED顯示_第3頁(yè)
STM32F1開發(fā)標(biāo)準(zhǔn)教程 課件 ch11實(shí)驗(yàn)10-OLED顯示_第4頁(yè)
STM32F1開發(fā)標(biāo)準(zhǔn)教程 課件 ch11實(shí)驗(yàn)10-OLED顯示_第5頁(yè)
已閱讀5頁(yè),還剩39頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

實(shí)驗(yàn)10——OLED顯示卓越工程師培養(yǎng)系列本書獲深圳大學(xué)教材出版資助STM32F1開發(fā)標(biāo)準(zhǔn)教程01實(shí)驗(yàn)內(nèi)容實(shí)驗(yàn)內(nèi)容基于STM32核心板,編寫OLED驅(qū)動(dòng)。該驅(qū)動(dòng)包括8個(gè)API函數(shù),分別是初始化OLED顯示模塊函數(shù)InitOLED、開啟OLED顯示函數(shù)OLEDDisplayOn、關(guān)閉OLED顯示函數(shù)OLEDDisplayOf、更新GRAM函數(shù)OLEDRefreshGRAM、清屏函數(shù)OLEDClear、顯示數(shù)字函數(shù)OLEDShowNum、指定位置顯示字符函數(shù)OLEDShowChar、顯示字符串函數(shù)OLEDShowString,并在Main.c文件中調(diào)用這些函數(shù)驗(yàn)證OLED驅(qū)動(dòng)是否正確。通過學(xué)習(xí)STM32核心板上的OLED模塊原理圖OLED顯示原理及SSD1306工作原理02實(shí)驗(yàn)原理1.OLED顯示模塊OLED,即有機(jī)發(fā)光二極管(OrganicLight-EmittingDiode),又稱為有機(jī)電激光顯示(OrganicElectroluminescenceDisplay,OELD)。OLED由于同時(shí)具備自發(fā)光、不需背光源對(duì)比度高、厚度薄、視角廣、反應(yīng)速度快、可用于撓曲性面板、使用溫度范圍廣、構(gòu)造及制程較簡(jiǎn)單等優(yōu)異特性,被廣泛應(yīng)用于各種產(chǎn)品中。OLED顯示技術(shù)具有自發(fā)光的特性,采用非常薄的有機(jī)材料涂層和玻璃基板,當(dāng)有電流通過時(shí),有機(jī)材料就會(huì)發(fā)光。OLED顯示屏幕可視角度大,節(jié)省電能。另外,LCD需要背光源,而OLED不需要,因此,同樣的顯示,OLED效果要比LCD更好一些。1.OLED顯示模塊STM32核心板上使用的OLED顯示模塊是一款集SSD1306驅(qū)動(dòng)芯片、0.96英寸128x64分辨率顯示屏及驅(qū)動(dòng)電路為一體的集成顯示屏,可以通過SPI接口控制OLED顯示屏。OLED顯示模塊顯示效果如圖11-1所示。1.OLED顯示模塊OLED顯示屏接口電路原理圖如圖11-2所示,將OLED顯示模塊插在STM32核心板上的OLED顯示屏接口(J7),即可通過STM32核心板控制OLED顯示屏。1.OLED顯示模塊OLED顯示模塊支持的SPI通信模式需要4根信號(hào)線和1根復(fù)位控制線,分別是OLED片選信號(hào)CS、數(shù)據(jù)/命令控制信號(hào)D/C、串行時(shí)鐘線SCK、串行數(shù)據(jù)線DIN,以及復(fù)位引腳RES。因此,只能往STM32核心板上的OLED顯示模塊寫數(shù)據(jù)而不能讀數(shù)據(jù),在SPI通信模式下,每個(gè)數(shù)據(jù)長(zhǎng)度均為8位,在SCK的上升沿,數(shù)據(jù)從DIN移入SSD1306并且是高位在前,D/C線用作數(shù)據(jù)/命令控制。SPI通信模式下,寫操作時(shí)序圖如圖11-3所示。2.SSD1306的顯存SSD1306的顯存大小總共為128x64-8192bit,SSD1306將這些顯存分為8頁(yè),其對(duì)應(yīng)關(guān)系如圖11-4左上圖所示??梢钥闯?,SSD1306包含8頁(yè)每頁(yè)又包含128字節(jié),這樣剛好是128x64點(diǎn)陣。將圖11-4左上圖的PAGE3取出并放大,如圖11-4右上圖所示,圖11-4左上圖個(gè)格子1字節(jié),圖11-4右上圖每個(gè)格子是1位。從圖11-4右上圖和圖11-4右下圖中可以看出,SSD1306顯存中的SEG62、COM29位置為1,則屏幕上的62列34行對(duì)應(yīng)的點(diǎn)為點(diǎn)亮狀態(tài)。為什么顯存中的列編號(hào)與OLED顯示屏的列編號(hào)是對(duì)應(yīng)的,但顯存中的行編號(hào)與OLED顯示屏的行編號(hào)不對(duì)應(yīng)呢?這是因?yàn)镾TM32核心板的OLED顯示屏上的列與SSD1306顯存上的列是一一對(duì)應(yīng)的但顯屏上的行與SSD1306顯存上的行正好互補(bǔ)例如顯示屏的第34行對(duì)應(yīng)SSD1306顯存上的COM29。2.SSD1306的顯存3.SSD1306常用命令SSD1306的命令比較多。這里僅介紹幾個(gè)比較常用的命令,如表11-2所示。如需了解其他命令,讀者可參見SSD1306的數(shù)據(jù)手冊(cè)。序號(hào)為1的命令用于設(shè)置屏幕對(duì)比度。該命令由2字節(jié)組成,第一字節(jié)0x81為操作碼,第二字節(jié)為對(duì)比度,該值越大屏幕越亮,對(duì)比度的取值范圍為0x00~0xFF。序號(hào)為2的命令用于設(shè)置顯示開和關(guān),當(dāng)X0為0時(shí)關(guān)閉顯示,當(dāng)X0為1時(shí)開啟顯示。序號(hào)為3的命令用于設(shè)置電荷泵,該命令也由2字節(jié)組成,第一字節(jié)0x8D為操作碼第二字節(jié)的A2位為電荷泵開關(guān),該位為1時(shí)開啟電荷泵,為0時(shí)關(guān)閉電荷泵。在模塊初始化的時(shí)候,電荷泵一定要開啟,否則看不到屏幕顯示。序號(hào)為4的命令用于設(shè)置頁(yè)地址,該命令取值范圍為0xB0~0xB7,對(duì)應(yīng)頁(yè)0~7。序號(hào)為5的命用于設(shè)置列地址的低4位,該命令取值范圍為0x00~0x0F。序號(hào)為6的命令用于設(shè)置列地址的高4位,該命令取值范圍為0x10~0x1F。4.字模選項(xiàng)字模選項(xiàng)包括點(diǎn)陣格式、取模走向和取模方式,其中點(diǎn)陣格式又分為陰碼(1表示亮0表示滅)和陽碼(1表示滅、0表示亮),取模走向可以選擇逆向(低位在前)和順向(高位在前),取模方式可以選擇逐列式、逐行式列行式和行列式。本實(shí)驗(yàn)的字模選項(xiàng)為“16x16字體順向逐列式(陰碼)”,為了更加清晰地說明這種字模,以圖11-5所示的問號(hào)為例進(jìn)行講解。需要說明的是,漢字是方塊字,因此,16x16字體的漢字像素為16x16,而16x16字體的字符(如數(shù)字、標(biāo)點(diǎn)符號(hào)、英文大寫字母和英文小寫字母)像素為16x8。逐列式表示按照列進(jìn)行取模,左上角的8個(gè)格子為第一字節(jié),高位在前,即0x00,左下角的8個(gè)格子為第二字節(jié),即0x00,第三字節(jié)為0x0E,第四字節(jié)為0x00,依次向下,分別是0x12、0x000x10、0x0C、0x10、0x6C、0x10、0x80、0x0F、0x00、0x00、0x00。4.字模選項(xiàng)通過問號(hào)的取模過程,我們了解到字符取模過程還是比較復(fù)雜的。然而,OLED應(yīng)用中常常使用的字符非常多,有時(shí)候有數(shù)字、標(biāo)點(diǎn)符號(hào)、英文大寫字母、英文小寫字母,有時(shí)候還包括漢字,而且這些字符的字體和字寬有非常多的選擇,因此,我們就需要借助取模軟件。在本書配套資料包的“02相關(guān)軟件”目錄下有一個(gè)名為“PCtoLCD2002完美版”的取模軟件讀者可以在“PCtoLCD2002完美版”文件夾中找到PCtOLCD2002exe并雙擊,該軟件運(yùn)行之后的界面如圖11-6左圖所示。單擊菜單欄中的“選項(xiàng)”,按照?qǐng)D11-6右圖所示選擇“點(diǎn)陣格式”“取模走向”“自定義格式”“取模方式”和“輸出數(shù)制”等,然后,在圖11-6左圖中間欄嘗試輸入OLED12864,并單擊“生成字模”按鈕,之后就可以使用最終生成的字模(數(shù)組格式)了。5.ASCI碼表與取模工具我們最常使用OLED顯示數(shù)字、標(biāo)點(diǎn)符號(hào)、英文大寫字母和英文小寫字母。為了便于開發(fā),可以提前通過取模軟件取出常用字符的字模,保存到數(shù)組,在OLED應(yīng)用設(shè)計(jì)中,直接調(diào)用這些數(shù)組即可將對(duì)應(yīng)字符顯示到OLED顯示屏。由于ASCI碼表幾乎涵蓋了我們最常使用的數(shù)字、標(biāo)點(diǎn)符號(hào)、英文大寫字母和英文小寫字母,因此,本實(shí)驗(yàn)以ASCII碼表為基礎(chǔ),將其中95個(gè)字符(ASCI值為32~126)生成字模數(shù)組。ASCI碼表如表11-3所示ASCI(AmericanStandardCodefornformationInterchange,美國(guó)信息交換標(biāo)準(zhǔn)代碼)是于拉丁字母的一套計(jì)算機(jī)編碼系統(tǒng),主要用于顯示現(xiàn)代英語和其他西歐語言,是現(xiàn)今最通用的計(jì)算機(jī)編碼系統(tǒng)。6.STM32的GRAM與SSD1306的GRAMSTM32通過向OLED驅(qū)動(dòng)芯片SSD1306的GRAM寫入數(shù)據(jù)實(shí)現(xiàn)OLED顯示。在LED應(yīng)用設(shè)計(jì)中,我們常常只需要更改某幾個(gè)字符,比如,通過OLED顯示時(shí)間,每秒只需要更新秒值,只有在進(jìn)位時(shí)才會(huì)更新小時(shí)值或分鐘值。為了確保之前寫入的數(shù)據(jù)不被覆蓋,可以采用“讀→改→寫”的方式,也就是將SSD1306的GRAM中原有的數(shù)據(jù)讀取到STM32的GRAM(實(shí)際上是內(nèi)部SRAM),然后對(duì)STM32的GRAM進(jìn)行修改最后再寫入SSD1306的GRAM,如圖11-7所示。6.STM32的GRAM與SSD1306的GRAM“讀→改→寫”的方式要求STM32既能寫SSD1306,還要能讀SSD1306,但是,STM32核心板只有寫OLED顯示模塊的數(shù)據(jù)線(OLEDDIN),沒有讀OLED顯示模塊的數(shù)據(jù)線,因此,不支持讀OLED顯示模塊操作。當(dāng)然,也沒有必要,而且,“讀→改→寫”的方式效率低。所以推薦基于“改→寫”的方式實(shí)現(xiàn)OLED顯示,這種方式通過在STM32的內(nèi)部建立一個(gè)GRAM(128x8字節(jié),對(duì)應(yīng)128x64像素),與SSD1306上的GRAM對(duì)應(yīng),在需要更新顯示時(shí),只需修改STM32的GRAM,然后一次性把STM32的GRAM寫入SSD1306的GRAM即可,如圖11-8所示。7.OLED顯示模塊顯示流程OLED顯示模塊顯示流程如圖11-9所示。首先,配置OLED相關(guān)的GPIO,其次,將OLED_RES拉低10ms之后再將OLED_RES拉高,對(duì)SSD1306進(jìn)行復(fù)位,接著,關(guān)閉顯示,配置SSD1306,配置完SSD1306之后再開啟顯示,并執(zhí)行清屏操作,然后寫STM32上的GRAM,最后,將STM32上的GRAM更新到SSD1306上,這樣就完成了OLED的顯示。03實(shí)驗(yàn)步驟步驟1:首先,將“D:STM32KeilTestMateria10.OLED顯示實(shí)驗(yàn)”文件夾復(fù)制到“D:STM32KeilTest\Product”文件夾中。然后,雙擊運(yùn)行“D:STM32KeilTestProduct\10.OLED顯示實(shí)驗(yàn)Project”文件夾中的STM32KeilPrjuvprojx,單擊工具中的簡(jiǎn)按鈕。當(dāng)BuildOuput欄出現(xiàn)FromELF:creatinghexfle.時(shí),表示已經(jīng)成功生成hex文件,出現(xiàn)0Error(s)Warning(s)表示編譯成功。最后,將axf文件下載到STM32的內(nèi)部Flash,觀察STM32核心板上的兩個(gè)LED是否交替閃爍。如果兩個(gè)LED交替閃爍,串口正常輸出字符串,表示原始工程是正確的,接著就可以進(jìn)入下一步操作。復(fù)制并編譯原始工程步驟2:首先,將“D:STM32KeilTestProduct10.0LED顯示實(shí)驗(yàn)ApplOLED”文件夾中的OLED.c添加到App分組,具體操作可參見2.3節(jié)步驟8。然后將“D:STM32KeilTestProduct10.0LED顯示實(shí)驗(yàn)ApplOLED”路添加到IncludePaths欄,具體操作可參見2.3節(jié)步驟11。添加OLED文件對(duì)步驟3:單擊

按鈕進(jìn)行編譯,編譯結(jié)束后,在Project面板中,雙擊OLED.c下的OLED.h。在OLEDh文件的“包含頭文件”區(qū),添加代碼#include"DataType.h"。在OLEDh文件的“API函數(shù)聲明”區(qū)添加如序清單11-1所示的API函數(shù)聲明代碼InitOLED函數(shù)用于初始化OLED顯示模塊,OLEDDisplayOn函數(shù)用于開啟OLED顯示OLEDDisplayOf函數(shù)用于關(guān)閉OLED顯示OLEDRefreshGRAM函數(shù)用于將STM32的GRAM更新到SSD1306的GRAM,OLEDClear函數(shù)用于清除OLED顯示,OLEDShowChar函數(shù)用于在指定位置顯示一個(gè)字符,OLEDShowNum函數(shù)用于顯示數(shù)字,OLEDShowString函數(shù)用于顯示字符串。完善OLED.h文件步驟4:在OLED.c文件的“包含頭文件”區(qū),添加代碼#include"stm32f10xconf.h"、#include"OLEDFont.h"和#include"SysTick.h"。在OLEDc文件的“宏定義”區(qū),添加如程序清單11-2所示的宏定義代碼。LEDWriteByt函數(shù)既可以向OLED顯示模塊寫數(shù)據(jù)又可以寫命令,OLED_CMD表示寫命令,OLED_DATA表示寫數(shù)據(jù)。CLR_OLED_CS0通過GPIO_ResetBits函數(shù)將CS(OLED_CS)腳的電平拉低(清零)SET_OLED_CSO通過GPIO_SetBits函數(shù)將CS(OLED_CS)引腳的電平拉高(置為1),其余8個(gè)宏定義類似,這里不再贅述。完善OLED.c文件步驟4:完善OLED.c文件步驟4:在OLED.c文件的“內(nèi)部變量”區(qū),添加內(nèi)部變量的定義代碼,如程序清單11-3所示s_iOLEDGRAM是STM32的GRAM,大小為128x8字節(jié),與SSD1306上的GRAM對(duì)應(yīng)本實(shí)驗(yàn)是先將需要顯示到OLED顯示模塊上的數(shù)據(jù)寫入STM32的GRAM然后再將STM32的GRAM寫入SSD1306的GRAM。在OLED.c文件的“內(nèi)部函數(shù)聲明”區(qū),添加內(nèi)部函數(shù)的聲明代碼,如程序清單11-4所示。完善OLED.c文件步驟4:在OLEDc文件的“內(nèi)部函數(shù)實(shí)現(xiàn)”區(qū),添加ConfigOLEDGPIO函數(shù)的實(shí)現(xiàn)代碼,如程序清單11-5所示。下面按照順序?qū)onfigOLEDGPIO函中的語進(jìn)行解釋說明。(1)本實(shí)驗(yàn)是通過PB12(OLED_CS)、PB14(OLED_RES、PC3(OLED_DC)PB13(OLED_SCK)和PB15(OLED_DIN)實(shí)現(xiàn)的,因此,需要通過RCC_APB2PeriphClockCmd函數(shù)使能GPIOB和GPIOC時(shí)鐘。(2)通過GPIOIit函數(shù)將PB12、PB13PB14PB15和PC3配置為推挽輸出模式,并通過GPIOSetBits函數(shù)將這5個(gè)引腳的初始電平設(shè)置為高電平。完善OLED.c文件步驟4:在OLEDc文件的“內(nèi)部函數(shù)實(shí)現(xiàn)”區(qū),在ConfigOLEDGPIO函數(shù)實(shí)現(xiàn)區(qū)的后面添加ConfigOLEDReg函數(shù)的實(shí)現(xiàn)代碼,如程序清單11-6所示。下面按照順序?qū)onfigOLEDReg函數(shù)中的語句進(jìn)行解釋說明。(1)ConfigOLEDReg函數(shù)的第一行代碼是通過OLEDWriteByte函數(shù)向SSD1306寫入0xAE關(guān)閉OLED顯示的。(2)ConfigOLEDReg函數(shù)中間的代碼主要是通過寫SSD1306的寄存器,配置SSD1306,包括設(shè)置時(shí)鐘分頻系數(shù)、振蕩頻率、驅(qū)動(dòng)路數(shù)、顯示偏移、顯示對(duì)比度、電荷泵等,讀者可以通過閱讀SSD1306數(shù)據(jù)手冊(cè)深入了解這些命令。(3)ConfigOLEDReg函數(shù)的最后一行代碼是通過OLEDWriteByte函數(shù)向SSD1306寫入0xAF開啟OLED顯示的。完善OLED.c文件步驟4:在OLEDc文件的“內(nèi)部函數(shù)實(shí)現(xiàn)”區(qū),在ConfgOLEDReg函數(shù)實(shí)現(xiàn)區(qū)的后面添加OLEDWriteByte函數(shù)的實(shí)現(xiàn)代碼,如程序清單11-7所示。下面按照順序?qū)LEDWriteByte函數(shù)中的語句進(jìn)行解釋說明。(1)OLEDWriteBvte函數(shù)是向SSD1306寫入1字節(jié),參數(shù)dat是要寫入的數(shù)據(jù)或命令。參數(shù)cmd為0表示寫入命(宏定義OLED_CMD為0)將OLEDDC引腳通過CLR_OLED_DCO拉低;參數(shù)cmd為1表示寫入數(shù)據(jù)(宏定義OLED_DATA為1)將OLED_DC引腳通過SET_OLED_DC0拉高。完善OLED.c文件步驟4:(2)將OLED_CS引腳通過CLR_OLED_CS0拉低,即片選信號(hào)拉低,為寫入數(shù)據(jù)或命令做準(zhǔn)備。(3)在OLED_SCK引腳上升沿,分8次,通過OLED_DIN引腳SSD1306寫入數(shù)據(jù)或命令,OLED_DIN引腳通過CLR_OLED_DINO拉低,通過SET_OLED_DINO拉高。OLED_SCK引腳通過CLR_OLED_SCK()拉低,通過CLR_OLED_SCK()拉高。(4)完成數(shù)據(jù)或命令的寫入之后,將OLED_CS引腳通過SET_OLED_SCK()拉高。完善OLED.c文件步驟4:在OLED.c文件的“內(nèi)部函數(shù)實(shí)現(xiàn)”區(qū),在OLEDWriteByte函數(shù)實(shí)現(xiàn)區(qū)的后面添加OLEDDrawPoint函數(shù)的實(shí)現(xiàn)代碼,如程序清單11-8所。OLEDDrawPoint函數(shù)的參數(shù)有3個(gè),分別是x和y坐標(biāo),以及t(1為點(diǎn)亮OLED上的某一點(diǎn)0為熄滅OLED上的某一點(diǎn))。xy坐標(biāo)體系的坐標(biāo)原點(diǎn)位于OLED顯示屏的左上角,這是因?yàn)轱@存中的列編號(hào)與OLED顯示屏的列編號(hào)是對(duì)應(yīng)的,但顯存中的行編號(hào)與OLED顯示屏的行編號(hào)不對(duì)應(yīng)(可參見11.2.2節(jié))。比如,OLEDDrawPoint(127.631)表示點(diǎn)亮OLED屏幕的下角對(duì)應(yīng)的點(diǎn),但是,實(shí)際上是向STM32的GRAM(與SSD1306的GRAM對(duì)應(yīng))即sLEDGRAMT1270的最低位寫入1。OLEDDrawPoint函數(shù)體前半部分實(shí)現(xiàn)OLED顯示屏物理標(biāo)到SSD1306顯存標(biāo)的轉(zhuǎn)換,后半部分根據(jù)參數(shù)t向SSD1306顯存的某一位寫入1或0。完善OLED.c文件步驟4:在OLEDc文件的“內(nèi)部函數(shù)實(shí)現(xiàn)”區(qū)在ConfigOLEDGPIO函數(shù)實(shí)現(xiàn)區(qū)的后面添加CalcPow函數(shù)的實(shí)現(xiàn)代碼,如程序清單11-9所示。CalcPow函數(shù)的參數(shù)為m和n,最終返回值為m的n次方結(jié)果。完善OLED.c文件步驟4:在OLEDc文件的“API函數(shù)實(shí)現(xiàn)”區(qū),添加InitOLED函數(shù)的實(shí)現(xiàn)代碼如程序清單11-10所示。下面按照順序?qū)nitOLED函數(shù)中的語句進(jìn)行解釋說明。(1)ConfigOLEDGPIO函數(shù)用于配置OLED顯示模塊相關(guān)的5個(gè)GPIO。(2)將OLED_RES拉低10ms,對(duì)SSD1306進(jìn)行復(fù)位,然后,再將OLED_RES拉高。(3)OLED_RES拉高10ms之后,再通過ConfigOLEDReg函數(shù)配置SSD1306。(4)通過OLEDClear函數(shù)清除OLED顯示屏的內(nèi)容。完善OLED.c文件步驟4:在OLEDc文件的“API函數(shù)實(shí)現(xiàn)”區(qū),在IitOLED函數(shù)實(shí)現(xiàn)區(qū)的后面添加OLEDDisplayOn和OLEDDisplayof函數(shù)的實(shí)現(xiàn)代碼,如程序清單11-11所示。下面按照順序?qū)LEDDisplayOn和OLEDDisplayOf函數(shù)中的語進(jìn)行解釋說明。(1)開啟OLED顯示之前,要先打開電荷泵,因此,需要通過OLEDWriteByte函數(shù)向SSD1306寫入0x8D和0x14,然后,通過OLEDWriteByte函數(shù)向SSD1306寫入0xAF開啟OLED顯示。(2)關(guān)閉OLED顯示之前,要先關(guān)閉電荷泵,因此,需要通過OLEDWriteByte函數(shù)向SSD1306寫入0x8D和0x10,然后,通過OLEDWriteByte函數(shù)向SSD1306寫入0xAE關(guān)閉OLED顯示。完善OLED.c文件步驟4:在OLED.c文件的“API函數(shù)實(shí)現(xiàn)”區(qū),在OLEDDisplayof函數(shù)實(shí)現(xiàn)區(qū)的后面添加OLEDRefreshGRAM函數(shù)的實(shí)現(xiàn)代碼,如程序清單11-12所示。OLED顯示屏有128x64,合計(jì)8192個(gè)像素點(diǎn),對(duì)應(yīng)SSD1306顯存的8頁(yè)x128字節(jié)/頁(yè),合計(jì)1024字節(jié)。OLEDRefreshGRAM函數(shù)分為8次大循環(huán)(按照從PAGEO到PAGE7的順序)每次寫1頁(yè)每頁(yè)調(diào)用OLEDWriteByte函數(shù)分為128次小循環(huán)(按照從SEGO到SEG127的順序)每次1字節(jié)總共寫1024字節(jié),對(duì)應(yīng)8192個(gè)點(diǎn)。OLEDRefreshGRAM按照頁(yè)為單位將STM32的GRAM寫入SSD1306的GRAM每頁(yè)通過OLEDWriteByte函數(shù)分為128次向SSD1306的GRAM寫入數(shù)據(jù),因此,在進(jìn)行頁(yè)寫入操作之前,需要通過OLEDWriteByte函數(shù)設(shè)置頁(yè)地址和列地址,每次設(shè)置的頁(yè)地址按照從PAGEO到PAGE7的順序,而每次設(shè)置的列地址固定為0x00.完善OLED.c文件步驟4:在OLEDc文件的“API函數(shù)實(shí)現(xiàn)”區(qū),在OLEDRefreshGRAM函數(shù)實(shí)現(xiàn)區(qū)的后面添加OLEDClear函數(shù)的實(shí)現(xiàn)代碼,如程序清單11-13所示。OLEDCIear函數(shù)用于清除OLED顯示屏,先向STM32的GRAM即s_iOLEDGRAM的每一字節(jié)寫入0x00,然后再將STM32的GRAM通過OLEDRefreshGRAM函數(shù)寫入SSD1306的GRAM。完善OLED.c文件步驟4:在OLED.c文件的“API函數(shù)實(shí)現(xiàn)”區(qū),在OLEDClear函數(shù)實(shí)現(xiàn)區(qū)的后面添加OLEDShowChar函數(shù)的實(shí)現(xiàn)代碼,如程序清單11-14所示。下面按照順序?qū)LEDShowChal函數(shù)中的語句進(jìn)行解釋說明。(1)OLEDShowChar函數(shù)用于在指定位置顯示一個(gè)字符,字符位置由參數(shù)x和y確定待顯示的字符以整數(shù)形式(ASCI碼)存放于參數(shù)chr。參數(shù)size是字體選項(xiàng)16代表16x16字體(漢字像素為16x16,字符像素為16x8),12代表12x12字體(漢字像素為12x12,字符像素為12x6),最后一個(gè)參數(shù)mode用于選擇顯示方式,其中mode為1代表陰碼顯示(1表示亮,0表示滅),mode為0代表陽碼顯示(1表示滅,0表示亮)。完善OLED.c文件步驟4:(2)由于本實(shí)驗(yàn)只對(duì)ASCII碼表中的95個(gè)字符(見11.25節(jié)進(jìn)行取模126字體字模存放于g_iASCII1206數(shù)組,16x8字體字模存放于g_iASCII1608數(shù)組這95個(gè)字符的第一個(gè)字符是ASCI碼表的空格(空格的ASCI值為32)而且所有字符的字模都是按照ASCI碼表順序存放于數(shù)組g_iAsCII1206和g_iASC1608的,又由于OLEDShowChar函數(shù)的參數(shù)chr是字符型數(shù)據(jù)(以ASCI碼存放)。因此,需要將chr減去空格的ASCI值(32)即可得到chr在數(shù)組中的索引。完善OLED.c文件步驟4:(3)對(duì)于16x16字體的字符(實(shí)際像素是16x8),每個(gè)字符由16字節(jié)組成每1字節(jié)由8個(gè)有效位組成,每個(gè)位對(duì)應(yīng)1個(gè)點(diǎn),因此,分為兩個(gè)循環(huán)畫點(diǎn),其中16個(gè)大循環(huán),每次取出1字節(jié),8個(gè)小循環(huán),每次畫1個(gè)點(diǎn)。對(duì)于12x12字體的字符(實(shí)際像素是12x6),每個(gè)字符由12字節(jié)組成,每1字節(jié)由6個(gè)有效位組成,每個(gè)位對(duì)應(yīng)1個(gè)點(diǎn),同樣分為兩個(gè)循環(huán)點(diǎn),其中12個(gè)大循環(huán),每次取出1字節(jié)(只有6個(gè)有效位),6個(gè)小循環(huán),每次畫1個(gè)點(diǎn)。本實(shí)驗(yàn)的字模選項(xiàng)為“16x16字體順向逐列式(陰碼)”(見11.2.4節(jié))因此在STM32的GRAM按照字節(jié)寫入數(shù)據(jù)時(shí),是按列寫入的。完善OLED.c文件步驟4:在OLED.c文件的“API函數(shù)實(shí)現(xiàn)”區(qū),在OLEDShowChar函數(shù)實(shí)現(xiàn)區(qū)的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論