連接pos機(jī)顯示pin, OLED顯示 03

 新聞資訊  |   2023-05-20 09:33  |  投稿人:pos機(jī)之家

網(wǎng)上有很多關(guān)于連接pos機(jī)顯示pin, OLED顯示 03的知識,也有很多人為大家解答關(guān)于連接pos機(jī)顯示pin的問題,今天pos機(jī)之家(www.rcqwhg.com)為大家整理了關(guān)于這方面的知識,讓我們一起來看下吧!

本文目錄一覽:

1、連接pos機(jī)顯示pin

連接pos機(jī)顯示pin

前文回顧:I2C通信實(shí)例 - OLED顯示 01I2C通信實(shí)例 - OLED顯示 02

書接前文,接下來開始編寫管理OLED顯示的功能函數(shù)。

OLED初始化

OLED首次點(diǎn)亮前要做一些初始化工作。比如設(shè)置復(fù)用路數(shù),偏移量,對比度,顯示模式等等。如果默認(rèn)不滿足要求的,可以再次一并設(shè)置??梢詤⒖糞SD1306手冊中推薦的初始化流程圖進(jìn)行初始化。

void OLED_Init(void) { u8 cmdlist[] = { DISPLAY_SLEEP, //DISPlay OFF SET_MUX, 0x1F, //Multiplex ratio. No. of row to drive. SET_DISP_OFFSET, 0x00, //No vertical shift RAM_START_LINE+0U, //Start line SEG_REMAP_OFF,//Remap COL0 to SEG127 R<->L SET_COM_PIN, 0x02, //No Remap. COM_SCAN_INCR, //COM scan direction: from COM0 to COM(N-1) SET_CONTRAST, 0x0F, //contrast DISPLAY_ENTIRE_RAM, //Disable entire display ON DISPLAY_NORMAL, //Set display mode SET_OSC_FRE, 0x80,//FOCS1111, DCLK=Fosc/1 SET_PRE_CHARGE, 0x22, //Phase 1 and 2 all 2 DCLK SET_VCOMH_LEVEL, 0x30, // 0.83Vcc }; OLED_Write_CMD(cmdlist, sizeof(cmdlist)); OLED_Display_PowOn(); OLED_Clear();}

cmdlist數(shù)組中的指令沒有嚴(yán)格的順序。雙參數(shù)或多參數(shù)的指令可以放到同一行,提高程序的可讀性。最后通過OLED_Write_CMD函數(shù)一次性發(fā)送給OLED控制器。最后兩個函數(shù)是上電和清屏。

OLED顯示控制

開啟OLED的順序是先開啟電荷泵,然后開啟屏幕顯示;關(guān)閉是要先關(guān)掉電荷泵,然后關(guān)閉屏幕顯示。常用的顯示控制函數(shù)示例如下:

//Power on OLEDvoid OLED_Display_PowOn(void) { u8 cmdlist[] = {SET_CHARGE_PUMP, charGE_PUMP_ON, DISPALY_AWAKE}; OLED_Write_CMD(cmdlist, sizeof(cmdlist));}//Power off OLEDvoid OLED_Display_PowOff(void) { u8 cmdlist[] = {SET_CHARGE_PUMP, CHARGE_PUMP_OFF, DISPLAY_SLEEP}; OLED_Write_CMD(cmdlist, sizeof(cmdlist));}//Set Contrast. ctrst=[20-255]void OLDE_Set_Contrast(u16 ctrst){ u8 cmdlist[2] = {0U}; if (ctrst>255U) ctrst = 255U; if (ctrst<20U) ctrst = 20U; cmdlist[0] = SET_CONTRAST; cmdlist[1] = ctrst; //contrast OLED_Write_CMD(cmdlist, 2U);}//Clear GDDRAMvoid OLED_Clear(void) { u8 databuff[128] = {0U}; u8 i; for (i = 0U; i<Max_Page; i++) { OLED_Set_Pos(0U, i);//Page i OLED_Write_DAT(databuff, 128U); }}

如果不關(guān)電荷泵,僅發(fā)送DISPLAY_SLEEP指令可以僅關(guān)閉屏幕,進(jìn)入休眠。再次發(fā)送DISPALY_AWAKE指令可以恢復(fù)顯示。但是如果關(guān)閉了電荷泵,DISPLAY_SLEEP后再發(fā)送DISPALY_AWAKE并不會恢復(fù)顯示。OLDE_Set_Contrast函數(shù)用于設(shè)置對比度,0-255共256級,但太低意義不大,所以對范圍進(jìn)行了限制。OLED_Clear函數(shù)將顯存逐頁清零(清屏)。

OLED字符顯示函數(shù)

信息的顯示是把點(diǎn)陣字符寫入到顯存中的指定位置。需要提前準(zhǔn)備好字符庫。

//Display character at (Col x, page y)static void OLED_ShowChar(u8 x, u8 y, u8 chr, u8 Char_Hight) { u8 c = 0U, i = 0U; u8 hlfchr[8] = {0U}; c = chr-' '; //Subtract first character in ASCII table if (x>Max_Col-1) { //Go to Next Page x = 0; y = y+2; } if (Char_Hight==16) { OLED_Set_Pos(x, y);//upper page for (i = 0U; i<8U; i++) hlfchr[i] = ASCII8X16[c][i]; OLED_Write_DAT(hlfchr, 8U); OLED_Set_Pos(x, y+1);//lower page for (i = 0U; i<8U; i++) hlfchr[i] = ASCII8X16[c][i+8U]; OLED_Write_DAT(hlfchr, 8U); } else { OLED_Set_Pos(x, y);//single page for (i = 0U; i<6U; i++) hlfchr[i] = ASCII6x8[c][i]; OLED_Write_DAT(hlfchr, 6U); }}//Display a string specified like "string".void OLED_ShowString(u8 x, u8 y, char *chr, u8 Char_Hight) { u8 j = 0; while (chr[j]!='\\0') { OLED_ShowChar(x, y, chr[j], Char_Hight); x += 8; if (x>120) { x = 0; y += 2; } j++; }}

高度為16個像素的字符占兩頁,需要分兩次寫入。注意這里雖然也有個循環(huán),但只是把一行的前8列和后8列分別整理到緩存數(shù)組中,然后調(diào)用OLED_Write_DAT一次寫入8個字節(jié),異于通常的逐字節(jié)寫入。原因前面已多次解釋,不再贅述。按8個字節(jié)分頁的原因是,英文字符是半角字符。*ShowString在*ShowChar的基礎(chǔ)上,使我們可以一次寫入任意多個字符。有了*ShowString,*ShowChar在.c文件外部完全可以不用,因此聲明為Static。

ASCII碼中包含所有的數(shù)字,因此沒有必要編寫*ShowNumber。顯示數(shù)字時用sprintf函數(shù)把數(shù)字打印到一個字符串中,然后調(diào)用*ShowString就可以了。

漢字是全角字符,需要單獨(dú)處理。16×16的點(diǎn)陣字整好占兩行,因此逐行發(fā)送即可。

//Display Chinese Charactervoid OLED_ShowChinese(u8 x, u8 y, u8 no) { OLED_Set_Pos(x, y);//upper page OLED_Write_DAT((u8*)&HZ16X16[2U*no],16U); OLED_Set_Pos(x, y+1U);//lower page OLED_Write_DAT((u8*)&HZ16X16[2U*no+1U],16U);}效果

圖1. 顯示效果圖

圖1所示為顯示效果圖。右側(cè)紫色的模塊就是是前文述及的SHT35溫濕度傳感器。OLED顯示的正是傳感器實(shí)時采集到的數(shù)據(jù)。

除了上述函數(shù)外,還可以按需添加屏幕滾動顯示、休眠、掃描模式管理(默認(rèn)是頁掃描模式,還支持行掃描、列掃描)等功能函數(shù)。圖2是一個簡單的滾動效果圖。So Cool!

圖2. 滾動效果圖

總結(jié)向顯存中寫信息用HAL_I2C_Mem_Write函數(shù);為提高效率,應(yīng)將盡可能多的數(shù)據(jù)放入數(shù)組,一次性寫入。

以上就是關(guān)于連接pos機(jī)顯示pin, OLED顯示 03的知識,后面我們會繼續(xù)為大家整理關(guān)于連接pos機(jī)顯示pin的知識,希望能夠幫助到大家!

轉(zhuǎn)發(fā)請帶上網(wǎng)址:http://www.rcqwhg.com/news/49181.html

你可能會喜歡:

版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點(diǎn)僅代表作者本人。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請發(fā)送郵件至 babsan@163.com 舉報(bào),一經(jīng)查實(shí),本站將立刻刪除。