OLED u OLED SSD 1306 void OLEDInitvoid IOio

  • Slides: 22
Download presentation

OLED实验 u. OLED初始化 //初始化SSD 1306 void OLED_Init(void) { …//设置IO口模式,所有用到的io口设置为推挽模式。 GPIO_Init(); …//初始化代码,写相关寄存器 OLED_WR_Byte(0 x. AE,

OLED实验 u. OLED初始化 //初始化SSD 1306 void OLED_Init(void) { …//设置IO口模式,所有用到的io口设置为推挽模式。 GPIO_Init(); …//初始化代码,写相关寄存器 OLED_WR_Byte(0 x. AE, OLED_CMD); //关闭显示 OLED_WR_Byte(0 x. D 5, OLED_CMD); //设置时钟分频因子, 震荡频率 OLED_WR_Byte(80, OLED_CMD); //[3: 0], 分频因子; [7: 4], 震荡频率 OLED_WR_Byte(0 x. A 8, OLED_CMD); //设置驱动路数 OLED_WR_Byte(0 X 3 F, OLED_CMD); //默认 0 X 3 F(1/64) OLED_WR_Byte(0 x. D 3, OLED_CMD); //设置显示偏移 OLED_WR_Byte(0 X 00, OLED_CMD); //默认为 0 … … OLED_Clear(); }

OLED实验 u. OLED写一个字节 //向SSD 1306写入一个字节。 //dat: 要写入的数据/命令 //cmd: 数据/命令标志 0, 表示命令; 1, 表示数据; void

OLED实验 u. OLED写一个字节 //向SSD 1306写入一个字节。 //dat: 要写入的数据/命令 //cmd: 数据/命令标志 0, 表示命令; 1, 表示数据; void OLED_WR_Byte(u 8 dat, u 8 cmd) { DATAOUT(dat); if(cmd) OLED_RS_Set(); else OLED_RS_Clr(); OLED_CS_Clr(); OLED_WR_Set(); OLED_CS_Set(); OLED_RS_Set(); }

OLED实验 u. OLED更新缓存,显示内容。 u 8 OLED_GRAM[128][8]; void OLED_Refresh_Gram(void) { u 8 i, n; for(i=0;

OLED实验 u. OLED更新缓存,显示内容。 u 8 OLED_GRAM[128][8]; void OLED_Refresh_Gram(void) { u 8 i, n; for(i=0; i<8; i++) { OLED_WR_Byte (0 xb 0+i, OLED_CMD); //设置页地址(0~7) OLED_WR_Byte (0 x 00, OLED_CMD); //设置显示位置—列低地址 OLED_WR_Byte (0 x 10, OLED_CMD); //设置显示位置—列高地址 for(n=0; n<128; n++) OLED_WR_Byte(OLED_GRAM[n][i], OLED_DATA); } }

OLED实验 u. OLED画点函数 void OLED_Draw. Point(u 8 x, u 8 y, u 8 t)

OLED实验 u. OLED画点函数 void OLED_Draw. Point(u 8 x, u 8 y, u 8 t) { u 8 pos, bx, temp=0; if(x>127||y>63)return; //超出范围了. pos=7 -y/8; bx=y%8; temp=1<<(7 -bx); if(t)OLED_GRAM[x][pos]|=temp; else OLED_GRAM[x][pos]&=~temp; }

OLED实验 u OLED字符显示函数 //在指定位置显示一个字符, 包括部分字符 //x: 0~127 y: 0~63 //mode: 0, 反白显示; 1, size:

OLED实验 u OLED字符显示函数 //在指定位置显示一个字符, 包括部分字符 //x: 0~127 y: 0~63 //mode: 0, 反白显示; 1, size: 选择字体 12/16/24 void OLED_Show. Char(u 8 x, u 8 y, u 8 chr, u 8 size, u 8 mode) { u 8 temp, t, t 1; u 8 y 0=y; u 8 csize=(size/8+((size%8)? 1: 0))*(size/2); //得到字体一个字符对应点阵集所占的字节数 chr=chr-' '; //得到偏移后的值 for(t=0; t<csize; t++) { if(size==12)temp=asc 2_1206[chr][t]; //调用 1206字体 else if(size==16)temp=asc 2_1608[chr][t]; //调用 1608字体 else if(size==24)temp=asc 2_2412[chr][t]; //调用 2412字体 else return; //没有的字库 for(t 1=0; t 1<8; t 1++) { if(temp&0 x 80)OLED_Draw. Point(x, y, mode); else OLED_Draw. Point(x, y, !mode); temp<<=1; y++; if((y-y 0)==size) { y=y 0; x++; break; } }

OLED实验 u 字符码表 const unsigned char oled_asc 2_1206[95][12]={ {0 x 00, 0 x 00,

OLED实验 u 字符码表 const unsigned char oled_asc 2_1206[95][12]={ {0 x 00, 0 x 00, 0 x 00, 0 x 00}, /*" ", 0*/ {0 x 18, 0 x 00, 0 x 24, 0 x. C 0, 0 x 1 B, 0 x 00, 0 x 0 D, 0 x 80, 0 x 32, 0 x 40, 0 x 01, 0 x 80}, /*"%", 5*/ {0 x 03, 0 x 80, 0 x 1 C, 0 x 40, 0 x 27, 0 x 40, 0 x 1 C, 0 x 80, 0 x 07, 0 x 40, 0 x 00, 0 x 40}, /*"&", 6*/ … {0 x 00, 0 x 03, 0 x 80, 0 x 04, 0 x 40, 0 x 06, 0 x 40, 0 x 00}, /*"c", 67*/ {0 x 00, 0 x 03, 0 x 80, 0 x 04, 0 x 40, 0 x 24, 0 x 40, 0 x 3 F, 0 x. C 0, 0 x 00, 0 x 40}, /*"d", 68*/ … {0 x 00, 0 x 40, 0 x 20, 0 x 7 B, 0 x. E 0, 0 x 04, 0 x 00, 0 x 00}, /*"}", 93*/ {0 x 40, 0 x 00, 0 x 80, 0 x 00, 0 x 40, 0 x 00, 0 x 20, 0 x 00, 0 x 40, 0 x 00}, /*"~", 94*/ }; const unsigned char oled_asc 2_1608[95][16]={ {0 x 00, 0 x 00, 0 x 00, 0 x 00, 0 x 00}, /*" ", 0*/ {0 x 0 F, 0 x 00, 0 x 10, 0 x 84, 0 x 0 F, 0 x 38, 0 x 00, 0 x. C 0, 0 x 07, 0 x 78, 0 x 18, 0 x 84, 0 x 00, 0 x 78, 0 x 00}, /*"%", 5*/ {0 x 00, 0 x 78, 0 x 0 F, 0 x 84, 0 x 10, 0 x. C 4, 0 x 11, 0 x 24, 0 x 0 E, 0 x 98, 0 x 00, 0 x. E 4, 0 x 00, 0 x 84, 0 x 00, 0 x 08}, /*"&", 6*/ … {0 x 00, 0 x 1 C, 0 x 00, 0 x 10, 0 x. FC, 0 x 13, 0 x 00, 0 x 1 C, 0 x 00, 0 x 10, 0 x 00, 0 x 00}, /*"7", 23*/ {0 x 00, 0 x 0 E, 0 x 38, 0 x 11, 0 x 44, 0 x 10, 0 x 84, 0 x 11, 0 x 44, 0 x 0 E, 0 x 38, 0 x 00}, /*"8", 24*/ {0 x 00, 0 x 07, 0 x 00, 0 x 08, 0 x 8 C, 0 x 10, 0 x 44, 0 x 08, 0 x 88, 0 x 07, 0 x. F 0, 0 x 00}, /*"9", 25*/ }

OLED实验

OLED实验

 • 2021/3/8

• 2021/3/8