找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 382|回复: 4
打印 上一主题 下一主题
收起左侧

0.91寸OLED清屏代码的问题

[复制链接]
跳转到指定楼层
楼主
本帖最后由 李冬 于 2025-4-1 16:51 编辑

我想指定某行某列的地方清除显示,比如我想把48列2行 字体16的地方清除,怎么改
  1. //清屏函数,清完屏,整个屏幕是黑色的!和没点亮一样!!!          
  2. void OLED_Clear(void)  
  3. {  
  4.         u8 i,n;                    
  5.         for(i=0;i<8;i++)  
  6.         {  
  7.                 OLED_WR_Byte (0xb0+i,OLED_CMD);    //设置页地址(0~7)
  8.                 OLED_WR_Byte (0x00,OLED_CMD);      //设置显示位置—列低地址
  9.                 OLED_WR_Byte (0x10,OLED_CMD);      //设置显示位置—列高地址   
  10.                 for(n=0;n<128;n++)OLED_WR_Byte(0,OLED_DATA);
  11.         } //更新显示
  12. }
复制代码


  1. //在指定位置显示一个字符,包括部分字符
  2. //x:0~127 列
  3. //y:0~63  行
  4. //mode:0,反白显示;1,正常显示                                 
  5. //size:选择字体 16/12
  6. void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size)
  7. {             
  8.         u8 c=0,i=0;       
  9.                 c=chr-' ';//得到偏移后的值                       
  10.                 if(x>Max_Column-1){x=0;y=y+2;}
  11.                 if(Char_Size ==16)
  12.                         {
  13.                         OLED_Set_Pos(x,y);       
  14.                         for(i=0;i<8;i++)
  15.                         OLED_WR_Byte(F8X16[c*16+i],OLED_DATA);
  16.                         OLED_Set_Pos(x,y+1);
  17.                         for(i=0;i<8;i++)
  18.                         OLED_WR_Byte(F8X16[c*16+i+8],OLED_DATA);
  19.                         }
  20.                         else {       
  21.                                 OLED_Set_Pos(x,y);
  22.                                 for(i=0;i<6;i++)
  23.                                 OLED_WR_Byte(F6x8[c][i],OLED_DATA);
  24.                                
  25.                         }
  26. }
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:879809 发表于 2025-4-1 19:29 | 只看该作者
在指定位置写一个全黑字符就行了,这么简单的道理都要上网来问?
回复

使用道具 举报

板凳
ID:230500 发表于 2025-4-1 19:57 | 只看该作者
楼上说的没错;最简单的方法就是直接在你要清屏的那一行写空字符 比如 OLED_ShowString(0,0,"此位置写空字符 也就是空格,想清多少就空几个格",16);
回复

使用道具 举报

地板
ID:584814 发表于 2025-4-1 21:18 | 只看该作者
楼上都是正解,定点擦除就是点点反显。
回复

使用道具 举报

5#
ID:320097 发表于 2025-4-1 22:03 | 只看该作者
就在你对应的地址写0就可以了啊,以SSD1306来说,先写入页地址,接着写入列地址的低位,再写入列地址的高位,这3条命令就直接定位到你要写入或者清除的那一列了,写人0X00这一列就清除原本显示的东西了,你的问题在于48列2行是哪个位置?它的寻址方式不是横向的,它是竖向的寻址,PAGE代表页地址,总共有8页,从图2就可以得知每一页竖着有8个点,刚好1个字节的容量,8个页面就是64个点,刚好对应12864的竖向的64个点,横向的SEG代表列地址,128个列地址,对应12864的横向128个列,你所谓的48列2行,2行是在最上边的这一页,所以页地址就是PAGE0,然后列地址低位就是48%16=0,列地址高位就是48/16=03,这个位置定位的是48列最上面的8个点,直接写入0X00的话,那么48列的第0行--第7行都会被清除,如果你只想清除第2行这一个点的话,那你得先把这8行的数据读出来&0XFB(1111 1011)再写回去,因为MSB字节首位D7在下边
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表