第十四章:0.96寸OLED12864显示屏
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显示屏相关推荐
- 【手把手带你用pid算法控制电机】——(1)编码器电机和0.96寸OLED显示屏的使用
目录 前言 一.需要用到的器材 二.接线说明 三.cubmx配置 3.1 时钟树 3.2 输出PWM(TIM4) 3.3 编码器模式(TIM3) 3.4 中断定时器配置(TIM1) 3.5 配置IIC ...
- 【室内温度+树莓派性能监控】树莓派+DS18B20温度传感器+0.96寸OLED显示屏使用及安装经验分享
以下内容为本人原创 原文链接:https://blog.csdn.net/Yhen1/article/details/113760948 作者:@Yhen 发布网站:CSDN 未经本人同意禁止转载,如 ...
- 基于STM32的0.96寸OLED显示屏显示数据和滚动显示
文章目录 一.SPI 二.OLED显示屏显示数据 2.1 代码实现 2.2 结果展示 三.0.96寸OLED滚动显示数据 3.1 滚动方式 3.2 对显示文字进行取模 3.3 代码实现 3.4 结果展 ...
- 0.96寸OLED显示屏介绍续
0.96 寸OLED 显示屏使用方法 (以中景园电子的0.96 寸OLED 显示屏为例) 0.96寸OLED显示屏实物图 七针SPI/IIC 0.96寸OLED显示屏使用方法: 七针SPI/IIC 0 ...
- 基于STM32F103C8T6的0.96寸OLED显示屏显示数据
一.了解SPI(串行外设接口) SPI全称是Serial Perripheral Interface,也就是串行外围设备接口.SPI是Motorola公司推出的一种同步串行接口技术,是一种高速,全双工 ...
- 基于STM32的0.96寸OLED显示屏显示固定数据、滑动数据、温湿度数据
目录 OLED显示原理 一.实验工具 二.OLED显示固定数据 1.显示数据相关函数 2.main函数 3.总显示函数 4.取字模 5.实现效果如下: 三.OLED实现滑动显示数据 1.添加滑动命令 ...
- 0.96寸OLED显示屏标准库移植HAL库(模拟IIC) - 基于STM32
** 0.96寸OLED显示屏标准库移植HAL库,使用模拟IIC ** 由于项目的需要使用OLED屏显示,并且现有的项目程序是基于HAL库编写的,而手头能找到的程序是标准库的驱动程序,大概看了一下代码 ...
- 3.2 0.96寸OLED显示屏的使用
0.96寸OLED显示屏:4线的串行SPI接口方式.IIC 接口方式,128*64像素. OLED每次控制8个点阵,垂直方向扫描控制,所以垂直方向坐标可选为0~7:水平方向可选坐标0~127 接线图: ...
- 0.96寸OLED显示屏介绍
OLED显示屏简介 OLED,即有机发光二极管(Organic Light Emitting Diode).OLED 由于同时具备自发光,不需背光源.对比度高.厚度薄.视角广.反应速度快.可用于挠曲性 ...
最新文章
- GIF动画 汇总帖子+实例
- https跨域到http问题解决
- destroy 方法_线程方法destroy()和stop(Throwable)在JDK 11中删除
- mysql rpm 安装6_linux6.5 RPM方式安装 mysql5.6
- 古墓:黑夜中不断的断龙石敲击声
- python拍3游戏_用Python实现小3传奇小游戏(源代码)
- 陈纪修老师《数学分析》 第11章:欧式空间上的极限和连续 笔记
- ArcGIS教程:按值的范围进行重分类
- 软测工具Testbed的使用以及动态测试实例
- 编写项目工作说明书(SOW)
- 汇率换算自然语言理解功能JAVA DEMO
- WinCC 7.3 + SQL server(杂)
- 汉诺塔问题(C语言代码)
- WireShark找不到360wifi如何解决
- 企业网络组建项目实训--交换机的配置与管理(下)
- GitHub上25个最受欢迎的开源机器学习库
- python画图大全_python画图教程
- Tree Map:树状图——绘制COVID-19阵列图
- 针对视频剪辑软件调研
- raid5和iscs网络存储服务i配置