VOID SetCommonRemap(UCHAR8 ucData) {
OLED_WrCmd(0xC0|ucData); // Set COM Output Scan Direction // Default => 0xC0
// 0xC0 (0x00) => Scan from COM0 to 63 // 0xC8 (0x08) => Scan from COM63 to 0 } VOID SetDisplayOffset(UCHAR8 ucData) {
OLED_WrCmd(0xD3); // Set Display Offset
OLED_WrCmd(ucData); // Default => 0x00 }
VOID SetDisplayClock(UCHAR8 ucData) {
OLED_WrCmd(0xD5); // Set Display Clock Divide Ratio / Oscillator Frequency
OLED_WrCmd(ucData); // Default => 0x80
//
D[3:0] => Display Clock Divider // D[7:4] => Oscillator Frequency } VOID SetPrechargePeriod(UCHAR8
ucData) {
OLED_WrCmd(0xD9); // Set Pre-Charge Period
OLED_WrCmd(ucData); // Default => 0x22 (2 Display Clocks
[Phase 2] / 2 Display Clocks [Phase 1])
// D[3:0] => Phase 1 Period in 1~15 Display Clocks
// D[7:4] => Phase 2 Period in 1~15 Display Clocks }
VOID SetCommonConfig(UCHAR8 ucData) {
OLED_WrCmd(0xDA); // Set COM Pins Hardware Configuration OLED_WrCmd(0x02|ucData); //
Default => 0x12 (0x10)
//
Alternative COM Pin Configuration // Disable COM Left/Right Re-Map }
VOID SetVCOMH(UCHAR8 ucData) {
OLED_WrCmd(0xDB); // Set VCOMH Deselect Level
OLED_WrCmd(ucData); // Default => 0x20 (0.77*VCC) }
VOID SetNop(VOID) {
OLED_WrCmd(0xE3); // Command for No Operation }
VOID OLED_Init(VOID) {
UCHAR8 i;
OLED_SCL = 1; OLED_RST = 0;
for(i = 0; i < 100; i++) {
_nop_(); //从上
电到下面开始初始化要有足够的时间,即等待RC复位完毕 }
OLED_RST = 1;
SetDisplayOnOff(0x00); // Display Off (0x00/0x01)
SetDisplayClock(0x80); // Set Clock as 100 Frames/Sec SetMultiplexRatio(0x3F); // 1/64 Duty (0x0F~0x3F)
SetDisplayOffset(0x00); // Shift
Mapping
RAM
Counter
(0x00~0x3F)
SetStartLine(0x00); // Set Mapping RAM Display Start Line (0x00~0x3F)
SetChargePump(0x04); // Enable Embedded DC/DC Converter (0x00/0x04)
SetAddressingMode(0x02); // Set
Page
Addressing
Mode
(0x00/0x01/0x02)
SetSegmentRemap(0x01); // Set SEG/Column Mapping 0x00左右反置 0x01正常
SetCommonRemap(0x08); // Set COM/Row Scan Direction 0x00上下
反置 0x08正常
SetCommonConfig(0x10); // Set
Sequential
Configuration
(0x00/0x10)
SetContrastControl(0xcf); // Set SEG Output Current
SetPrechargePeriod(0xF1); // Set Pre-Charge as 15 Clocks & Discharge as 1 Clock
SetVCOMH(0x40); // Set VCOM Deselect Level
SetEntireDisplay(0x00); // Disable
Entire
Display
On
(0x00/0x01)
SetInverseDisplay(0x00); // Disable
Inverse
Display
On
(0x00/0x01)
SetDisplayOnOff(0x01); // Display On (0x00/0x01)
OLED_Fill(0x00); // 初始清屏
OLED_SetPos(0,0);
return; }
VOID OLED_P6x8Char(UCHAR8 ucIdxX, UCHAR8 ucIdxY, UCHAR8 ucData) {
UCHAR8 i, ucDataTmp;
ucDataTmp = ucData-32; if(ucIdxX > 122) {
ucIdxX = 0; ucIdxY++; }
OLED_SetPos(ucIdxX, ucIdxY);
for(i = 0; i < 6; i++) {
OLED_WrDat(F6x8[ucDataTmp][i]); } }
VOID OLED_P6x8Str(UCHAR8 ucIdxX, UCHAR8 ucIdxY, UCHAR8 ucDataStr[]) {
UCHAR8 i, j, ucDataTmp;
for (j = 0; ucDataStr[j] != '\\0'; j++) {
ucDataTmp = ucDataStr[j] - 32;
if(ucIdxX > 122) {
ucIdxX = 0;
ucIdxY++; }
OLED_SetPos(ucIdxX,ucIdxY);
for(i = 0; i < 6; i++) {
OLED_WrDat(F6x8[ucDataTmp][i]); }
ucIdxX += 6; } return; }
VOID OLED_P8x16char(UCHAR8 ucIdxX, UCHAR8 ucIdxY, ucData) {
UCHAR8 i, ucDataTmp; ucDataTmp = ucData - 32; if(ucIdxX > 120) {
ucIdxX = 0; ucIdxY += 2; }
OLED_SetPos(ucIdxX, ucIdxY);
for(i = 0; i < 8; i++) {
OLED_WrDat(F8X16[(ucDataTmp << 4) + i]); }
OLED_SetPos(ucIdxX, ucIdxY + 1);
for(i = 0; i < 8; i++) {
OLED_WrDat(F8X16[(ucDataTmp << 4) + i + 8]); } return; }
VOID OLED_P8x16Str(UCHAR8 ucIdxX, UCHAR8 ucIdxY, UCHAR8 ucDataStr[]) {
UCHAR8 i, j, ucDataTmp; ucIdxY <<= 1;
for (j = 0; ucDataStr[j] != '\\0'; j++) {
ucDataTmp = ucDataStr[j] - 32;
if(ucIdxX > 120) {
ucIdxX = 0; ucIdxY += 2;
}
OLED_SetPos(ucIdxX, ucIdxY);
for(i = 0; i < 8; i++) {
OLED_WrDat(F8X16[(ucDataTmp << 4) + i]); }
OLED_SetPos(ucIdxX, ucIdxY + 1);
for(i = 0; i < 8; i++) {
OLED_WrDat(F8X16[(ucDataTmp << 4) + i + 8]); }
ucIdxX += 8; } return; } VOID
OLED_P14x16Str(UCHAR8
ucIdxX,UCHAR8 ucIdxY,UCHAR8
ucDataStr[]) {
UCHAR8 i, j;
USHORT16 usAddress;
ucIdxY <<= 1; j = 0;
while(ucDataStr[j] != '\\0') {
i = 0;
usAddress = 1;
while(F14x16_Idx[i] > 127) {
if(F14x16_Idx[i] ==
ucDataStr[j]) {
if(F14x16_Idx[i + 1] == ucDataStr[j + 1]) {
usAddress = i * 14;
break; } }
i += 2; }
if(ucIdxX > 114) {
ucIdxX = 0; ucIdxY += 2; }
if(usAddress != 1)// 显示汉字 {
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库OLED显示时钟(9)在线全文阅读。
相关推荐: