1回答

1收藏

【赚周年币】fireduino-OLED动画

#线上活动 #线上活动 2279 人阅读 | 1 人回复 | 2016-12-25

接上一篇帖子
【新提醒】四周年庆-【赚周年币】fireduino-驱动OLED-爱板网论坛 - 电子工程师学习交流园地 https://www.cirmall.com/bbs/thread-59209-1-1.html


OLED驱动有多种方法

本次采用硬件SPI,接线图见上一篇帖子
实际显示,涉及到点线面组合图形操作

手机拍摄不是很清晰,视频http://v.youku.com/v_show/id_XMTYyODU0NjQyNA==.html
程序
  1. void u8g_prepare(void) {
  2.   u8g.setFont(u8g_font_6x10);
  3.   u8g.setFontRefHeightExtendedText();
  4.   u8g.setDefaultForegroundColor();
  5.   u8g.setFontPosTop();
  6. }

  7. void u8g_box_frame(uint8_t a) {
  8.   u8g.drawStr( 0, 0, "drawBox");
  9.   u8g.drawBox(5,10,20,10);
  10.   u8g.drawBox(10+a,15,30,7);
  11.   u8g.drawStr( 0, 30, "drawFrame");
  12.   u8g.drawFrame(5,10+30,20,10);
  13.   u8g.drawFrame(10+a,15+30,30,7);
  14. }

  15. void u8g_disc_circle(uint8_t a) {
  16.   u8g.drawStr( 0, 0, "drawDisc");
  17.   u8g.drawDisc(10,18,9);
  18.   u8g.drawDisc(24+a,16,7);
  19.   u8g.drawStr( 0, 30, "drawCircle");
  20.   u8g.drawCircle(10,18+30,9);
  21.   u8g.drawCircle(24+a,16+30,7);
  22. }

  23. void u8g_r_frame(uint8_t a) {
  24.   u8g.drawStr( 0, 0, "drawRFrame/Box");
  25.   u8g.drawRFrame(5, 10,40,30, a+1);
  26.   u8g.drawRBox(50, 10,25,40, a+1);
  27. }

  28. void u8g_string(uint8_t a) {
  29.   u8g.drawStr(30+a,31, " 0");
  30.   u8g.drawStr90(30,31+a, " 90");
  31.   u8g.drawStr180(30-a,31, " 180");
  32.   u8g.drawStr270(30,31-a, " 270");
  33. }

  34. void u8g_line(uint8_t a) {
  35.   u8g.drawStr( 0, 0, "drawLine");
  36.   u8g.drawLine(7+a, 10, 40, 55);
  37.   u8g.drawLine(7+a*2, 10, 60, 55);
  38.   u8g.drawLine(7+a*3, 10, 80, 55);
  39.   u8g.drawLine(7+a*4, 10, 100, 55);
  40. }

  41. void u8g_triangle(uint8_t a) {
  42.   uint16_t offset = a;
  43.   u8g.drawStr( 0, 0, "drawTriangle");
  44.   u8g.drawTriangle(14,7, 45,30, 10,40);
  45.   u8g.drawTriangle(14+offset,7-offset, 45+offset,30-offset, 57+offset,10-offset);
  46.   u8g.drawTriangle(57+offset*2,10, 45+offset*2,30, 86+offset*2,53);
  47.   u8g.drawTriangle(10+offset,40+offset, 45+offset,30+offset, 86+offset,53+offset);
  48. }

  49. void u8g_ascii_1() {
  50.   char s[2] = " ";
  51.   uint8_t x, y;
  52.   u8g.drawStr( 0, 0, "ASCII page 1");
  53.   for( y = 0; y < 6; y++ ) {
  54.     for( x = 0; x < 16; x++ ) {
  55.       s[0] = y*16 + x + 32;
  56.       u8g.drawStr(x*7, y*10+10, s);
  57.     }
  58.   }
  59. }

  60. void u8g_ascii_2() {
  61.   char s[2] = " ";
  62.   uint8_t x, y;
  63.   u8g.drawStr( 0, 0, "ASCII page 2");
  64.   for( y = 0; y < 6; y++ ) {
  65.     for( x = 0; x < 16; x++ ) {
  66.       s[0] = y*16 + x + 160;
  67.       u8g.drawStr(x*7, y*10+10, s);
  68.     }
  69.   }
  70. }

  71.     u8g.setRGB(255,255,255);
  72.     u8g.drawStr( 66, 0, "Color Page");
  73.   }
  74.   else if ( u8g.getMode() == U8G_MODE_GRAY2BIT )
  75.   {
  76.     u8g.drawStr( 66, 0, "Gray Level");
  77.     u8g.setColorIndex(1);
  78.     u8g.drawBox(0, 4, 64, 32);   
  79.     u8g.drawBox(70, 20, 4, 12);
  80.     u8g.setColorIndex(2);
  81.     u8g.drawBox(0+1*a, 4+1*a, 64-2*a, 32-2*a);
  82.     u8g.drawBox(74, 20, 4, 12);
  83.     u8g.setColorIndex(3);
  84.     u8g.drawBox(0+2*a, 4+2*a, 64-4*a, 32-4*a);
  85.     u8g.drawBox(78, 20, 4, 12);
  86.   }
  87.   else
  88.   {
  89.     u8g.drawStr( 0, 12, "setScale2x2");
  90.     u8g.setScale2x2();
  91.     u8g.drawStr( 0, 6+a, "setScale2x2");
  92.     u8g.undoScale();
  93.   }
  94. }


  95. uint8_t draw_state = 0;
  96. void draw(void) {
  97.   u8g_prepare();
  98.   switch(draw_state >> 3) {
  99.     case 0: u8g_box_frame(draw_state&7); break;
  100.     case 1: u8g_disc_circle(draw_state&7); break;
  101.     case 2: u8g_r_frame(draw_state&7); break;
  102.     case 3: u8g_string(draw_state&7); break;
  103.     case 4: u8g_line(draw_state&7); break;
  104.     case 5: u8g_triangle(draw_state&7); break;
  105.     case 6: u8g_ascii_1(); break;
  106.     case 7: u8g_ascii_2(); break;
  107.     case 8: u8g_extra_page(draw_state&7); break;
  108.   }
  109. }

  110. void setup(void) {

  111. #if defined(ARDUINO)
  112.   pinMode(13, OUTPUT);           
  113.   digitalWrite(13, HIGH);  
  114. #endif
  115. }

  116. void loop(void) {
  117.   u8g.firstPage();  
  118.   do {
  119.     draw();
  120.   } while( u8g.nextPage() );
  121.    

  122.   draw_state++;
  123.   if ( draw_state >= 9*8 )
  124.     draw_state = 0;

  125. }
复制代码

评分

参与人数 1 +25 收起 理由
loveeeboard + 25

查看全部评分

分享到:
回复

使用道具 举报

回答|共 1 个

倒序浏览

沙发

suoma

发表于 2016-12-25 12:56:05 | 只看该作者

视频http://v.youku.com/v_show/id_XMTYyODU0NjQyNA==.html
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条