找回密码
 立即注册

QQ登录

只需一步,快速开始

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

arduino 如何驱动oled

[复制链接]
跳转到指定楼层
楼主
ID:128952 发表于 2016-7-2 18:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用K60能驱动oled.用的库
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:121867 发表于 2016-7-4 17:14 | 只看该作者
//本程序实现了一个字符串向左移动,向右移动,向下称动,向上移动,在同一个位置显示一个ASCII字符 //将各个函数改写使之通用化 #include "U8glib.h" U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE);        // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are  SCK = 13 and MOSI = 11) char str1[]="HW SPI Com: CS = 10, A0 = 9 "; char str2[]="HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are  SCK = 13 and MOSI = 11)";     void moveStrToRight(char *str,int x,int y) //这个函数未实现字符串从左向右移动,而是出现了字符串叠加的现象。 //原来是字符串太长了 {     for (int i=0;i<=12;i++)   {      u8g.firstPage();       do {         u8g.drawStr(i*10+x,y,(char *)str);         }      while( u8g.nextPage() );         delay(100);   }     }   void moveStr2ToRight(char *str1,char *str2,int x1,int y1,int x2,int y2) //这个函数未实现字符串从左向右移动,而是出现了字符串叠加的现象。 //原来是字符串太长了 {     for (int i=0;i<=12;i++)   {      u8g.firstPage();       do {         u8g.drawStr(i*10+x1,y1,(char *)str1);       u8g.drawStr(i*10+x2,y2,(char *)str2);         }      while( u8g.nextPage() );         delay(100);   }     }     void moveStrToLeft(char *str,int x, int y) //这个函数未实现字符串从右向左移动,而是出现了字符串叠加的现象。 //原来是字符串太长了 {         for (int i=0;i<=12;i++)   {      u8g.firstPage();       do {       u8g.drawStr(x-i*10,y,(char *)str1);       }      while( u8g.nextPage() );         delay(100);   }     } void moveStrToDown(char *str,int x ,int y)// 这个过程是字符串竖直排,从上向下移动位置   {     //注这个字符串共有20个字符,20*8=160(字体像素以6*8计算)   //显示的位置是从Y轴-160开始,然后每次向下增进10个像素值,从上向下完全的完整显示字符串   for (int i=0;i<=10;i++)   {      u8g.firstPage();       do {       u8g.drawStr90(x,i*16-y,(char *)str);           }      while( u8g.nextPage() );         delay(100);   }     }   void moveStrToUp(char *str,int x,int y)// 这个过程是字符串竖直排,从下向上移动位置   {       //str1[]  注这个字符串共有20个字符,20*8=160(字体像素以6*8计算)   //显示的位置是从Y轴-160开始,然后每次向上增进10个像素值,从下向上完全的完整显示字符串   //为了能显示最后一个字符,Y轴的值至少为-20*8=-160   for (int i=0;i<=17;i++)   {      u8g.firstPage();       do {       u8g.drawStr90(x,y-i*10,(char *)str1);       }      while( u8g.nextPage() );         delay(100);   }     } void u8g_prepare(void) {   u8g.setFont(u8g_font_6x10);   u8g.setFontRefHeightExtendedText();   u8g.setDefaultForegroundColor();   u8g.setFontPosTop(); } uint8_t draw_state = 0;   void mydraw(void) {   u8g_prepare();   switch(draw_state >> 3) {   case 0:      moveStrToLeft(str1,120,10); //x=20(个字符数)*6(字符宽),y=10差不多在第一行     break;   case 1:        moveStrToRight(str1,0,10) ; //x=0,y=10 ,y=10差不多在第一行     break;   case 2:      moveStrToUp(str1,10,60); //x=10,y=60 x在超过一个字符位置,Y在差不多第六行     break;   case 3:      moveStrToDown(str1,10,120); //x=10,由于str1字符长度20个,字符串长度是=20*8=160,y就等于120     break;   case 4:      displayAchar(); //在依次显示不同的ASCII字符     break;    case 5:      u8g_ascii_1(30,50); //在指定的坐标,显示不同的ASCII字符     break;         } }     void u8g_ascii_1(int i,int j) //显示ascii在屏幕上 {   char s[2] = " ";   uint8_t x, y;     for( y = 0; y < 6; y++ ) {     for( x = 0; x < 16; x++ )      {       s[0] = y*16 + x + 32;       do {         u8g.drawStr( 0, 0, "ASCII page 1");         u8g.drawStr(i, j, s);            //如果需要依次在不同的位置显示,如下行         //  u8g.drawStr(x*7+i, y*10+j, s);                 delay(50);         }        while( u8g.nextPage() );           }   } }     void setup() {       if ( u8g.getMode() == U8G_MODE_R3G3B2 )      u8g.setColorIndex(255);     // white   else if ( u8g.getMode() == U8G_MODE_GRAY2BIT )     u8g.setColorIndex(3);         // max intensity   else if ( u8g.getMode() == U8G_MODE_BW )     u8g.setColorIndex(1);         // pixel on     // u8g.setFont(u8g_font_unifont);   Serial.begin(9600);       u8g_prepare();//初始化字体,屏幕参数       }   void loop() {       //moveStr2ToRight(str1,str2,0,0,0,10);   mydraw();   draw_state++;   if ( draw_state >= 7*8 )     draw_state = 0;     // rebuild the picture after some delay   delay(100);   }       void displayAchar()//这个过程,依次在不同的坐标,显示不同ASCII的字符 {     char s[2] = " ";   uint8_t x, y;     for( y = 0; y < 6; y++ ) {     for( x = 0; x < 16; x++ )      {       s[0] = y*16 + x + 32;       u8g.firstPage();         do {         u8g.drawStr( 0, 0, "ASCII page 1");         //  u8g.drawStr(31, 40, s);            //如果需要依次在不同的位置显示,如下行         u8g.drawStr(x*7, y*10, s);                 delay(50);         }        while( u8g.nextPage() );           }   }   }
回复

使用道具 举报

板凳
ID:121867 发表于 2016-7-4 17:16 | 只看该作者
那是驱动程序,接线的话GND接地 VCC接3.3V或者5V
SCL接A5, SDA接A4,
回复

使用道具 举报

地板
ID:121867 发表于 2016-7-4 17:16 | 只看该作者
库文件自己去网上下吧 一大把 给你传不过来
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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