📄 oled.c
字号:
#include "common.h"
#define LOW_COL 0x00
#define HIGH_COL 0x12
#define CONTRAST 0x3F
#define COL_BASE 32
void delaytimeforOLED(void)
{
uchar i;
for(i=0;i<2;i++)
_delay_loop_2(60000);
}
void oled_initial(void)
{
OLED_POWER_ON;
delaytimeforOLED(); // It delays 1s actually
oled_reset();
SPI_MasterInit();
MainOLED_WCom(0xAE); // Display turn off
MainOLED_WCom(0x40); // set display start line
MainOLED_WCom(0x81); // CONTARST CONTROL(00H-0FFH)
MainOLED_WCom(0x3F);
MainOLED_WCom(0xA1); // SET SEGMENT RE-MAP(0A0H-0A1H) ADC=1
MainOLED_WCom(0xA4); // ENTIRE DISPLAY OFF(0A4H-0A5H)
MainOLED_WCom(0xA6); // SET NORMAL DISPLAY(0A6H-0A7H)
MainOLED_WCom(0xA8); // SET MULTIPLEX RATIO 64
MainOLED_WCom(0x23);
MainOLED_WCom(0xAD); // SET DC/DC BOOSTER(8AH=OFF,8BH=ON)
MainOLED_WCom(0x8B); // built-in DC-DC turn on
MainOLED_WCom(0xC8); // Common output scan direction set
//MainOLED_WCom(0xC0);
MainOLED_WCom(0xD3); // SET DISPLAY OFFSET(OOH-3FH)
MainOLED_WCom(0x1C);
MainOLED_WCom(0xD5); // SET FRAME FREQUENCY
MainOLED_WCom(0x70);
MainOLED_WCom(0xD9); // SET PRE_CHARGE PERIOD
MainOLED_WCom(0x22);
MainOLED_WCom(0xDA); // COM PIN CONFIGURATION(02H,12H)
MainOLED_WCom(0x12); // Alternative mode
//MainOLED_WCom(0x02);
MainOLED_WCom(0xDB); // SET VCOM DESELECT LEVEL(035H)
MainOLED_WCom(0x35);
delaytimeforOLED; // It delays 1s actually
MainOLED_WCom(0xAF); // Display on
}
void oled_reset(void)
{
CLR_RESET;
_delay_loop_2(10000); // It delays 125us actually
SET_RESET;
_delay_loop_2(60000); // It delays 1ms actually
CLR_CS;
}
void MainOLED_WCom(uchar data)
{
CLR_A0;
SPI_MasterTransmit(data);
//_delay_us(2);
}
void MainOLED_Sdata(uchar data)
{
SET_A0;
SPI_MasterTransmit(data);
//_delay_us(2);
}
void clear_screen(void)
{
unsigned char i = 0;
unsigned char j = 0;
unsigned int k = 0;
for(i=0;i<8;i++)
{
MainOLED_WCom(0x10);
MainOLED_WCom(0x04);
MainOLED_WCom(0xB0+i);
for(j=0;j<96;j++)
{
MainOLED_Sdata(0);
k++;
}
}
}
void byte_disp_8x16(uchar pag, uchar row, const prog_uchar *data, uchar flag)
{
unsigned char i,j,k=0;
unsigned char row_high = 0;
unsigned char row_low = 0;
unsigned char temp;
row += 4;
//row += 32;
row_high = (row & 0xF0)>>4;
row_low = row & 0x0F;
temp = row_low;
MainOLED_WCom(temp);
row_high|=(1<<4);
temp = row_high;
MainOLED_WCom(temp);
temp = 0xB0 | pag;
MainOLED_WCom(temp);
for(i=0;i<8;i++)
{
if(flag == 0)
temp = pgm_read_byte(data+k);
else
temp = ~pgm_read_byte(data+k);
k++;
MainOLED_Sdata(temp);
}
}
void print_asc8x16(uchar pag, uchar row, const prog_uchar *data, const prog_uchar *p, uchar flag)
{
unsigned char temp;
unsigned char i = 0;
while(*(data + i) != 0)
{
temp = *(data + i) - 32;
byte_disp_8x16(pag,row,p + 16*temp,flag);
byte_disp_8x16(++pag,row,p+16*temp+8,flag); //write next page
pag--;
i++;
row += 8;
}
}
void print_asc8x16_center(uchar pag, const prog_uchar *data, const prog_uchar *p, uchar flag)
{
unsigned char temp;
unsigned char row;
unsigned char i = 0;
i = strlen(data);
row = (96 - (i*8))/2;
i = 0;
while(*(data + i) != 0)
{
temp = *(data + i) - 32;
byte_disp_8x16(pag,row,p+16*temp,flag);
byte_disp_8x16(++pag,row,p+16*temp+8,flag); //write next page
pag--;
i++;
row += 8;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -