返回列表 发新帖我要提问本帖赏金: 30.00元(功能说明)

[AT32L021] 【AT-START-L021测评】OLED的驱动

[复制链接]
 楼主| 比神乐 发表于 2024-11-26 21:49 | 显示全部楼层 |阅读模式
代码:
OLED.C
  1. #include "at32l021_board.h"
  2. #include "at32l021_clock.h"
  3. #include "OLED.h"

  4. //#define LCD_SCL  LATCbits.LATC0
  5. //#define LCD_SDA  LATCbits.LATC1
  6. //#define LCD_RST  LATCbits.LATC2
  7. //#define LCD_DC   LATCbits.LATC3

  8. #define XLevelL                0x00
  9. #define XLevelH                0x10
  10. #define XLevel                ((XLevelH&0x0F)*16+XLevelL)
  11. #define Max_Column        128
  12. #define Max_Row                64
  13. #define        Brightness        0xCF


  14. #define X_WIDTH 128
  15. #define Y_WIDTH 64


  16. unsigned char const Dot[]={   //图片--100x36
  17. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,
  18. 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
  19. 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
  20. 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
  21. 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
  22. 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
  23. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xF0,0xF8,0xFC,0xFE,0xFF,
  24. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  25. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x3F,0x9F,0x9F,0xDF,0xCF,0xEF,0xEF,
  26. 0xE7,0xE7,0xF7,0xF7,0xF7,0xF7,0xF7,0xF3,0xF3,0xFB,0xFB,0xFB,0xFB,0xF9,0xF9,0xFD,
  27. 0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,
  28. 0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFC,0xFC,0xFC,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,
  29. 0xFC,0xFC,0xF8,0xF0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,
  30. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  31. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x3F,0x0F,0x07,0x03,0xF8,0xFA,0xFB,0xBB,0xBB,
  32. 0x9B,0xBB,0xBB,0x3B,0x03,0x03,0x03,0x83,0xE3,0x73,0xFB,0xF3,0x83,0x03,0x03,0xC3,
  33. 0xE3,0xF3,0xF3,0xFB,0xBB,0x73,0x73,0x33,0x03,0xFB,0xFB,0xFB,0xBB,0x9B,0xBB,0xBB,
  34. 0xBB,0x03,0x03,0x03,0x83,0xE3,0x73,0x7B,0xFB,0x83,0x03,0x03,0xFB,0xFB,0x3B,0x3B,
  35. 0x7B,0xF3,0xF7,0xEF,0x1F,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  36. 0x00,0x00,0x00,0x03,0x07,0x0F,0x1F,0x3F,0x3F,0x3F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,
  37. 0x7F,0x7F,0x3F,0x3F,0x1F,0x1F,0x0F,0x07,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,
  38. 0x7F,0x7F,0x73,0x73,0x73,0x73,0x73,0x21,0x30,0x7E,0x3F,0x1F,0x0F,0x0C,0x0F,0x3F,
  39. 0x7F,0x78,0x38,0x01,0x7B,0x73,0x73,0x73,0x7B,0x3F,0x3F,0x1F,0x00,0x7F,0x7F,0x73,
  40. 0x73,0x73,0x73,0x73,0x73,0x30,0x7C,0x3F,0x1F,0x0F,0x0C,0x0F,0x3F,0x7F,0x78,0x00,
  41. 0x7F,0x7F,0x0F,0x0F,0x1F,0x3F,0x3F,0x7B,0x30,0x01,0x7F,0xFF,0xFF,0x00,0x00,0x00,
  42. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  43. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  44. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  45. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  46. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  47. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  48. 0x00,0x00,0x00,0x00};



  49. //======================================

  50. const unsigned char F6x8[][6] =
  51. {
  52.     { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },   // sp
  53.     { 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00 },   // !
  54.     { 0x00, 0x00, 0x07, 0x00, 0x07, 0x00 },   // "
  55.     { 0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14 },   // #
  56.     { 0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12 },   // $
  57.     { 0x00, 0x62, 0x64, 0x08, 0x13, 0x23 },   // %
  58.     { 0x00, 0x36, 0x49, 0x55, 0x22, 0x50 },   // &
  59.     { 0x00, 0x00, 0x05, 0x03, 0x00, 0x00 },   // '
  60.     { 0x00, 0x00, 0x1c, 0x22, 0x41, 0x00 },   // (
  61.     { 0x00, 0x00, 0x41, 0x22, 0x1c, 0x00 },   // )
  62.     { 0x00, 0x14, 0x08, 0x3E, 0x08, 0x14 },   // *
  63.     { 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08 },   // +
  64.     { 0x00, 0x00, 0x00, 0xA0, 0x60, 0x00 },   // ,
  65.     { 0x00, 0x08, 0x08, 0x08, 0x08, 0x08 },   // -
  66.     { 0x00, 0x00, 0x60, 0x60, 0x00, 0x00 },   // .
  67.     { 0x00, 0x20, 0x10, 0x08, 0x04, 0x02 },   // /
  68.     { 0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E },   // 0
  69.     { 0x00, 0x00, 0x42, 0x7F, 0x40, 0x00 },   // 1
  70.     { 0x00, 0x42, 0x61, 0x51, 0x49, 0x46 },   // 2
  71.     { 0x00, 0x21, 0x41, 0x45, 0x4B, 0x31 },   // 3
  72.     { 0x00, 0x18, 0x14, 0x12, 0x7F, 0x10 },   // 4
  73.     { 0x00, 0x27, 0x45, 0x45, 0x45, 0x39 },   // 5
  74.     { 0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30 },   // 6
  75.     { 0x00, 0x01, 0x71, 0x09, 0x05, 0x03 },   // 7
  76.     { 0x00, 0x36, 0x49, 0x49, 0x49, 0x36 },   // 8
  77.     { 0x00, 0x06, 0x49, 0x49, 0x29, 0x1E },   // 9
  78.     { 0x00, 0x00, 0x36, 0x36, 0x00, 0x00 },   // :
  79.     { 0x00, 0x00, 0x56, 0x36, 0x00, 0x00 },   // ;
  80.     { 0x00, 0x08, 0x14, 0x22, 0x41, 0x00 },   // <
  81.     { 0x00, 0x14, 0x14, 0x14, 0x14, 0x14 },   // =
  82.     { 0x00, 0x00, 0x41, 0x22, 0x14, 0x08 },   // >
  83.     { 0x00, 0x02, 0x01, 0x51, 0x09, 0x06 },   // ?
  84.     { 0x00, 0x32, 0x49, 0x59, 0x51, 0x3E },   // @
  85.     { 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C },   // A
  86.     { 0x00, 0x7F, 0x49, 0x49, 0x49, 0x36 },   // B
  87.     { 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22 },   // C
  88.     { 0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C },   // D
  89.     { 0x00, 0x7F, 0x49, 0x49, 0x49, 0x41 },   // E
  90.     { 0x00, 0x7F, 0x09, 0x09, 0x09, 0x01 },   // F
  91.     { 0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A },   // G
  92.     { 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F },   // H
  93.     { 0x00, 0x00, 0x41, 0x7F, 0x41, 0x00 },   // I
  94.     { 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01 },   // J
  95.     { 0x00, 0x7F, 0x08, 0x14, 0x22, 0x41 },   // K
  96.     { 0x00, 0x7F, 0x40, 0x40, 0x40, 0x40 },   // L
  97.     { 0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F },   // M
  98.     { 0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F },   // N
  99.     { 0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E },   // O
  100.     { 0x00, 0x7F, 0x09, 0x09, 0x09, 0x06 },   // P
  101.     { 0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E },   // Q
  102.     { 0x00, 0x7F, 0x09, 0x19, 0x29, 0x46 },   // R
  103.     { 0x00, 0x46, 0x49, 0x49, 0x49, 0x31 },   // S
  104.     { 0x00, 0x01, 0x01, 0x7F, 0x01, 0x01 },   // T
  105.     { 0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F },   // U
  106.     { 0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F },   // V
  107.     { 0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F },   // W
  108.     { 0x00, 0x63, 0x14, 0x08, 0x14, 0x63 },   // X
  109.     { 0x00, 0x07, 0x08, 0x70, 0x08, 0x07 },   // Y
  110.     { 0x00, 0x61, 0x51, 0x49, 0x45, 0x43 },   // Z
  111.     { 0x00, 0x00, 0x7F, 0x41, 0x41, 0x00 },   // [
  112.     { 0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55 },   // 55
  113.     { 0x00, 0x00, 0x41, 0x41, 0x7F, 0x00 },   // ]
  114.     { 0x00, 0x04, 0x02, 0x01, 0x02, 0x04 },   // ^
  115.     { 0x00, 0x40, 0x40, 0x40, 0x40, 0x40 },   // _
  116.     { 0x00, 0x00, 0x01, 0x02, 0x04, 0x00 },   // '
  117.     { 0x00, 0x20, 0x54, 0x54, 0x54, 0x78 },   // a
  118.     { 0x00, 0x7F, 0x48, 0x44, 0x44, 0x38 },   // b
  119.     { 0x00, 0x38, 0x44, 0x44, 0x44, 0x20 },   // c
  120.     { 0x00, 0x38, 0x44, 0x44, 0x48, 0x7F },   // d
  121.     { 0x00, 0x38, 0x54, 0x54, 0x54, 0x18 },   // e
  122.     { 0x00, 0x08, 0x7E, 0x09, 0x01, 0x02 },   // f
  123.     { 0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C },   // g
  124.     { 0x00, 0x7F, 0x08, 0x04, 0x04, 0x78 },   // h
  125.     { 0x00, 0x00, 0x44, 0x7D, 0x40, 0x00 },   // i
  126.     { 0x00, 0x40, 0x80, 0x84, 0x7D, 0x00 },   // j
  127.     { 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00 },   // k
  128.     { 0x00, 0x00, 0x41, 0x7F, 0x40, 0x00 },   // l
  129.     { 0x00, 0x7C, 0x04, 0x18, 0x04, 0x78 },   // m
  130.     { 0x00, 0x7C, 0x08, 0x04, 0x04, 0x78 },   // n
  131.     { 0x00, 0x38, 0x44, 0x44, 0x44, 0x38 },   // o
  132.     { 0x00, 0xFC, 0x24, 0x24, 0x24, 0x18 },   // p
  133.     { 0x00, 0x18, 0x24, 0x24, 0x18, 0xFC },   // q
  134.     { 0x00, 0x7C, 0x08, 0x04, 0x04, 0x08 },   // r
  135.     { 0x00, 0x48, 0x54, 0x54, 0x54, 0x20 },   // s
  136.     { 0x00, 0x04, 0x3F, 0x44, 0x40, 0x20 },   // t
  137.     { 0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C },   // u
  138.     { 0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C },   // v
  139.     { 0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C },   // w
  140.     { 0x00, 0x44, 0x28, 0x10, 0x28, 0x44 },   // x
  141.     { 0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C },   // y
  142.     { 0x00, 0x44, 0x64, 0x54, 0x4C, 0x44 },   // z
  143.     { 0x14, 0x14, 0x14, 0x14, 0x14, 0x14 }    // horiz lines
  144. };


  145. const unsigned char F8X16[]=
  146. {
  147.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// 0
  148.   0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00,//!1
  149.   0x00,0x10,0x0C,0x06,0x10,0x0C,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//"2
  150.   0x40,0xC0,0x78,0x40,0xC0,0x78,0x40,0x00,0x04,0x3F,0x04,0x04,0x3F,0x04,0x04,0x00,//#3
  151.   0x00,0x70,0x88,0xFC,0x08,0x30,0x00,0x00,0x00,0x18,0x20,0xFF,0x21,0x1E,0x00,0x00,//$4
  152.   0xF0,0x08,0xF0,0x00,0xE0,0x18,0x00,0x00,0x00,0x21,0x1C,0x03,0x1E,0x21,0x1E,0x00,//%5
  153.   0x00,0xF0,0x08,0x88,0x70,0x00,0x00,0x00,0x1E,0x21,0x23,0x24,0x19,0x27,0x21,0x10,//&6
  154.   0x10,0x16,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//'7
  155.   0x00,0x00,0x00,0xE0,0x18,0x04,0x02,0x00,0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x00,//(8
  156.   0x00,0x02,0x04,0x18,0xE0,0x00,0x00,0x00,0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x00,//)9
  157.   0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00,//*10
  158.   0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x1F,0x01,0x01,0x01,0x00,//+11
  159.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xB0,0x70,0x00,0x00,0x00,0x00,0x00,//,12
  160.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,//-13
  161.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,//.14
  162.   0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04,0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00,///15
  163.   0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,//016
  164.   0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//117
  165.   0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,//218
  166.   0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,//319
  167.   0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,//420
  168.   0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,//521
  169.   0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,//622
  170.   0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,//723
  171.   0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,//824
  172.   0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,//925
  173.   0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,//:26
  174.   0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x00,0x00,0x00,0x00,//;27
  175.   0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00,//<28
  176.   0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,//=29
  177.   0x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00,//>30
  178.   0x00,0x70,0x48,0x08,0x08,0x08,0xF0,0x00,0x00,0x00,0x00,0x30,0x36,0x01,0x00,0x00,//?31
  179.   0xC0,0x30,0xC8,0x28,0xE8,0x10,0xE0,0x00,0x07,0x18,0x27,0x24,0x23,0x14,0x0B,0x00,//@32
  180.   0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20,//A33
  181.   0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00,//B34
  182.   0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,//C35
  183.   0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,//D36
  184.   0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00,//E37
  185.   0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00,//F38
  186.   0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00,//G39
  187.   0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20,//H40
  188.   0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//I41
  189.   0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00,//J42
  190.   0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00,0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00,//K43
  191.   0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00,//L44
  192.   0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00,//M45
  193.   0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00,//N46
  194.   0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,//O47
  195.   0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00,//P48
  196.   0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00,//Q49
  197.   0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20,//R50
  198.   0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00,//S51
  199.   0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//T52
  200.   0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//U53
  201.   0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00,//V54
  202.   0xF8,0x08,0x00,0xF8,0x00,0x08,0xF8,0x00,0x03,0x3C,0x07,0x00,0x07,0x3C,0x03,0x00,//W55
  203.   0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20,//X56
  204.   0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//Y57
  205.   0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00,//Z58
  206.   0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x00,//[59
  207.   0x00,0x0C,0x30,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x06,0x38,0xC0,0x00,//\60
  208.   0x00,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x7F,0x00,0x00,0x00,//]61
  209.   0x00,0x00,0x04,0x02,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//^62
  210.   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,//_63
  211.   0x00,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//`64
  212.   0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20,//a65
  213.   0x08,0xF8,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00,//b66
  214.   0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00,//c67
  215.   0x00,0x00,0x00,0x80,0x80,0x88,0xF8,0x00,0x00,0x0E,0x11,0x20,0x20,0x10,0x3F,0x20,//d68
  216.   0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00,//e69
  217.   0x00,0x80,0x80,0xF0,0x88,0x88,0x88,0x18,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//f70
  218.   0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x6B,0x94,0x94,0x94,0x93,0x60,0x00,//g71
  219.   0x08,0xF8,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//h72
  220.   0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//i73
  221.   0x00,0x00,0x00,0x80,0x98,0x98,0x00,0x00,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,//j74
  222.   0x08,0xF8,0x00,0x00,0x80,0x80,0x80,0x00,0x20,0x3F,0x24,0x02,0x2D,0x30,0x20,0x00,//k75
  223.   0x00,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//l76
  224.   0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,//m77
  225.   0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//n78
  226.   0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//o79
  227.   0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00,0x80,0xFF,0xA1,0x20,0x20,0x11,0x0E,0x00,//p80
  228.   0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x0E,0x11,0x20,0x20,0xA0,0xFF,0x80,//q81
  229.   0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x00,//r82
  230.   0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00,//s83
  231.   0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x00,0x00,//t84
  232.   0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20,//u85
  233.   0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x00,0x01,0x0E,0x30,0x08,0x06,0x01,0x00,//v86
  234.   0x80,0x80,0x00,0x80,0x00,0x80,0x80,0x80,0x0F,0x30,0x0C,0x03,0x0C,0x30,0x0F,0x00,//w87
  235.   0x00,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x31,0x2E,0x0E,0x31,0x20,0x00,//x88
  236.   0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x81,0x8E,0x70,0x18,0x06,0x01,0x00,//y89
  237.   0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x21,0x30,0x2C,0x22,0x21,0x30,0x00,//z90
  238.   0x00,0x00,0x00,0x00,0x80,0x7C,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40,//{91
  239.   0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,//|92
  240.   0x00,0x02,0x02,0x7C,0x80,0x00,0x00,0x00,0x00,0x40,0x40,0x3F,0x00,0x00,0x00,0x00,//}93
  241.   0x00,0x06,0x01,0x01,0x02,0x02,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//~94

  242. };

  243. void delay(void)
  244. {
  245.         int i;
  246.         for(i=0;i<10;i++);
  247. }
  248. void LCD_WrDat(unsigned char dat)
  249. {
  250.         unsigned char i=8;
  251.         //LCD_CS=0;;
  252.         //LCD_DC=1;;
  253.   //LCD_SCL=0;;
  254.         at32_oled_on(DC);
  255.         delay();
  256.         at32_oled_off(SCL);
  257.   delay();   
  258.   while(i--)
  259.   {
  260.     if(dat&0x80){
  261.                 //LCD_SDA=1;
  262.                         at32_oled_on(SDA);
  263.                 }
  264.     else{
  265.                
  266.                 //LCD_SDA=0;
  267.                         at32_oled_off(SDA);
  268.                 }
  269.                 delay();
  270.                 at32_oled_on(SCL);
  271.                 delay();
  272.                 at32_oled_off(SCL);
  273.                 delay();
  274.     //LCD_SCL=1;
  275.     ;;;
  276.                 //;;            
  277.     //LCD_SCL=0;;   
  278.     dat<<=1;   
  279.   }
  280.         //LCD_CS=1;
  281. }
  282. void LCD_WrCmd(unsigned char cmd)
  283. {
  284.         unsigned char i=8;
  285.        
  286.         //LCD_CS=0;;
  287.         //LCD_DC=0;;
  288.         at32_oled_off(DC);
  289.         delay();
  290.   //LCD_SCL=0;;
  291.         at32_oled_off(SCL);
  292.         delay();
  293.   //;;   
  294.   while(i--)
  295.   {
  296.     if(cmd&0x80){
  297.                 //LCD_SDA=1;
  298.                         at32_oled_on(SDA);
  299.                 }
  300.     else{
  301.                         //LCD_SDA=0;;
  302.                         at32_oled_off(SDA);
  303.                 }
  304.                 delay();
  305.     //LCD_SCL=1;;
  306.                 at32_oled_on(SCL);
  307.     ;;;
  308.                 delay();   
  309.                         at32_oled_off(SCL);
  310.                 delay();
  311.     //LCD_SCL=0;;   
  312.     cmd<<=1;;   
  313.   }        
  314.         //LCD_CS=1;
  315. }
  316. void LCD_Set_Pos(unsigned char x, unsigned char y)
  317. {
  318.   LCD_WrCmd(0xb0+y);
  319.   LCD_WrCmd(((x&0xf0)>>4)|0x10);
  320.   LCD_WrCmd((x&0x0f)|0x00);
  321. }
  322. void LCD_Fill(unsigned char bmp_dat)
  323. {
  324.         unsigned char y,x;
  325.        
  326.         for(y=0;y<8;y++)
  327.         {
  328.                 LCD_WrCmd(0xb0+y);
  329.                 LCD_WrCmd(0x01);
  330.                 LCD_WrCmd(0x10);
  331.                 for(x=0;x<X_WIDTH;x++)
  332.                         LCD_WrDat(bmp_dat);
  333.         }
  334. }
  335. void LCD_CLS(void)
  336. {
  337.         unsigned char y,x;       
  338.         for(y=0;y<8;y++)
  339.         {
  340.                 LCD_WrCmd(0xb0+y);
  341.                 LCD_WrCmd(0x01);
  342.                 LCD_WrCmd(0x10);
  343.                 for(x=0;x<X_WIDTH;x++)
  344.                         LCD_WrDat(0);
  345.         }
  346. }
  347. void LCD_DLY_ms(unsigned int ms)
  348. {   
  349.         unsigned int i;
  350.         while(ms--)
  351.         {
  352.                 for(i=0;i<2000;i++);//编译器自带延时指定个周期,在主频8Mhz下,一个指令周期为0.5us       
  353.                 //GCC_CLRWDT();
  354.         }
  355. }
  356. void LCD_Init(void)        
  357. {  
  358.        
  359.        
  360.         //LCD_SCL=1;
  361.         at32_oled_on(SCL);
  362.         //LCD_CS=1;        //预制SLK和SS为高电平
  363.                 delay();
  364.         //LCD_RST=0;
  365.         at32_oled_off(RST);
  366.         LCD_DLY_ms(500);
  367.         //LCD_RST=1;
  368.         at32_oled_on(RST);
  369.         delay();
  370.         //从上电到下面开始初始化要有足够的时间,即等待RC复位完毕   
  371.   
  372.   LCD_WrCmd(0xae);//--turn off oled panel
  373.   LCD_WrCmd(0x00);//---set low column address
  374.   LCD_WrCmd(0x10);//---set high column address
  375.   LCD_WrCmd(0x40);//--set start line address  Set Mapping RAM Display Start Line (0x00~0x3F)
  376.   LCD_WrCmd(0x81);//--set contrast control register
  377.   LCD_WrCmd(0xcf); // Set SEG Output Current Brightness
  378.   LCD_WrCmd(0xa1);//--Set SEG/Column Mapping     0xa0左右反置 0xa1正常
  379.   LCD_WrCmd(0xc8);//Set COM/Row Scan Direction   0xc0上下反置 0xc8正常
  380.   LCD_WrCmd(0xa6);//--set normal display
  381.   LCD_WrCmd(0xa8);//--set multiplex ratio(1 to 64)
  382.   LCD_WrCmd(0x3f);//--1/64 duty
  383.   LCD_WrCmd(0xd3);//-set display offset        Shift Mapping RAM Counter (0x00~0x3F)
  384.   LCD_WrCmd(0x00);//-not offset
  385.   LCD_WrCmd(0xd5);//--set display clock divide ratio/oscillator frequency
  386.   LCD_WrCmd(0x80);//--set divide ratio, Set Clock as 100 Frames/Sec
  387.   LCD_WrCmd(0xd9);//--set pre-charge period
  388.   LCD_WrCmd(0xf1);//Set Pre-Charge as 15 Clocks & Discharge as 1 Clock
  389.   LCD_WrCmd(0xda);//--set com pins hardware configuration
  390.   LCD_WrCmd(0x12);
  391.   LCD_WrCmd(0xdb);//--set vcomh
  392.   LCD_WrCmd(0x40);//Set VCOM Deselect Level
  393.   LCD_WrCmd(0x20);//-Set Page Addressing Mode (0x00/0x01/0x02)
  394.   LCD_WrCmd(0x02);//
  395.   LCD_WrCmd(0x8d);//--set Charge Pump enable/disable
  396.   LCD_WrCmd(0x14);//--set(0x10) disable
  397.   LCD_WrCmd(0xa4);// Disable Entire Display On (0xa4/0xa5)
  398.   LCD_WrCmd(0xa6);// Disable Inverse Display On (0xa6/a7)
  399.   LCD_WrCmd(0xaf);//--turn on oled panel
  400.   LCD_Fill(0x00);  //初始清屏
  401.   LCD_Set_Pos(0,0);        
  402. }

  403. //==============================================================
  404. //函数名: void LCD_PutPixel(byte x,byte y)
  405. //功能描述:绘制一个点(x,y)
  406. //参数:真实坐标值(x,y),x的范围0~127,y的范围0~64
  407. //返回:无
  408. //==============================================================
  409. void LCD_PutPixel(unsigned char  x,unsigned char  y)
  410. {
  411.         unsigned char  data1;  //data1当前点的数据
  412.          
  413.   LCD_Set_Pos(x,y);
  414.         data1 = 0x01<<(y%8);        
  415.         LCD_WrCmd(0xb0+(y>>3));
  416.         LCD_WrCmd(((x&0xf0)>>4)|0x10);
  417.         LCD_WrCmd((x&0x0f)|0x00);
  418.         LCD_WrDat(data1);                 
  419. }
  420. //==============================================================
  421. //函数名: void LCD_Rectangle(byte x1,byte y1,
  422. //                   byte x2,byte y2,byte color,byte gif)
  423. //功能描述:绘制一个实心矩形
  424. //参数:左上角坐标(x1,y1),右下角坐标(x2,y2)
  425. //      其中x1、x2的范围0~127,y1,y2的范围0~63,即真实坐标值
  426. //返回:无
  427. //==============================================================
  428. void LCD_Rectangle(unsigned char  x1,unsigned char  y1,unsigned char  x2,unsigned char  y2,unsigned char  gif)
  429. {
  430.         unsigned char  n;
  431.                
  432.         LCD_Set_Pos(x1,y1>>3);
  433.         for(n=x1;n<=x2;n++)
  434.         {
  435.                 LCD_WrDat(0x01<<(y1%8));                        
  436.                 if(gif == 1)         LCD_DLY_ms(50);
  437.         }  
  438.         LCD_Set_Pos(x1,y2>>3);
  439.   for(n=x1;n<=x2;n++)
  440.         {
  441.                 LCD_WrDat(0x01<<(y2%8));                        
  442.                 if(gif == 1)         LCD_DLY_ms(5);
  443.         }
  444.        
  445. }  

  446. //==============================================================
  447. //函数名:LCD_P6x8Str(unsigned char x,unsigned char y,unsigned char *p)
  448. //功能描述:写入一组标准ASCII字符串
  449. //参数:显示的位置(x,y),y为页范围0~7,要显示的字符串
  450. //返回:无
  451. //==============================================================  
  452. void LCD_P6x8Str(unsigned char x,unsigned char y,unsigned char ch[])
  453. {
  454.   unsigned char c=0,i=0,j=0;      
  455.   while (ch[j]!='\0')
  456.   {   
  457.     c =ch[j]-32;
  458.     if(x>126){x=0;y++;}
  459.     LCD_Set_Pos(x,y);   
  460.           for(i=0;i<6;i++)     
  461.             LCD_WrDat(F6x8[c][i]);  
  462.           x+=6;
  463.           j++;
  464.   }
  465. }

  466. void LCD_P8x16Str(unsigned char x,unsigned char y,unsigned char ch[])
  467. {
  468.   unsigned char c=0,i=0,j=0;
  469.         
  470.   while (ch[j]!='\0')
  471.   {   
  472.     c =ch[j]-32;
  473.     if(x>120){x=0;y++;}
  474.     LCD_Set_Pos(x,y);   
  475.           for(i=0;i<8;i++)     
  476.             LCD_WrDat(F8X16[c*16+i]);
  477.           LCD_Set_Pos(x,y+1);   
  478.           for(i=0;i<8;i++)     
  479.             LCD_WrDat(F8X16[c*16+i+8]);  
  480.           x+=8;
  481.           j++;
  482.   }
  483. }


  484. //==============================================================
  485. //函数名: void Draw_BMP(byte x,byte y)
  486. //功能描述:显示BMP图片128×64
  487. //参数:起始点坐标(x,y),x的范围0~127,y为页的范围0~7
  488. //返回:无
  489. //==============================================================
  490. void Draw_BMP(unsigned char  x0,unsigned char  y0,unsigned char  x1,unsigned char  y1,unsigned char bmp[])
  491. {        
  492.   unsigned int  ii=0;
  493.   unsigned char  x,y;
  494.   
  495.           if(y1%8==0) y=y1/8;      
  496.           else y=y1/8+1;
  497.         for(y=y0;y<=y1;y++)
  498.         {
  499.                 LCD_Set_Pos(x0,y);                               
  500.             for(x=x0;x<x1;x++)
  501.             {      
  502.                     LCD_WrDat(bmp[ii++]);                   
  503.             }
  504.         }
  505. }
main.c
  1. #include "at32l021_board.h"
  2. #include "at32l021_clock.h"
  3. #include "OLED.h"
  4. /** @addtogroup AT32L021_periph_examples
  5.   * @{
  6.   */
  7. #define uint unsigned int
  8. #define u8  unsigned char
  9.        
  10. void MS_delay(uint MS)
  11. {
  12.     uint x,y;
  13.     for(y=MS;y>0;y--)
  14.     {
  15.             for(x=796;x>0;x--);
  16.     }
  17. }
  18. /** @addtogroup 021_GPIO_led_toggle GPIO_led_toggle
  19.   * @{
  20.   */

  21. /**
  22.   * [url=home.php?mod=space&uid=247401]@brief[/url]  main function.
  23.   * @param  none
  24.   * @retval none
  25.   */
  26. int main(void)
  27. {
  28.   system_clock_config();

  29.   at32_board_init();
  30.         LCD_Init();
  31.   LCD_CLS();
  32.         LCD_P8x16Str(45,5,(u8*)"EASEAR");
  33.         LCD_P6x8Str(0,7,(u8*)"www.holteksupport.com");
  34.         Draw_BMP(0,0,100,3,(u8*)Dot);
  35.   while(1)
  36.   {
  37.     at32_led_toggle(LED2);
  38. //                at32_oled_on(SCL);
  39. //                at32_oled_on(SDA);
  40. //                at32_oled_on(RST);
  41. //                at32_oled_on(DC);
  42. //    delay_ms(10);
  43. //                at32_oled_off(SCL);
  44. //                at32_oled_off(SDA);
  45. //                at32_oled_off(RST);
  46. //                at32_oled_off(DC);
  47.                 delay_ms(1000);
  48.     //at32_led_toggle(LED3);
  49.     //delay_ms(200);
  50.     ///at32_led_toggle(LED4);
  51.     //delay_ms(200);
  52.   }
  53. }
效果图:
7.jpg

打赏榜单

ArteryMCU 打赏了 30.00 元 2025-01-09
理由:[L021开发板评测活动]内容优质

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

本版积分规则

470

主题

3535

帖子

7

粉丝

470

主题

3535

帖子

7

粉丝
快速回复 在线客服 返回列表 返回顶部