51单片机移植0.96寸OLED显示 亲测可用

废话不多说  先上图片

一下便是我的代码

LCD头文件

LCD源文件

由于51单片机内存限制,一些大的数组不能装载,所以采用8*16字符串显示,汉字取模软件学习单片机都会带,我就不发了,具体使用的时候就是将LCD头文件与源文件添加到你的51工程,main函数调用LCD的初始化函数,然后即可调用一些基本的显示函数了。

有需要移植好的文件的同学评论区留下邮箱地址,或者给我发邮件1329931228@qq.com,由于本人是学生,可能不能及时回复,请见谅

没想到这么多同学需要,以下是文件地址:

链接:https://pan.baidu.com/s/1Hi8qipc1dLD9GECYscxvSQ 
提取码:agee 
复制这段内容后打开百度网盘手机App,操作更方便哦

  • 39
    点赞
  • 232
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 64
    评论
以下是一个使用51单片机控制0.96OLED显示屏的简单程序,需要使用4针OLED连接方式。 ```c #include <reg52.h> #define SCL P1_0 //时钟线 #define SDA P1_1 //数据线 void delay(unsigned int t) //延时函数 { while (t--) { int i = 1000; while (i--); } } void IIC_Start() //起始信号 { SDA = 1; SCL = 1; delay(1); SDA = 0; delay(1); SCL = 0; } void IIC_Stop() //结束信号 { SDA = 0; SCL = 1; delay(1); SDA = 1; delay(1); } void Write_IIC_Byte(unsigned char dat) //写数据 { unsigned char i; for (i = 0; i < 8; i++) { SDA = dat & 0x80; SCL = 1; delay(1); SCL = 0; dat <<= 1; } } void OLED_WriteCmd(unsigned char cmd) //写指令 { IIC_Start(); Write_IIC_Byte(0x78); Write_IIC_Byte(0x00); Write_IIC_Byte(cmd); IIC_Stop(); } void OLED_WriteDat(unsigned char dat) //写数据 { IIC_Start(); Write_IIC_Byte(0x78); Write_IIC_Byte(0x40); Write_IIC_Byte(dat); IIC_Stop(); } void OLED_Init() //OLED初始化 { OLED_WriteCmd(0xAE); //关闭显示 OLED_WriteCmd(0x20); //设置内存地址模式 OLED_WriteCmd(0x02); //设置内存地址模式为页地址模式 OLED_WriteCmd(0x8D); //开启电荷泵 OLED_WriteCmd(0x14); //设置电荷泵倍数 OLED_WriteCmd(0xA1); //设置段重映射 OLED_WriteCmd(0xC8); //设置行重映射 OLED_WriteCmd(0xDA); //设置COM硬件配置 OLED_WriteCmd(0x12); //设置COM硬件配置 OLED_WriteCmd(0x81); //设置对比度 OLED_WriteCmd(0xCF); //设置对比度 OLED_WriteCmd(0xD9); //设置预充电周期 OLED_WriteCmd(0xF1); //设置预充电周期 OLED_WriteCmd(0xDB); //设置VCOMH OLED_WriteCmd(0x40); //设置VCOMH OLED_WriteCmd(0xA4); //设置显示全部点亮 OLED_WriteCmd(0xA6); //设置正常显示 OLED_WriteCmd(0xAF); //开启显示 } void OLED_Clear() //清屏 { unsigned char i, j; for (i = 0; i < 8; i++) { OLED_WriteCmd(0xb0 + i); //设置页地址 OLED_WriteCmd(0x00); //设置列地址低4位 OLED_WriteCmd(0x10); //设置列地址高4位 for (j = 0; j < 128; j++) { OLED_WriteDat(0); //清空该页的所有像素点 } } } void OLED_ShowString(unsigned char x, unsigned char y, unsigned char *str) //显示字符串 { unsigned char i = 0; while (str[i] != '\0') { OLED_ShowChar(x, y, str[i]); x += 8; i++; } } void OLED_ShowChar(unsigned char x, unsigned char y, unsigned char chr) //显示字符 { unsigned char i = 0; unsigned char j = 0; chr = chr - 32; OLED_WriteCmd(0xb0 + y); //设置页地址 OLED_WriteCmd(((x & 0xf0) >> 4) | 0x10); //设置列地址高4位 OLED_WriteCmd(x & 0x0f); //设置列地址低4位 for (i = 0; i < 8; i++) { OLED_WriteDat(F8X16[chr * 16 + i]); //写入字符的上半部分 } OLED_WriteCmd(0xb0 + y + 1); //设置页地址 OLED_WriteCmd(((x & 0xf0) >> 4) | 0x10); //设置列地址高4位 OLED_WriteCmd(x & 0x0f); //设置列地址低4位 for (i = 0; i < 8; i++) { OLED_WriteDat(F8X16[chr * 16 + i + 8]); //写入字符的下半部分 } } void main() { OLED_Init(); //OLED初始化 OLED_Clear(); //清屏 OLED_ShowString(0, 0, "Hello, world!"); //显示字符串 while (1); } ``` 需要注意的是,以上程序中使用了一个字库数组 `F8X16`,需要在程序中定义该数组或者从外部调用该数组。该字库数组中包含了ASCII码字符的点阵数据,可以用于在OLED屏幕上显示字符。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 64
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Rookie Linux

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值