微波EDA网,见证研发工程师的成长!
首页 > 应用设计 > 消费类电子 > OLED显示模块与C8051F单片机的接口设计

OLED显示模块与C8051F单片机的接口设计

时间:08-14 来源:3721RD 点击:

(1) 写左半屏命令
void wr_command1() {
   cs1=1; cs1=1; cs1=1;  //选择左半屏
   cs2=0; cs2=0; cs2=0;
   read_status();     //读BUSY位状态
   r_w=0; r_w=0; r_w=0;
   P5=com;         //将命令字节送I/O口
   e=1; e=1; e=1;
   e=0; e=0; e=0;     //在E下降沿,命令字节被写
               //入列驱动器
}

(2) 写左半屏数据
void wr_data1() {
   cs1=1; cs1=1; cs1=1;  //选择左半屏
   cs2=0; cs2=0; cs2=0;
   read_status();     //读BUSY位状态
   d_i=1; d_i=1; d_i=1;
   r_w=0; r_w=0; r_w=0;
   P5=dat;         //将数据字节送I/O口
   e=1; e=1; e=1;
   e=0; e=0; e=0;     //在E下降沿,数据字节被写
               //入列驱动器
}
  
其中,读状态位的函数采用查询标志位的方式,即
void read_status() reentrant {
   uchar busy;
   uchar temp;
   d_i=0; d_i=0; d_i=0;  //进行指令操作
   r_w=1; r_w=1; r_w=1;  //进行读操作
   do {
     P5=0xff;
     e=1; e=1; e=1;
     busy=P5;       //读入P5端口状态
     e=0; e=0; e=0;
     temp=busy&0x80;
   }while(temp!=0);
}

(3) OLED初始化
void init_lcd() {
   com=0xc0;       //从第0行开始
   wr_command1();
   wr_command2();
   com=0x3f;       //打开显示
   wr_command1();
   wr_command2();
}

(4) OLED清屏
void clear_lcd() {
  uchar column1;
  uchar page;
  for(page=0;page<8;page++) {
  com=(0xb8+page);   //设置页号
  wr_command1();
  wr_command2();
  com=0x40;       //设置起始列为0,写操作完
              //后列地址计数器自动加1
  wr_command1();
  wr_command2();
  for(column1=0;column1<64;column1++) {


              //清左半屏
  dat=0;
  wr_data1();
  }
  for(column1=64;column1<128;column1++) {
              //清右半屏
  dat=0;
  wr_data2();
    }
  }
}

(5) 显示16×8字符的程序
void lcd_write_char_code(uchar page8,uchar column8,uchar* block168)reentrant {
  uchar column1;
  set_position(page8,column8);//设置所写字符起始页位置
  for(column1=0;column1<8;column1++) {
  dat=block168[column1];
              //从字库中取出上半页8×8点阵字模数据
  dat=UpsetChar[dat];
              //将每个字节数据高低位进行对调
  if(column8<=7)
              //如果设置的所写位置在左半屏,调用写左半屏
              //数据的函数
  wr_data1();
  else
              //如果设置的所写位置在右半屏,调用写右半屏
              //数据的函数
  wr_data2();
  }
  page8++;
  set_position(page8,column8);//设置所写字符下半页位置
  for(column1=8;column1<16;column1++) {
  dat=block168[column1];
              //从字库中取出下半页8×8点阵字模数据
  dat=UpsetChar[dat];
              //将每个字节数据高低位进行对调
  if(column8<=7)
              //如果设置的所写位置在左半屏,调用写左半屏
              //数据的函数
  wr_data1();
  else
              //如果设置的所写位置在右半屏,调用写右半屏数据的函数
  wr_data2();
    }
  }

5 结论

OLED显示技术有着广泛的应用前景。采用此技术的VGS12864E显示模块具有与MCU接口方便、显示功能强和编程简单等优点,具有广泛的应用价值。上面介绍的接口设计与软件编程已成功应用于数据采集系统中的系统工作参数的显示,效果良好;再配合按键控制进行反显、参数设置、翻页等,建立了良好的人机交互界面。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top