网站建设公司为什么没有官网,购物网站推广案例,怎么营销一个产品,个人域名免费网站一、介绍
OLED是有机发光二极管#xff0c;又称为有机电激光显示#xff08;Organic Electroluminescence Display#xff0c; OLED#xff09;。OLED由于同时具备自发光#xff0c;不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广…一、介绍
OLED是有机发光二极管又称为有机电激光显示Organic Electroluminescence Display OLED。OLED由于同时具备自发光不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广、构造及制程较简单等优异之特性被认为是下一代的平面显示器新兴应用技术
OLED屏幕特点
1.模块尺寸23.7 *23.8mm
2.电源电压3.3-5.5V
3.驱动芯片SSD1306
4.测试平台提供 k60/k10,9s12XS128,51,stm32stm8等单片机
OLED屏幕接线说明 OLED屏幕显存
OLED本身是没有显存的他的现存是依赖SSD1306提供的而SSD1306提供一块显存。
SSD1306显存总共为128*64bit大小SSD1306将这些显存分成了8页。每页包含了128个字节。
OLED屏幕原理
STM32内部建立一个缓存(共128*8个字节每次修改的时候只是修改STM32上的缓存(实际上就是SRAM)修改完后一次性把STM32上的缓存数据写入到OLED的GRAM。这个方法也有坏处对于SRAM很小的单片机51系列就比较麻烦。
STM32CubeMX配置
我们这里OLED用的是硬件驱动的既然单片机有这个硬件资源我们就不要消耗CPU的算力使用软驱了在CubeMX中打开I2C后可以配置成快速和慢速的快速的刷新的非常快速度大概是普通的四倍 程序设计 OLED.C
/*** 基于硬件IIC通信的OLED驱动程序* API完全打包好的直接选择你的硬件IIC口即可**/
#include main.h
#include i2c.h
#include stdio.h
#include oled_font.h
#include oled.huint8_t OLED_Buffer[8][128]{0};/*** brief OLED写命令* param Command 要写入的命令* retval 无*/
void OLED_WriteCommand(uint8_t Command)
{uint8_t *pData;pData Command;HAL_I2C_Mem_Write(Hardware_IIC_No,0x78,0x00,I2C_MEMADD_SIZE_8BIT,pData,1,100);
}/*** brief OLED写数据* param Data 要写入的数据* retval 无*/
void OLED_WriteData(uint8_t Data)
{uint8_t *pData;pData Data;HAL_I2C_Mem_Write(Hardware_IIC_No,0x78,0x40,I2C_MEMADD_SIZE_8BIT,pData,1,100);}/*** brief OLED设置光标位置* param Y 以左上角为原点向下方向的坐标范围0~7* param X 以左上角为原点向右方向的坐标范围0~127* retval 无*/
void OLED_SetCursor(uint8_t Y, uint8_t X)
{OLED_WriteCommand(0xB0 | Y); //设置Y位置OLED_WriteCommand(0x10 | ((X 0xF0) 4)); //设置X位置低4位OLED_WriteCommand(0x00 | (X 0x0F)); //设置X位置高4位
}/*** brief OLED清屏* param 无* retval 无*/
void OLED_Clear(void)
{uint8_t i, j;for (j 0; j 8; j){OLED_SetCursor(j, 0);for(i 0; i 128; i){OLED_WriteData(0x00);}}
}/*** brief OLED显示一个字符* param Line 行位置范围1~4* param Column 列位置范围1~16* param Char 要显示的一个字符范围ASCII可见字符* retval 无*/
void OLED_ShowChar(uint8_t Line, uint8_t Column, char Char)
{uint8_t i;OLED_SetCursor((Line - 1) * 2, (Column - 1) * 8); //设置光标位置在上半部分for (i 0; i 8; i){OLED_WriteData(OLED_F8x16[Char - ][i]); //显示上半部分内容}OLED_SetCursor((Line - 1) * 2 1, (Column - 1) * 8); //设置光标位置在下半部分for (i 0; i 8; i){OLED_WriteData(OLED_F8x16[Char - ][i 8]); //显示下半部分内容}
}/*** brief OLED显示字符串* param Line 起始行位置范围1~4* param Column 起始列位置范围1~16* param String 要显示的字符串范围ASCII可见字符* retval 无*/
void OLED_ShowString(uint8_t Line, uint8_t Column, char *String)
{uint8_t i;for (i 0; String[i] ! \0; i){OLED_ShowChar(Line, Column i, String[i]);}
}/*** brief OLED次方函数* retval 返回值等于X的Y次方*/
uint32_t OLED_Pow(uint32_t X, uint32_t Y)
{uint32_t Result 1;while (Y--){Result * X;}return Result;
}/*** brief OLED显示数字十进制正数* param Line 起始行位置范围1~4* param Column 起始列位置范围1~16* param Number 要显示的数字范围0~4294967295* param Length 要显示数字的长度范围1~10* retval 无*/
void OLED_ShowNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length)
{uint8_t i;for (i 0; i Length; i){OLED_ShowChar(Line, Column i, Number / OLED_Pow(10, Length - i - 1) % 10 0);}
}/*** brief OLED显示数字十进制带符号数* param Line 起始行位置范围1~4* param Column 起始列位置范围1~16* param Number 要显示的数字范围-2147483648~2147483647* param Length 要显示数字的长度范围1~10* retval 无*/
void OLED_ShowSignedNum(uint8_t Line, uint8_t Column, int32_t Number, uint8_t Length)
{uint8_t i;uint32_t Number1;if (Number 0){OLED_ShowChar(Line, Column, );Number1 Number;}else{OLED_ShowChar(Line, Column, -);Number1 -Number;}for (i 0; i Length; i){OLED_ShowChar(Line, Column i 1, Number1 / OLED_Pow(10, Length - i - 1) % 10 0);}
}/*** brief OLED显示数字十六进制正数* param Line 起始行位置范围1~4* param Column 起始列位置范围1~16* param Number 要显示的数字范围0~0xFFFFFFFF* param Length 要显示数字的长度范围1~8* retval 无*/
void OLED_ShowHexNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length)
{uint8_t i, SingleNumber;for (i 0; i Length; i){SingleNumber Number / OLED_Pow(16, Length - i - 1) % 16;if (SingleNumber 10){OLED_ShowChar(Line, Column i, SingleNumber 0);}else{OLED_ShowChar(Line, Column i, SingleNumber - 10 A);}}
}/*** brief OLED显示数字二进制正数* param Line 起始行位置范围1~4* param Column 起始列位置范围1~16* param Number 要显示的数字范围0~1111 1111 1111 1111* param Length 要显示数字的长度范围1~16* retval 无*/
void OLED_ShowBinNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length)
{uint8_t i;for (i 0; i Length; i){OLED_ShowChar(Line, Column i, Number / OLED_Pow(2, Length - i - 1) % 2 0);}
}/*** brief OLED显示模拟量* param Line起始位置范围0~3* param Colum 起始列位置0~7* param CHN 汉字序列*/
void OLED_ShowChinese(uint8_t Line, uint8_t Column, uint8_t CHN)
{uint8_t i;OLED_SetCursor(Line*2, Column*16); //设置光标位置在上半部分for (i 0; i 16; i){OLED_WriteData(GBK[CHN][i]); //显示上半部分内容}OLED_SetCursor((Line*2)1,Column*16); //设置光标位置在下半部分for (i 0; i 16; i){OLED_WriteData(GBK[CHN][i 16]); //显示下半部分内容}
}/*** brief OLED显示模拟量* param Pic第几张图片范围0~3* param Colum 起始列位置0~7**/
void OLED_ShowPicture(uint8_t Pic)
{uint8_t i,j;PicPic*8;for(j0;j8;j){OLED_SetCursor(j,0);//开始显示for (i 0; i 128; i){OLED_WriteData(Picture[jPic][i]); //发送数据}}
}
/** 快速显示照片*/
void OLED_FastShowPicture(uint8_t Pic)
{uint8_t i,j;PicPic*8;for(j0;j8;j){for (i 0; i 128; i){OLED_Buffer[j][i](Picture[jPic][i]); //发送数据}}
}
/** brief 向缓冲区写入字符数据* Line 1~4;* Column 1~16;*/
void OLED_FastShowChar(uint8_t Line, uint8_t Column, char Char)
{uint8_t i;for (i 0; i 8; i){OLED_Buffer[(Line- 1) * 2][(Column-1)*8i] OLED_F8x16[Char - ][i];//显示上半部分内容}for (i 0; i 8; i){OLED_Buffer[((Line ) * 2) - 1][(Column-1)*8i] OLED_F8x16[Char - ][i8]; //显示下半部分内容}
}
/*** brief 快速的OLED显示字符串* param Line 起始行位置范围1~4* param Column 起始列位置范围1~16* param String 要显示的字符串范围ASCII可见字符* retval 无*/
void OLED_FastShowString(uint8_t Line, uint8_t Column, char *String)
{uint8_t i;for (i 0; String[i] ! \0; i){OLED_FastShowChar(Line, Column i, String[i]);}
}
/*** brief 快速的OLED显示数字* param Line 起始行位置范围1~4* param Column 起始列位置范围1~16* param Number 要显示的字数字范围数字变量* param Length 数字长度* retval 无*/
void OLED_FastShowNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length)
{uint8_t i;for (i 0; i Length; i){OLED_FastShowChar(Line, Column i, Number / OLED_Pow(10, Length - i - 1) % 10 0);}
}
/** brief 向OLED屏幕发送缓存区数据到OLED的0x40寄存器位置用以显示*/
void Refresh()
{uint8_t j;uint8_t *pData;for(j0;j8;j){pData OLED_Buffer[j][0];OLED_SetCursor(j,0);//开始显示HAL_I2C_Mem_Write(Hardware_IIC_No,0x78,0x40,I2C_MEMADD_SIZE_8BIT,pData,128,0xff);}
}
/*** brief OLED初始化* param 无* retval 无*/
void OLED_Init(void)
{HAL_Delay(200);OLED_WriteCommand(0xAE); //关闭显示OLED_WriteCommand(0xD5); //设置显示时钟分频比/振荡器频率OLED_WriteCommand(0x80);OLED_WriteCommand(0xA8); //设置多路复用率OLED_WriteCommand(0x3F);OLED_WriteCommand(0xD3); //设置显示偏移OLED_WriteCommand(0x00);OLED_WriteCommand(0x40); //设置显示开始行OLED_WriteCommand(0xA1); //设置左右方向0xA1正常 0xA0左右反置OLED_WriteCommand(0xC8); //设置上下方向0xC8正常 0xC0上下反置OLED_WriteCommand(0xDA); //设置COM引脚硬件配置OLED_WriteCommand(0x12);OLED_WriteCommand(0x81); //设置对比度控制OLED_WriteCommand(0xCF);OLED_WriteCommand(0xD9); //设置预充电周期OLED_WriteCommand(0xF1);OLED_WriteCommand(0xDB); //设置VCOMH取消选择级别OLED_WriteCommand(0x30);OLED_WriteCommand(0xA4); //设置整个显示打开/关闭OLED_WriteCommand(0xA6); //设置正常/倒转显示OLED_WriteCommand(0x8D); //设置充电泵OLED_WriteCommand(0x14);OLED_WriteCommand(0xAF); //开启显示OLED_Clear(); //OLED清屏
}
OLED.H
#ifndef __OLED_H
#define __OLED_H#include main.h#define Hardware_IIC_No hi2c1 /*选择自己使用的IIC号码*/void OLED_Init(void);
void OLED_Clear(void);
void OLED_ShowChar(uint8_t Line, uint8_t Column, char Char);//显示字符
void OLED_ShowString(uint8_t Line, uint8_t Column, char *String);//字符串
void OLED_ShowNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length);//数字
void OLED_ShowSignedNum(uint8_t Line, uint8_t Column, int32_t Number, uint8_t Length);//负数
void OLED_ShowHexNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length);//16进制数
void OLED_ShowBinNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length);//二进制数
void OLED_ShowChinese(uint8_t Line, uint8_t Column, uint8_t CHN);
void OLED_ShowPicture(uint8_t Pic);//满屏幕显示照片
void OLED_FastShowPicture(uint8_t Pic);
void OLED_FastShowChar(uint8_t Line, uint8_t Column, char Char);
void OLED_FastShowString(uint8_t Line, uint8_t Column, char *String);
void OLED_FastShowNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length);
void Refresh(void);
void DMA_Refresh(void);
uint32_t OLED_Pow(uint32_t X, uint32_t Y);#endif 文章转载自: http://www.morning.wkxsy.cn.gov.cn.wkxsy.cn http://www.morning.crsqs.cn.gov.cn.crsqs.cn http://www.morning.zrmxp.cn.gov.cn.zrmxp.cn http://www.morning.lptjt.cn.gov.cn.lptjt.cn http://www.morning.rqfkh.cn.gov.cn.rqfkh.cn http://www.morning.kcypc.cn.gov.cn.kcypc.cn http://www.morning.shuangxizhongxin.cn.gov.cn.shuangxizhongxin.cn http://www.morning.mxlwl.cn.gov.cn.mxlwl.cn http://www.morning.dtmjn.cn.gov.cn.dtmjn.cn http://www.morning.dqxnd.cn.gov.cn.dqxnd.cn http://www.morning.qxwwg.cn.gov.cn.qxwwg.cn http://www.morning.syfty.cn.gov.cn.syfty.cn http://www.morning.nkbfc.cn.gov.cn.nkbfc.cn http://www.morning.hkchp.cn.gov.cn.hkchp.cn http://www.morning.rrxnz.cn.gov.cn.rrxnz.cn http://www.morning.lkbyq.cn.gov.cn.lkbyq.cn http://www.morning.pbwcq.cn.gov.cn.pbwcq.cn http://www.morning.qyhcg.cn.gov.cn.qyhcg.cn http://www.morning.tkzrh.cn.gov.cn.tkzrh.cn http://www.morning.lxqkt.cn.gov.cn.lxqkt.cn http://www.morning.ctpfq.cn.gov.cn.ctpfq.cn http://www.morning.ctlzf.cn.gov.cn.ctlzf.cn http://www.morning.sffkm.cn.gov.cn.sffkm.cn http://www.morning.gfqj.cn.gov.cn.gfqj.cn http://www.morning.ymrq.cn.gov.cn.ymrq.cn http://www.morning.tndxg.cn.gov.cn.tndxg.cn http://www.morning.ndtzy.cn.gov.cn.ndtzy.cn http://www.morning.kgqpx.cn.gov.cn.kgqpx.cn http://www.morning.rnht.cn.gov.cn.rnht.cn http://www.morning.nfbkp.cn.gov.cn.nfbkp.cn http://www.morning.tcsdlbt.cn.gov.cn.tcsdlbt.cn http://www.morning.qrwjb.cn.gov.cn.qrwjb.cn http://www.morning.wjlkz.cn.gov.cn.wjlkz.cn http://www.morning.znqztgc.cn.gov.cn.znqztgc.cn http://www.morning.kjfsd.cn.gov.cn.kjfsd.cn http://www.morning.xqxlb.cn.gov.cn.xqxlb.cn http://www.morning.knmp.cn.gov.cn.knmp.cn http://www.morning.qllcm.cn.gov.cn.qllcm.cn http://www.morning.wfzlt.cn.gov.cn.wfzlt.cn http://www.morning.yyngs.cn.gov.cn.yyngs.cn http://www.morning.bmlcy.cn.gov.cn.bmlcy.cn http://www.morning.nmkbl.cn.gov.cn.nmkbl.cn http://www.morning.kdnrc.cn.gov.cn.kdnrc.cn http://www.morning.cpmwg.cn.gov.cn.cpmwg.cn http://www.morning.hcrxn.cn.gov.cn.hcrxn.cn http://www.morning.xbwqg.cn.gov.cn.xbwqg.cn http://www.morning.clndl.cn.gov.cn.clndl.cn http://www.morning.zzfqn.cn.gov.cn.zzfqn.cn http://www.morning.jrkzk.cn.gov.cn.jrkzk.cn http://www.morning.prjty.cn.gov.cn.prjty.cn http://www.morning.plhhd.cn.gov.cn.plhhd.cn http://www.morning.fldk.cn.gov.cn.fldk.cn http://www.morning.hprmg.cn.gov.cn.hprmg.cn http://www.morning.mxlwl.cn.gov.cn.mxlwl.cn http://www.morning.ptwzy.cn.gov.cn.ptwzy.cn http://www.morning.dhwyl.cn.gov.cn.dhwyl.cn http://www.morning.tssmk.cn.gov.cn.tssmk.cn http://www.morning.nzsdr.cn.gov.cn.nzsdr.cn http://www.morning.ghpld.cn.gov.cn.ghpld.cn http://www.morning.tfwsk.cn.gov.cn.tfwsk.cn http://www.morning.grbp.cn.gov.cn.grbp.cn http://www.morning.llxqj.cn.gov.cn.llxqj.cn http://www.morning.tjcgl.cn.gov.cn.tjcgl.cn http://www.morning.bzcjx.cn.gov.cn.bzcjx.cn http://www.morning.mjzgg.cn.gov.cn.mjzgg.cn http://www.morning.zwyuan.com.gov.cn.zwyuan.com http://www.morning.kfbth.cn.gov.cn.kfbth.cn http://www.morning.llfwg.cn.gov.cn.llfwg.cn http://www.morning.lmfxq.cn.gov.cn.lmfxq.cn http://www.morning.lfdrq.cn.gov.cn.lfdrq.cn http://www.morning.kfclh.cn.gov.cn.kfclh.cn http://www.morning.rgyts.cn.gov.cn.rgyts.cn http://www.morning.xnlj.cn.gov.cn.xnlj.cn http://www.morning.hxcrd.cn.gov.cn.hxcrd.cn http://www.morning.fhrt.cn.gov.cn.fhrt.cn http://www.morning.ydxg.cn.gov.cn.ydxg.cn http://www.morning.mhpmw.cn.gov.cn.mhpmw.cn http://www.morning.kjcfz.cn.gov.cn.kjcfz.cn http://www.morning.ktblf.cn.gov.cn.ktblf.cn http://www.morning.bpmdn.cn.gov.cn.bpmdn.cn