oled屏幕模块
oled屏幕模块似乎是厂家提供的
也许可以根据屏幕驱动芯片去写
根据现在了解的芯片一般有两个:SH1106和SSD1306
不过这次我们用的是SSD1306芯片驱动的屏幕
下面是从裸屏到模块的pcb:



有上面的图可以看出,虽然是双色,但是只是底子不同罢了,其实还是单色的.
下面是51单片机的程序:
下面是初始化程序:初始化函数里面都是一些发送指令和数据的.
发送指令和数据的函数如下:
发送指令和数据的函数:
void OLED_WrCmd(UCHAR8 ucCmd) //发送指令
{
UCHAR8 i = ;OLED_DC = ;
OLED_SCL = ;
while (i--)
{
if (ucCmd & 0x80)
{
OLED_SDA = ;
}
else
{
OLED_SDA = ;
}
OLED_SCL = ;
_nop_();
OLED_SCL = ;
ucCmd <<= ;
} return;
}
初始化:
void OLED_Init()
{
UCHAR8 i; OLED_SCL = ;
OLED_RST = ; for(i = ; i < ; i++)
{
_nop_(); //从上电到下面开始初始化要有足够的时间,即等待RC复位完毕
} OLED_RST = ; SetDisplayOnOff(0x00); // Display Off (0x00/0x01)
SetDisplayClock(0x80); // Set Clock as 100 Frames/Sec
SetMultiplexRatio(0x3F); // 1/64 Duty (0x0F~0x3F)
SetDisplayOffset(0x00); // Shift Mapping RAM Counter (0x00~0x3F)
SetStartLine(0x00); // Set Mapping RAM Display Start Line (0x00~0x3F)
SetChargePump(0x04); // Enable Embedded DC/DC Converter (0x00/0x04)
SetAddressingMode(0x02); // Set Page Addressing Mode (0x00/0x01/0x02)
SetSegmentRemap(0x01); // Set SEG/Column Mapping 0x00左右反置 0x01正常
SetCommonRemap(0x08); // Set COM/Row Scan Direction 0x00上下反置 0x08正常
SetCommonConfig(0x10); // Set Sequential Configuration (0x00/0x10)
SetContrastControl(0xcf); // Set SEG Output Current
SetPrechargePeriod(0xF1); // Set Pre-Charge as 15 Clocks & Discharge as 1 Clock
SetVCOMH(0x40); // Set VCOM Deselect Level
SetEntireDisplay(0x00); // Disable Entire Display On (0x00/0x01)
SetInverseDisplay(0x00); // Disable Inverse Display On (0x00/0x01)
SetDisplayOnOff(0x01); // Display On (0x00/0x01)
OLED_Fill(0x00); // 初始清屏 //这句话还是可以理解,但是上面的一堆又是什么呢
OLED_SetPos(,); return;
}
初始化里面的子函数如下所示:
void SetDisplayOnOff(UCHAR8 ucData)
{
OLED_WrCmd(0xAE|ucData); // Set Display On/Off
// Default => 0xAE
// 0xAE (0x00) => Display Off
// 0xAF (0x01) => Display On
} void SetDisplayClock(UCHAR8 ucData)
{
OLED_WrCmd(0xD5); // Set Display Clock Divide Ratio / Oscillator Frequency
OLED_WrCmd(ucData); // Default => 0x80
//D[3:0] => Display Clock Divider
// D[7:4] => Oscillator Frequency
} void SetMultiplexRatio(UCHAR8 ucData)
{
OLED_WrCmd(0xA8); // Set Multiplex Ratio
OLED_WrCmd(ucData); // Default => 0x3F (1/64 Duty)
} void SetDisplayOffset(UCHAR8 ucData)
{
OLED_WrCmd(0xD3); // Set Display Offset
OLED_WrCmd(ucData); // Default => 0x00
} void SetStartLine(UCHAR8 ucData)
{
OLED_WrCmd(0x40|ucData); // Set Display Start Line
// Default => 0x40 (0x00)
} void SetChargePump(UCHAR8 ucData)
{
OLED_WrCmd(0x8D); // Set Charge Pump
OLED_WrCmd(0x10|ucData); // Default => 0x10
// 0x10 (0x00) => Disable Charge Pump
// 0x14 (0x04) => Enable Charge Pump
} void SetAddressingMode(UCHAR8 ucData)
{
OLED_WrCmd(0x20); // Set Memory Addressing Mode
OLED_WrCmd(ucData); // Default => 0x02
// 0x00 => Horizontal Addressing Mode
// 0x01 => Vertical Addressing Mode
// 0x02 => Page Addressing Mode
} void SetSegmentRemap(UCHAR8 ucData)
{
OLED_WrCmd(0xA0|ucData); // Set Segment Re-Map
// Default => 0xA0
// 0xA0 (0x00) => Column Address 0 Mapped to SEG0
// 0xA1 (0x01) => Column Address 0 Mapped to SEG127
} void SetCommonRemap(UCHAR8 ucData)
{
OLED_WrCmd(0xC0|ucData); // Set COM Output Scan Direction
// Default => 0xC0
// 0xC0 (0x00) => Scan from COM0 to 63
// 0xC8 (0x08) => Scan from COM63 to 0
} void SetCommonConfig(UCHAR8 ucData)
{
OLED_WrCmd(0xDA); // Set COM Pins Hardware Configuration
OLED_WrCmd(0x02|ucData); // Default => 0x12 (0x10)
// Alternative COM Pin Configuration
// Disable COM Left/Right Re-Map
} void SetContrastControl(UCHAR8 ucData)
{
OLED_WrCmd(0x81); // SetContrast Control
OLED_WrCmd(ucData); // Default => 0x7F
} void SetPrechargePeriod(UCHAR8 ucData)
{
OLED_WrCmd(0xD9); // Set Pre-Charge Period
OLED_WrCmd(ucData); // Default => 0x22 (2 Display Clocks [Phase 2] / 2 Display Clocks [Phase 1])
// D[3:0] => Phase 1 Period in 1~15 Display Clocks
// D[7:4] => Phase 2 Period in 1~15 Display Clocks
} void SetVCOMH(UCHAR8 ucData)
{
OLED_WrCmd(0xDB); // Set VCOMH Deselect Level
OLED_WrCmd(ucData); // Default => 0x20 (0.77*VCC)
} void SetEntireDisplay(UCHAR8 ucData)
{
OLED_WrCmd(0xA4|ucData); // Set Entire Display On / Off
// Default => 0xA4
// 0xA4 (0x00) => Normal Display
// 0xA5 (0x01) => Entire Display On
} void SetInverseDisplay(UCHAR8 ucData)
{
OLED_WrCmd(0xA6|ucData); // Set Inverse Display On/Off
// Default => 0xA6
// 0xA6 (0x00) => Normal Display
// 0xA7 (0x01) => Inverse Display On
} void SetDisplayOnOff(UCHAR8 ucData)
{
OLED_WrCmd(0xAE|ucData); // Set Display On/Off
// Default => 0xAE
// 0xAE (0x00) => Display Off
// 0xAF (0x01) => Display On
} void OLED_Fill(UCHAR8 ucData)
{
UCHAR8 ucPage,ucColumn; for(ucPage = ; ucPage < ; ucPage++)
{
OLED_WrCmd(0xb0 + ucPage); //0xb0+0~7表示页0~7 8*8=64
OLED_WrCmd(0x00); //0x00+0~16表示将128列分成16组其地址在某组中的第几列 16*8=128
OLED_WrCmd(0x10); //0x10+0~16表示将128列分成16组其地址所在第几组
for(ucColumn = ; ucColumn < ; ucColumn++)
{
OLED_WrDat(ucData);
}
}
} void OLED_SetPos(UCHAR8 ucIdxX, UCHAR8 ucIdxY) //坐标指定.
{
OLED_WrCmd(0xb0 + ucIdxY);
OLED_WrCmd(((ucIdxX & 0xf0) >> ) | 0x10); //在第几组
OLED_WrCmd((ucIdxX & 0x0f) | 0x00); //在某一组的,第几列
}
然后:让屏幕显示,年月日的程序:
//OLED显示日期函数
void DAY_OLED_Display()
{
year=TableDs1302[]; //GPS或时钟芯片读取时间放在此变量中
mooth=TableDs1302[]; //GPS或时钟芯片读取时间放在此变量中
day=TableDs1302[]; //GPS或时钟芯片读取时间放在此变量中
OLED_P8x16char(, , +''); //下面这两行显示:20
OLED_P8x16char(, , +'');
OLED_P8x16char(, , year/+'');
OLED_P8x16char(, , year%+'');//显示20**年
OLED_P8x16char(, , '-'); //分隔标记
OLED_P8x16char(, , mooth/+'');
OLED_P8x16char(, , mooth%+'');//显示月
OLED_P8x16char(, , '-'); //
OLED_P8x16char(, , day/+'');//显示日期
OLED_P8x16char(, , day%+'');
}
oled屏幕模块的更多相关文章
- I2C 连接 12864 OLED 屏幕
http://ardui.co/archives/738 我是潘,曾经是个工程师.这是为 Ardui.Co 制作的 “Arduino 公开课” 系列的入门教程.上一课介绍了I2C 协议连接1602 L ...
- OLED的波形曲线、进度条、图片显示(STM32 HAL库 模拟SPI通信 5线OLED屏幕)详细篇
少废话,先上效果图 屏幕显示效果 全家福 一.基础认识及引脚介绍 屏幕参数: 尺寸:0.96英寸 分辨率:128*64 驱动芯片:SSD1306 驱动接口协议:SPI 引脚说明: 二. ...
- [转帖]中关村:LED屏幕和OLED屏幕有什么区别?答案在这里
LED屏幕和OLED屏幕有什么区别?答案在这里 中关村在线 01-0810:40 目前的电视市场,更新换代的频率越来越快,无论是国产品牌还是合资品牌,都不约而同的推出了全新产品.这离不开人们对更好 ...
- OLED屏幕那些次像素有趣的排列方式
http://www.dzsc.com/data/2016-6-2/109856.html 我们今天的重点内容为倒数第二列内容的上半部分,也就是RGB排列和Pentile排列.在介绍OLED屏幕时候我 ...
- oled屏幕配套取字模软件使用
oled屏幕配套取字模软件使用 作者:李剀 出处:https://www.cnblogs.com/kevin-nancy/p/10531368.html欢迎转载,但也请保留上面这段声明.谢谢! **P ...
- 关于手残,搞废我的OLED屏幕的 追悼会
2017-12-1913:36:41 昨天按照B站的资料利用esp12F做了一个天气站,可预报天气,惭愧的是模型做好了,照片还没拍就夭折了,可怜了我20块的屏幕,我心伤悲,莫知我哀呀! 本来调试已经成 ...
- OLED屏幕详细使用
IC扩展-OLED屏的点亮,模拟IIC功能实现C代码点亮OLED屏,只要是可以C编程且有两个GPIO口的单片机均可更改小部分代码使用.OLED屏为像素自发光,其尺寸多为128*64,表示横轴上有128 ...
- oled屏幕
oled作为一种新型的有机显示屏,越来越现实出其重要性,它不但超薄可弯折并且可视视角较宽.处在不论什么角度看屏幕都不会造成图像的失真. 且它有三中原色:绿.红,蓝. 我近期在学安在智能车上的oled ...
- 七脚OLED屏幕使用IIC接口
7pin 0.96寸OLED模块支持SPI和IIC接口 默认是SPI接口;如果想用IC接口;操作如下几步骤: 1.将模块背面的电阻R3换到R1位置,此时将模块切换为IIC接口:电阻R8可以用0欧姆电阻 ...
随机推荐
- Linux中配置网桥
使用kvm虚拟机时,有时候需要自己添加网桥供guest使用. 不使用libvirt来管理的话,可以使用以下方法创建网桥并绑定到物理网卡(RHEL6/Fedora已实验): 1.创建网桥配置文件ifcf ...
- hadoop集群环境配置成功与否查看方法
1.Hadoop启动jobhistoryserver来实现web查看作业的历史运行情况,由于在启动hdfs和Yarn进程之后,jobhistoryserver进程并没有启动,需要手动启动jobhist ...
- 完整性检查工具Nabou
完整性检查工具Nabou 650) this.width=650;" onclick="window.open("http://blog.51cto.com/viewpi ...
- vuejs实现表格分页
http://www.cnblogs.com/landeanfen/p/6054654.html#_label3_8 <html xmlns="http://www.w3.org/19 ...
- gSOAP 使用WebServer心得
关于正常怎么使用gSOAP的话,下面那篇博客已经讲得非常详细,我就不再赘述了 https://www.cnblogs.com/dengpeng1004/p/6165751.html 问题1: WCF ...
- linux常用命令之lsof 、netstat、ipcs、ldd
一.lsof lsof(list open files)是一个列出当前系统打开文件的工具.在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件.每行 ...
- 使用 Bluemix™ Live Sync 高速更新 Bluemix 上执行的应用程序实例
假设您要构建 Node.js 应用程序,那么能够使用 IBM® Bluemix® Live Sync 高速更新 Bluemix 上的应用程序实例,并像在桌面上进行操作一样进行开发,而无需又一次部署.执 ...
- Android基础新手教程——3.8 Gestures(手势)
Android基础新手教程--3.8 Gesture(手势) 标签(空格分隔): Android基础新手教程 本节引言: 周六不歇息,刚剪完了个大平头回来.继续码字~ 好的,本节给大家带来点的是第三章 ...
- 微软自拍应用iOS版公布
微软自拍(Microsoft Selfie)主要是支持自拍后还能加强自拍效果的功能. 只是和其它自拍应用不同的是.Microsoft Selfie 利用了机器学习来增强照片,应用会"考虑年龄 ...
- funuiTitle-居中问题修改
今天遇到了一个问题,在一个actionbar上,title居中了,现在想要的方式是,让actionbar上显示返回按钮,后面紧跟着title.当时自己一直尝试要找到activity,然后在theme中 ...