本人小白 有什么错误多多指教
OLED 8080 并行接口信号线说明
片选信号就是选用一个或某一个集成电路芯片时使用的信号。
有很多芯片挂在同一总线上(像电脑里很多外设都是挂在总线上),但我们有时候需要对其中特定的某个芯片进行数据、地址或命令的独立传输,此时,我们需要有一个信号来告诉挂在总线上的芯片们,这些数据、地址是传给哪个芯片的。这样,其他芯片就会对这些信号没有反应,而目标芯片就知道这些数据是传给自己的从而做出反应。这个信号就叫做片选信号CS
向OLED写数据用WR 向OLED读数据用RD 不管输出还是输出数据口就是8为的D0:D7 RET复位
向OLED读写数据的时候 数据有可能是命令也可能是数据 通过DC来区分
OLED8080并口读写过程
DC为高为数据 DC为低则命令 然后拉低片选
写数据时RD为高 WR先低电平再高电平 在WR从低变化到高的上升沿写入数据
写完数据后再拉高片选
//向SSD1306写入一个字节。
//dat:要写入的数据/命令
//cmd:数据/命令标志 0,表示命令;1,表示数据;
void OLED_WR_Byte(u8 dat,u8 cmd)
{
DATAOUT(dat);
OLED_RS=cmd;
OLED_CS=0; //片选信号拉低
OLED_WR=0; //WR为0
OLED_WR=1; //WR为1
OLED_CS=1; //片选信号拉高
OLED_RS=1; //RS为高电平
}
OLED程序显示原理
一共有128*64个bit 将其分为8页 每页就是128*8bit 一个字节是8bit 那么每页就是128个字节
即定义了一个128*8的二维数组 每一次修改就修改这个缓存 修改完之后再一次性写入到OLED的GRAM OLED就更新显示
序号0的命令是设置对比度的包含两个字节 第一个就是发送0X81确定它是一个命令 然后紧跟一个八位的数据设置它的对比度
序号1命令 显示开关 开/关OLED
序号2命令 电荷泵的设置
序号3命令 设置页地址 在写入时要设置写入哪个页地址 高5位是固定的 低三位用来设置需要写的页地址数(一共就八页) 如果写页0 那么命令就是10110 000
假如写页码4 那么这一页有128列 8行 页地址确定了那么写那一列呢 命令4负责先试试页地址起始列的低四位 命令5负责页地址起始列的高四位
更新缓存函数
将要输入的字符一次性输入到OLED的GREAM寄存器之中的过程
首先0~8页 一页一页的更新 每一页为128列 8行
设置低四位列地址和高四位列地址
随后128列 一列一列将信息导入进去
void OLED_Refresh_Gram(void)
{
u8 i,n;
for(i=0;i<8;i++)
{
OLED_WR_Byte (0xb0+i,OLED_CMD); //设置页地址(0~7)
OLED_WR_Byte (0x00,OLED_CMD); //设置显示位置—列低地址
OLED_WR_Byte (0x10,OLED_CMD); //设置显示位置—列高地址
for(n=0;n<128;n++)OLED_WR_Byte(OLED_GRAM[n][i],OLED_DATA);
}
}
OLED画点函数
void OLED_DrawPoint(u8 x,u8 y,u8 t)
{
u8 pos,bx,temp=0;
if(x>127||y>63)return;//超出范围了.
pos=7-y/8;
bx=y%8;
temp=1<<(7-bx);
if(t)OLED_GRAM[x][pos]|=temp;
else OLED_GRAM[x][pos]&=~temp;
}
这个函数的前两个是坐标,第三个参数表示点亮与否,x:表示从0-127的列坐标,y:表示从0-63的行坐标 t=0为点亮
将其看为一个大的xy直角坐标系 列为横坐标 x的范围为0~127 行纵坐标有8页每页8行 y的范围为0~64,从高到低对应行数从小到大
如果X=100 Y=29 T=0那么就是在(100,29)这个坐标点亮
(7-29/8)得到的整数pos表示此坐标在第几页,(7-bx)得到的在第几行,temp表示将1左移(7-bx)行 等于将第(7-bx)行点亮