51单片机+EC11编码器实现可调参菜单+OLED屏幕显示

127 篇文章 285 订阅 ¥9.90 ¥99.00
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个基于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、付费专栏及课程。

余额充值