打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
stm32HAL库IIC 的0.96OLED屏幕驱动,可直接用不需要改
  • #include "oled.h"
  • #include "ascii.h"
  • #include "main.h"
  • #include "stm32f1xx_hal.h"
  • void WriteCmd(unsigned char I2C_Command)//写命令
  • {

  •                 HAL_I2C_Mem_Write(&hi2c1,OLED0561_ADD,COM,I2C_MEMADD_SIZE_8BIT,&I2C_Command,1,100);
  •         
  • }
  •                
  • void WriteDat(unsigned char I2C_Data)//写数据

  • {

  •                 HAL_I2C_Mem_Write(&hi2c1,OLED0561_ADD,DAT,I2C_MEMADD_SIZE_8BIT,&I2C_Data,1,100);
  •         
  •   }

  •         void OLED_Init(void)
  • {
  •         HAL_Delay(100); //这里的延时很重要
  •         
  •         WriteCmd(0xAE); //display off
  •         WriteCmd(0x20);        //Set Memory Addressing Mode        
  •         WriteCmd(0x10);        //00,Horizontal Addressing Mode;01,Vertical Addressing Mode;10,Page Addressing Mode (RESET);11,Invalid
  •         WriteCmd(0xb0);        //Set Page Start Address for Page Addressing Mode,0-7
  •         WriteCmd(0xc8);        //Set COM Output Scan Direction
  •         WriteCmd(0x00); //---set low column address
  •         WriteCmd(0x10); //---set high column address
  •         WriteCmd(0x40); //--set start line address
  •         WriteCmd(0x81); //--set contrast control register
  •         WriteCmd(0xff); //亮度调节 0x00~0xff
  •         WriteCmd(0xa1); //--set segment re-map 0 to 127
  •         WriteCmd(0xa6); //--set normal display
  •         WriteCmd(0xa8); //--set multiplex ratio(1 to 64)
  •         WriteCmd(0x3F); //
  •         WriteCmd(0xa4); //0xa4,Output follows RAM content;0xa5,Output ignores RAM content
  •         WriteCmd(0xd3); //-set display offset
  •         WriteCmd(0x00); //-not offset
  •         WriteCmd(0xd5); //--set display clock divide ratio/oscillator frequency
  •         WriteCmd(0xf0); //--set divide ratio
  •         WriteCmd(0xd9); //--set pre-charge period
  •         WriteCmd(0x22); //
  •         WriteCmd(0xda); //--set com pins hardware configuration
  •         WriteCmd(0x12);
  •         WriteCmd(0xdb); //--set vcomh
  •         WriteCmd(0x20); //0x20,0.77xVcc
  •         WriteCmd(0x8d); //--set DC-DC enable
  •         WriteCmd(0x14); //
  •         WriteCmd(0xaf); //--turn on oled panel
  • }

  • void OLED_SetPos(unsigned char x, unsigned char y) //设置起始点坐标
  • {
  •         WriteCmd(0xb0+y);
  •         WriteCmd(((x&0xf0)>>4)|0x10);
  •         WriteCmd((x&0x0f)|0x01);
  • }

  • void OLED_Fill(unsigned char fill_Data)//全屏填充
  • {
  •         unsigned char m,n;
  •         for(m=0;m<8;m++)
  •         {
  •                 WriteCmd(0xb0+m);                //page0-page1
  •                 WriteCmd(0x00);                //low column start address
  •                 WriteCmd(0x10);                //high column start address
  •                 for(n=0;n<128;n++)
  •                         {
  •                                 WriteDat(fill_Data);
  •                         }
  •         }
  • }


  • void OLED_CLS(void)//清屏
  • {
  •         OLED_Fill(0x00);
  • }

  • void OLED_ON(void)
  • {
  •         WriteCmd(0X8D);  //设置电荷泵
  •         WriteCmd(0X14);  //开启电荷泵
  •         WriteCmd(0XAF);  //OLED唤醒
  • }

  • void OLED_OFF(void)
  • {
  •         WriteCmd(0X8D);  //设置电荷泵
  •         WriteCmd(0X10);  //关闭电荷泵
  •         WriteCmd(0XAE);  //OLED休眠
  • }


  • // Parameters     : x,y -- 起始点坐标(x:0~127, y:0~7); ch[] -- 要显示的字符串; TextSize -- 字符大小(1:6*8 ; 2:8*16)
  • // Description    : 显示codetab.h中的ASCII字符,有6*8和8*16可选择
  • void OLED_ShowStr(unsigned char x, unsigned char y, unsigned char ch[], unsigned char TextSize)
  • {
  •         unsigned char c = 0,i = 0,j = 0;
  •         switch(TextSize)
  •         {
  •                 case 1:
  •                 {
  •                         while(ch[j] != '\0')
  •                         {
  •                                 c = ch[j] - 32;
  •                                 if(x > 126)
  •                                 {
  •                                         x = 0;
  •                                         y++;
  •                                 }
  •                                 OLED_SetPos(x,y);
  •                                 for(i=0;i<6;i++)
  •                                         WriteDat(F6x8[c][i]);
  •                                 x += 6;
  •                                 j++;
  •                         }
  •                 }break;
  •                 case 2:
  •                 {
  •                         while(ch[j] != '\0')
  •                         {
  •                                 c = ch[j] - 32;
  •                                 if(x > 120)
  •                                 {
  •                                         x = 0;
  •                                         y++;
  •                                 }
  •                                 OLED_SetPos(x,y);
  •                                 for(i=0;i<8;i++)
  •                                         WriteDat(F8X16[c*16+i]);
  •                                 OLED_SetPos(x,y+1);
  •                                 for(i=0;i<8;i++)
  •                                         WriteDat(F8X16[c*16+i+8]);
  •                                 x += 8;
  •                                 j++;
  •                         }
  •                 }break;
  •         }
  • }


  • // Parameters     : x,y -- 起始点坐标(x:0~127, y:0~7); N:汉字在.h中的索引
  • // Description    : 显示ASCII_8x16.h中的汉字,16*16点阵
  • void OLED_ShowCN(unsigned char x, unsigned char y, unsigned char N)
  • {
  •         unsigned char wm=0;
  •         unsigned int  adder=32*N;
  •         OLED_SetPos(x , y);
  •         for(wm = 0;wm < 16;wm++)
  •         {
  •                 WriteDat(F16x16[adder]);
  •                 adder += 1;
  •         }
  •         OLED_SetPos(x,y + 1);
  •         for(wm = 0;wm < 16;wm++)
  •         {
  •                 WriteDat(F16x16[adder]);
  •                 adder += 1;
  •         }
  • }



  • // Parameters     : x0,y0 -- 起始点坐标(x0:0~127, y0:0~7); x1,y1 -- 起点对角线(结束点)的坐标(x1:1~128,y1:1~8)
  • // Description    : 显示BMP位图
  • void OLED_DrawBMP(unsigned char x0,unsigned char y0,unsigned char x1,unsigned char y1,unsigned char BMP[])
  • {
  •         unsigned int j=0;
  •         unsigned char x,y;

  •   if(y1%8==0)
  •                 y = y1/8;
  •   else
  •                 y = y1/8 + 1;
  •         for(y=y0;y<y1;y++)
  •         {
  •                 OLED_SetPos(x0,y);
  •     for(x=x0;x<x1;x++)
  •                 {
  •                         WriteDat(BMP[j++]);
  •                 }
  •         }
  • }






  • void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size)
  • {              
  •         unsigned char c=0,i=0;        
  •                 c=chr-' ';//得到偏移后的值                        
  •                 if(x>128-1){x=0;y=y+2;}
  •                 if(Char_Size ==16)
  •                         {
  •                         OLED_SetPos(x,y);        
  •                         for(i=0;i<8;i++)
  •                         WriteDat(F8X16[c*16+i]);
  •                         OLED_SetPos(x,y+1);
  •                         for(i=0;i<8;i++)
  •                         WriteDat(F8X16[c*16+i+8]);
  •                         }
  •                         else {        
  •                                 OLED_SetPos(x,y);
  •                                 for(i=0;i<6;i++)
  •                                 WriteDat(F6x8[c][i]);
  •                                 
  •                         }
  • }
  • u32 oled_pow(u8 m,u8 n)
  • {
  •         u32 result=1;         
  •         while(n--)result*=m;   
  •         return result;
  • ……………………
  • 本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
    打开APP,阅读全文并永久保存 查看更多类似文章
    猜你喜欢
    类似文章
    【热】打开小程序,算一算2024你的财运
    520了,用32做个简单的小程序
    高通字库芯片GT20L16S1Y驱动 0.96寸 OLED 任意显示中文
    AT24C02的读写程序
    基于STM32驱动IIC0.96寸OLED屏 底层驱动+菜单程序源码
    12864设置CGRAM显示自定义图形(或文字)
    使用74LS164和74LS165实现简单I/O扩展
    更多类似文章 >>
    生活服务
    热点新闻
    分享 收藏 导长图 关注 下载文章
    绑定账号成功
    后续可登录账号畅享VIP特权!
    如果VIP功能使用有故障,
    可点击这里联系客服!

    联系客服