标题:
stc8H1K08单片机驱动i2C接口的0.91吋OLED源程序 附stc8H.h头文件
[打印本页]
作者:
随缘57
时间:
2022-5-27 13:22
标题:
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头文件
单片机源程序如下:
#include "stc8H.h"
sbit SCL=P3^6;
sbit SDA=P3^7;
void delay()
{
char i;
for(i=0;i<1;i++);
}
void delay_us(char us)
{
char i;
for(i=0;i<us;i++);
}
void delay_ms(int ms)
{
int i,j,n;
//n=1100; //11.0592MHz
//n=2200; //24MHz
n=3300; //35MHz
for(j=0;j<ms;j++)
{
for(i=0;i<n;i++);
}
}
/*----- oled DATA ---------------------------------------------------------------*/
unsigned char code zk[]=
{
/* "0" Gulim12 8x16 -0-*/
0x00,0xF0,0x08,0x04,0x04,0x04,0x08,0xF0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,
/* "1" Gulim12 8x16 -15-*/
0x00,0x00,0x08,0x08,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,
/* "2" Gulim12 8x16 -31-*/
0x00,0x30,0x08,0x04,0x04,0x04,0x88,0x70,0x00,0x30,0x28,0x24,0x22,0x21,0x20,0x20,
/* "3" Gulim12 8x16 -47-*/
0x00,0x10,0x08,0x84,0x84,0x84,0x48,0x30,0x00,0x08,0x10,0x20,0x20,0x20,0x11,0x0E,
/* "4" Gulim12 8x16 -63-*/
0x00,0x80,0x60,0x18,0x04,0xFC,0x00,0x00,0x06,0x05,0x04,0x04,0x04,0x3F,0x04,0x04,
/* "5" Gulim12 8x16 -79-*/
0x00,0xFC,0x84,0x44,0x44,0x44,0x84,0x04,0x00,0x09,0x10,0x20,0x20,0x20,0x10,0x0F,
/* "6" Gulim12 8x16 -95-*/
0x00,0xF0,0x88,0x44,0x44,0x44,0x88,0x10,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,
/* "7" Gulim12 8x16 -111-*/
0x00,0x04,0x04,0x04,0x84,0x64,0x14,0x0C,0x00,0x00,0x00,0x3C,0x03,0x00,0x00,0x00,
/* "8" Gulim12 8x16 -127-*/
0x00,0x30,0x48,0x84,0x84,0x84,0x48,0x30,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x0E,
/* "9" Gulim12 8x16 -143-*/
0x00,0xF0,0x08,0x04,0x04,0x04,0x08,0xF0,0x00,0x08,0x11,0x22,0x22,0x22,0x11,0x0F,
/* "." Gulim12 8x16 -159-*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x0C,0x00,0x00,0x00,
/* ":" Gulim12 8x16 -175-*/
0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x0C,0x00,0x00,0x00,
/* "%" Gulim12 8x16 -191-*/
0x00,0x18,0x24,0x24,0x98,0x40,0x20,0x00,0x00,0x04,0x02,0x19,0x24,0x24,0x18,0x00,
/* "A" Gulim12 8x16 -207-*/
0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20,//A 33
/* "B" Gulim12 8x16 -223-*/
0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00,//B 34
/* "C" Gulim12 8x16 -239-*/
0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,//C 35
/* "D" Gulim12 8x16 -255-*/
0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,//D 36
/* "E" Gulim12 8x16 -271-*/
0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00,//E 37
/* "F" Gulim12 8x16 -287-*/
0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00,//F 38
/* "G" Gulim12 8x16 -303-*/
0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00,//G 39
/* "H" Gulim12 8x16 -319-*/
0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20,//H 40
/* "I" Gulim12 8x16 -335-*/
0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//I 41
/* "J" Gulim12 8x16 -351-*/
0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00,//J 42
/* "K" Gulim12 8x16 -367-*/
0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00,0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00,//K 43
/* "L" Gulim12 8x16 -383-*/
0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00,//L 44
/* "M" Gulim12 8x16 -399-*/
0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00,//M 45
/* "N" Gulim12 8x16 -415-*/
0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00,//N 46
/* "O" Gulim12 8x16 -431-*/
0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,//O 47
/* "P" Gulim12 8x16 -447-*/
0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00,//P 48
/* "Q" Gulim12 8x16 -463-*/
0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00,//Q 49
/* "R" Gulim12 8x16 -479-*/
0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20,//R 50
/* "S" Gulim12 8x16 -495-*/
0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00,//S 51
/* "T" Gulim12 8x16 -511-*/
0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//T 52
/* "U" Gulim12 8x16 -527-*/
0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//U 53
/* "V" Gulim12 8x16 -543-*/
0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00,//V 54
/* "W" Gulim12 8x16 -559-*/
0xF8,0x08,0x00,0xF8,0x00,0x08,0xF8,0x00,0x03,0x3C,0x07,0x00,0x07,0x3C,0x03,0x00,//W 55
/* "X" Gulim12 8x16 -575-*/
0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20,//X 56
/* "Y" Gulim12 8x16 -591-*/
0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//Y 57
/* "Z" Gulim12 8x16 -607-*/
0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00,//Z 58
/* "sui" song12 16x16 623--*/
0x00,0xFE,0x22,0x5A,0x86,0x08,0x10,0x44,0x24,0xF4,0x2C,0x27,0x24,0xE4,0x04,0x00,
0x00,0xFF,0x04,0x08,0x87,0x41,0x3F,0x40,0x80,0xBF,0x85,0x95,0xA5,0x9F,0x80,0x00,
/* "yuan" song12 16x16 -655-*/
0x20,0x30,0xAC,0x63,0x30,0x00,0x20,0x2C,0xAB,0x6A,0xAA,0x2A,0x3A,0x26,0xA0,0x00,
0x22,0x67,0x22,0x12,0x12,0x00,0x49,0x49,0x24,0x52,0x89,0x7F,0x02,0x0D,0x10,0x00,
/* "zhai" song12 16x16 -687-*/
0x80,0x84,0x84,0x44,0x4C,0x54,0x25,0x26,0x24,0x54,0x4C,0x44,0x84,0x84,0x80,0x00,
0x00,0x00,0xF8,0x09,0x09,0x7D,0x0B,0x09,0x79,0x09,0x49,0x89,0x78,0x00,0x00,0x00,
/* "ju" song12 16x16 -719-*/
0x00,0x00,0xFE,0x92,0x92,0x92,0x92,0x92,0xF2,0x92,0x92,0x92,0x9E,0x80,0x80,0x00,
0x40,0x30,0x0F,0x00,0xFC,0x44,0x44,0x44,0x47,0x44,0x44,0x44,0xFC,0x00,0x00,0x00,
/* "shi" song12 16x16 -751-*/
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xFF,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,
0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00,
/* "sheshidu" 16X16 -783-*/
0x00,0x0C,0x12,0x12,0x0C,0xC0,0x20,0x10,0x10,0x10,0x10,0x10,0x20,0x40,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x0F,0x10,0x20,0x20,0x20,0x20,0x20,0x10,0x08,0x00,0x00,
/* "%" 16X16 -815-*/
0x00,0x00,0x38,0x44,0x44,0x44,0x38,0x00,0x80,0x40,0x20,0x10,0x08,0x00,0x00,0x00,
0x00,0x00,0x00,0x10,0x08,0x04,0x02,0x01,0x00,0x1C,0x22,0x22,0x22,0x1C,0x00,0x00,
};
/*----- oled DATA -----------------------------------------------------------------------------*/
/*----- oled_12832 -------------------------------*/
void i2c_Start()
{
SCL = 1;
delay();
SDA = 1;
delay();
SDA = 0;
delay();
SCL = 0;
}
void i2c_Stop()
{
SCL = 0;
delay();
SDA = 0;
delay();
SCL = 1;
delay();
SDA = 1;
}
void Write_i2c_Byte(unsigned char i2c_Byte)
{
unsigned char i;
for(i=0;i<8;i++)
{
if(i2c_Byte & 0x80)
SDA=1;
else
SDA=0;
delay();
SCL=1;
delay();
SCL=0;
delay();
i2c_Byte<<=1;
}
SDA=1;
delay();
SCL=1;
delay();
SCL=0;
}
void Write_i2c_Cmd(unsigned char i2c_Cmd)
{
i2c_Start();
Write_i2c_Byte(0x78);
Write_i2c_Byte(0x00);
Write_i2c_Byte(i2c_Cmd);
i2c_Stop();
}
void Write_i2c_Data(unsigned char i2c_Data)
{
i2c_Start();
Write_i2c_Byte(0x78);
Write_i2c_Byte(0x40);
Write_i2c_Byte(i2c_Data);
i2c_Stop();
}
void Init_ssd1306_32()
{
Write_i2c_Cmd(0xAE);
Write_i2c_Cmd(0x20);
Write_i2c_Cmd(0x00);
Write_i2c_Cmd(0xb0);
Write_i2c_Cmd(0xc8);
Write_i2c_Cmd(0x00);
Write_i2c_Cmd(0x10);
Write_i2c_Cmd(0x40);
Write_i2c_Cmd(0x81);
Write_i2c_Cmd(0xdf);
Write_i2c_Cmd(0xa1);
Write_i2c_Cmd(0xa6);
Write_i2c_Cmd(0xa8);
Write_i2c_Cmd(0x1F);
Write_i2c_Cmd(0xa4);
Write_i2c_Cmd(0xd3);
Write_i2c_Cmd(0x00);
Write_i2c_Cmd(0xd5);
Write_i2c_Cmd(0xf0);
Write_i2c_Cmd(0xd9);
Write_i2c_Cmd(0x22);
Write_i2c_Cmd(0xda);
Write_i2c_Cmd(0x12);
Write_i2c_Cmd(0xdb);
Write_i2c_Cmd(0x20);
Write_i2c_Cmd(0x8d);
Write_i2c_Cmd(0x14);
Write_i2c_Cmd(0xDA);
Write_i2c_Cmd(0x02);
Write_i2c_Cmd(0xaf);
}
void Clear_top()
{
int i;
Write_i2c_Cmd(0x22);
Write_i2c_Cmd(0xb0);
Write_i2c_Cmd(0xb1);
Write_i2c_Cmd(0x21);
Write_i2c_Cmd(0);
Write_i2c_Cmd(127);
for(i=0;i<512;i++) Write_i2c_Data(0x00);
}
void Clear_buttom()
{
int i;
Write_i2c_Cmd(0x22);
Write_i2c_Cmd(0xb2);
Write_i2c_Cmd(0xb3);
Write_i2c_Cmd(0x21);
Write_i2c_Cmd(0);
Write_i2c_Cmd(127);
for(i=0;i<512;i++) Write_i2c_Data(0x00);
}
void Write_8X16(char c0,l0,int add)
{
char m;
Write_i2c_Cmd(0x22);
Write_i2c_Cmd(c0);
Write_i2c_Cmd(c0+1);
Write_i2c_Cmd(0x21);
Write_i2c_Cmd(l0);
Write_i2c_Cmd(l0+7);
for(m=0;m<16;m++) Write_i2c_Data(zk[add++]);
}
void Write_16X16(char c0,l0,int add)
{
char m;
Write_i2c_Cmd(0x22);
Write_i2c_Cmd(c0);
Write_i2c_Cmd(c0+1);
Write_i2c_Cmd(0x21);
Write_i2c_Cmd(l0);
Write_i2c_Cmd(l0+15);
for(m=0;m<32;m++) Write_i2c_Data(zk[add++]);
}
char i;
void main()
{
P3M0 |= (0x01<<6); //指定P36
P3M1 |= 0x08; //设置为准双向模式
P3M0 |= (0x01<<7); //指定P37
P3M1 |= 0x08; //设置为准双向模式
Init_ssd1306_32();
Clear_top();
Clear_buttom();
Write_16X16(0xb0,24,623);
Write_16X16(0xb0,40,655);
Write_16X16(0xb0,56,687);
Write_16X16(0xb0,72,719);
Write_16X16(0xb0,88,751);
while(1)
{
for(i=0;i<15;i++) Write_8X16(0xb2,i*8,i*16);
Write_16X16(0xb2,14*8,783);
Write_16X16(0xb2,12*8,815);
delay_ms(2000);
Clear_buttom();
delay_ms(100);
}
}
复制代码
stc8H.h头文件下载:
stc8h头文件.7z
(23.81 KB, 下载次数: 109)
2022-5-27 16:27 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
252669117
时间:
2023-3-30 11:10
谢谢LZ,需要一个H文件。
作者:
大漠孤烟001
时间:
2023-3-30 11:35
后来下载时将程序运行IRC频率降至5.5MHz时才通过
===说明程序不完善,还是要学习STC完善的老刘爱捣鼓示波器的 I2C-OLED12864, SPI-OLED12864演示程序
dd07cbf043317742d7aeaae59ead3bb7.png
(90.81 KB, 下载次数: 60)
下载附件
2023-3-30 11:57 上传
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1