STCMCUNT015 发表于 2023-6-7 17:19

STC32G驱动OLED12864,SPI或I2C两种方式

STC32G12K128驱动OLED12864, SPI 或 I2C 两种方式
STC32G8K64    驱动OLED12864, SPI 或 I2C 两种方式
https://www.stcaimcu.com/data/attachment/forum/202306/07/170530d8zp9889v2a989cg.png整个的演示功能如上所示,其中整个画面均做了缓存处理,可以局部点亮任意一个点,且不会覆盖掉原来的画面。
[*]void OLED_BuffClear(void);                                  //清屏
[*]void OLED_BuffShow(void);                                 //OLED刷新显示
[*]void OLED_BuffShowPoint(unsigned char x,unsigned char y);   //OLED显示一个点
[*]void OLED_BuffShowLine( u8 x1, u8 y1, u8 x2,u8 y2);         //OLED显示一条线
[*]void OLED_BuffShowRectangle(u8 x1, u8 y1, u8 x2, u8 y2);    //OLED显示一个矩形
[*]void OLED_BuffShowCircle(u8 x, u8 y, u8 r);               //OLED显示一个圆形
[*]void OLED_BuffShowChar(u8 x,u8 y,char asc, u8 mode);      //OLED显示一个8*16字符
[*]void OLED_BuffShowGBK(u8 x,u8 y,char *gbk,u8 mode);         //OLED显示一个16*16汉字
[*]void OLED_BuffShowString(u8 x,u8 y,char *s,u8 mode);      //OLED显示一个16像素的汉字和字符
[*]void OLED_BuffShowNum(u8 x,u8 y,long num,u8 mode);          //OLED显示一个整形变量
[*]void OLED_BuffShowNum02F(u8 x,u8 y,float num,u8 mode);      //OLED显示一个两位小数变量
[*]void OLED_BuffShowChar32(u8x,u8y,u8 num, u8 mode) ;   //OLED显示一个16*32的字符
[*]void OLED_BuffShowBMP(u8 x0, u8 y0,u8 x1, u8 y1,u8 BMP[]);//OLED显示一个图片

复制代码
功能函数做了如上所示,可以轻松的实现画点,画线,画圆,写字符,写汉字,显示变量等操作。

延时程序用到的代码如下所示

[*]//-----------------------------------------显示图片-----------------------------------------
[*]    OLED_BuffClear();                                                       //清除全部缓存
[*]    OLED_BuffShowBMP(0,0,128,8,OLED12864_IMG);                              //显示**图片
[*]    OLED_BuffShow();                                                      //将缓存写入显示屏显示
[*]    delay_ms(DELAY_TIME);                                                   //延时
[*]
[*]//-----------------------------------------显示字符-----------------------------------------
[*]    OLED_BuffClear();                                                       //清除全部缓存
[*]    OLED_BuffShowString(0,0,"HEELO ,WELCOME TO USE STC32&OLED12864!",0);      //显示数据
[*]    OLED_BuffShow();                                                      //将缓存写入显示屏显示
[*]    delay_ms(DELAY_TIME);                                                   //延时
[*]
[*]//-----------------------------------------显示汉字-----------------------------------------
[*]    OLED_BuffClear();                                                       //清除全部缓存
[*]    OLED_BuffShowString(0,0,"你好,欢迎使用STC 驱\xfd动OLED12864的历程",0);      //显示数据
[*]    OLED_BuffShow();                                                      //将缓存写入显示屏显示
[*]    delay_ms(DELAY_TIME);                                                   //延时
[*]
[*]//-----------------------------------------显示点-----------------------------------------
[*]    OLED_BuffClear();                                                       //清除全部缓存
[*]    OLED_BuffShowString(32,0,"画点测试");                                    //显示数据
[*]    OLED_BuffShow();                                                      //将缓存写入显示屏显示
[*]    for( i=0;i<64;i++ )                                                   //循环64次
[*]    {
[*]      OLED_BuffShowPoint(i*2,25);                                       //显示一个点
[*]      OLED_BuffShow();                                                    //刷新显示
[*]      delay_ms(50);                                                       //延时
[*]    }
[*]
[*]//-----------------------------------------显示线-----------------------------------------
[*]    OLED_BuffClear();                                                       //清除全部缓存
[*]    OLED_BuffShowString(32,0,"画线测试");                                    //显示数据
[*]    OLED_BuffShow();                                                      //将缓存写入显示屏显示
[*]    for( i=0;i<6;i++ )                                                      //循环6次
[*]    {
[*]      OLED_BuffShowLine(4,16+8*i,124,16+8*i);                           //显示横着6条线
[*]      OLED_BuffShow();                                                    //刷新显示
[*]      delay_ms(100);
[*]    }
[*]    for( i=0;i<16;i+=1 )                                                    //循环16次
[*]    {
[*]      OLED_BuffShowLine(8*i+4,16,8*i+4,56);                               //显示16条数线
[*]      OLED_BuffShow();                                                    //刷新显示
[*]      delay_ms(100);
[*]    }
[*]
[*]//-----------------------------------------显示圆-----------------------------------------
[*]    OLED_BuffClear();                                                       //清除全部缓存
[*]    OLED_BuffShowString(32,0,"画圆测试");                                    //显示数据
[*]    OLED_BuffShow();                                                      //将缓存写入显示屏显示
[*]    for( i=0;i<6;i++ )                                                      //循环6次
[*]    {
[*]       OLED_BuffShowCircle(64,40,5+i*3);                                    //画一个圆
[*]      OLED_BuffShow();                                                    //刷新显示
[*]      delay_ms(250);
[*]    }
[*]
[*]//-----------------------------------------显示32大字-----------------------------------------
[*]    OLED_BuffClear();                                                       //清除全部缓存
[*]    OLED_BuffShowString(32,0,"大字测试");                                    //显示数据
[*]    OLED_BuffShowChar32(24,3,1,0);                                          //显示数字1
[*]    OLED_BuffShowChar32(40,3,0,0);                                          //显示数字0
[*]    OLED_BuffShowChar32(56,3,10,0);                                       //显示:
[*]    OLED_BuffShowChar32(72,3,5,0);                                          //显示数字5
[*]    OLED_BuffShowChar32(88,3,5,0);                                          //显示数字5
[*]    OLED_BuffShow();                                                      //将缓存写入显示屏显示
[*]    delay_ms(DELAY_TIME);                                                   //延时
[*]
[*]//-----------------------------------------反显测试-----------------------------------------
[*]    OLED_BuffClear();                                                       //清除全部缓存
[*]    OLED_BuffShowString(32,0,"反显测试",0);                                  //显示数据
[*]    OLED_BuffShowString(16,2,"这是正\xfd显",0);                        //显示数据
[*]    OLED_BuffShowString(16,4,"这是反显",1);                              //显示数据
[*]    OLED_BuffShow();                                                      //将缓存写入显示屏显示
[*]    delay_ms(DELAY_TIME);
[*]
[*]//-----------------------------------------变量显示-----------------------------------------
[*]    OLED_BuffClear();                                                       //清除全部缓存
[*]    OLED_BuffShowString(32,0,"变量显示",0);                                  //显示数据
[*]    OLED_BuffShowNum(0,2,-25169,0) ;                                        //显示数据
[*]    OLED_BuffShowNum02F(0,4,3.14159,0);                                     //显示数据
[*]    OLED_BuffShowNum02F(0,6,dat,1);                                       //显示数据
[*]    OLED_BuffShow();                                                      //将缓存写入显示屏显示
[*]    delay_ms(DELAY_TIME);
[*]
[*]

复制代码
全部通过函数操作,使用非常的便捷


当然这里需要注意使用汉字的时候一定要建立字库才能使用该汉字,这里字库取模直接这样设置,然后生成的字模直接复制到字库里就可以使用了。
https://www.stcaimcu.com/data/attachment/forum/202306/07/165030e9qg84q3wvvvuf8s.png


附件包含了
1.STC32G(屠龙刀)通过SPI驱动OLED12864代码
2.STC32G(屠龙刀)通过IIC驱动OLED12864代码

3.字库取模软件

感兴趣的自行下载。
https://www.stcaimcu.com/data/attachment/forum/202306/07/165030bi977udxqg4jee66.png
https://www.stcaimcu.com/data/attachment/forum/202306/07/165030duhjqurguvhgq8kh.png
https://www.stcaimcu.com/data/attachment/forum/202306/07/165030sz8668mpua53pz95.png
https://www.stcaimcu.com/data/attachment/forum/202306/07/165030w5m2l7b22zrlvln5.png



页: [1]
查看完整版本: STC32G驱动OLED12864,SPI或I2C两种方式