精华内容
下载资源
问答
  • oled屏幕

    2017-04-28 20:44:00
    处在不论什么角度看屏幕都不会造成图像的失真。 且它有三中原色:绿。红,蓝。 我近期在学安在智能车上的oled 显示屏在此总结一下: oled有6个脚其作用和接法会在以下的代码中进行说明,其电压为3.3v,由于这段...

    oled作为一种新型的有机显示屏,越来越现实出其重要性,它不但超薄可弯折并且可视视角较宽。处在不论什么角度看屏幕都不会造成图像的失真。

    且它有三中原色:绿。红,蓝。

    我近期在学安在智能车上的oled 显示屏在此总结一下:

    oled有6个脚其作用和接法会在以下的代码中进行说明,其电压为3.3v,由于这段程序实在iar软件中写的所以会用到库的加入,这里的函数就是调用的库中的函数

    void main()

    {
      //oled所接的四个引脚所有设置为高电平另外两个引脚为电源正负极不做操作
        gpio_init (PORTB, 18,GPO , 1);
        gpio_init (PORTB, 19,GPO , 1);
        gpio_init (PORTB, 20,GPO , 1);
        gpio_init (PORTB, 21,GPO , 1);
    //oled 初始化
        LCD_Init(); 
        while(1)
        {
          
          LCD_Fill(0x00);清屏  
          LCD_P8x16Str(20,0,"hello men");
          LCD_P8x16Str(20,2,"nice to meet");
          LCD_P6x8Str(22,5,"QQ:2878787878"); 
          LCD_P6x8Str(34,7,"2012-12-20");    
          time_delay_ms(1000);        
          LCD_CLS();/复位清屏
         
       
        }
    }
    展开全文
  • Arduino 驱动OLED屏幕IIC接线方式简单入门

    万次阅读 多人点赞 2016-11-04 18:38:23
    这次实验的这款是128X64的OLED屏幕 , 芯片是SSD1306,请确认自家模块芯片型号,不然对不上号啊 使用IIC的方法,简单实验显示示例程序。 (请确认你手头上的模块可以IIC连接,若干不支持那只能SPI方式接线) 先...

     

     

     

    OLED一款小巧的显示屏,感觉可以做出很可爱的东西。

    这次实验的这款是128X64的OLED屏幕 ,

    芯片是SSD1306,请确认自家模块芯片型号,不然对不上号啊

    使用IIC的方法,简单实验显示示例程序。

     

    (请确认你手头上的模块可以IIC连接,若干不支持那只能SPI方式接线)

    先实现连接与显示,之后再进行更深入的应用。

     

    任意门:

    Arduino Uno 驱动OLED进阶 显示中英文字

    Arduino Uno 驱动OLED进阶 显示图片

    Arduino Uno 驱动OLED进阶 显示几何动画

     

    编译的过程,可能会遇到以下问题:

    ①提示错误

     

    #error("Height incorrect, please fix Adafruit_SSD1306.h!");  

    错误信息意思是指:

    高度不正确,请修正Adafruit_SSD1306.h!

     

    进入Arduino安装文件夹的libraries文件夹的Adfruit_SSD1306-master 找到Adafruit_SSD1306.h

     

    打开此文件,找到第70行左右

     

    默认是定义 SSD1306_128_32 ,由于我们使用的是128*64的OLED,所以,把原来的#define SSD1306_128_32,前面加上//

    把#define SSD_128_64 前面的//去掉  

    最后就如上面图例一样

     

    ②模块的IIC 地址问题

    模块的地址修改在这个位置,示例程序的61行

     

    这个模块地址我用的是这个,但每个模块可能不一样,具体请咨询购买的商家,又或者可以参考下面链接的,IIC搜索地址程序。

    任意门:Arduino 和LCD1602液晶屏 I2C接口实验

     

     

    实验效果

     

     

    BOM表

    Arduino Uno             *1

    OLED 128*64           *1

    跳线若干


    针脚说明

    VCC   接3.3v电源

    GND  接地(GND)

    SCL   时钟线

    SDA   数据线

     

    接线图

     

     

     

    程序开源代码

    在上代码之前,先下载两个库分别是

    Adafruit SSD1306 Library:

    https://github.com/adafruit/Adafruit_SSD1306

    or

    http://download.csdn.net/detail/ling3ye/9729179

    or(以下是新增外链下载地址,如果上述地址都无法使用可以使用以下地址)

    https://u16460183.ctfile.com/fs/16460183-288560545

     

    Adafruit GFX Library:

    https://github.com/adafruit/Adafruit-GFX-Library

    or

    http://download.csdn.net/detail/ling3ye/9729180

    or(以下是新增外链下载地址,如果上述地址都无法使用可以使用以下地址)

    https://u16460183.ctfile.com/fs/16460183-288561300

     

    *_________*

    下载后把解压的文件放在 Arduino 安装目录里的 "libraries"

    例如:C:\Program Files (x86)\Arduino\libraries

     

    调出示例程序

     

    或者复制以下代码,都是一样的:

     

    /*********************************************************************
    This is an example for our Monochrome OLEDs based on SSD1306 drivers
    
      Pick one up today in the adafruit shop!
      ------> http://www.adafruit.com/category/63_98
    
    This example is for a 128x64 size display using I2C to communicate
    3 pins are required to interface (2 I2C and one reset)
    
    Adafruit invests time and resources providing this open source code, 
    please support Adafruit and open-source hardware by purchasing 
    products from Adafruit!
    
    Written by Limor Fried/Ladyada  for Adafruit Industries.  
    BSD license, check license.txt for more information
    All text above, and the splash screen must be included in any redistribution
    *********************************************************************/
    
    #include <SPI.h>
    #include <Wire.h>
    #include <Adafruit_GFX.h>
    #include <Adafruit_SSD1306.h>
    
    #define OLED_RESET 4
    Adafruit_SSD1306 display(OLED_RESET);
    
    #define NUMFLAKES 10
    #define XPOS 0
    #define YPOS 1
    #define DELTAY 2
    
    
    #define LOGO16_GLCD_HEIGHT 16 
    #define LOGO16_GLCD_WIDTH  16 
    static const unsigned char PROGMEM logo16_glcd_bmp[] =
    { B00000000, B11000000,
      B00000001, B11000000,
      B00000001, B11000000,
      B00000011, B11100000,
      B11110011, B11100000,
      B11111110, B11111000,
      B01111110, B11111111,
      B00110011, B10011111,
      B00011111, B11111100,
      B00001101, B01110000,
      B00011011, B10100000,
      B00111111, B11100000,
      B00111111, B11110000,
      B01111100, B11110000,
      B01110000, B01110000,
      B00000000, B00110000 };
    
    #if (SSD1306_LCDHEIGHT != 64)
    #error("Height incorrect, please fix Adafruit_SSD1306.h!");
    #endif
    
    void setup()   {                
      Serial.begin(9600);
    
      // by default, we'll generate the high voltage from the 3.3v line internally! (neat!)
      display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  // initialize with the I2C addr 0x3D (for the 128x64)
      // init done
      
      // Show image buffer on the display hardware.
      // Since the buffer is intialized with an Adafruit splashscreen
      // internally, this will display the splashscreen.
      display.display();
      delay(2000);
    
      // Clear the buffer.
      display.clearDisplay();
    
      // draw a single pixel
      display.drawPixel(10, 10, WHITE);
      // Show the display buffer on the hardware.
      // NOTE: You _must_ call display after making any drawing commands
      // to make them visible on the display hardware!
      display.display();
      delay(2000);
      display.clearDisplay();
    
      // draw many lines
      testdrawline();
      display.display();
      delay(2000);
      display.clearDisplay();
    
      // draw rectangles
      testdrawrect();
      display.display();
      delay(2000);
      display.clearDisplay();
    
      // draw multiple rectangles
      testfillrect();
      display.display();
      delay(2000);
      display.clearDisplay();
    
      // draw mulitple circles
      testdrawcircle();
      display.display();
      delay(2000);
      display.clearDisplay();
    
      // draw a white circle, 10 pixel radius
      display.fillCircle(display.width()/2, display.height()/2, 10, WHITE);
      display.display();
      delay(2000);
      display.clearDisplay();
    
      testdrawroundrect();
      delay(2000);
      display.clearDisplay();
    
      testfillroundrect();
      delay(2000);
      display.clearDisplay();
    
      testdrawtriangle();
      delay(2000);
      display.clearDisplay();
       
      testfilltriangle();
      delay(2000);
      display.clearDisplay();
    
      // draw the first ~12 characters in the font
      testdrawchar();
      display.display();
      delay(2000);
      display.clearDisplay();
    
      // draw scrolling text
      testscrolltext();
      delay(2000);
      display.clearDisplay();
    
      // text display tests
      display.setTextSize(1);
      display.setTextColor(WHITE);
      display.setCursor(0,0);
      display.println("Hello, world!");
      display.setTextColor(BLACK, WHITE); // 'inverted' text
      display.println(3.141592);
      display.setTextSize(2);
      display.setTextColor(WHITE);
      display.print("0x"); display.println(0xDEADBEEF, HEX);
      display.display();
      delay(2000);
      display.clearDisplay();
    
      // miniature bitmap display
      display.drawBitmap(30, 16,  logo16_glcd_bmp, 16, 16, 1);
      display.display();
      delay(1);
    
      // invert the display
      display.invertDisplay(true);
      delay(1000); 
      display.invertDisplay(false);
      delay(1000); 
      display.clearDisplay();
    
      // draw a bitmap icon and 'animate' movement
      testdrawbitmap(logo16_glcd_bmp, LOGO16_GLCD_HEIGHT, LOGO16_GLCD_WIDTH);
    }
    
    
    void loop() {
      
    }
    
    
    void testdrawbitmap(const uint8_t *bitmap, uint8_t w, uint8_t h) {
      uint8_t icons[NUMFLAKES][3];
     
      // initialize
      for (uint8_t f=0; f< NUMFLAKES; f++) {
        icons[f][XPOS] = random(display.width());
        icons[f][YPOS] = 0;
        icons[f][DELTAY] = random(5) + 1;
        
        Serial.print("x: ");
        Serial.print(icons[f][XPOS], DEC);
        Serial.print(" y: ");
        Serial.print(icons[f][YPOS], DEC);
        Serial.print(" dy: ");
        Serial.println(icons[f][DELTAY], DEC);
      }
    
      while (1) {
        // draw each icon
        for (uint8_t f=0; f< NUMFLAKES; f++) {
          display.drawBitmap(icons[f][XPOS], icons[f][YPOS], bitmap, w, h, WHITE);
        }
        display.display();
        delay(200);
        
        // then erase it + move it
        for (uint8_t f=0; f< NUMFLAKES; f++) {
          display.drawBitmap(icons[f][XPOS], icons[f][YPOS], bitmap, w, h, BLACK);
          // move it
          icons[f][YPOS] += icons[f][DELTAY];
          // if its gone, reinit
          if (icons[f][YPOS] > display.height()) {
            icons[f][XPOS] = random(display.width());
            icons[f][YPOS] = 0;
            icons[f][DELTAY] = random(5) + 1;
          }
        }
       }
    }
    
    
    void testdrawchar(void) {
      display.setTextSize(1);
      display.setTextColor(WHITE);
      display.setCursor(0,0);
    
      for (uint8_t i=0; i < 168; i++) {
        if (i == '\n') continue;
        display.write(i);
        if ((i > 0) && (i % 21 == 0))
          display.println();
      }    
      display.display();
      delay(1);
    }
    
    void testdrawcircle(void) {
      for (int16_t i=0; i<display.height(); i+=2) {
        display.drawCircle(display.width()/2, display.height()/2, i, WHITE);
        display.display();
        delay(1);
      }
    }
    
    void testfillrect(void) {
      uint8_t color = 1;
      for (int16_t i=0; i<display.height()/2; i+=3) {
        // alternate colors
        display.fillRect(i, i, display.width()-i*2, display.height()-i*2, color%2);
        display.display();
        delay(1);
        color++;
      }
    }
    
    void testdrawtriangle(void) {
      for (int16_t i=0; i<min(display.width(),display.height())/2; i+=5) {
        display.drawTriangle(display.width()/2, display.height()/2-i,
                         display.width()/2-i, display.height()/2+i,
                         display.width()/2+i, display.height()/2+i, WHITE);
        display.display();
        delay(1);
      }
    }
    
    void testfilltriangle(void) {
      uint8_t color = WHITE;
      for (int16_t i=min(display.width(),display.height())/2; i>0; i-=5) {
        display.fillTriangle(display.width()/2, display.height()/2-i,
                         display.width()/2-i, display.height()/2+i,
                         display.width()/2+i, display.height()/2+i, WHITE);
        if (color == WHITE) color = BLACK;
        else color = WHITE;
        display.display();
        delay(1);
      }
    }
    
    void testdrawroundrect(void) {
      for (int16_t i=0; i<display.height()/2-2; i+=2) {
        display.drawRoundRect(i, i, display.width()-2*i, display.height()-2*i, display.height()/4, WHITE);
        display.display();
        delay(1);
      }
    }
    
    void testfillroundrect(void) {
      uint8_t color = WHITE;
      for (int16_t i=0; i<display.height()/2-2; i+=2) {
        display.fillRoundRect(i, i, display.width()-2*i, display.height()-2*i, display.height()/4, color);
        if (color == WHITE) color = BLACK;
        else color = WHITE;
        display.display();
        delay(1);
      }
    }
       
    void testdrawrect(void) {
      for (int16_t i=0; i<display.height()/2; i+=2) {
        display.drawRect(i, i, display.width()-2*i, display.height()-2*i, WHITE);
        display.display();
        delay(1);
      }
    }
    
    void testdrawline() {  
      for (int16_t i=0; i<display.width(); i+=4) {
        display.drawLine(0, 0, i, display.height()-1, WHITE);
        display.display();
        delay(1);
      }
      for (int16_t i=0; i<display.height(); i+=4) {
        display.drawLine(0, 0, display.width()-1, i, WHITE);
        display.display();
        delay(1);
      }
      delay(250);
      
      display.clearDisplay();
      for (int16_t i=0; i<display.width(); i+=4) {
        display.drawLine(0, display.height()-1, i, 0, WHITE);
        display.display();
        delay(1);
      }
      for (int16_t i=display.height()-1; i>=0; i-=4) {
        display.drawLine(0, display.height()-1, display.width()-1, i, WHITE);
        display.display();
        delay(1);
      }
      delay(250);
      
      display.clearDisplay();
      for (int16_t i=display.width()-1; i>=0; i-=4) {
        display.drawLine(display.width()-1, display.height()-1, i, 0, WHITE);
        display.display();
        delay(1);
      }
      for (int16_t i=display.height()-1; i>=0; i-=4) {
        display.drawLine(display.width()-1, display.height()-1, 0, i, WHITE);
        display.display();
        delay(1);
      }
      delay(250);
    
      display.clearDisplay();
      for (int16_t i=0; i<display.height(); i+=4) {
        display.drawLine(display.width()-1, 0, 0, i, WHITE);
        display.display();
        delay(1);
      }
      for (int16_t i=0; i<display.width(); i+=4) {
        display.drawLine(display.width()-1, 0, i, display.height()-1, WHITE); 
        display.display();
        delay(1);
      }
      delay(250);
    }
    
    void testscrolltext(void) {
      display.setTextSize(2);
      display.setTextColor(WHITE);
      display.setCursor(10,0);
      display.clearDisplay();
      display.println("scroll");
      display.display();
      delay(1);
     
      display.startscrollright(0x00, 0x0F);
      delay(2000);
      display.stopscroll();
      delay(1000);
      display.startscrollleft(0x00, 0x0F);
      delay(2000);
      display.stopscroll();
      delay(1000);    
      display.startscrolldiagright(0x00, 0x07);
      delay(2000);
      display.startscrolldiagleft(0x00, 0x07);
      delay(2000);
      display.stopscroll();
    }

     

     

     

     

     

    展开全文
  • 树莓派驱动ssd1306 oeld屏幕显示温度,ip地址,日期,用dht11检测温度,oled屏幕是ssd1306芯片
  • OLED 屏幕显示

    千次阅读 2020-02-05 21:39:20
    代码通过SPI与OLED 屏幕相连 OLED 简介: OLED,即有机发光二极管(OrganicLight-EmittingDiode),又称为有机电激光显示(OrganicElectroluminesenceDisplay,OELD)。OLED由于同时具备自发光,不需背光源、对比度.....

    实验描述:
    ALIENTEK OLED模块的控制器是SSD1306,本章,通过STM32来控制该模块显示字符和数字。代码通过SPI与OLED 屏幕相连
    OLED 简介:
    OLED,即有机发光二极管(OrganicLight-EmittingDiode),又称为有机电激光显示(OrganicElectroluminesenceDisplay,OELD)。OLED由于同时具备自发光,不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广、构造及制程较简单等优异之特性,被认为是下一代的平面显示器新兴应用技术。
    SPI:
    串口模式使用的信号线有如下几条:CS:OLED片选信号。RST(RES):硬复位OLED。DC:命令/数据标志(0,读写命令;1,读写数据)。SCLK:串行时钟线。在4线串行模式下,D0信号线作为串行时钟线SCLK。SDIN:串行数据线。在4线串行模式下,D1信号线作为串行数据线SDIN。模块的D2需要悬空,其他引脚可以接到GND。在4线串行模式下,只能往模块写数据而不能读数据。在4线SPI模式下,每个数据长度均为8位,在SCLK的上升沿,数据从SDIN移入到SSD1306,并且是高位在前的。DC线还是用作命令/数据的标志线。
    相关设置步骤如下:
    1)根据连接电路以及OLED模块所设置的通讯模式来设置设置STM32与OLED模块相连接的模块相连接的IO。这一步,先将我们与OLED模块相连的IO口设置为输出。
    2)初始化初始化OLED模块,通过对OLED相关寄存器的初始化,来启动OLED的显示。为后续显示字符和数字做准备。
    3)通过函数将字符和数字显示到通过函数将字符和数字显示到OLED模块上。通过我们设计的程序,将要显示的字符送到OLED模块上。

    软件设计:
    OLED_Init函数的结构比较简单,开始是对IO口的初始化,这里我们用了宏定义OLED_MODE来决定要设置的IO口,其他一些初始化序列,我们按照厂家提供的资料来做就可以。OLED_Init函数代码如下:

    //初始化SSD1306
    voidOLED_Init(void){GPIO_InitTypeDefGPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOG,ENABLE);//使能PC,D,G端口时钟
    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3|GPIO_Pin_6;//PD3,PD6推挽输出
    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出
    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//速度
    50MHzGPIO_Init(GPIOD,&GPIO_InitStructure);//初始化
    GPIOD3,6GPIO_SetBits(GPIOD,GPIO_Pin_3|GPIO_Pin_6);//PD3,PD6输出高
    #ifOLED_MODE==1GPIO_InitStructure.GPIO_Pin=0xFF;//PC0~7OUT推挽输出
    GPIO_Init(GPIOC,&GPIO_InitStructure);GPIO_SetBits(GPIOC,0xFF);//PC0~7输出高//PG13,14,15OUT推挽输出
    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;GPIO_Init(GPIOG,&GPIO_InitStructure);//PG13,14,15OUT输出高
    GPIO_SetBits(GPIOG,GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);#elseGPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1;//PC0,1OUT推挽输出
    GPIO_Init(GPIOC,&GPIO_InitStructure);
    GPIO_SetBits(GPIOC,GPIO_Pin_0|GPIO_Pin_1);//PC0,1OUT输出高
    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_15;//PG15OUT推挽输出
    RSTGPIO_Init(GPIOG,&GPIO_InitStructure);GPIO_SetBits(GPIOG,GPIO_Pin_15);//PG15OUT输出高
    #endifOLED_RST=0;delay_ms(100);OLED_RST=1;OLED_WR_Byte(0xAE,OLED_CMD);//关闭显示
    OLED_WR_Byte(0xD5,OLED_CMD);//设置时钟分频因子,震荡频率OLED_WR_Byte(80,OLED_CMD);//[3:0],分频因子;[7:4],震荡频率
    OLED_WR_Byte(0xA8,OLED_CMD);//设置驱动路数OLED_WR_Byte(0X3F,OLED_CMD);//默认
    0X3F(1/64)OLED_WR_Byte(0xD3,OLED_CMD);//设置显示偏移
    OLED_WR_Byte(0X00,OLED_CMD);//默认为
    0OLED_WR_Byte(0x40,OLED_CMD);//设置显示开始行
    [5:0],行数.OLED_WR_Byte(0x8D,OLED_CMD);//电荷泵设置
    OLED_WR_Byte(0x14,OLED_CMD);//bit2,开启/关闭
    OLED_WR_Byte(0x20,OLED_CMD);//设置内存地址模式
    OLED_WR_Byte(0x02,OLED_CMD);//[1:0],00,列地址模式;01,//行地址模式;10,页地址模式;默认10;
    OLED_WR_Byte(0xA1,OLED_CMD);//段重定义设置,bit0:0,0->0;1,0->127;
    OLED_WR_Byte(0xC0,OLED_CMD);//设置COM扫描方向;bit3:0,普通模式;1,//重定义模式COM[N-1]->COM0;N:驱动路数
    OLED_WR_Byte(0xDA,OLED_CMD);//设置COM硬件引脚配置
    OLED_WR_Byte(0x12,OLED_CMD);//[5:4]配置
    OLED_WR_Byte(0x81,OLED_CMD);//对比度设置OLED_WR_Byte(0xEF,OLED_CMD);//1~255;默认0X7F(亮度设置,越大越亮)
    OLED_WR_Byte(0xD9,OLED_CMD);//设置预充电周期
    OLED_WR_Byte(0xf1,OLED_CMD);//[3:0],PHASE1;[7:4],PHASE2;
    OLED_WR_Byte(0xDB,OLED_CMD);//设置VCOMH电压倍率
    OLED_WR_Byte(0x30,OLED_CMD);//[6:4]000,0.65*vcc;001,0.77*vcc;011,0.83*vcc;
    OLED_WR_Byte(0xA4,OLED_CMD);//全局显示开启;bit0:1,开启;0,关闭;(白屏/黑屏)
    OLED_WR_Byte(0xA6,OLED_CMD);//设置显示方式;bit0:1,反相显示;0,正常显示
    OLED_WR_Byte(0xAF,OLED_CMD);//开启显示
    OLED_Clear();//清屏
    

    在STM32内部定义了一个GRAMu8OLED_GRAM[128][8];此部分GRAM对应OLED模块上的GRAM。在操作的时候,我们只要修改STM32内部的GRAM就可以了,然后通过OLED_Refresh_Gram函数把GRAM一次刷新到OLED的GRAM上。该函数代码如下:

    //更新显存到LED
    voidOLED_Refresh_Gram(void){u8i,n;for(i=0;i<8;i  ){OLED_WR_Byte(0xb0 i,OLED_CMD);//设置页地址(0~7)
    OLED_WR_Byte(0x00,OLED_CMD);//设置显示位置—列低地址
    OLED_WR_Byte(0x10,OLED_CMD);//设置显示位置—列高地址
    for(n=0;n<128;n  )OLED_WR_Byte(OLED_GRAM[n][i],OLED_DATA);}}
    

    OLED_Refresh_Gram函数先设置页地址,然后写入列地址(也就是纵坐标)
    ,然后从0开始写入128个字节,写满该页,最后循环把8页的内容都写入,就实现了整个从STM32显存到OLED显存的拷贝。OLED_Refresh_Gram函数还用到了一个外部函数,也就是我们接着要介绍的函数:OLED_WR_Byte,该函数直接和硬件相关,函数代码如下:

    #ifOLED_MODE==1
    //向SSD1306写入一个字节。
    //dat:要写入的数据/命令
    //cmd:数据/命令标志0,表示命令;1,表示数据;
    voidOLED_WR_Byte(u8dat,u8cmd)
    {DATAOUT(dat);
    if(cmd)OLED_RS_Set();
    elseOLED_RS_Clr();
    OLED_CS_Clr();
    OLED_WR_Clr();
    OLED_WR_Set();
    OLED_CS_Set();
    OLED_RS_Set();
    }
    #else
    //向SSD1306写入一个字节。
    //dat:要写入的数据/命令
    //cmd:数据/命令标志0,表示命令;1,表示数据;
    voidOLED_WR_Byte(u8dat,u8cmd)
    {
    u8 i;
    if(cmd)OLED_RS_Set();else
    OLED_RS_Clr();
    OLED_CS_Clr();
    for(i=0;i<8;i  )
    {OLED_SCLK_Clr();
    if(dat&0x80)
    OLED_SDIN_Set();
    else
    OLED_SDIN_Clr();
    OLED_SCLK_Set();
    dat<<=1;
    }
    OLED_CS_Set();
    OLED_RS_Set();
    }
    #endif
    

    OOLED_GRAM[128][8]中的128代表列数(x坐标)
    ,而8代表的是页,每页又包含8行,总共64行(y坐标)。从高到低对应行数从小到大。

    围为:0127;y的范围为:063。因此,
    我们可以得出下一个将要介绍的函数:画点函数,函数代码:

    voidOLED_DrawPoint(u8x,u8y,u8t)
    {
    u8pos,bx,temp=0;
    if(x>127||y>63)return;//超出范围了.
    pos=7-y/8;
    bx=y%8;
    temp=1<<(7-bx);
    if(t)OLED_GRAM[x][pos]|=temp;
    elseOLED_GRAM[x][pos]&=~temp;
    }
    
    

    要显示字符,先要有字符的点阵数据,
    ASCII常用的字符集总共有95个,我们先要得到这个字符集的点阵数据,可以使用字符提取软件:PCtoLCD2002完美版。该软件可以提供各种字符,包括汉字(字体和大小都可以自己设置)阵
    提取,且取模方式可以设置好几种,常用的取模方式,该软件都支持。
    在知道了取模方式之后,我们就可以根据取模的方式来编写显示字符的代码了,这里我们
    针对以上取模方式的显示字符代码如下:

    voidOLED_ShowChar(u8x,u8y,u8chr,u8size,u8mode)
    {
    u8temp,t,t1;u8y0=y;chr=chr-'';//得到偏移后的值
    for(t=0;t<size;t  )
    {
    if(size==12)temp=oled_asc2_1206[chr][t];//调用1206字体
    else
    temp=oled_asc2_1608[chr][t];//调用1608字体
    for(t1=0;t1<8;t1  )
    {
    if(temp&0x80)OLED_DrawPoint(x,y,mode);
    elseOLED_DrawPoint(x,y,!mode);
    temp<<=1;
    y  ;
    if((y-y0)==size)
    {y=y0;x  ;break;}
    }
    }
    }
    
    

    我们来看看主函数源码:

    intmain(void)
    {
    u8t;
    delay_init();//延时函数初始化
    NVIC_Configuration();//设置NVIC中断分组2:2位抢占2位响应优先级
    LED_Init();//LED端口初始化
    OLED_Init();//初始化
    OLEDOLED_ShowString(0,0,"0.96'OLEDTEST");
    OLED_ShowString(0,16,"ATOM@ALIENTEK");
    OLED_ShowString(0,32,"2010/06/3");
    OLED_ShowString(0,48,"ASCII:");
    OLED_ShowString(63,48,"CODE:");
    OLED_Refresh_Gram();
    t='';
    while(1)
    {
    OLED_ShowChar(48,48,t,16,1);//显示ASCII字符
    OLED_Refresh_Gram();
    t  ;
    if(t>'~')t='';
    OLED_ShowNum(103,48,t,3,16);//显示ASCII字符的码值
    delay_ms(300);
    LED0=!LED0;
    }
    }
    

    下载验证:
    将代码下载到战舰STM32后,可以看到DS0不停的闪烁,提示程序已经在运行了。最后一行不停的显示ASCII字符以及其码值。

    展开全文
  • OLED屏幕在手机中的应用已逐步从高端旗舰机往中端机型上过渡,OLED屏幕的优势在于每个像素都能独立发光,透光率好,而在显示黑色时像素不发光可自动降低功耗,屏幕能够做到柔性、轻薄,非常适合手机的发展趋势,也...

    a45df8bc7a50364af5a83d16151d0aba.png

    OLED屏幕在手机中的应用已逐步从高端旗舰机往中端机型上过渡,OLED屏幕的优势在于每个像素都能独立发光,透光率好,而在显示黑色时像素不发光可自动降低功耗,屏幕能够做到柔性、轻薄,非常适合手机的发展趋势,也有利于实现更广的可视角度,和丰富的屏幕色彩。

    OLED屏幕材质可分为两大类,一是AMOLED屏幕,以有源驱动为主,采用TFT薄膜电晶体来控制屏幕上的每个像素点,使屏幕自发光。还有一种是PMOLED屏幕,特点是无源驱动,驱动方式与显示器有关,每个像素的发光模式是在短脉冲作用下,瞬间发出高亮度的光。

    AMOLED屏幕的发光元件寿命较长,且电压低,所需能耗较小,不会过度消耗手机电量。另外在性能上,AMOLED屏幕能够实现高分辨率、高亮度、高对比度、高色彩,带来丰富发视觉体验和使用感;在形式上,AMOLED屏幕可实现柔性屏、曲面屏、折叠屏等屏幕样式,为手机屏幕市场注入新鲜活力,打开手机屏幕形态的多种可能性。

    PMOLED屏幕的结构简单、响应速度快,但是发光时所需电压较大,因此需要更多的电量来支撑,只在微型设备上有优势,应用尺寸也局限于5寸内,不适合用于大屏智能手机上。

    手机OLED屏幕的两种材质,目前主要以AMOLED屏幕为主,也可将之简称为OLED。手机OLED屏幕不仅可以实现多种屏幕形态,还能支持屏下指纹模组、屏下摄像头的应用,手机大屏化、轻薄化的发展也离不开OLED屏幕,可见OLED屏幕性能的优越。手机OLED屏幕在制造中,必须要经过性能测试,如此才能更好的应用于手机上。

    OLED屏幕测试所需电流较大,而连接屏幕的BTB连接器pitch值又较小,因此需要用到弹片微针模组。在电流传输时,弹片微针模组可过50A的大电流,在1-50A的范围内,电流流通都很稳定;在小pitch领域,弹片微针模组可适应0.15mm-0.4mm之间的pitch值,能保持长期稳定的连接,不卡pin、不断针,导通性能很好,能大大提高手机OLED屏幕的测试效率。

    原文来自凯智通微电子手机OLED屏幕特点及材质分类,弹片微针模组可应对OLED屏幕测试

    展开全文
  • OLED屏幕在手机中的应用已逐步从高端旗舰机往中端机型上过渡,OLED屏幕的优势在于每个像素都能独立发光,透光率好,而在显示黑色时像素不发光可自动降低功耗,屏幕能够做到柔性、轻薄,非常适合手机的发展趋势,也...
  • 鸿蒙系统 OLED屏幕驱动

    千次阅读 2020-10-03 11:37:48
    Hispark WiFi开发套件又提供一个oled屏幕,但是鸿蒙源码中没有这个屏幕的驱动,我们需要自己去移植。 经过一晚上的调试,现在终于在鸿蒙系统上实现OLED屏幕的显示了,效果如下: 这里记录一下移植的过程 (1)编写...
  • 关于arduino对OLED的开发程序,7针的0.96OLED屏幕完美显示的开发
  • 8266驱动OLED屏幕显示天气,有代码,固件,详细说明文档
  • 电视选xdr还是oled屏幕这些点很重要看过你就懂了 http://www.adiannao.cn/dw OLED屏幕:采用非常薄的有机材料涂层和玻璃基板(或柔性有机基板),当有电流通过时,这些有机材料就会发光。 AMOLED屏幕:AMOLED具有...
  • STM32掌机驱动OLED屏幕

    2019-01-18 13:56:31
    使用STM32F103驱动IIC的0.96OLED屏幕,可以显示英文,汉字与不大于128*64像素的图片
  • OLED 屏幕的使用

    2021-01-01 16:40:53
    #OLED 屏幕的使用(arduino) oled有两种接线方式:SPI和IIc,本文采用的OLED连接方式为SPI四线 使用的设备为:Arduino UNO 0.96寸 OLED-128X64 SPI 接口 oled的原理与LCD相同,点亮每个像素点组成图形. 对于特殊字符图形...
  • 32直流电机测速OLED屏幕.rar
  • STM32F103使用硬件IIC操作OLED屏幕,适用于各类OLED屏幕
  • oled屏幕模块

    2018-07-04 21:22:00
    oled屏幕模块似乎是厂家提供的 也许可以根据屏幕驱动芯片去写 根据现在了解的芯片一般有两个:SH1106和SSD1306 不过这次我们用的是SSD1306芯片驱动的屏幕 下面是从裸屏到模块的pcb: 有...
  • OLED屏幕和LCD屏幕的区别与优劣

    千次阅读 多人点赞 2019-11-11 17:40:47
    随着科技越来越多的手机用上了OLED屏幕,大家也开始逐渐了解起来了手机的屏幕,这篇文章呢将会用最简单的语言和图片,告诉你OLED屏幕和LCD屏幕究竟有什么差别。 要知道OLED屏幕 和 LCD屏幕的区别,我们需要从运行...
  • 今天我们先聊聊OLED屏幕那些次像素有趣的排列方式。    我们先回顾下面这张屏幕技术体系架构图:    屏幕技术对应屏幕结构关系图  我们今天的重点内容为倒数第二列内容的上半...
  • STM32 OLED屏幕 显示测试程序,并且带编码器程序,编码器计算结果显示在屏幕上,有问题请联系我QQ1056247163
  • 利用arduino板子在mixly编程,在0.96 OLED 屏幕上显示温湿度传感器所采集的数据。 利用arduino板子在mixly编程,在0.96 OLED 屏幕上显示温湿度传感器所采集的数据。
  • ips与AM-OLED屏幕的比较.pdfpdf,ips与AM-OLED屏幕的比较.pdf
  • 七针OLED屏幕Hal库驱动显示函数,完整工程,使用的是正点原子的精英版测试的代码,可移植性强,已经单独用一个文件夹存放OLED的代码 本次的测试是1.3寸OLED屏幕
  • 0.96寸的OLED 屏幕通过串口发送图片16位数据显示程序。 stm32单片机,usart1管脚,上位机通过串口助手调试发送1024位数据。 先通过取模软件取模,在复制到word中,去掉段落符,否则助手不会发送,而且还会使接收到...
  • stm32 f103c8t6 IIC 驱动oled屏幕 亲测有效 关注bilibili个人账号号 在b站公告免费获取百度网盘下载链接
  • STM32F103C8T6-OLED屏幕显示含主要代码、参考程序、相关资料
  • webee cc2530单片机测试中景园的OLED屏幕代码,由于市面上关于cc2530的代码太少,十分不方便,算是贡献一份力量吧
  • BME_sensor_with_OLED_display 这使用BME传感器在OLED屏幕上显示天气值
  • arduino如何加载OLED屏幕库 使用arduino之OLED显示篇包含(SSD1306、SH1106、UC1611及各种常用OLED) arduino之所以火爆,很大一部分原因是由于它拓展一款外设非常方便,调用的过程也很简单,而今天我主要是给大家推荐...
  • OLED 屏幕上显示时需要加载的楷体字体文件

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,954
精华内容 781
关键字:

oled屏幕