//***************************************************************************** // //! Clears the OLED display. //! //! This function will clear the display RAM. All pixels in the display will //! be turned off. //! //! \return None. // //***************************************************************************** void RIT128x96x4Clear(void) { static const unsigned char pucCommand1[] = { 0x15, 0, 63 }; static const unsigned char pucCommand2[] = { 0x75, 0, 127 }; unsigned long ulRow, ulColumn; // // Clear out the buffer used for sending bytes to the display. // *(unsigned long *)&g_pucBuffer[0] = 0; *(unsigned long *)&g_pucBuffer[4] = 0; // // Set the window to fill the entire display. // RITWriteCommand(pucCommand1, sizeof(pucCommand1)); RITWriteCommand(pucCommand2, sizeof(pucCommand2)); RITWriteCommand(g_pucRIT128x96x4HorizontalInc, sizeof(g_pucRIT128x96x4HorizontalInc)); // // Loop through the rows // for(ulRow = 0; ulRow < 96; ulRow++) { // // Loop through the columns. Each byte is two pixels, // and the buffer hold 8 bytes, so 16 pixels are cleared // at a time. // for(ulColumn = 0; ulColumn < 128; ulColumn += 8 * 2) { // // Write 8 clearing bytes to the display, which will // clear 16 pixels across. // RITWriteData(g_pucBuffer, sizeof(g_pucBuffer)); } } }
void LCM_WriteByte(unsigned char x, unsigned char y, unsigned char bak) { unsigned char pucCommand1[3] = { 0x15, 0, 0 }; unsigned char pucCommand2[3] = { 0x75, 0, 0 }; g_pucBuffer[0] = bak; pucCommand1[1] = x>>1; pucCommand1[2] = x>>1; pucCommand2[1] = y; pucCommand2[2] = y; // Set the window to fill the entire display. // RITWriteCommand(pucCommand1, sizeof(pucCommand1)); RITWriteCommand(pucCommand2, sizeof(pucCommand2)); RITWriteCommand(g_pucRIT128x96x4HorizontalInc, sizeof(g_pucRIT128x96x4HorizontalInc)); RITWriteData(g_pucBuffer, 1); }
//***************************************************************************** // //! Displays a string on the OLED display. //! //! \param pcStr is a pointer to the string to display. //! \param ulX is the horizontal position to display the string, specified in //! columns from the left edge of the display. //! \param ulY is the vertical position to display the string, specified in //! rows from the top edge of the display. //! \param ucLevel is the 4-bit gray scale value to be used for displayed text. //! //! This function will draw a string on the display. Only the ASCII characters //! between 32 (space) and 126 (tilde) are supported; other characters will //! result in random data being draw on the display (based on whatever appears //! before/after the font in memory). The font is mono-spaced, so characters //! such as ``i'' and ``l'' have more white space around them than characters //! such as ``m'' or ``w''. //! //! If the drawing of the string reaches the right edge of the display, no more //! characters will be drawn. Therefore, special care is not required to avoid //! supplying a string that is ``too long'' to display. //! //! \note Because the OLED display packs 2 pixels of data in a single byte, the //! parameter \e ulX must be an even column number (for example, 0, 2, 4, and //! so on). //! //! \return None. // //***************************************************************************** void RIT128x96x4StringDraw(const char *pcStr, unsigned long ulX, unsigned long ulY, unsigned char ucLevel) { unsigned long ulIdx1, ulIdx2; unsigned char ucTemp; // // Check the arguments. // ASSERT(ulX < 128); ASSERT((ulX & 1) == 0); ASSERT(ulY < 96); ASSERT(ucLevel < 16); // // Setup a window starting at the specified column and row, ending // at the right edge of the display and 8 rows down (single character row). // g_pucBuffer[0] = 0x15; g_pucBuffer[1] = ulX / 2; g_pucBuffer[2] = 63; RITWriteCommand(g_pucBuffer, 3); g_pucBuffer[0] = 0x75; g_pucBuffer[1] = ulY; g_pucBuffer[2] = ulY + 7; RITWriteCommand(g_pucBuffer, 3); RITWriteCommand(g_pucRIT128x96x4VerticalInc, sizeof(g_pucRIT128x96x4VerticalInc)); // // Loop while there are more characters in the string. // while(*pcStr != 0) { // // Get a working copy of the current character and convert to an // index into the character bit-map array. // ucTemp = *pcStr++ & 0x7f; if(ucTemp < ' ') { ucTemp = 0; } else { ucTemp -= ' '; } // // Build and display the character buffer. // for(ulIdx1 = 0; ulIdx1 < 6; ulIdx1 += 2) { // // Convert two columns of 1-bit font data into a single data // byte column of 4-bit font data. // for(ulIdx2 = 0; ulIdx2 < 8; ulIdx2++) { g_pucBuffer[ulIdx2] = 0; if(g_pucFont[ucTemp][ulIdx1] & (1 << ulIdx2)) { g_pucBuffer[ulIdx2] = (ucLevel << 4) & 0xf0; } if((ulIdx1 < 4) && (g_pucFont[ucTemp][ulIdx1 + 1] & (1 << ulIdx2))) { g_pucBuffer[ulIdx2] |= (ucLevel << 0) & 0x0f; } } // // Send this byte column to the display. // RITWriteData(g_pucBuffer, 8); ulX += 2; // // Return if the right side of the display has been reached. // if(ulX == 128) { return; } } } }