C51——oled显示一串字符

本文详细介绍了在C51环境下如何利用OLED屏幕显示一串字符。内容涵盖了写入指令和数据的步骤,包括开始位、地址确认、控制字节等,并讨论了显示逻辑,如128x64像素的布局、自动右移以及三种不同的模式选择。此外,还提供了主函数中的配置流程,包括屏幕初始化、页地址模式设置、显示地址配置和数据写入方法。
摘要由CSDN通过智能技术生成

oled显示一串字符,
注意使用code来放置数据专区,char字符比较小,int字符比较大,可以用char字符
oled屏幕:
1、写入指令和数据

①开始位:start();
②确认地址:slave address=0111 1000
屏幕地址:bit1可以是0也可以是1,代表不同模式
RW:bit0=1代表读取数据模式,bit0=0代表写数据模式
③ACK
④control byte:Co D/C 00 0000
0000 0000传输数据,1000 0000写入命令
如果Co为0,后边默认是数据传输,Co为1是写入命令
ACK
⑤写入指令/数据
ACK
⑥停止位:stop

2、显示逻辑
128x64(长*宽)像素点
64=8page*8bit
自动右移

3、模式选择(选择页寻址模式0x20,0x02)
页地址模式——向右偏移,不会切换到下一列
水平地址模式——自动切换到下一列,page8循环完成返回page1
垂直地址模式——竖直向下切换,第一列,第二列,第三列....

主函数中配置模式选择
1、屏幕初始化
2、配置页地址模式
Oled_Write_Cmd(0x20);
Oled_Write_Cmd(0x02);
3、配置显示地址
Oled_Write_Cmd(0xB0);//配置page1-8
Oled_Write_Cmd(0x00);/

以下是一个基于C51单片机控制OLED 12864屏幕的显示代码的示例: ```c #include <reg51.h> #include <intrins.h> #define LCD_SCL P1_0 // OLED串行时钟线 #define LCD_SDA P1_1 // OLED串行数据线 void delay_us(unsigned int t) { while(t--); } void OLED_write_cmd(unsigned char cmd) { LCD_SCL = 0; LCD_SDA = 0; LCD_SCL = 1; LCD_SDA = 0; LCD_SCL = 0; _nop_(); for(int i = 0; i < 8; i++) { LCD_SDA = (cmd >> i) & 0x01; LCD_SCL = 1; _nop_(); LCD_SCL = 0; _nop_(); } } void OLED_write_data(unsigned char dat) { LCD_SCL = 0; LCD_SDA = 1; LCD_SCL = 1; LCD_SDA = 0; LCD_SCL = 0; _nop_(); for(int i = 0; i < 8; i++) { LCD_SDA = (dat >> i) & 0x01; LCD_SCL = 1; _nop_(); LCD_SCL = 0; _nop_(); } } void OLED_init() { OLED_write_cmd(0xAE); // 关闭OLED显示 OLED_write_cmd(0x00); // 设置低列地址 OLED_write_cmd(0x10); // 设置高列地址 OLED_write_cmd(0x40); // 设置显示开始行 OLED_write_cmd(0xB0); // 设置页地址 OLED_write_cmd(0x81); // 设置对比度控制 OLED_write_cmd(0xCF); // 设置电荷泵倍率 OLED_write_cmd(0xA1); // 设置段重新映射 OLED_write_cmd(0xA6); // 设置正常/反向显示 OLED_write_cmd(0xA8); // 设置多重比例 OLED_write_cmd(0x3F); // 设置MUX比率 OLED_write_cmd(0xC8); // 设置COM扫描方向 OLED_write_cmd(0xD3); // 设置显示偏移 OLED_write_cmd(0x00); // 不偏移 OLED_write_cmd(0xD5); // 设置显示时钟分频 OLED_write_cmd(0x80); // 100分频 OLED_write_cmd(0xD9); // 设置预充电周期 OLED_write_cmd(0xF1); // PHASE 1: 2D, PHASE 2: 5D OLED_write_cmd(0xDA); // 设置COM引脚硬件配置 OLED_write_cmd(0x12); OLED_write_cmd(0xDB); // 设置VCOMH电压倍率 OLED_write_cmd(0x40); OLED_write_cmd(0x8D); // 设置电荷泵使能/禁用 OLED_write_cmd(0x14); OLED_write_cmd(0xAF); // 打开OLED显示 } void OLED_clear() { for(int i = 0; i < 8; i++) { OLED_write_cmd(0xB0 + i); OLED_write_cmd(0x00); OLED_write_cmd(0x10); for(int j = 0; j < 128; j++) OLED_write_data(0x00); } } void OLED_display(unsigned char page, unsigned char column, unsigned char *text) { OLED_write_cmd(0xB0 + page); OLED_write_cmd(((column & 0xF0) >> 4) | 0x10); OLED_write_cmd(column & 0x0F); for(int i = 0; i < 8; i++) OLED_write_data(text[i]); } void main() { OLED_init(); OLED_clear(); unsigned char text[8] = { 0x00, 0x3C, 0x42, 0x42, 0x3C, 0x00, 0x00, 0x00 }; OLED_display(0, 0, text); while(1); } ``` 请注意,该代码假设你已将OLED 12864屏幕的串行时钟线连接到C51单片机的P1.0引脚,串行数据线连接到P1.1引脚。你可以根据实际情况进行调整。确保在使用该代码之前,你已经正确地连接了C51单片机与OLED 12864屏幕。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值