查看: 193|回复: 1

[原创] 【赚周年币】fireduino-OLED动画

[复制链接]

176

主题

4

好友

6153

积分

状元

Rank: 6Rank: 6

  • TA的每日心情
    开心
    昨天 19:23
  • 签到天数: 709 天

    连续签到: 4 天

    [LV.9]以坛为家II

    发表于 2016-12-25 12:55:08 |显示全部楼层
    接上一篇帖子
    【新提醒】四周年庆-【赚周年币】fireduino-驱动OLED-爱板网论坛 - 电子工程师学习交流园地 http://www.eeboard.com/bbs/thread-59209-1-1.html


    OLED驱动有多种方法
    SSD1306驱动方式.jpg

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

    手机拍摄不是很清晰,视频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 人评分 收起 理由
    loveeeboard + 25

    总评分:  + 25   查看全部评分

    回复

    使用道具 举报

    176

    主题

    4

    好友

    6153

    积分

    状元

    Rank: 6Rank: 6

  • TA的每日心情
    开心
    昨天 19:23
  • 签到天数: 709 天

    连续签到: 4 天

    [LV.9]以坛为家II

    发表于 2016-12-25 12:56:05 |显示全部楼层
    视频http://v.youku.com/v_show/id_XMTYyODU0NjQyNA==.html
    回复

    使用道具 举报

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

    关闭

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

    手机版|爱板网 |网站地图  

    GMT+8, 2017-7-27 06:49 , Processed in 0.157661 second(s), 12 queries , Memcache On.

    苏公网安备 32059002001056号

    Powered by Discuz!

    回顶部