杜洋工作室 www.DoYoung.net
洋桃电子 www.DoYoung.net/YT
在此声明一下所有代码均为 杜洋工作室 的不允许复制,转发等,本人只是在此程序上进行理解和注释。
上一次的笔记是在洋桃开发板上进行用usart通信,对小电灯的控制。对串口通信有兴趣可以去看看:
https://blog.csdn.net/qq_40546576/article/details/98308719
本次主要讲的是oled的使用。由于本次特殊,需要截取部分图片进行讲解,可能造成了观看不适,请大家谅解!谢谢。
本次的OLED0561 显示器 主控芯片为 SH1106
理解了上面的显示原理下面这个就简单了主要是把自己的想法,转换成代码问题,过后就是不断的调试, 就错问题。
OLED 的两个文件,需要大家过过眼,不需要背书一样,但是知道大概位置及内容。 原文(英文)
OLED 屏 SPEC QG-2864KSWLG01 VER A 数据手册(英文).pdf
OLED 主控芯片 SH1106 数据手册 V2.3(英文).pdf
Google 翻译(中文)
OLED 屏 SPECQG-2864KSWLG01ER 数据手册(中文).pdf OLED 主控芯片 SH1106 数据手册 V2.3(中文).pdf
上面两个文件已经翻译但是不准确,有很多错误,仅供参考!
为了这几天对 oled 学习,应该可以弄出一个自己的小功能 目标:
具有时间显示功能,主要是时间,数字要大,显眼
具备电池小图标,旁边有通电显示,会闪烁。
秒钟为两个点,在中间每秒闪烁一次就可以了
研究最终成果为:
#ifndef __CHS_16x16_H #define __CHS_16x16_H u8 GB_DIANCHI[] = // 数据表 { //"电",0 0x03,0x03,0xE3,0x13,0xCB, 0xEB,0xEB,0xEB,0xEB,0x0B, 0xEB,0xEB,0xEB,0xEB,0xEB, 0x0B,0x00,0x00,0x0F,0x10, 0x27,0x2F,0x2F,0x2F,0x2F, 0x20,0x2F,0x2F,0x2F,0x2F, 0x2F,0x20, //"池", 1 0xEB,0xEB,0xEB,0xCB,0x1B, 0xF3,0xC3,0xC3,0x03,0xFB, 0x63,0xC3,0x83,0x03,0xFB, 0x03,0x2F,0x2F,0x2F,0x27, 0x30,0x1F,0x07,0x07,0x00, 0x3F,0x00,0x01,0x07,0x0C, 0x3F,0x00, //"池+充电", 2 0xEB,0xEB,0xEB,0xCB,0x1B, 0xF3,0xC3,0xC3,0x03,0x03, 0x03,0x03,0x03,0x03,0x03, 0x03,0x2F,0x2F,0x2F,0x27, 0x30,0x1F,0x07,0x07,0x00, 0x00,0x00,0x00,0x00,0x00, 0x00,0x00 };#endif
#ifndef __ASCIIBIG_H #define __ASCIIBIG_H u8 AscIIBIG[] = // ASCII { 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80, // -0- 0xC0,0x40,0x40,0x40,0x80,0x80,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xF8, 0xFE,0x3F,0x03,0x01,0x00,0x00,0x00,0x00, 0x00,0x03,0x1F,0xFE,0xF8,0xC0,0x00,0x00, 0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF, 0xFF,0xFF,0x00,0x00,0x00,0x00,0x01,0x0F, 0x3F,0x7E,0xE0,0x80,0x80,0x00,0x00,0x00, 0x80,0xE0,0x7C,0x3F,0x0F,0x01,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // -1- 0x00,0x00,0x80,0xC0,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x02,0x02,0x02,0x02,0xFF,0xFF,0xFF, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0xFF, 0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x40, // -2- 0x40,0x40,0x40,0xC0,0xC0,0x80,0x80,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x7F, 0x71,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x03,0xFF,0xFF,0x7C,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x80,0xC0,0x60,0x38,0x1C,0x0F,0x07,0x01, 0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xE0, 0xB0,0x9C,0x8E,0x83,0x81,0x80,0x80,0x80,0x80,0x80,0xC0,0xE0,0x38,0x00,0x00,0x00, 0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x80,0x80,0x40,0x40, // -3- 0x40,0x40,0xC0,0xC0,0x80,0x80,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x3F, 0x39,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x83,0xFF,0xFF,0x7C,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04, 0x04,0x04,0x06,0x0E,0x1B,0x39,0xF0,0xE0, 0x80,0x00,0x00,0x00,0x00,0x00,0x3C,0x7E, 0xDE,0x80,0x00,0x00,0x00,0x00,0x00,0x80, 0xC0,0xE0,0x7F,0x3F,0x0F,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01, 0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // -4- 0x00,0x00,0x00,0x00,0x80,0xC0,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x80,0x60,0x30,0x0C,0x07, 0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x80,0x60,0x30,0x0C,0x03,0x01, 0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0xFF,0xFF,0x81,0x01,0x01,0x01,0x01,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0x01,0x00,0x00, 0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0, // -5- 0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0, 0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0xE0, 0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x1F,0x18,0x04,0x06,0x03, 0x03,0x03,0x03,0x03,0x07,0x1E,0xFC,0xF8, 0xE0,0x00,0x00,0x00,0x00,0x00,0x1C,0x7E, 0x8E,0x80,0x00,0x00,0x00,0x00,0x00,0x80, 0xC0,0xF0,0x7F,0x3F,0x0F,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01, 0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80, // -6- 0x80,0x40,0x40,0x40,0x40,0x40,0xC0,0x80, 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xF0, 0xFC,0x1E,0x03,0x01,0x00,0x00,0x00,0x00, 0x00,0x00,0x07,0x07,0x07,0x00,0x00,0x00, 0x00,0x00,0xFF,0xFF,0xFF,0x18,0x0C,0x06, 0x03,0x03,0x03,0x03,0x07,0x07,0x1E,0xFE, 0xF8,0xE0,0x00,0x00,0x00,0x00,0x03,0x1F, 0x3F,0x78,0xE0,0x80,0x80,0x00,0x00,0x00, 0x00,0x80,0xE0,0x7F,0x3F,0x0F,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0, // -7- 0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0, 0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x0E, 0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00, 0xC0,0x30,0x1C,0x07,0x01,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xC0,0xF0,0x3C,0x07,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xFC,0xFF,0xFF,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x80,0x80,0xC0, // -8- 0x40,0x40,0x40,0x40,0x40,0xC0,0x80,0x80, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C, 0xFF,0xFF,0xC3,0x80,0x00,0x00,0x00,0x00, 0x00,0x00,0x83,0xFF,0xFF,0x7C,0x00,0x00, 0x00,0x00,0x80,0xC0,0xE1,0x73,0x1B,0x0F, 0x07,0x0E,0x1E,0x1C,0x3C,0x7E,0xF3,0xF1, 0xC0,0x80,0x00,0x00,0x00,0x00,0x1F,0x3F, 0x7F,0xE0,0x80,0x80,0x00,0x00,0x00,0x00, 0x00,0x80,0xE0,0x7F,0x3F,0x1F,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01, 0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0xC0, // -9- 0x40,0x40,0x40,0x40,0xC0,0x80,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFE, 0xFF,0x07,0x01,0x00,0x00,0x00,0x00,0x00, 0x00,0x01,0x07,0xFE,0xFC,0xE0,0x00,0x00, 0x00,0x00,0x07,0x1F,0x3F,0x3C,0x70,0x70, 0x60,0x60,0x60,0x20,0x30,0x18,0x0E,0xFF, 0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x70, 0xF0,0xF0,0x00,0x00,0x00,0x00,0x80,0x80, 0xE0,0x70,0x3F,0x1F,0x07,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01, 0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // -:- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x07,0x0F,0x0F,0x0F,0x07,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xE0,0xF0,0xF0,0xF0, 0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // - - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00 };#endif
#ifndef __OLED_H#define __OLED_H #include "sys.h"#include "i2c.h"#define OLED0561_ADD 0x78 // OLED的I2C地址(禁止修改)#define COM 0x00 // OLED 指令(禁止修改)#define DAT 0x40 // OLED 数据(禁止修改)void OLED0561_Init(void);//初始化void OLED_DISPLAY_ON (void);//OLED屏开显示void OLED_DISPLAY_OFF (void);//OLED屏关显示void OLED_DISPLAY_LIT (u8 x);//OLED屏亮度设置(0~255)void OLED_DISPLAY_CLEAR(void);//清屏操作//void OLED_DISPLAY_8x16(u8 x,u8 y,u16 w);//显示8x16的单个字符 //void OLED_DISPLAY_8x16_BUFFER(u8 row,u8 *str);//显示8x16的字符串//void OLED_DISPLAY_16x16(u8 x,u8 y,u16 w); //汉字显示//void OLED_DISPLAY_PIC1(void);//图片显示void OLED_DISPLAY_KUANG(void);//外框void OLED_DISPLAY_DIANCHI(u8 x,u8 y,u16 w); //电池显示void OLED_DISPLAYBIG1(u8 x,u16 w);//时钟十位void OLED_DISPLAYBIG2(u8 x,u16 w);//时钟个位void OLED_DISPLAYBIG3(u8 x,u16 w);//秒钟void OLED_DISPLAYBIG4(u8 x,u16 w);//分钟十位void OLED_DISPLAYBIG5(u8 x,u16 w);//分钟个位#endif
#include "oled0561.h"#include "ASCII_8x16.h" //引入字体 ASCII#include "ASCIIBIG.h" //引入字体 ASCII#include "delay.h"#include "CHS_16x16.h" //引入汉字字体 #include "PIC1.h" //引入图片/** **** 启动初始化屏幕的程序 **************************************************************/void OLED0561_Init (void){//OLED屏开显示初始化 OLED_DISPLAY_OFF(); //OLED关显示 OLED_DISPLAY_CLEAR(); //清空屏幕内容 OLED_DISPLAY_ON(); //OLED屏初始值设置并开显示}/** **** 开启显示的程序 **************************************************************/void OLED_DISPLAY_ON (void){//OLED屏初始值设置并开显示 u8 buf[28]={ 0xae,//0xae:关显示,0xaf:开显示 0x00,0x10,//开始地址(双字节) 0xd5,0x80,//显示时钟频率? 0xa8,0x3f,//复用率? 0xd3,0x00,//显示偏移? 0XB0,//写入页位置(0xB0~7) 0x40,//显示开始线 0x8d,0x14,//VCC电源 0xa1,//设置段重新映射? 0xc8,//COM输出方式? 0xda,0x12,//COM输出方式? 0x81,0xff,//对比度,指令:0x81,数据:0~255(255最高) 0xd9,0xf1,//充电周期? 0xdb,0x30,//VCC电压输出 0x20,0x00,//水平寻址设置 0xa4,//0xa4:正常显示,0xa5:整体点亮 0xa6,//0xa6:正常显示,0xa7:反色显示 0xaf//0xae:关显示,0xaf:开显示 }; // I2C_SAND_BUFFER(OLED0561_ADD,COM,buf,28);}/** **** 关屏幕 **************************************************************/void OLED_DISPLAY_OFF (void){//OLED屏关显示 u8 buf[3]={ 0xae,//0xae:关显示,0xaf:开显示 0x8d,0x10,//VCC电源 }; // I2C_SAND_BUFFER(OLED0561_ADD,COM,buf,3);}/** **** 调节屏幕亮度 **************************************************************/void OLED_DISPLAY_LIT (u8 x){//OLED屏亮度设置(0~255) I2C_SAND_BYTE(OLED0561_ADD,COM,0x81); I2C_SAND_BYTE(OLED0561_ADD,COM,x);//亮度值}/** **** 清空屏幕 **************************************************************/void OLED_DISPLAY_CLEAR(void){//清屏操作 u8 j,t; for(t=0xB0;t<0xB8;t++){ //设置起始页地址为0xB0 I2C_SAND_BYTE(OLED0561_ADD,COM,t); //页地址(从0xB0到0xB7) I2C_SAND_BYTE(OLED0561_ADD,COM,0x10); //起始列地址的高4位 I2C_SAND_BYTE(OLED0561_ADD,COM,0x00); //起始列地址的低4位 for(j=0;j<132;j++){ //整页内容填充 I2C_SAND_BYTE(OLED0561_ADD,DAT,0x00); } }}void OLED_DISPLAY_KUANG(void){ u8 i,t,b; //最上面的行 t=0xB0;//页地址,其实也是行地址,但是一页是8行。 I2C_SAND_BYTE(OLED0561_ADD,COM,t); //页地址(从0xB0到0xB7) I2C_SAND_BYTE(OLED0561_ADD,COM,0x10); //起始列地址的高4位 I2C_SAND_BYTE(OLED0561_ADD,COM,0x02); //起始列地址的低4位 for(i=0;i<128;i++) { if(i==0||i==1||i==127||i==126) { I2C_SAND_BYTE(OLED0561_ADD,DAT,0xfF); }else{ I2C_SAND_BYTE(OLED0561_ADD,DAT,0x03); } } //最下面的行 t=0xb7; I2C_SAND_BYTE(OLED0561_ADD,COM,t); //页地址(从0xB0到0xB7) I2C_SAND_BYTE(OLED0561_ADD,COM,0x10); //起始列地址的高4位 I2C_SAND_BYTE(OLED0561_ADD,COM,0x02); //起始列地址的低4位 for(i=0;i<128;i++) { // if(i==0||i==1||i==127||i==126) { I2C_SAND_BYTE(OLED0561_ADD,DAT,0xFf); }else{ I2C_SAND_BYTE(OLED0561_ADD,DAT,0xC0); } } //左右两列 b=0xb1; for(t=b;t<0xb7;t++) { //设置起始页地址为0xB0 I2C_SAND_BYTE(OLED0561_ADD,COM,t); //页地址(从0xB0到0xB7) I2C_SAND_BYTE(OLED0561_ADD,COM,0x10); //起始列地址的高4位 I2C_SAND_BYTE(OLED0561_ADD,COM,0x02); //起始列地址的低4位 I2C_SAND_BYTE(OLED0561_ADD,DAT,0xff); I2C_SAND_BYTE(OLED0561_ADD,COM,0x10); //起始列地址的高4位 I2C_SAND_BYTE(OLED0561_ADD,COM,0x03); //起始列地址的低4位 I2C_SAND_BYTE(OLED0561_ADD,DAT,0xff); I2C_SAND_BYTE(OLED0561_ADD,COM,0x18); //起始列地址的高4位 I2C_SAND_BYTE(OLED0561_ADD,COM,0x00); //起始列地址的低4位 I2C_SAND_BYTE(OLED0561_ADD,DAT,0xff); I2C_SAND_BYTE(OLED0561_ADD,COM,0x18); //起始列地址的高4位 I2C_SAND_BYTE(OLED0561_ADD,COM,0x01); //起始列地址的低4位 I2C_SAND_BYTE(OLED0561_ADD,DAT,0xff); }}/******************电池程序************************************/ void OLED_DISPLAY_DIANCHI(u8 x,u8 y,u16 w){ u8 j,t,c=0; for(t=0;t<2;t++){ I2C_SAND_BYTE(OLED0561_ADD,COM,0xb0+x); //页地址(从0xB0到0xB7) I2C_SAND_BYTE(OLED0561_ADD,COM,y/16+0x10); //起始列地址的高4位 I2C_SAND_BYTE(OLED0561_ADD,COM,y%16); //起始列地址的低4位 for(j=0;j<16;j++){ I2C_SAND_BYTE(OLED0561_ADD,DAT,GB_DIANCHI[(w*32)+c]); c++;}x++; //页地址加1 } I2C_SAND_BYTE(OLED0561_ADD,COM,0xAF); //开显示 }/** *****************************时间数值显示*******************************************///时钟十位void OLED_DISPLAYBIG1(u8 x,u16 w){ u8 j,t,c=0; for(t=0;t<5;t++){ I2C_SAND_BYTE(OLED0561_ADD,COM,0xb0+x); I2C_SAND_BYTE(OLED0561_ADD,COM,0x11); I2C_SAND_BYTE(OLED0561_ADD,COM,0x01); for(j=0;j<20;j++){ I2C_SAND_BYTE(OLED0561_ADD,DAT,AscIIBIG[(w*100)+c]); c++;}x++;}}//时钟个位void OLED_DISPLAYBIG2(u8 x,u16 w){ u8 j,t,c=0; for(t=0;t<5;t++){ I2C_SAND_BYTE(OLED0561_ADD,COM,0xb0+x); I2C_SAND_BYTE(OLED0561_ADD,COM,0x12); I2C_SAND_BYTE(OLED0561_ADD,COM,0x05); for(j=0;j<20;j++){ I2C_SAND_BYTE(OLED0561_ADD,DAT,AscIIBIG[(w*100)+c]); c++;}x++;}}//秒钟void OLED_DISPLAYBIG3(u8 x,u16 w){ u8 j,t,c=0; for(t=0;t<5;t++){ I2C_SAND_BYTE(OLED0561_ADD,COM,0xb0+x); I2C_SAND_BYTE(OLED0561_ADD,COM,0x13); I2C_SAND_BYTE(OLED0561_ADD,COM,0x09); for(j=0;j<20;j++){ I2C_SAND_BYTE(OLED0561_ADD,DAT,AscIIBIG[(w*100)+c]); c++;}x++;}}//分钟十位void OLED_DISPLAYBIG4(u8 x,u16 w){ u8 j,t,c=0; for(t=0;t<5;t++){ I2C_SAND_BYTE(OLED0561_ADD,COM,0xb0+x); I2C_SAND_BYTE(OLED0561_ADD,COM,0x14); I2C_SAND_BYTE(OLED0561_ADD,COM,0x0D); for(j=0;j<20;j++){ I2C_SAND_BYTE(OLED0561_ADD,DAT,AscIIBIG[(w*100)+c]); c++;}x++;}}//分钟个位void OLED_DISPLAYBIG5(u8 x,u16 w){ u8 j,t,c=0; for(t=0;t<5;t++){ I2C_SAND_BYTE(OLED0561_ADD,COM,0xb0+x); I2C_SAND_BYTE(OLED0561_ADD,COM,0x16); I2C_SAND_BYTE(OLED0561_ADD,COM,0x01); for(j=0;j<20;j++){ I2C_SAND_BYTE(OLED0561_ADD,DAT,AscIIBIG[(w*100)+c]); c++;}x++;}}
#include "stm32f10x.h" //STM32头文件#include "sys.h"#include "delay.h"#include "oled0561.h"#include "rtc.h"int main (void){//主程序 delay_ms(100);//稍稍等待OLED屏幕上电 RCC_Configuration();//时钟设置 I2C_Configuration();//I2C初始化 OLED0561_Init();//屏幕初始化程序 OLED_DISPLAY_LIT(10);//亮度设置 OLED_DISPLAY_KUANG();//框程序 OLED_DISPLAY_DIANCHI(0,6*16,0);//电池程序 OLED_DISPLAY_DIANCHI(0,7*16,1);//电池程序 加 充电图标 RTC_Config(); //实时时钟初始化 while(1) // OLED研究 { RTC_Get();//实时时钟获取 OLED_DISPLAYBIG1(2,rhour/10);//获取时钟十位 OLED_DISPLAYBIG2(2,rhour%10);//获取时钟个位 if(rsec%2==0) { OLED_DISPLAYBIG3(2,11);////获取秒奇数偶数 OLED_DISPLAY_DIANCHI(0,7*16,1);//充电图标无 }else { OLED_DISPLAYBIG3(2,10);//获取秒奇数偶数 OLED_DISPLAY_DIANCHI(0,7*16,2);//充电图标有 } OLED_DISPLAYBIG4(2,rmin/10);//获取分钟十位 OLED_DISPLAYBIG5(2,rmin%10);//获取分钟个位 delay_ms(5); //延时5毫秒 ,减轻系统负担 ,可有可无 }}
程序在洋桃开发板程序上面,进行了许多修改。需要大家注意。
参考来源:
Google搜寻引擎等等
杜洋工作室 www.DoYoung.net
洋桃电子 www.DoYoung.net/YT
STM32库开发实战指南 基于STM32F103(第二版)
联系客服