MCU Interface Selection

----------------------这里说下通过字模软件来提取库

---------6800

---------8080

---------4线制的SPI

----------3线制的SPI

-----------IIC接口

/**********************************************
//IIC Start
**********************************************/
void IIC_Start()
{OLED_SCL=1;OLED_SDIN=1;OLED_SDIN=0;OLED_SCL=0;
}/**********************************************
//IIC Stop
**********************************************/
void IIC_Stop()
{OLED_SCL=1;OLED_SDIN=0;OLED_SDIN=1;}/**********************************************
// IIC Write byte
**********************************************/void Write_IIC_Byte(unsigned char IIC_Byte)
{unsigned char i;unsigned char m,da;da=IIC_Byte;OLED_SCL=0;for(i=0;i<8;i++)     {m=da;m=m&0x80;if(m==0x80){OLED_SDIN=1;}else OLED_SDIN=0;da=da<<1;OLED_SCL=1;OLED_SCL=0;}
}void IIC_Wait_Ack()
{//  GPIOB->CRH &= 0XFFF0FFFF;  //设置PB12为上拉输入模式//  GPIOB->CRH |= 0x00080000;//  OLED_SDA = 1;//    delay_us(1);//  OLED_SCL = 1;//  delay_us(50000);/*    while(1){if(!OLED_SDA)              //判断是否接收到OLED 应答信号{//GPIOB->CRH &= 0XFFF0FFFF;  //设置PB12为通用推免输出模式//GPIOB->CRH |= 0x00030000;return;}}*/OLED_SCLK_Set() ;OLED_SCLK_Clr();}

1--应用层

/**********************************************
// IIC Write Command
**********************************************/
void Write_IIC_Command(unsigned char IIC_Command)
{IIC_Start();Write_IIC_Byte(0x78);            //Slave address,SA0=0IIC_Wait_Ack(); Write_IIC_Byte(0x00);            //write commandIIC_Wait_Ack(); Write_IIC_Byte(IIC_Command); IIC_Wait_Ack();    IIC_Stop();
}/**********************************************
// IIC Write Data
**********************************************/
void Write_IIC_Data(unsigned char IIC_Data)
{IIC_Start();Write_IIC_Byte(0x78);          //D/C#=0; R/W#=0IIC_Wait_Ack();   Write_IIC_Byte(0x40);           //write dataIIC_Wait_Ack(); Write_IIC_Byte(IIC_Data);IIC_Wait_Ack();    IIC_Stop();
}/***********************************************
/***********************************************
void OLED_WR_Byte(unsigned dat,unsigned cmd)
{if(cmd){Write_IIC_Data(dat);}else {Write_IIC_Command(dat);}}

2---上层

#define OLED_CMD  0          // 写命令//坐标设置
void OLED_Set_Pos(unsigned char x, unsigned char y)
{   OLED_WR_Byte(0xb0+y, OLED_CMD);OLED_WR_Byte(((x&0xf0)>>4)|0x10, OLED_CMD);OLED_WR_Byte((x&0x0f), OLED_CMD);
}//开启OLED显示
void OLED_Display_On(void)
{OLED_WR_Byte(0X8D,OLED_CMD);  //SET DCDC命令OLED_WR_Byte(0X14,OLED_CMD);  //DCDC ONOLED_WR_Byte(0XAF,OLED_CMD);  //DISPLAY ON
}//关闭OLED显示
void OLED_Display_Off(void)
{OLED_WR_Byte(0X8D,OLED_CMD);  //SET DCDC命令OLED_WR_Byte(0X10,OLED_CMD);  //DCDC OFFOLED_WR_Byte(0XAE,OLED_CMD);  //DISPLAY OFF
}   //清屏函数,清完屏,整个屏幕是黑色的!和没点亮一样!!!
void OLED_Clear(void)
{  u8 i,n;          for(i=0;i<8;i++)  {  OLED_WR_Byte (0xb0+i,OLED_CMD);    //设置页地址(0~7)OLED_WR_Byte (0x00,OLED_CMD);      //设置显示位置—列低地址OLED_WR_Byte (0x10,OLED_CMD);      //设置显示位置—列高地址   for(n=0;n<128;n++)OLED_WR_Byte(0,OLED_DATA); } //更新显示
}//清屏函数,清完屏,整个屏幕是黑色的!和没点亮一样!!!
void OLED_Clear(void)
{  u8 i,n;          for(i=0;i<8;i++)  {  OLED_WR_Byte (0xb0+i,OLED_CMD);    //设置页地址(0~7)OLED_WR_Byte (0x00,OLED_CMD);      //设置显示位置—列低地址OLED_WR_Byte (0x10,OLED_CMD);      //设置显示位置—列高地址   for(n=0;n<128;n++)OLED_WR_Byte(0,OLED_DATA); } //更新显示
} //在指定位置显示一个字符,包括部分字符
//x:0~127
//y:0~63
//mode:0,反白显示;1,正常显示
//size:选择字体 16/12
void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size)
{       unsigned char c = 0, i = 0;c = chr - ' ';      //得到偏移后的值           if (x > Max_Column-1){x = 0;y = y + 2;}if (Char_Size == 16){OLED_Set_Pos(x, y); for(i=0; i<8; i++)OLED_WR_Byte(F8X16[c*16+i], OLED_DATA);OLED_Set_Pos(x, y + 1);for(i=0; i<8; i++)OLED_WR_Byte(F8X16[c*16+i+8], OLED_DATA);}else {  OLED_Set_Pos(x, y);for(i=0; i<6; i++)OLED_WR_Byte(F6x8[c][i], OLED_DATA); }
}//显示一个字符号串
void OLED_ShowString(u8 x,u8 y,u8 *chr,u8 Char_Size)
{unsigned char j=0;while (chr[j]!='\0'){        OLED_ShowChar(x,y,chr[j],Char_Size);x+=8;if(x>120){x=0;y+=2;}j++;}
}//显示汉字
void OLED_ShowCHinese(u8 x, u8 y, u8 no)
{                   u8 t, adder = 0;OLED_Set_Pos(x, y);    for(t=0;t<16;t++){OLED_WR_Byte(Hzk[no][t], OLED_DATA);adder += 1;}  OLED_Set_Pos(x, y+1);  for(t=0; t<16; t++){  OLED_WR_Byte(Hzk[no][t+16], OLED_DATA);adder += 1;}
}/***********功能描述:显示显示BMP图片128×64起始点坐标(x,y),x的范围0~127,y为页的范围0~7*****************/
void OLED_DrawBMP(u8 x0, u8 y0, u8 x1, u8 y1, u8 BMP[])
{   unsigned int j = 0;unsigned char x, y;for (y=y0; y<y1; y++){OLED_Set_Pos(x0, y);for (x=x0; x<x1; x++){      OLED_WR_Byte(BMP[j++], OLED_DATA);           }}
} 

3----初始化

//初始化SSD1306
void OLED_Init(void)
{   OLED_WR_Byte(0xAE,OLED_CMD);//--display offOLED_WR_Byte(0x00,OLED_CMD);//---set low column addressOLED_WR_Byte(0x10,OLED_CMD);//---set high column addressOLED_WR_Byte(0x40,OLED_CMD);//--set start line address  OLED_WR_Byte(0xB0,OLED_CMD);//--set page addressOLED_WR_Byte(0x81,OLED_CMD); // contract controlOLED_WR_Byte(0xFF,OLED_CMD);//--128   OLED_WR_Byte(0xA1,OLED_CMD);//set segment remap OLED_WR_Byte(0xA6,OLED_CMD);//--normal / reverseOLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64)OLED_WR_Byte(0x3F,OLED_CMD);//--1/32 dutyOLED_WR_Byte(0xC8,OLED_CMD);//Com scan directionOLED_WR_Byte(0xD3,OLED_CMD);//-set display offsetOLED_WR_Byte(0x00,OLED_CMD);//OLED_WR_Byte(0xD5,OLED_CMD);//set osc divisionOLED_WR_Byte(0x80,OLED_CMD);//OLED_WR_Byte(0xD8,OLED_CMD);//set area color mode offOLED_WR_Byte(0x05,OLED_CMD);//OLED_WR_Byte(0xD9,OLED_CMD);//Set Pre-Charge PeriodOLED_WR_Byte(0xF1,OLED_CMD);//OLED_WR_Byte(0xDA,OLED_CMD);//set com pin configuartionOLED_WR_Byte(0x12,OLED_CMD);//OLED_WR_Byte(0xDB,OLED_CMD);//set VcomhOLED_WR_Byte(0x30,OLED_CMD);//OLED_WR_Byte(0x8D,OLED_CMD);//set charge pump enableOLED_WR_Byte(0x14,OLED_CMD);//OLED_WR_Byte(0xAF,OLED_CMD);//--turn on oled panel
}

主函数:

第十四章:0.96寸OLED12864显示屏相关推荐

  1. 【手把手带你用pid算法控制电机】——(1)编码器电机和0.96寸OLED显示屏的使用

    目录 前言 一.需要用到的器材 二.接线说明 三.cubmx配置 3.1 时钟树 3.2 输出PWM(TIM4) 3.3 编码器模式(TIM3) 3.4 中断定时器配置(TIM1) 3.5 配置IIC ...

  2. 【室内温度+树莓派性能监控】树莓派+DS18B20温度传感器+0.96寸OLED显示屏使用及安装经验分享

    以下内容为本人原创 原文链接:https://blog.csdn.net/Yhen1/article/details/113760948 作者:@Yhen 发布网站:CSDN 未经本人同意禁止转载,如 ...

  3. 基于STM32的0.96寸OLED显示屏显示数据和滚动显示

    文章目录 一.SPI 二.OLED显示屏显示数据 2.1 代码实现 2.2 结果展示 三.0.96寸OLED滚动显示数据 3.1 滚动方式 3.2 对显示文字进行取模 3.3 代码实现 3.4 结果展 ...

  4. 0.96寸OLED显示屏介绍续

    0.96 寸OLED 显示屏使用方法 (以中景园电子的0.96 寸OLED 显示屏为例) 0.96寸OLED显示屏实物图 七针SPI/IIC 0.96寸OLED显示屏使用方法: 七针SPI/IIC 0 ...

  5. 基于STM32F103C8T6的0.96寸OLED显示屏显示数据

    一.了解SPI(串行外设接口) SPI全称是Serial Perripheral Interface,也就是串行外围设备接口.SPI是Motorola公司推出的一种同步串行接口技术,是一种高速,全双工 ...

  6. 基于STM32的0.96寸OLED显示屏显示固定数据、滑动数据、温湿度数据

    目录 OLED显示原理 一.实验工具 二.OLED显示固定数据 1.显示数据相关函数 2.main函数 3.总显示函数 4.取字模 5.实现效果如下: 三.OLED实现滑动显示数据 1.添加滑动命令 ...

  7. 0.96寸OLED显示屏标准库移植HAL库(模拟IIC) - 基于STM32

    ** 0.96寸OLED显示屏标准库移植HAL库,使用模拟IIC ** 由于项目的需要使用OLED屏显示,并且现有的项目程序是基于HAL库编写的,而手头能找到的程序是标准库的驱动程序,大概看了一下代码 ...

  8. 3.2 0.96寸OLED显示屏的使用

    0.96寸OLED显示屏:4线的串行SPI接口方式.IIC 接口方式,128*64像素. OLED每次控制8个点阵,垂直方向扫描控制,所以垂直方向坐标可选为0~7:水平方向可选坐标0~127 接线图: ...

  9. 0.96寸OLED显示屏介绍

    OLED显示屏简介 OLED,即有机发光二极管(Organic Light Emitting Diode).OLED 由于同时具备自发光,不需背光源.对比度高.厚度薄.视角广.反应速度快.可用于挠曲性 ...

最新文章

  1. GIF动画 汇总帖子+实例
  2. https跨域到http问题解决
  3. destroy 方法_线程方法destroy()和stop(Throwable)在JDK 11中删除
  4. mysql rpm 安装6_linux6.5 RPM方式安装 mysql5.6
  5. 古墓:黑夜中不断的断龙石敲击声
  6. python拍3游戏_用Python实现小3传奇小游戏(源代码)
  7. 陈纪修老师《数学分析》 第11章:欧式空间上的极限和连续 笔记
  8. ArcGIS教程:按值的范围进行重分类
  9. 软测工具Testbed的使用以及动态测试实例
  10. 编写项目工作说明书(SOW)
  11. 汇率换算自然语言理解功能JAVA DEMO
  12. WinCC 7.3 + SQL server(杂)
  13. 汉诺塔问题(C语言代码)
  14. WireShark找不到360wifi如何解决
  15. 企业网络组建项目实训--交换机的配置与管理(下)
  16. GitHub上25个最受欢迎的开源机器学习库
  17. python画图大全_python画图教程
  18. Tree Map:树状图——绘制COVID-19阵列图
  19. 针对视频剪辑软件调研
  20. raid5和iscs网络存储服务i配置

热门文章

  1. linux组的管理命令,Linux用户与组管理命令
  2. 复选框(checkbox)积累
  3. 关于实例分割的最新研究和进展,看这篇就够了!
  4. 向标准输出上打印一些用ASCII字符组成的图形。
  5. mysql一些常用语句_MySQL常用语句
  6. 不写sql的Java_解放双手,不写SQL!一个开源mybatis神器
  7. 用AI进行安检扫描,用时不到1秒几乎感觉不到存在
  8. 程序员必备的600个英语词汇合集(2)
  9. 「Android」 APK瘦身探索
  10. UE4 线性插值 lerp