找回密码
 立即注册

QQ登录

只需一步,快速开始

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

stc8H1K08单片机驱动i2C接口的0.91吋OLED源程序 附stc8H.h头文件

[复制链接]
跳转到指定楼层
楼主
STC8H1K08可以替代过去的STC15W408as,但需要对程序进行必要的修改。大致需要注意以下三点:
1、使用STC官方提供的STC8Hxx系列头文件替代stc15.h;
2、使用IO口时需要事先进行设置;
3、需要注意延时函数的修改。
本人在将STC15W408as驱动i2c接口OLED的程序,移植用于STC8H1K08时多次没有通过,后来下载时将程序运行IRC频率降至5.5MHz时才通过,判断应该适当增加延时。在原来的void i2c_Start()、void i2c_Stop()和void Write_i2c_Byte(unsigned char i2c_Byte)增加了最短的延时,最后IRC频率在5.5~35MHz下均可正常运行。所有程序代码附在stc8h_oled.rar中。包含stc8H.h头文件

单片机源程序如下:
  1. #include "stc8H.h"

  2. sbit SCL=P3^6;
  3. sbit SDA=P3^7;

  4. void delay()
  5. {
  6.         char i;
  7.         for(i=0;i<1;i++);
  8. }

  9. void delay_us(char us)
  10. {
  11.         char i;
  12.         for(i=0;i<us;i++);
  13. }

  14. void delay_ms(int ms)
  15. {
  16.         int i,j,n;
  17.         //n=1100; //11.0592MHz
  18.         //n=2200; //24MHz
  19.         n=3300; //35MHz
  20.         for(j=0;j<ms;j++)
  21.         {
  22.                 for(i=0;i<n;i++);
  23.         }
  24. }

  25. /*----- oled DATA ---------------------------------------------------------------*/
  26. unsigned char code zk[]=
  27. {
  28. /*  "0"  Gulim12 8x16   -0-*/
  29. 0x00,0xF0,0x08,0x04,0x04,0x04,0x08,0xF0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,
  30. /*  "1"  Gulim12 8x16   -15-*/
  31. 0x00,0x00,0x08,0x08,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,        
  32. /*  "2"  Gulim12 8x16   -31-*/
  33. 0x00,0x30,0x08,0x04,0x04,0x04,0x88,0x70,0x00,0x30,0x28,0x24,0x22,0x21,0x20,0x20,        
  34. /*  "3"  Gulim12 8x16   -47-*/
  35. 0x00,0x10,0x08,0x84,0x84,0x84,0x48,0x30,0x00,0x08,0x10,0x20,0x20,0x20,0x11,0x0E,               
  36. /*  "4"  Gulim12 8x16   -63-*/        
  37. 0x00,0x80,0x60,0x18,0x04,0xFC,0x00,0x00,0x06,0x05,0x04,0x04,0x04,0x3F,0x04,0x04,               
  38. /*  "5"  Gulim12 8x16   -79-*/        
  39. 0x00,0xFC,0x84,0x44,0x44,0x44,0x84,0x04,0x00,0x09,0x10,0x20,0x20,0x20,0x10,0x0F,
  40. /*  "6"  Gulim12 8x16   -95-*/        
  41. 0x00,0xF0,0x88,0x44,0x44,0x44,0x88,0x10,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,        
  42. /*  "7"  Gulim12 8x16   -111-*/               
  43. 0x00,0x04,0x04,0x04,0x84,0x64,0x14,0x0C,0x00,0x00,0x00,0x3C,0x03,0x00,0x00,0x00,        
  44. /*  "8"  Gulim12 8x16   -127-*/
  45. 0x00,0x30,0x48,0x84,0x84,0x84,0x48,0x30,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x0E,
  46. /*  "9"  Gulim12 8x16   -143-*/        
  47. 0x00,0xF0,0x08,0x04,0x04,0x04,0x08,0xF0,0x00,0x08,0x11,0x22,0x22,0x22,0x11,0x0F,        
  48. /*  "."  Gulim12 8x16   -159-*/               
  49. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x0C,0x00,0x00,0x00,
  50. /*  ":"  Gulim12 8x16   -175-*/        
  51. 0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x0C,0x00,0x00,0x00,
  52. /*  "%"  Gulim12 8x16   -191-*/        
  53. 0x00,0x18,0x24,0x24,0x98,0x40,0x20,0x00,0x00,0x04,0x02,0x19,0x24,0x24,0x18,0x00,

  54. /*  "A"  Gulim12 8x16   -207-*/        
  55. 0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20,//A 33
  56. /*  "B"  Gulim12 8x16   -223-*/        
  57. 0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00,//B 34
  58. /*  "C"  Gulim12 8x16   -239-*/        
  59. 0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,//C 35
  60. /*  "D"  Gulim12 8x16   -255-*/        
  61. 0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,//D 36
  62. /*  "E"  Gulim12 8x16   -271-*/        
  63. 0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00,//E 37
  64. /*  "F"  Gulim12 8x16   -287-*/        
  65. 0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00,//F 38
  66. /*  "G"  Gulim12 8x16   -303-*/        
  67. 0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00,//G 39
  68. /*  "H"  Gulim12 8x16   -319-*/        
  69. 0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20,//H 40
  70. /*  "I"  Gulim12 8x16   -335-*/        
  71. 0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//I 41
  72. /*  "J"  Gulim12 8x16   -351-*/        
  73. 0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00,//J 42
  74. /*  "K"  Gulim12 8x16   -367-*/        
  75. 0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00,0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00,//K 43
  76. /*  "L"  Gulim12 8x16   -383-*/        
  77. 0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00,//L 44
  78. /*  "M"  Gulim12 8x16   -399-*/        
  79. 0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00,//M 45
  80. /*  "N"  Gulim12 8x16   -415-*/        
  81. 0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00,//N 46
  82. /*  "O"  Gulim12 8x16   -431-*/        
  83. 0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,//O 47
  84. /*  "P"  Gulim12 8x16   -447-*/        
  85. 0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00,//P 48
  86. /*  "Q"  Gulim12 8x16   -463-*/        
  87. 0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00,//Q 49
  88. /*  "R"  Gulim12 8x16   -479-*/        
  89. 0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20,//R 50
  90. /*  "S"  Gulim12 8x16   -495-*/        
  91. 0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00,//S 51
  92. /*  "T"  Gulim12 8x16   -511-*/        
  93. 0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//T 52
  94. /*  "U"  Gulim12 8x16   -527-*/        
  95. 0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//U 53
  96. /*  "V"  Gulim12 8x16   -543-*/        
  97. 0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00,//V 54
  98. /*  "W"  Gulim12 8x16   -559-*/        
  99. 0xF8,0x08,0x00,0xF8,0x00,0x08,0xF8,0x00,0x03,0x3C,0x07,0x00,0x07,0x3C,0x03,0x00,//W 55
  100. /*  "X"  Gulim12 8x16   -575-*/        
  101. 0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20,//X 56
  102. /*  "Y"  Gulim12 8x16   -591-*/        
  103. 0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//Y 57
  104. /*  "Z"  Gulim12 8x16   -607-*/        
  105. 0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00,//Z 58

  106. /*  "sui"  song12 16x16   623--*/
  107. 0x00,0xFE,0x22,0x5A,0x86,0x08,0x10,0x44,0x24,0xF4,0x2C,0x27,0x24,0xE4,0x04,0x00,
  108. 0x00,0xFF,0x04,0x08,0x87,0x41,0x3F,0x40,0x80,0xBF,0x85,0x95,0xA5,0x9F,0x80,0x00,
  109. /*  "yuan"  song12 16x16   -655-*/
  110. 0x20,0x30,0xAC,0x63,0x30,0x00,0x20,0x2C,0xAB,0x6A,0xAA,0x2A,0x3A,0x26,0xA0,0x00,
  111. 0x22,0x67,0x22,0x12,0x12,0x00,0x49,0x49,0x24,0x52,0x89,0x7F,0x02,0x0D,0x10,0x00,
  112. /*  "zhai"  song12 16x16   -687-*/
  113. 0x80,0x84,0x84,0x44,0x4C,0x54,0x25,0x26,0x24,0x54,0x4C,0x44,0x84,0x84,0x80,0x00,
  114. 0x00,0x00,0xF8,0x09,0x09,0x7D,0x0B,0x09,0x79,0x09,0x49,0x89,0x78,0x00,0x00,0x00,
  115. /*  "ju"  song12 16x16   -719-*/
  116. 0x00,0x00,0xFE,0x92,0x92,0x92,0x92,0x92,0xF2,0x92,0x92,0x92,0x9E,0x80,0x80,0x00,
  117. 0x40,0x30,0x0F,0x00,0xFC,0x44,0x44,0x44,0x47,0x44,0x44,0x44,0xFC,0x00,0x00,0x00,
  118. /*  "shi"  song12 16x16   -751-*/
  119. 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xFF,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,
  120. 0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00,
  121. /*  "sheshidu"  16X16   -783-*/
  122. 0x00,0x0C,0x12,0x12,0x0C,0xC0,0x20,0x10,0x10,0x10,0x10,0x10,0x20,0x40,0x00,0x00,
  123. 0x00,0x00,0x00,0x00,0x00,0x0F,0x10,0x20,0x20,0x20,0x20,0x20,0x10,0x08,0x00,0x00,
  124. /*  "%"  16X16   -815-*/
  125. 0x00,0x00,0x38,0x44,0x44,0x44,0x38,0x00,0x80,0x40,0x20,0x10,0x08,0x00,0x00,0x00,
  126. 0x00,0x00,0x00,0x10,0x08,0x04,0x02,0x01,0x00,0x1C,0x22,0x22,0x22,0x1C,0x00,0x00,
  127. };
  128. /*----- oled DATA -----------------------------------------------------------------------------*/

  129. /*----- oled_12832 -------------------------------*/
  130. void i2c_Start()
  131. {
  132.         SCL = 1;
  133.         delay();
  134.         SDA = 1;
  135.         delay();
  136.         SDA = 0;
  137.         delay();
  138.         SCL = 0;
  139. }

  140. void i2c_Stop()
  141. {
  142.         SCL = 0;
  143.         delay();        
  144.         SDA = 0;
  145.         delay();
  146.         SCL = 1;
  147.         delay();
  148.         SDA = 1;
  149. }

  150. void Write_i2c_Byte(unsigned char i2c_Byte)
  151. {
  152.         unsigned char i;
  153.         for(i=0;i<8;i++)               
  154.         {
  155.                 if(i2c_Byte & 0x80)
  156.                 SDA=1;
  157.                 else
  158.                 SDA=0;
  159.                 delay();
  160.                 SCL=1;
  161.                 delay();
  162.                 SCL=0;
  163.                 delay();
  164.                 i2c_Byte<<=1;
  165.         }
  166.         SDA=1;
  167.         delay();
  168.         SCL=1;
  169.         delay();
  170.         SCL=0;
  171. }

  172. void Write_i2c_Cmd(unsigned char i2c_Cmd)
  173. {
  174.    i2c_Start();
  175.    Write_i2c_Byte(0x78);
  176.    Write_i2c_Byte(0x00);
  177.    Write_i2c_Byte(i2c_Cmd);
  178.    i2c_Stop();
  179. }

  180. void Write_i2c_Data(unsigned char i2c_Data)
  181. {
  182.    i2c_Start();
  183.    Write_i2c_Byte(0x78);
  184.    Write_i2c_Byte(0x40);
  185.    Write_i2c_Byte(i2c_Data);
  186.    i2c_Stop();
  187. }

  188. void Init_ssd1306_32()
  189. {
  190.         Write_i2c_Cmd(0xAE);        
  191.         Write_i2c_Cmd(0x20);
  192.         Write_i2c_Cmd(0x00);        
  193.         Write_i2c_Cmd(0xb0);
  194.         Write_i2c_Cmd(0xc8);
  195.         Write_i2c_Cmd(0x00);
  196.         Write_i2c_Cmd(0x10);
  197.         Write_i2c_Cmd(0x40);
  198.         Write_i2c_Cmd(0x81);
  199.         Write_i2c_Cmd(0xdf);
  200.         Write_i2c_Cmd(0xa1);
  201.         Write_i2c_Cmd(0xa6);
  202.         Write_i2c_Cmd(0xa8);
  203.         Write_i2c_Cmd(0x1F);        
  204.         Write_i2c_Cmd(0xa4);
  205.         Write_i2c_Cmd(0xd3);
  206.         Write_i2c_Cmd(0x00);
  207.         Write_i2c_Cmd(0xd5);
  208.         Write_i2c_Cmd(0xf0);
  209.         Write_i2c_Cmd(0xd9);
  210.         Write_i2c_Cmd(0x22);
  211.         Write_i2c_Cmd(0xda);
  212.         Write_i2c_Cmd(0x12);
  213.         Write_i2c_Cmd(0xdb);
  214.         Write_i2c_Cmd(0x20);
  215.         Write_i2c_Cmd(0x8d);
  216.         Write_i2c_Cmd(0x14);
  217.         Write_i2c_Cmd(0xDA);
  218.         Write_i2c_Cmd(0x02);
  219.         Write_i2c_Cmd(0xaf);
  220. }

  221. void Clear_top()
  222. {
  223.         int i;
  224.         Write_i2c_Cmd(0x22);
  225.         Write_i2c_Cmd(0xb0);
  226.         Write_i2c_Cmd(0xb1);
  227.         Write_i2c_Cmd(0x21);
  228.         Write_i2c_Cmd(0);        
  229.         Write_i2c_Cmd(127);                        
  230.         for(i=0;i<512;i++) Write_i2c_Data(0x00);                 
  231. }

  232. void Clear_buttom()
  233. {
  234.         int i;
  235.         Write_i2c_Cmd(0x22);
  236.         Write_i2c_Cmd(0xb2);
  237.         Write_i2c_Cmd(0xb3);
  238.         Write_i2c_Cmd(0x21);
  239.         Write_i2c_Cmd(0);        
  240.         Write_i2c_Cmd(127);                        
  241.         for(i=0;i<512;i++) Write_i2c_Data(0x00);         
  242. }

  243. void Write_8X16(char c0,l0,int add)
  244. {
  245.         char m;
  246.         Write_i2c_Cmd(0x22);
  247.         Write_i2c_Cmd(c0);
  248.         Write_i2c_Cmd(c0+1);
  249.         Write_i2c_Cmd(0x21);
  250.         Write_i2c_Cmd(l0);        
  251.         Write_i2c_Cmd(l0+7);        
  252.         for(m=0;m<16;m++) Write_i2c_Data(zk[add++]);                 
  253. }

  254. void Write_16X16(char c0,l0,int add)
  255. {
  256.         char m;
  257.         Write_i2c_Cmd(0x22);
  258.         Write_i2c_Cmd(c0);
  259.         Write_i2c_Cmd(c0+1);
  260.         Write_i2c_Cmd(0x21);
  261.         Write_i2c_Cmd(l0);        
  262.         Write_i2c_Cmd(l0+15);        
  263.         for(m=0;m<32;m++) Write_i2c_Data(zk[add++]);                 
  264. }

  265. char i;

  266. void main()
  267. {
  268.         P3M0 |= (0x01<<6);  //指定P36
  269.         P3M1 |= 0x08;  //设置为准双向模式        
  270.         P3M0 |= (0x01<<7);  //指定P37
  271.         P3M1 |= 0x08;  //设置为准双向模式
  272.         
  273.         Init_ssd1306_32();
  274.         Clear_top();
  275.         Clear_buttom();
  276.         Write_16X16(0xb0,24,623);        
  277.         Write_16X16(0xb0,40,655);                        
  278.         Write_16X16(0xb0,56,687);                        
  279.         Write_16X16(0xb0,72,719);                        
  280.         Write_16X16(0xb0,88,751);        
  281.         
  282.         while(1)
  283.         {
  284.                 for(i=0;i<15;i++) Write_8X16(0xb2,i*8,i*16);
  285.                 Write_16X16(0xb2,14*8,783);
  286.                 Write_16X16(0xb2,12*8,815);
  287.                 delay_ms(2000);        
  288.                 Clear_buttom();
  289.                 delay_ms(100);
  290.         }
  291. }
复制代码

stc8H.h头文件下载: stc8h头文件.7z (23.81 KB, 下载次数: 98)

评分

参与人数 1黑币 +40 收起 理由
admin + 40 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1069041 发表于 2023-3-30 11:10 | 只看该作者
谢谢LZ,需要一个H文件。
回复

使用道具 举报

板凳
ID:1042619 发表于 2023-3-30 11:35 | 只看该作者
后来下载时将程序运行IRC频率降至5.5MHz时才通过
===说明程序不完善,还是要学习STC完善的老刘爱捣鼓示波器的 I2C-OLED12864, SPI-OLED12864演示程序


回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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