STC15W408AS单片机IIC驱动0.96寸OLED显示

STC15W408AS单片机IIC驱动0.96寸OLED显示


  • 不同页的滚动效果()
    在这里插入图片描述
  • 全页的滚动效果
    在这里插入图片描述
  • STC15W408AS最新系统板
    注意图片上的0欧姆电阻贴错了位置,应该是与GND相连的,图片上是P1.0与电源指示灯相连通,如果去TB购买时,请注意,不然买回来通上点,指示灯没反应。
    在这里插入图片描述
    在这里插入图片描述

OLED显示

STC15W408AS单片机并没有提供IIC总线的接口,但是我们可以通过模拟IIC的方式实现。关于IIC总线的只是大家可以自行上网搜索。这里以驱动SSD1306芯片的0.96寸的128*64的OLED显示屏为例。下图为OLED的外观图
在这里插入图片描述

汉字取模软件和方式

汉字显示,阴码,列行式,取模为逆向(低位在前)

在这里插入图片描述

显示效果相关参数

  • OLED初始化函数
void oled_init(void)//初始化ssd1306
{
	delay_ms(500);//延时(必须有)
	oled_wr_byte(0xAE,0);//关闭oled面板
	oled_wr_byte(0x00,0);//设置低位列地址
	oled_wr_byte(0x10,0);//设置高位列地址
	oled_wr_byte(0x40,0);//设置起始行地址设置映射RAM显示起始行(0x00~0x3F)
	oled_wr_byte(0x81,0);//--设置对比度控制寄存器
	oled_wr_byte(0xCF,0);//设置SEG输出电流亮度
	oled_wr_byte(0xA1,0);//设置分段/列映射0xa0左右反置 0xa1型正常
	oled_wr_byte(0xC8,0);//设置COM/行扫描方向0xc0上下反置 0xc8型正常
	oled_wr_byte(0xA6,0);//设置正常显示
	oled_wr_byte(0xA8,0);//设置复用比(1到64)
	oled_wr_byte(0x3F,0);//1/64负载
	oled_wr_byte(0xD3,0);//设置显示偏移映射RAM计数器(0x00~0x3F)
	oled_wr_byte(0x00,0);//不补偿
	oled_wr_byte(0xD5,0);//设置显示时钟分频比/振荡器频率
	oled_wr_byte(0x80,0);//设置分频比,将时钟设置为100帧/秒
	oled_wr_byte(0xD8,0);
	oled_wr_byte(0x05,0);
	oled_wr_byte(0xD9,0);//设置预充电时间
	oled_wr_byte(0xF1,0);//将预充电设置为15个时钟,放电设置为1个时钟
	oled_wr_byte(0xDA,0);//设置com引脚硬件配置
	oled_wr_byte(0x12,0);//
	oled_wr_byte(0xDB,0);//设置vcomh
	oled_wr_byte(0x40,0);//设置VCOM取消选择级别
	oled_wr_byte(0x20,0);//设置页面寻址模式(0x00/0x01/0x02)
	oled_wr_byte(0x02,0);//
	oled_wr_byte(0x8D,0);//设置电荷泵启用/禁用
	oled_wr_byte(0x14,0);//设置(0x10)禁用
	oled_wr_byte(0xA4,0);//禁用整个显示打开(0xa4/0xa5)
	oled_wr_byte(0xA6,0);//禁用反转显示打开(0xa6/a7)
	oled_wr_byte(0xAF,0);//打开oled面板
	fill_picture(0x00);//初始清屏
	oled_set_pos(0,0);//初始光标
}
  1. 上下颠倒.
	oled_wr_byte(0xC8,0);//设置COM/行扫描方向0xc0上下反置 0xc8型正常

在这里插入图片描述

  1. 左右翻转.
oled_wr_byte(0xA1,0);//设置分段/列映射0xa0左右反置 0xa1型正常
  1. 屏幕旋转180°显示

也就是上下颠倒+左右翻转

WriteCmd(0xc0); //行扫描顺序: 上下颠倒
WriteCmd(0xa0); //列扫描顺序:左右翻转

在这里插入图片描述

滚动显示命令

设置前需要先发关闭滚动的指令2e,接着发滚动指令29(向右)或2a(向左),接着发5条参数设置指令,用来设置持续水平滚动参数和决定滚动开始页,结束页,滚动速度和垂直滚动偏移的,最后才发开始滚屏指令2f

  • 注意:发送开始滚屏(2f)前要先传输好显示数据,如果在滚屏的时候传输显示数据RAM中的内容可能被损坏。

1.0-7页全屏内容滚动

#include"iic.h"
int main()
{
	oled_init();//OLED初始化
	oled_wr_byte(0x2e,0);//关滚动
	oled_wr_byte(0x2a,0);//方向,29右滚动,2a左滚动
	oled_wr_byte(0x00,0);//空字节
  oled_wr_byte(0x00,0);//水平起始页
	oled_wr_byte(0x00,0);//水平滚动速度
	oled_wr_byte(0x07,0);//水平结束页
	oled_wr_byte(0x00,0);//每次垂直滚动位移
	oled_wr_byte(0xff,0);//虚拟字节
	oled_showchinese(0,0,0);//显示汉字
	oled_showchinese(16,0,1);
	oled_showchinese(32,0,2);//明
	oled_showchinese(48,0,2);//明
	oled_showchinese(64,0,3);
	oled_showchinese(80,0,4);
	oled_showstring(0,3,"Hello World!",32);//显示字符串
	oled_showstring(0,5,"perseverance",32);
	oled_showstring(0,6,"9527",16);
	delay_ms(5);
	oled_wr_byte(0x2f,0);//开滚动
	delay_ms(3000);
  while (1){;}
}

在这里插入图片描述

滚动显示效果只能在man里面显示,放到while里面就不正常了,这一点需要注意。

接线说明

sbit sda=P1^1;//SDA接口
sbit scl=P1^0;//SCL接口

开源驱动测试代码

链接:https://pan.baidu.com/s/1tHuYjs70l7FvvE5BL_TboA 
提取码:2f03

版权声明:本文为CSDN博主「perseverance52」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42880082/article/details/121730657

perseverance52

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

STC15W408AS单片机3路PWM输出波形实测

STC15W408AS单片机3路PWM输出波形实测分析工具 某宝25就的工具,速度最高是24M的,完全够用了。 Logic 2.3.41(软件官网即可下载到,不过只支持英文的&#xff09

10.STC15W408AS单片机A/D转换器

10.STC15W408AS单片机A/D转换器 STC15系列单片机内部集成了8路10位高速A/D转换器。STC15系列单片机的A/D转换口在P1口(P1.7-P1.0),有8路10位高速A/D转换器,速度到300K

RT-Thread Studio移植LAN8720A驱动

RTT网络协议栈驱动移植(霸天虎) 1、新建工程 ​ 工程路径不含中文路径名,工程名用纯英文不含任何符号。 2、用CubeMx配置板子外设 2.1、配置时钟 ​ 按照自己板子配置相应时钟。