[原创] MM32F031开发板评测11:模拟点亮0.96寸OLED

ddllxxrr   2018-11-11 09:37 楼主
我本来手里有一个一半是黄色的一半是白色的OLED,我从网上买的。但我买回来之后就没有点亮过。
我十分伤心。我问了卖家,卖家也发了资料,我十分恼火,主要是这款OLED娘过可以变IIC通讯,还可以四线SPI,还可以三线SPI
我用烙铁焊了后边的跳线。把它变成IIC的驱动没有驱起来,我把它变成三线的还是黑乎乎一片。变成四线的还是。
泥马。。。。。。。老子不搞了行吧。。。。。。。。
就这样我一脚把这款屏打入了“冷宫“(盒子里)。一放就是三年。

      三年以后。。。。。。。。

      我参加了这个MM32F031的活动。我又把它给想起来了。看了一下是IIC的我就烦了(因为得加上拉。本人是个懒人,不想接上拉电阻来这),又跳回了三线SPI,就是没有那个发线的。本来想一举成功,泥马还是没有亮。

      我十分伤心,在我心里,它一定是坏了,或是卖家给我时就是坏的。万能的淘宝,黑心的卖家。。。。。。。

      本来这是上个星期的是,但我SPI软硬都驱动了SPI 2.2寸彩屏。给了我一定的自信能驱动这个OLED。

  于是我忍痛割爱,花了13块大洋。又从网上包邮一个回来。

  全是白色的(我喜欢)。又是一个星期天了,又一个轮回。

  早晨起来仍旧调程序。我先到网上收一下这个OLED的例程。本来想从卖家那里要资业,不过应是南方的卖家,没答理我,我想他不没有起来。

  我从网上收了贴子都是51的多我就下了一个改了起来。

  oled.h

      
  1. #ifndef __OLED_H__
  2. #define __OLED_H__
  3. #include "HAL_conf.h"
  4. #include "stdlib.h"


  5. #define     OLED            0
  6. #define     SIZE            16
  7. #define     XLevelL         0x00
  8. #define     XLevelH         0x10
  9. #define     Max_Column      128
  10. #define     Max_Row         64
  11. #define     Brightness      0xff
  12. #define     X_WIDTH         128
  13. #define     Y_WIDTH         64

  14. //IO Definitions
  15. #define     CS          PDout(3)
  16. #define     RST         PDout(4)
  17. #define     DC          PDout(5)
  18. #define     CLK         PDout(6)
  19. #define     DIN         PDout(7)

  20. #define     OLED_CS_Clr()       GPIO_ResetBits(GPIOB,GPIO_Pin_12);//CS = 0  //CS
  21. #define     OLED_CS_Set()       GPIO_SetBits(GPIOB,GPIO_Pin_12);//CS = 1

  22. #define     OLED_RST_Clr()      GPIO_ResetBits(GPIOA,GPIO_Pin_12);//RST = 0 //RES
  23. #define     OLED_RST_Set()      GPIO_SetBits(GPIOA,GPIO_Pin_12);//RST = 1

  24. #define     OLED_DC_Clr()       GPIO_ResetBits(GPIOA,GPIO_Pin_11);//DC = 0 //DC
  25. #define     OLED_DC_Set()       GPIO_SetBits(GPIOA,GPIO_Pin_11);//DC = 1

  26. #define     OLED_SCLK_Clr()     GPIO_ResetBits(GPIOB,GPIO_Pin_13);//CLK = 0//CLK--D0
  27. #define     OLED_SCLK_Set()     GPIO_SetBits(GPIOB,GPIO_Pin_13);//CLK = 1

  28. #define     OLED_SDIN_Clr()     GPIO_ResetBits(GPIOB,GPIO_Pin_15);//DIN = 0 //DIN--D1
  29. #define     OLED_SDIN_Set()     GPIO_SetBits(GPIOB,GPIO_Pin_15);//DIN = 1

  30. typedef enum
  31. {
  32.     OLED_CMD,
  33.     OLED_DATA
  34. }OLED_WR_MODE;

  35. typedef enum
  36. {
  37.     Display_ON,
  38.     Display_OFF,
  39.     Display_Clear,
  40.     Display_Test
  41. }DIS_MODE;

  42. //OLED?????
  43. extern void OLED_WR_Byte(uint8_t dat,OLED_WR_MODE cmd);     
  44. extern void OLED_Display_Status(DIS_MODE mode);                                         
  45. extern void OLEDConfiguration(void);
  46. extern void OLED_DrawPoint(uint8_t x, uint8_t y, uint8_t t);
  47. extern void OLED_Fill(uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2, uint8_t dot);
  48. extern void OLED_ShowChar(uint8_t x, uint8_t y, uint8_t chr);
  49. extern void OLED_ShowNum(uint8_t x, uint8_t y, u32 num, uint8_t len, uint8_t size);
  50. extern void OLED_ShowString(uint8_t x,uint8_t y, uint8_t *p);   
  51. extern void OLED_Set_Pos(uint8_t x, uint8_t y);
  52. extern void OLED_ShowCHinese(uint8_t x, uint8_t y, uint8_t no);
  53. extern void OLED_DrawBMP(uint8_t x0, uint8_t y0,uint8_t x1, uint8_t y1, uint8_t BMP[]);
  54. #endif



oled.c
  1. #include "oled.h"
  2. #include "delay.h"


  3. const unsigned char F8X16[]=
  4. {
  5.     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// 0
  6.     0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00,//!1
  7.     0x00,0x10,0x0C,0x06,0x10,0x0C,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//"2
  8.     0x40,0xC0,0x78,0x40,0xC0,0x78,0x40,0x00,0x04,0x3F,0x04,0x04,0x3F,0x04,0x04,0x00,//#3
  9.     0x00,0x70,0x88,0xFC,0x08,0x30,0x00,0x00,0x00,0x18,0x20,0xFF,0x21,0x1E,0x00,0x00,//$4
  10.     0xF0,0x08,0xF0,0x00,0xE0,0x18,0x00,0x00,0x00,0x21,0x1C,0x03,0x1E,0x21,0x1E,0x00,//%5
  11.     0x00,0xF0,0x08,0x88,0x70,0x00,0x00,0x00,0x1E,0x21,0x23,0x24,0x19,0x27,0x21,0x10,//&6
  12.     0x10,0x16,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//'7
  13.     0x00,0x00,0x00,0xE0,0x18,0x04,0x02,0x00,0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x00,//(8
  14.     0x00,0x02,0x04,0x18,0xE0,0x00,0x00,0x00,0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x00,//)9
  15.     0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00,//*10
  16.     0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x1F,0x01,0x01,0x01,0x00,//+11
  17.     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xB0,0x70,0x00,0x00,0x00,0x00,0x00,//,12
  18.     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,//-13
  19.     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,//.14
  20.     0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04,0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00,///15
  21.     0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,//016
  22.     0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//117
  23.     0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,//218
  24.     0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,//319
  25.     0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,//420
  26.     0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,//521
  27.     0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,//622
  28.     0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,//723
  29.     0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,//824
  30.     0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,//925
  31.     0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,//:26
  32.     0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x00,0x00,0x00,0x00,//;27
  33.     0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00,//<28
  34.     0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,//=29
  35.     0x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00,//>30
  36.     0x00,0x70,0x48,0x08,0x08,0x08,0xF0,0x00,0x00,0x00,0x00,0x30,0x36,0x01,0x00,0x00,//?31
  37.     0xC0,0x30,0xC8,0x28,0xE8,0x10,0xE0,0x00,0x07,0x18,0x27,0x24,0x23,0x14,0x0B,0x00,//@32
  38.     0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20,//A33
  39.     0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00,//B34
  40.     0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,//C35
  41.     0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,//D36
  42.     0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00,//E37
  43.     0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00,//F38
  44.     0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00,//G39
  45.     0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20,//H40
  46.     0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//I41
  47.     0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00,//J42
  48.     0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00,0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00,//K43
  49.     0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00,//L44
  50.     0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00,//M45
  51.     0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00,//N46
  52.     0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,//O47
  53.     0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00,//P48
  54.     0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00,//Q49
  55.     0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20,//R50
  56.     0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00,//S51
  57.     0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//T52
  58.     0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//U53
  59.     0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00,//V54
  60.     0xF8,0x08,0x00,0xF8,0x00,0x08,0xF8,0x00,0x03,0x3C,0x07,0x00,0x07,0x3C,0x03,0x00,//W55
  61.     0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20,//X56
  62.     0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//Y57
  63.     0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00,//Z58
  64.     0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x00,//[59
  65.     0x00,0x0C,0x30,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x06,0x38,0xC0,0x00,//\60
  66.     0x00,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x7F,0x00,0x00,0x00,//]61
  67.     0x00,0x00,0x04,0x02,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//^62
  68.     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,//_63
  69.     0x00,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//`64
  70.     0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20,//a65
  71.     0x08,0xF8,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00,//b66
  72.     0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00,//c67
  73.     0x00,0x00,0x00,0x80,0x80,0x88,0xF8,0x00,0x00,0x0E,0x11,0x20,0x20,0x10,0x3F,0x20,//d68
  74.     0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00,//e69
  75.     0x00,0x80,0x80,0xF0,0x88,0x88,0x88,0x18,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//f70
  76.     0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x6B,0x94,0x94,0x94,0x93,0x60,0x00,//g71
  77.     0x08,0xF8,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//h72
  78.     0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//i73
  79.     0x00,0x00,0x00,0x80,0x98,0x98,0x00,0x00,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,//j74
  80.     0x08,0xF8,0x00,0x00,0x80,0x80,0x80,0x00,0x20,0x3F,0x24,0x02,0x2D,0x30,0x20,0x00,//k75
  81.     0x00,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//l76
  82.     0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,//m77
  83.     0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//n78
  84.     0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//o79
  85.     0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00,0x80,0xFF,0xA1,0x20,0x20,0x11,0x0E,0x00,//p80
  86.     0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x0E,0x11,0x20,0x20,0xA0,0xFF,0x80,//q81
  87.     0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x00,//r82
  88.     0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00,//s83
  89.     0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x00,0x00,//t84
  90.     0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20,//u85
  91.     0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x00,0x01,0x0E,0x30,0x08,0x06,0x01,0x00,//v86
  92.     0x80,0x80,0x00,0x80,0x00,0x80,0x80,0x80,0x0F,0x30,0x0C,0x03,0x0C,0x30,0x0F,0x00,//w87
  93.     0x00,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x31,0x2E,0x0E,0x31,0x20,0x00,//x88
  94.     0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x81,0x8E,0x70,0x18,0x06,0x01,0x00,//y89
  95.     0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x21,0x30,0x2C,0x22,0x21,0x30,0x00,//z90
  96.     0x00,0x00,0x00,0x00,0x80,0x7C,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40,//{91
  97.     0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,//|92
  98.     0x00,0x02,0x02,0x7C,0x80,0x00,0x00,0x00,0x00,0x40,0x40,0x3F,0x00,0x00,0x00,0x00,//}93
  99.     0x00,0x06,0x01,0x01,0x02,0x02,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//~94
  100. };

  101. void OLED_WR_Byte(uint8_t dat,OLED_WR_MODE cmd)
  102. {   
  103.     uint8_t i;
  104.     switch(cmd)
  105.     {
  106.         case OLED_CMD:
  107.             OLED_DC_Clr();
  108.             break;
  109.         case OLED_DATA:
  110.             OLED_DC_Set();
  111.             break;
  112.     }                     
  113.     OLED_CS_Clr();
  114.     for(i = 0; i < 8; i ++)
  115.     {            
  116.         OLED_SCLK_Clr();
  117.         if(dat & 0x80)
  118.                                 {
  119.            OLED_SDIN_Set();
  120.         }
  121.                                         else
  122.            OLED_SDIN_Clr();
  123.         OLED_SCLK_Set();
  124.         dat<<=1;   
  125.     }                        
  126.     OLED_CS_Set();
  127.     OLED_DC_Set();        
  128. }


  129. void OLED_Set_Pos(uint8_t x, uint8_t y)
  130. {
  131.     OLED_WR_Byte(0xB0 + y, OLED_CMD);
  132.     OLED_WR_Byte(((x & 0xF0) >> 4) | 0x10, OLED_CMD);
  133.     OLED_WR_Byte((x & 0x0F) | 0x01, OLED_CMD);
  134. }   

  135. void OLED_Display_Status(DIS_MODE mode)
  136. {
  137.     uint8_t i,n;        
  138.     switch(mode)
  139.     {
  140.         case Display_ON://??OLED??
  141.             OLED_WR_Byte(0X8D, OLED_CMD);  //SET DCDC??
  142.             OLED_WR_Byte(0X14, OLED_CMD);  //DCDC ON
  143.             OLED_WR_Byte(0XAF, OLED_CMD);  //DISPLAY ON
  144.             break;
  145.         case Display_OFF://??OLED??  
  146.             OLED_WR_Byte(0X8D, OLED_CMD);  //SET DCDC??
  147.             OLED_WR_Byte(0X10, OLED_CMD);  //DCDC OFF
  148.             OLED_WR_Byte(0XAE, OLED_CMD);  //DISPLAY OFF
  149.             break;
  150.         case Display_Clear://????,???,????????!??????!!!   
  151.             for(i = 0; i < 8; i ++)  
  152.             {  
  153.                 OLED_WR_Byte(0xB0 + i, OLED_CMD);    //?????(0~7)
  154.                 OLED_WR_Byte(0x00, OLED_CMD);      //??????—????
  155.                 OLED_WR_Byte(0x10, OLED_CMD);      //??????—????   
  156.                 for(n = 0; n < Max_Column; n ++)
  157.                 {
  158.                     OLED_WR_Byte(0, OLED_DATA);
  159.                 }
  160.             } //????
  161.             break;
  162.         case Display_Test:
  163.             for(i = 0; i < 8; i ++)  
  164.             {  
  165.                 OLED_WR_Byte(0xb0 + i, OLED_CMD);    //?????(0~7)
  166.                 OLED_WR_Byte(0x00, OLED_CMD);      //??????—????
  167.                 OLED_WR_Byte(0x10, OLED_CMD);      //??????—????   
  168.                 for(n = 0; n < Max_Column; n ++)
  169.                 {
  170.                     OLED_WR_Byte(1, OLED_DATA);
  171.                     delay_ms(5);
  172.                 }
  173.             } //????
  174.             break;
  175.     }

  176. }

  177. void OLED_ShowChar(uint8_t x, uint8_t y, uint8_t chr)
  178. {      
  179.     uint8_t c = 0, i = 0;   
  180.     c = chr - ' ';//???????         
  181.     if(x > Max_Column - 1)
  182.     {
  183.         x = 0;
  184.         y += 2;
  185.     }
  186.     if(SIZE == 16)
  187.     {
  188.         OLED_Set_Pos(x, y);
  189.         for(i = 0; i < 8; i ++)
  190.         {
  191.             OLED_WR_Byte(F8X16[c * 16 + i], OLED_DATA);
  192.         }
  193.         OLED_Set_Pos(x, y + 1);
  194.         for(i = 0; i < 8; i ++)
  195.         {
  196.             OLED_WR_Byte(F8X16[c * 16 + i + 8], OLED_DATA);
  197.         }
  198.     }
  199.     else
  200.     {   
  201.         OLED_Set_Pos(x, y + 1);
  202.         for(i = 0; i < 6; i ++)
  203.         {
  204.            // OLED_WR_Byte(F6x8[c][i],OLED_DATA);
  205.         }
  206.     }
  207. }

  208. void OLED_ShowChar1(uint8_t x, uint8_t y, uint8_t chr)
  209. {      
  210.     uint8_t c = 0, i = 0;   
  211.         c = chr - ' ';//???????         
  212.         if(x > Max_Column - 1)
  213.         {
  214.             x = 0;
  215.             y += 2;
  216.         }
  217.         if(SIZE == 16)
  218.         {
  219.             OLED_Set_Pos(x, y);
  220.             for(i = 0; i < 6; i ++)
  221.             {
  222.                // OLED_WR_Byte(F6x8[c][i], OLED_DATA);
  223.             }
  224.             OLED_Set_Pos(x, y + 1);
  225.             for(i = 0; i < 6; i ++)
  226.             {
  227.                 //OLED_WR_Byte(F6x8[c][i + 6], OLED_DATA);
  228.             }
  229.         }
  230.         else
  231.         {   
  232.             OLED_Set_Pos(x, y + 1);
  233.             for(i = 0; i < 6; i ++)
  234.             {
  235.                // OLED_WR_Byte(F6x8[c][i],OLED_DATA);
  236.             }
  237.         }
  238. }

  239. u32 oled_pow(uint8_t m,uint8_t n)
  240. {
  241.     u32 result = 1;  
  242.     while(n --)
  243.     {
  244.         result *= m;
  245.     }   
  246.     return result;
  247. }   

  248.         
  249. void OLED_ShowNum(uint8_t x, uint8_t y, u32 num, uint8_t len, uint8_t size)
  250. {           
  251.     uint8_t t,temp;
  252.     uint8_t enshow = 0;                        
  253.     for(t = 0; t < len; t ++)
  254.     {
  255.         temp = (num / oled_pow(10, len - t - 1)) % 10;
  256.         if(enshow == 0 && t < (len - 1))
  257.         {
  258.             if(temp == 0)
  259.             {
  260.                 OLED_ShowChar(x + (size / 2) * t, y, ' ');
  261.                 continue;
  262.             }else enshow = 1;
  263.         }
  264.         OLED_ShowChar(x + (size / 2) * t, y, temp + '0');
  265.     }
  266. }


  267. void OLED_ShowString(uint8_t x, uint8_t y, uint8_t *chr)
  268. {
  269.     uint8_t j = 0;
  270.     while (chr[j] != '\0')
  271.     {      
  272.         OLED_ShowChar(x, y, chr[j]);
  273.         x += 8;
  274.         if(x > 120)
  275.         {
  276.             x = 0;
  277.             y += 2;
  278.         }
  279.         j++;
  280.     }
  281. }


  282. void OLED_ShowCHinese(uint8_t x, uint8_t y, uint8_t no)
  283. {                  
  284.     uint8_t t, adder = 0;
  285.     OLED_Set_Pos(x, y);
  286.     for(t = 0; t < 16; t ++)
  287.     {
  288.        // OLED_WR_Byte(Hzk[2 * no][t], OLED_DATA);
  289.         adder += 1;
  290.     }   
  291.     OLED_Set_Pos(x, y + 1);
  292.     for(t = 0; t < 16; t ++)
  293.     {   
  294.         //OLED_WR_Byte(Hzk[2 * no + 1][t], OLED_DATA);
  295.         adder += 1;
  296.     }                  
  297. }


  298. void OLED_DrawBMP(uint8_t x0, uint8_t y0,uint8_t x1, uint8_t y1, uint8_t BMP[])
  299. {   
  300.     uint8_t j = 0;
  301.     uint8_t x, y;

  302.     if(y1 % 8 == 0)
  303.     {
  304.         y = y1 / 8;
  305.     }            
  306.     else
  307.     {
  308.         y = y1 / 8 + 1;
  309.     }

  310.     for(y = y0; y < y1; y ++)
  311.     {
  312.         OLED_Set_Pos(x0, y);
  313.         for(x = x0; x < x1; x ++)
  314.         {      
  315.             OLED_WR_Byte(BMP[j ++], OLED_DATA);         
  316.         }
  317.     }
  318. }

  319.                        
  320. void OLEDConfiguration(void)
  321. {        
  322.     GPIO_InitTypeDef  GPIO_InitStructure;
  323.     RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA|RCC_AHBPeriph_GPIOB, ENABLE);    //??PC,D,G????
  324.     GPIO_InitStructure.GPIO_Pin     = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_15 | GPIO_Pin_14;  
  325.     GPIO_InitStructure.GPIO_Mode    = GPIO_Mode_Out_PP;         
  326.     GPIO_InitStructure.GPIO_Speed   = GPIO_Speed_50MHz;
  327.     GPIO_Init(GPIOB, &GPIO_InitStructure);   
  328.     GPIO_SetBits(GPIOB, GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_15 | GPIO_Pin_14);
  329.        
  330.           GPIO_InitStructure.GPIO_Pin     = GPIO_Pin_11 | GPIO_Pin_12;  
  331.     GPIO_InitStructure.GPIO_Mode    = GPIO_Mode_Out_PP;         
  332.     GPIO_InitStructure.GPIO_Speed   = GPIO_Speed_50MHz;
  333.     GPIO_Init(GPIOA, &GPIO_InitStructure);   
  334.     GPIO_SetBits(GPIOA, GPIO_Pin_11 | GPIO_Pin_12);


  335.     OLED_RST_Set();
  336.     delay_ms(100);
  337.     OLED_RST_Clr();
  338.     delay_ms(100);
  339.     OLED_RST_Set();

  340.     OLED_WR_Byte(0xAE, OLED_CMD);//--turn off oled panel
  341.     OLED_WR_Byte(0x00, OLED_CMD);//---set low column address
  342.     OLED_WR_Byte(0x10, OLED_CMD);//---set high column address
  343.     OLED_WR_Byte(0x40, OLED_CMD);//--set start line address  Set Mapping RAM Display Start Line (0x00~0x3F)
  344.     OLED_WR_Byte(0x81, OLED_CMD);//--set contrast control register
  345.     OLED_WR_Byte(0xCF, OLED_CMD); // Set SEG Output Current Brightness
  346.     OLED_WR_Byte(0xA1, OLED_CMD);//--Set SEG/Column Mapping     0xa0???? 0xa1??
  347.     OLED_WR_Byte(0xC8, OLED_CMD);//Set COM/Row Scan Direction   0xc0???? 0xc8??
  348.     OLED_WR_Byte(0xA6, OLED_CMD);//--set normal display
  349.     OLED_WR_Byte(0xA8, OLED_CMD);//--set multiplex ratio(1 to 64)
  350.     OLED_WR_Byte(0x3f, OLED_CMD);//--1/64 duty
  351.     OLED_WR_Byte(0xD3, OLED_CMD);//-set display offset  Shift Mapping RAM Counter (0x00~0x3F)
  352.     OLED_WR_Byte(0x00, OLED_CMD);//-not offset
  353.     OLED_WR_Byte(0xd5, OLED_CMD);//--set display clock divide ratio/oscillator frequency
  354.     OLED_WR_Byte(0x80, OLED_CMD);//--set divide ratio, Set Clock as 100 Frames/Sec
  355.     OLED_WR_Byte(0xD9, OLED_CMD);//--set pre-charge period
  356.     OLED_WR_Byte(0xF1, OLED_CMD);//Set Pre-Charge as 15 Clocks & Discharge as 1 Clock
  357.     OLED_WR_Byte(0xDA, OLED_CMD);//--set com pins hardware configuration
  358.     OLED_WR_Byte(0x12, OLED_CMD);
  359.     OLED_WR_Byte(0xDB, OLED_CMD);//--set vcomh
  360.     OLED_WR_Byte(0x40, OLED_CMD);//Set VCOM Deselect Level
  361.     OLED_WR_Byte(0x20, OLED_CMD);//-Set Page Addressing Mode (0x00/0x01/0x02)
  362.     OLED_WR_Byte(0x02, OLED_CMD);//
  363.     OLED_WR_Byte(0x8D, OLED_CMD);//--set Charge Pump enable/disable
  364.     OLED_WR_Byte(0x14, OLED_CMD);//--set(0x10) disable
  365.     OLED_WR_Byte(0xA4, OLED_CMD);// Disable Entire Display On (0xa4/0xa5)
  366.     OLED_WR_Byte(0xA6, OLED_CMD);// Disable Inverse Display On (0xa6/a7)
  367.     OLED_WR_Byte(0xAF, OLED_CMD);//--turn on oled panel

  368.     OLED_WR_Byte(0xAF, OLED_CMD); /*display ON*/
  369.     OLED_Display_Status(Display_Clear);
  370.     OLED_Set_Pos(0, 0);     
  371. }  







主函数:

  1. #include "delay.h"
  2. #include "sys.h"
  3. #include "uart.h"
  4. #include "oled.h"

  5. int main(void)
  6. {
  7.     delay_init();
  8.     uart_initwBaudRate(115200);                         //′®¿ú3õê¼»ˉÎa115200
  9.     OLEDConfiguration();
  10.     OLED_ShowString(0,0,"HELLO EEWORLD");
  11.     while(1)                              //ÎTÏTÑ-»·
  12.     {
  13.         
  14.     }
  15. }





初始化时要注意,同STM32不一样,的地方是那个GPIOA,和GPIOB的初始化部分,

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA|RCC_AHBPeriph_GPIOB, ENABLE);    //??PC,D,G????

而STM32是AHB2

我重新编译居然亮了,见照片
IMG_20181111_090835.jpg

我又把以前的那块OLED管脚不动地插上,萌萌达,居然也亮了。到现在为止在我手上没有烧坏一块我买的OLED。
对一个单片机人来说这是今天双11最大的礼物。
IMG_20181111_090929.jpg



此内容由EEWORLD论坛网友ddllxxrr原创,如需转载或用于商业用途需征得作者同意并注明出处


http://shop34182318.taobao.com/ https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复