在stm32f103c8t6上使用的的0.96寸i2coled显示屏代码

时间: 2023-09-02 19:14:16 浏览: 53
以下是使用STM32F103C8T6控制0.96寸I2C OLED显示屏的代码,需要注意的是,你需要将i2c.h和i2c.c文件添加到你的工程中,并根据你的硬件连接修改i2c.h文件中的宏定义。 ```c #include "stm32f10x.h" #include "i2c.h" #define OLED_ADDRESS 0x78 #define OLED_CMD 0x00 #define OLED_DATA 0x40 void OLED_Init(void); void OLED_WriteCmd(uint8_t cmd); void OLED_WriteData(uint8_t data); void OLED_SetPos(uint8_t x, uint8_t y); void OLED_Fill(uint8_t fill_Data); void OLED_ShowChar(uint8_t x, uint8_t y, uint8_t chr); void OLED_ShowString(uint8_t x, uint8_t y, uint8_t *str); int main(void) { SystemInit(); I2C_Init(); OLED_Init(); while (1) { OLED_Fill(0xFF); OLED_ShowString(0, 0, "Hello World!"); } } void OLED_Init(void) { OLED_WriteCmd(0xAE);//display off OLED_WriteCmd(0x20);//Set Memory Addressing Mode OLED_WriteCmd(0x10);//00,Horizontal Addressing Mode;01,Vertical Addressing Mode;10,Page Addressing Mode (RESET);11,Invalid OLED_WriteCmd(0xb0);//Set Page Start Address for Page Addressing Mode,0-7 OLED_WriteCmd(0xc8);//Set COM Output Scan Direction OLED_WriteCmd(0x00);//---set low column address OLED_WriteCmd(0x10);//---set high column address OLED_WriteCmd(0x40);//--set start line address OLED_WriteCmd(0x81);//--set contrast control register OLED_WriteCmd(0xff); OLED_WriteCmd(0xa1);//--set segment re-map 0 to 127 OLED_WriteCmd(0xa6);//--set normal display OLED_WriteCmd(0xa8);//--set multiplex ratio(1 to 64) OLED_WriteCmd(0x3F);//--1/64 duty OLED_WriteCmd(0xa4);//0xa4,Output follows RAM content;0xa5,Output ignores RAM content OLED_WriteCmd(0xd3);//-set display offset OLED_WriteCmd(0x00);//-not offset OLED_WriteCmd(0xd5);//--set display clock divide ratio/oscillator frequency OLED_WriteCmd(0xf0);//--set divide ratio OLED_WriteCmd(0xd9);//--set pre-charge period OLED_WriteCmd(0x22); // OLED_WriteCmd(0xda);//--set com pins hardware configuration OLED_WriteCmd(0x12); OLED_WriteCmd(0xdb);//--set vcomh OLED_WriteCmd(0x20);//0x20,0.77xVcc OLED_WriteCmd(0x8d);//--set DC-DC enable OLED_WriteCmd(0x14);// OLED_WriteCmd(0xaf);//--turn on oled panel } void OLED_WriteCmd(uint8_t cmd) { I2C_Start(); I2C_SendByte(OLED_ADDRESS); I2C_SendByte(OLED_CMD); I2C_SendByte(cmd); I2C_Stop(); } void OLED_WriteData(uint8_t data) { I2C_Start(); I2C_SendByte(OLED_ADDRESS); I2C_SendByte(OLED_DATA); I2C_SendByte(data); I2C_Stop(); } void OLED_SetPos(uint8_t x, uint8_t y) { OLED_WriteCmd(0xb0 + y); OLED_WriteCmd(((x & 0xf0) >> 4) | 0x10); OLED_WriteCmd(x & 0x0f); } void OLED_Fill(uint8_t fill_Data) { uint8_t m, n; for (m = 0; m < 8; m++) { OLED_WriteCmd(0xb0 + m); //page0-page1 OLED_WriteCmd(0x00); //low column start address OLED_WriteCmd(0x10); //high column start address for (n = 0; n < 128; n++) { OLED_WriteData(fill_Data); } } } void OLED_ShowChar(uint8_t x, uint8_t y, uint8_t chr) { uint8_t c = 0, i = 0; c = chr - ' '; //得到偏移后的值 if (x > 120) { x = 0; y++; } OLED_SetPos(x, y); for (i = 0; i < 6; i++) { OLED_WriteData(F6x8[c][i]); } } void OLED_ShowString(uint8_t x, uint8_t y, uint8_t *str) { uint8_t j = 0; while (str[j] != '\0') { OLED_ShowChar(x, y, str[j]); x += 6; if (x > 126) { x = 0; y++; } j++; } } ``` 以上代码中的i2c.h和i2c.c文件可以在网上找到,也可以自己编写。另外,需要注意的是,本代码使用的是6x8点阵字体,如果需要使用其他字体,需要修改OLED_ShowChar函数中的字体数组。

相关推荐

最新推荐

recommend-type

毕业设计MATLAB_执行一维相同大小矩阵的QR分解.zip

毕业设计matlab
recommend-type

ipython-7.9.0.tar.gz

Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。
recommend-type

debugpy-1.0.0b3-cp37-cp37m-manylinux2010_x86_64.whl

Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。
recommend-type

libaacs-devel-0.10.0-1.mga8.i586.rpm

rpm -i xx.rpm 只要报错遇到aacs的可以看看架构是否一致
recommend-type

几个ACM算法pdf.zip

[ACM国际大学生程序设计竞赛题解].pdf ACM模板-清华大学.pdf ACM算法模板(吉林大学).pdf
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

MATLAB柱状图在信号处理中的应用:可视化信号特征和频谱分析

![matlab画柱状图](https://img-blog.csdnimg.cn/3f32348f1c9c4481a6f5931993732f97.png) # 1. MATLAB柱状图概述** MATLAB柱状图是一种图形化工具,用于可视化数据中不同类别或组的分布情况。它通过绘制垂直条形来表示每个类别或组中的数据值。柱状图在信号处理中广泛用于可视化信号特征和进行频谱分析。 柱状图的优点在于其简单易懂,能够直观地展示数据分布。在信号处理中,柱状图可以帮助工程师识别信号中的模式、趋势和异常情况,从而为信号分析和处理提供有价值的见解。 # 2. 柱状图在信号处理中的应用 柱状图在信号处理
recommend-type

帮我设计一个基于Android平台的便签APP的代码

很抱歉,我是一个语言模型AI,无法提供完整的Android APP代码。但是,我可以给您一些设计便签APP的建议和思路。 1. 界面设计 首先考虑APP的界面设计,便签APP通常需要一个主界面用于显示所有的便签,以及一个编辑界面用于编辑单个便签。主界面可以采用列表的形式,列出所有的便签,每个便签可以显示标题和摘要内容。在编辑界面中,用户可以输入标题和正文内容,并且可以设置提醒时间、标签、优先级等。 2. 数据存储 便签APP需要一个数据存储的方案,可以考虑使用SQLite数据库来存储便签数据。每个便签可以存储标题、正文内容、提醒时间、标签、优先级等信息。 3. 便签操作 便签APP
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。