当前位置:   article > 正文

基于STM32F103+4PIN-OLED-IIC显示_正点原子 oled iic

正点原子 oled iic

前言

使用工具

最终效果与连线

代码

KEIL文件总览

关键代码

oled.h中对IIC引脚定义

显示字符串

显示数字

显示字符串

显示汉字

显示BMP图片

取模软件使用

软件设置

动态图实现


前言

使用工具

  1. 正点原子STM32F103RCTb MINI开发板
  2. 4PIN-OLED
  3. KEIL5
  4. FlyMcu
  5. PCtoLCD2002(取模软件)

最终效果与连线

VCC————3.3V

GND————GND

SCL————PC11

SDA————PC12

说明:本文不讲解OLED与IIC的基本原理,只考虑使用与实现功能。

代码

KEIL文件总览

         上述文件中,main.c包含主函数,oled.c包含IIC底层代码与OLED显示

        当然还有.h文件,其中bmp.h包含BMP图片的取模16进制编码,oled.h包含对IIC引脚定义和OLED屏幕相关定义,oledfont.h包含ASCALL码与自己定义的中文字符

        其他均为官方提供文件,无另外编写。

关键代码

oled.h中对IIC引脚定义

        如果要修改使用的引脚,将GPIOC、GPIO_Pin_11和GPIO_Pin_12改为对应即可,其他都无需做任意改动。

  1. #define OLED_SCLK_Clr() GPIO_ResetBits(GPIOC,GPIO_Pin_11)//CLK
  2. #define OLED_SCLK_Set() GPIO_SetBits(GPIOC,GPIO_Pin_11)
  3. #define OLED_SDIN_Clr() GPIO_ResetBits(GPIOC,GPIO_Pin_12)//DIN
  4. #define OLED_SDIN_Set() GPIO_SetBits(GPIOC,GPIO_Pin_12)
  5. #define OLED_CMD 0 //写命令
  6. #define OLED_DATA 1 //写数据
  7. /*在oled.c中初始化SSD1306还有相关程序
  8. GPIO_InitTypeDef GPIO_InitStructure;
  9. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
  10. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11|GPIO_Pin_12;
  11. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  12. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  13. GPIO_Init(GPIOC, &GPIO_InitStructure);
  14. GPIO_SetBits(GPIOC,GPIO_Pin_11|GPIO_Pin_12);
  15. */

显示字符串

  1. //第一个参数为x坐标(0-128);第二个参数为y坐标(0-8);
  2. //第三个为ASCALL码,当chr = 65时,为'A';第四个参数为文字大小,仅为12/16。
  3. void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size)
  4. {
  5. unsigned char c=0,i=0;
  6. c=chr-' ';//得到偏移后的值
  7. if(x>Max_Column-1){x=0;y=y+2;}
  8. if(Char_Size ==16)
  9. {
  10. OLED_Set_Pos(x,y);
  11. for(i=0;i<8;i++)
  12. OLED_WR_Byte(F8X16[c*16+i],OLED_DATA);
  13. OLED_Set_Pos(x,y+1);
  14. for(i=0;i<8;i++)
  15. OLED_WR_Byte(F8X16[c*16+i+8],OLED_DATA);
  16. }
  17. else {
  18. OLED_Set_Pos(x,y);
  19. for(i=0;i<6;i++)
  20. OLED_WR_Byte(F6x8[c][i],OLED_DATA);
  21. }
  22. }

显示数字

  1. //第一个参数为x坐标(0-128);第二个参数为y坐标(0-8);
  2. //第三个num为数字;第四个参数为数字长度;第五个参数为数字大小,仅为12/16。
  3. void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size2)
  4. {
  5. u8 t,temp;
  6. u8 enshow=0;
  7. for(t=0;t<len;t++)
  8. {
  9. temp=(num/oled_pow(10,len-t-1))%10;
  10. if(enshow==0&&t<(len-1))
  11. {
  12. if(temp==0)
  13. {
  14. OLED_ShowChar(x+(size2/2)*t,y,' ',size2);
  15. continue;
  16. }else enshow=1;
  17. }
  18. OLED_ShowChar(x+(size2/2)*t,y,temp+'0',size2);
  19. }
  20. }

显示字符串

  1. //第一个参数为x坐标(0-128);第二个参数为y坐标(0-8);
  2. //第三个为字符串;第四个参数为字符大小,仅为12/16。
  3. void OLED_ShowString(u8 x,u8 y,u8 *chr,u8 Char_Size)
  4. {
  5. unsigned char j=0;
  6. while (chr[j]!='\0')
  7. { OLED_ShowChar(x,y,chr[j],Char_Size);
  8. x+=8;
  9. if(x>120){x=0;y+=2;}
  10. j++;
  11. }
  12. }

显示汉字

  1. //第一个参数为x坐标(0-128);第二个参数为y坐标(0-8);
  2. //第三个为要输入的汉字,在oledfont.h中定义。
  3. void OLED_ShowCHinese(u8 x,u8 y,u8 no)
  4. {
  5. u8 t,adder=0;
  6. OLED_Set_Pos(x,y);
  7. for(t=0;t<16;t++)
  8. {
  9. OLED_WR_Byte(Hzk[2*no][t],OLED_DATA);
  10. adder+=1;
  11. }
  12. OLED_Set_Pos(x,y+1);
  13. for(t=0;t<16;t++)
  14. {
  15. OLED_WR_Byte(Hzk[2*no+1][t],OLED_DATA);
  16. adder+=1;
  17. }
  18. }

显示BMP图片

  1. //第一个参数为起始x0坐标(0-128);第二个参数为起始y0坐标(0-8);
  2. //第三个参数为结束x1坐标(0-128);第四个参数为结束y1坐标(0-8);
  3. //第五个为要输入的图片。
  4. void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[])
  5. {
  6. unsigned int j=0;
  7. unsigned char x,y;
  8. if(y1%8==0) y=y1/8;
  9. else y=y1/8+1;
  10. for(y=y0;y<y1;y++)
  11. {
  12. OLED_Set_Pos(x0,y);
  13. for(x=x0;x<x1;x++)
  14. {
  15. OLED_WR_Byte(BMP[j++],OLED_DATA);
  16. }
  17. }
  18. }

取模软件使用

软件设置

        1、选择阴码和阳码,看自己需要的效果。

        2、如果使用列行式,则OLED_DrawBMP函数的x1-x0为图像大小的第一个参数。使用行列式,则OLED_DrawBMP的x1-x0为图像大小的第二个参数。

        3、取模走向采用逆向

        4、自定义格式选择C51格式。

        采用阴码、列行式、逆向、C51效果图如下:

 代码烧录效果图:

动态图实现

        与上述展示BMP图步骤一样,区别在于它要一张一张取出来进行展示,很是麻烦。

        有时候GIF图直接取成BMP图后,色调会变得很淡,如右图(它是有东西的)。可以先用Python程序将GIF图转为PNG图片,如果图片不是黑底,需再将PNG图片用WINDOW自带的画图进行取反颜色变为黑底,,然后再转为BMP图,如左图效果。取成左图这样的效果后在进行取模,放入数组中用for循环即可实现效果,这里无须delay。

应有的效果图:

资源链接(0积分下载)

(32条消息) OLED+STM32MINI.rar-C文档类资源-CSDN文库https://download.csdn.net/download/weixin_47795024/67929670

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/309482
推荐阅读
相关标签
  

闽ICP备14008679号