STM32-OLED屏幕显示教程

2023-05-16

目录

1.OLED屏幕介绍

2.OLED屏幕显示一个点的思路

3.配置OLED屏幕

4.OLED显示字符串

5.OLED屏幕显示汉字

6.OLED屏幕显示图片

7.总结


我的上篇文章已经介绍过IIC协议(本篇文章不对IIC协议做过多赘述),这篇文章对我在学习OLED屏幕的时候做的一个总结。

1.OLED屏幕介绍

OLED即有机发光管(Organic Light-Emitting Diode,OLED)。OLED显示技术具有自发光、广视角、几乎无穷高的对比度、较低功耗、极高反应速度、可用于绕曲性面板、使用温度范围广、构造及制程简单等有点,被认为是下一代的平面显示屏新兴应用技术。

OLED显示和传统的LCD显示不同,其可以自发光,所以不需要背光灯,这使得OLED显示屏相对于LCD显示屏尺寸更薄,同时显示效果更优。 常用的OLED屏幕有蓝色、黄色、白色等几种。屏的大小为0.96寸,像素点为 128*64,所以我们称为0.96oled屏或者12864屏。

OLED屏幕特点

1.模块尺寸:23.7 *23.8mm

2.电源电压:3.3-5.5V

3.驱动芯片:SSD1306

4.测试平台:提供       k60/k10,9s12XS128,51,stm32,stm8等单片机  

OLED屏幕接线说明

 OLED屏幕显存

OLED本身是没有显存的,他的现存是依赖SSD1306提供的,而SSD1306提供一块显存。

SSD1306显存总共为128*64bit大小,SSD1306将这些显存分成了8页。每页包含了128个字节。

OLED屏幕原理

STM32内部建立一个缓存(共128*8个字节),每次修改的时候,只是修改STM32上的缓存(实际上就是SRAM),修改完后一次性把STM32上的缓存数据写入到OLED的GRAM。这个方法也有坏处,对于SRAM很小的单片机(51系列)就比较麻烦。

OLED屏幕常用指令

  · 命令0X81: 设置对比度。包含两个字节,第一个0X81为命令,随后方法是的一个字节要设置这个对比度,值越大屏幕越亮。

 ·命令0XAE/0XAF: 0XAE为关闭显示命令,0XAF为开启显示命令

 ·0X8D: 包含两个字节,第一个为命令字,第二个为设置值,第二个字节的BIT2表示电荷泵的开关状态,该位为1开启电荷泵,为0则关闭。模块初始化的时候,这个必须要开启,否则看不到屏幕显示。

  ·命令0XB0~B7:用于设置页地址,其低三位的值对应GRAM页地址。

  ·命令0X00~0X0F:用于设置显示时的起始列地址低四位。

  ·命令0X10~0X1F: 用于设置显示时的起始列地址高四位。

2.OLED屏幕显示一个点的思路

OLED屏幕分为页寻址模式,水平地址模式,垂直地址模式。

这里主要介绍用的最多的页寻址模式,页寻址模式如下图,把整个OLED屏幕分成了八页,说白了就是把OLED的屏幕把宽平均分成了八份。比如想要在第0列第三行的开头显示一个点那就是按位来配置,0000 0100(0x08)。

3.配置OLED屏幕

我们配置硬件IIC的步骤就是根据下面这张时序图,发送一次数据后不断获取不同的应答即可。

 oled.c

硬件IIC配置

#include "stm32f10x.h"
#include "oled.h"

void IIC_Configuration(void)
{
	 GPIO_InitTypeDef  GPIO_InitStructure;
	 I2C_InitTypeDef   I2C_InitStructure;
	
	 RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE	);
     RCC_APB1PeriphClockCmd( RCC_APB1Periph_I2C1, ENABLE	);
	 
	 //PB6--SCL   PB7--SDL
	 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;
	 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
	 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	 GPIO_Init(GPIOB, &GPIO_InitStructure);
	
	 I2C_DeInit(I2C1);
	 I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
	 I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
	 I2C_InitStructure.I2C_ClockSpeed = 400000;
	 I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;
	 I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
	 I2C_InitStructure.I2C_OwnAddress1 = 0x30;
     I2C_Init(I2C1, &I2C_InitStructure);
	 I2C_Cmd(I2C1, ENABLE);

}

void I2C_WriteByte(uint8_t addr,uint8_t data)
{
	while( I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY)); //检查IIC总线是否繁忙
	
	I2C_GenerateSTART(I2C1, ENABLE);  //开启IIC,发送起始信号
	while(!I2C_CheckEvent(I2C1,  I2C_EVENT_MASTER_MODE_SELECT)); //EV5主模式

	I2C_Send7bitAddress(I2C1, OLED_ADDRESS ,  I2C_Direction_Transmitter);  //发送OLED地址
	while(!I2C_CheckEvent(I2C1,  I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)); //检查EV6
	
	I2C_SendData(I2C1, addr); //发送寄存器地址
	while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTING));
	
    I2C_SendData(I2C1, data); //发送数据
	while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTING));

    I2C_GenerateSTOP(I2C1, ENABLE);


}


关于OLED屏幕我们需要写命令函数和写数据函数来填入我们想要的数据。

写命令函数/写数据函数

void WriteCmd(unsigned char IIC_Command)  //写命令
{
	 I2C_WriteByte(0x00,IIC_Command);
}

void WriteDat(unsigned char IIC_Data)  //写数据
{
	 I2C_WriteByte(0x40,IIC_Data);
}

OLED初始化(厂家提供的源码,复制粘贴即可,无需深究)

void OLED_Init(void) //OELD屏幕初始化
{
  delay_ms(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 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);
		WriteCmd(0x00);
		WriteCmd(0x10);
	
	  for(n=0;n<128;n++){
		WriteDat(Fill_Data);
		}
	}
}

清屏

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

打开/关闭OLED

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

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

4.OLED显示字符串

//显示字符串
void OLED_ShowStr(unsigned char x,unsigned char y,unsigned char ch[],unsigned TextSize)
{
    unsigned char c = 0,i = 0,j = 0;
	  switch(TextSize)
		{
			case 1:   //8*16模式
			{
				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:    //16*16模式
			{
			   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;
			
	}
}	

main.c

#include "stm32f10x.h"
#include "main.h"
#include "oled.h"
#include "sys.h"
#include "delay.h"


int main(void)
{
   initSysTick();
   IIC_Configuration();
	 OLED_Init(); 
   delay_ms(1000);
    
   OLED_Fill(0XFF);  //全屏亮
	 delay_ms(1000);
	 OLED_Fill(0X00);  //全屏灭
	 delay_ms(1000);
	
	 OLED_ShowStr( 0,1,"hello world", 1);
	 OLED_ShowStr( 0,2,"hello world", 2);

   while(1)
	 {

	 }
	
}

注:写命令函数,写数据函数,全屏填充函数,示字符串函数等都需要添加到oled.c文件里。

效果展示:

5.OLED屏幕显示汉字

//显示汉字 (x:横坐标  y:纵坐标  N:字数)
void OLED_ShowCN(unsigned char x,unsigned char y,unsigned char N)
{
    unsigned char wm=0;
	  unsigned int addr = 32*N;
		OLED_SetPos(x,y);
    for(wm=0;wm<16;wm++)
	{
		WriteDat( F16X16[addr]);
    addr +=1;	
	}
	 OLED_SetPos(x,y+1);
   for(wm=0;wm<16;wm++)
	{
		WriteDat( F16X16[addr]);
    addr +=1;	
	}

}

接着我们打开取字模软件,输入我们想显示的汉字和大小。在设置中改为C51模式(STM32和51单片机都使用的C51模式)。

 把生成的代码添加进字库当中(OLED_Codetab.h这个文件是我们添加的字库,厂家也会提供)

 

 我们选的是16*16大小的,所以我们把生成的代码粘贴到对应的结构体中。

main.c

#include "stm32f10x.h"
#include "main.h"
#include "oled.h"
#include "sys.h"
#include "delay.h"


int main(void)
{ 
	 unsigned char i=0;
		 
     initSysTick();
     IIC_Configuration();
	 OLED_Init(); //OELD初始化
     delay_ms(1000);
    
     OLED_Fill(0XFF);  //全屏亮
	 delay_ms(1000);
	 OLED_Fill(0X00);  //全屏灭
	 delay_ms(1000);

   while(1)
	{
     for(i=0;i<4;i++){
			 OLED_ShowCN(1+i*16,0,i);
		 }
  }
}

效果展示:

6.OLED屏幕显示图片

//显示图片
//x0:横坐标;y0:纵坐标;x1:图片起点;y1:所占页数;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++]);
		}		
	}
}

选一张照片,保存格式改为.png。

接着大小调整为跟我们的屏幕一样的分辨率。

 

 改完大小之后再保存为BMP格式。

 打开我们的取模软件,各种参数改成如下图所示。

 点击保存后就会生成这样一个文档。

 然后把数组里面的内容粘贴到BMP1的结构体里面。

 效果展示:

7.总结

本篇文章使用的硬件IIC驱动OLED屏幕,大家用软件IIC也可以实现同样的效果,软件IIC的代码可以参考中景园电子的,直接调用中景园封装好的函数即可,对新手也算友好。希望对大家有所帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32-OLED屏幕显示教程 的相关文章

  • 遗忘的初境

    农历八月深夜的黎明朦胧昏黄 xff0c 林立在山雾中的坟地貌似并不太平 xff0c 白露轻风清不走香纸白烛烟气 这层孽障将要带着旧尘怨气破土而出 筹谋着一场突击 这支躲藏在大山幽月中的乡村透着光亮 一双双眼睛凝视着挂在横梁上昏暗的煤灯 泛白
  • 2019-2020-1 20175313 《信息安全系统设计基础》第二周学习总结

    目录 一 教材学习内容总结二 教材学习中的问题和解决过程三 心得体会四 学习进度条五 参考资料 一 教材学习内容总结 第二章内容 基本知识 重点和难点 二 教材学习中的问题和解决过程 问题1 xff1a 对教材49页上的代码进行验证时 xf
  • centos下通过conda安装pytorch

    一 安装anaconda anaconda安装简单 xff0c 只要确定自己的系统即可 xff0c 具体安装请参考这里 二 确定自己的系统版本 我的是centos cat etc redhat release 查看linux系统方法 xff
  • 论文中表格跨页处理

    https www jianshu com p 96a370384459 上面是跨页表格中带有表头的 我希望的样子是跨页不带表头并且第一张表有下横线 xff0c 第二张表有上横线 xff0c 第二张表头有 表XX XX xff08 续表 x
  • Aria2在Windows上如何安装配置使用

    一 下载所需的软件二 安装与使用三 Aria2的额外内容四 Aria2的使用五 Aria2与其它插件配合使用 一 下载所需的软件 可以从一下地址获取最新版本 GitHub xff1a https github com aria2 aria2
  • 银河麒麟操作系统常用问题及解决方法

    银河麒麟操作系统作为国内安全等级较高的国产操作系统 xff0c 很多用户都想自行安装体验 xff0c 自行安装很有可能遇到一些问题 xff0c 现在奉上可能遇到的问题及解决方案 xff0c 用户可自行查阅处理 xff01 xff01 常用问
  • 几种方式加速网页视频播放速度

    现在有不少视频网站 自带了播放加速功能 例如油管 bilibili 慕课等等 节省了很多看视频的时间 特别是看一些技术教程类的视频 不管是念ppt还是手把手演示 在自己付费的一些网站中 一些是自带播放器不支持视频加速的 因为已经被加速惯坏
  • dataframe指定位置插入行

    1 loc 函数可以定位行后 xff0c 并直接赋值插入 如下可见loc函数对直接改变原来行的值 df 61 pd DataFrame 39 动物 39 39 狗 39 39 猫 39 39 兔 39 39 数量 39 3 4 6 prin
  • Linux系统备份与还原

    Linux系统备份与还原 1 整盘备份与还原 1 1 记住几个这里要经常用到操作1 2 整盘克隆的方法 2 推荐 非整盘克隆的方法 2 1 备份系统2 2 还原系统 1 整盘备份与还原 1 1 记住几个这里要经常用到操作 查看存储设备 xf
  • VS2013如何添加LIb库及头文件的步骤

    在VS工程中 xff0c 添加c c 43 43 工程中外部头文件及库的基本步骤 xff1a 1 添加工程的头文件目录 xff1a 工程 属性 配置属性 c c 43 43 常规 附加包含目录 xff1a 加上头文件存放目录 2 添加文件引
  • composer.json和composer.lock到底是什么以及区别?

    composer方文档 xff1a https docs phpcomposer com 04 schema html 我们在做项目的时候 xff0c 总是要安装一些依赖 composer给我们提供了很多方便 直接运行composer in
  • VUE npm run build的项目出现跨域请求的问题npm run dev没有这个问题

    报错信息 Access to XMLHttpRequest at 39 http platformapi test lih elearning cn api v1 login 39 from origin 39 http www vue c
  • PHP message:filesize(): stat failed for 错误

    PHP message filesize stat failed for 错误 message filesize stat failed for F s2017 SinaImgUpload SinaImgUpload bin Debug T
  • PHP 开发者如何做好密码保护 & Laravel 底层密码存储和验证实现

    随着在线攻击的增多 xff0c 密码安全越来越重要 作为开发者我们要担负起安全管理 计算哈希和存储用户密码的责任 xff0c 不管应用是简单的游戏还是绝密商业文件的仓库 xff0c 都要做到这一点 PHP内置了一些工具 xff0c 让保护密
  • python 列表中的数字转为字符串

    1 list1 61 1 2 3 4 5 list1 61 str x for x in list1 2 list1 61 1 2 3 4 5 list1 61 list map str list1 转载于 https www cnblog
  • 恩尼格码的发明和破解

    恩尼格码是二战德军所采用的电子加密机械 其基本组成可以分为三部分 xff1a 键盘 xff0c 转子和显示器 键盘一共具有26个键 xff0c 类似于今天的计算机键盘 xff08 显示起见 xff0c 省略为6个 xff09 转子实际上有3
  • 得力D991CN Plus计算器评测(全程对比卡西欧fx-991CN X)

    得力在2018年出了一款高仿卡西欧fx 991CN X中文版的计算器 xff0c 型号为D991CN Plus xff0c 在实现同样功能的前提下 xff0c 网销价格是卡西欧的三分之一左右 但是这款计算器与卡西欧正版计算器差距是大是小 x
  • 网络机顶盒固件提取、编辑和打包

    提取的话 xff0c 这边有一篇文章可能有用https www znds com tv 649509 1 1 html 首先下载下载来的固件一般是img格式的 xff0c 可以到hdpfans com这个连接下载一个androidTool的
  • 从微软官网下载VisualStudio离线包

    首先要下载VS安装器 xff0c 有社区版 专业版 企业版 xff0c 此处以社区版为例 不同版本的VS xff0c 只需要将cmd命令中exe名称换掉就行了 仅C VisualStudioSetup exe layout D Layout
  • 基于STM32之UART串口通信协议(一)详解

    一 前言 1 简介 写的这篇博客 xff0c 是为了简单讲解一下UART通信协议 xff0c 以及UART能够实现的一些功能 xff0c 还有有关使用STM32CubeMX来配置芯片的一些操作 xff0c 在后面我会以我使用的STM32F4

随机推荐

  • Java内存分配及值、引用的传递

    关于堆栈的内容网上已经有很多资料了 xff0c 这是我找的加上自己理解的一篇说明文 xff1a 一 内存区域类型 1 寄存器 xff1a 最快的存储区 由编译器根据需求进行分配 我们在程序中无法控制 xff1b 2 栈 xff1a 存放基本
  • NEMA-0183(GPRMC GPGGA)详细解释

    NEMA 0183 GPRMC GPGGA 详细解释 nmea数据如下 xff1a GPGGA 121252 000 3937 3032 N 11611 6046 E 1 05 2 0 45 9 M 5 7 M 0000 77 GPRMC
  • [转]printf 函数实现的深入剖析

    研究printf的实现 xff0c 首先来看看printf函数的函数体 int printf const char fmt int i char buf 256 va list arg 61 va list char amp fmt 43
  • http_parser

    最近读了 http parser 的源码 xff0c 记录下 有意思的地方 xff1a 1 协议解析可以不完全解析完 xff0c 但是当前 parser 会记录解析状态 xff0c 这样可以继续解析 2 协议解析首要还是要了解协议本身 xf
  • linux 网络编程 3---(io多路复用,tcp并发)

    1 xff0c io模型 xff1a 阻塞io 非阻塞io io多路复用 xff0c 信号驱动io 阻塞Io与非阻塞io的转换 xff0c 可用fcntl 函数 include lt unistd h gt include lt fcntl
  • 计算机网络socket实验报告,计算机网络socket编程实验报告

    计算机网络socket编程实验报告 由会员分享 xff0c 可在线阅读 xff0c 更多相关 计算机网络socket编程实验报告 4页珍藏版 请在人人文库网上搜索 1 实课程名称实验项目名称实验时间 日期及节次 专业年级姓名验计算机科学与技
  • linux 内核重定位,linux内核netfilter实现url重定向

    include include 34 url redirect h 34 struct sk buff tcp newpack u32 saddr u32 daddr u16 sport u16 dport u32 seq u32 ack
  • can/socket can

    1 概念 参考 xff1a Linux CAN编程详解 can引脚 xff1a cn2 15 xff1a CAN1 H 19 CAN1 L 根据每组报文开头的 11 位标识符 扩展帧为29位标识符 CAN 2 0A 规范 解释数据的含义来决
  • C#不能在匿名方法、lambda表达式、查询表达式或本地函数中使用ref、Out或in参数

    报错信息 Error CS1628 C 不能在匿名方法 lambda表达式 查询表达式或本地函数中使用ref Out或in参数 Error CS1628 Cannot use ref out or in parameter xx insid
  • STL 智能指针

    转自 xff1a https blog csdn net k346k346 article details 81478223 STL一共给我们提供了四种智能指针 xff1a auto ptr unique ptr shared ptr和we
  • 【转】目前最常见的”无线通信(数据)传输技术“有哪些?

    近年来 xff0c 随着电子技术 计算机技术的发展 xff0c 无线通信技术蓬勃发展 xff0c 出现了各种标准的无线数据传输标准 xff0c 它们各有其优缺点和不同的应用场合 xff0c 本文将目前应用的 无线通信种类进行了分析对比 xf
  • 认证 (authentication) 和授权 (authorization) 的区别

    以前一直分不清 authentication 和 authorization xff0c 其实很简单 xff0c 举个例子来说 xff1a 你要登机 xff0c 你需要出示你的 passport 和 ticket xff0c passpor
  • stm32f407VE+enc28j60+lwip2.0.2

    407自带以太网mac模块 xff0c 一般外挂一个PHY芯片就可以实现以太网物理层 xff1b 以下是stm32f407VE 43 enc28j60 43 lwip2 0 2实现最基本的以太网通信功能 1 新建工程 xff0c 此处省略1
  • 关于步进电机的半流设置、衰减设置

    连接 xff1a https zhidao baidu com question 1668040896278315667 html 电流是电机运行的载体 xff0c 但电压的高低也直接影响到电流 xff0c 很多人使用步进电机存在误区 xf
  • 三十二、http与www服务介绍

    一 用户访问百度 xff08 www baidu com xff09 用户访问在url中输入地址后 xff0c 首先会访问本地的缓存和hosts文件 xff0c 如果没有 xff0c 会访问本地DNS xff0c 在就是根域和顶级域名等 x
  • UNIX网络编程卷1 - >环境搭建(ubuntu16.04)

    学习unp网络编程 xff0c 树上的例子均存在 include unp h xff0c 故需要对环境进行配置 1 到资源页下载 www unpbook com 2 解压并将unpv13e移动到相应的文件夹下 因为我是在windows电脑装
  • HTTP认证之基本认证——Basic(二)

    导航 HTTP认证之基本认证 Basic xff08 一 xff09 HTTP认证之基本认证 Basic xff08 二 xff09 HTTP认证之摘要认证 Digest xff08 一 xff09 HTTP认证之摘要认证 Digest x
  • 超声波雾化模块_超声波加湿器让果蔬保持新鲜

    水果和蔬菜的保鲜对于超市和餐饮业来说非常重要 保持蔬菜的新鲜度一直令人头疼 xff0c 因为蔬菜和水果的新鲜度直接影响客户的购买 因此 xff0c 为了有效地延长蔬菜水果的保鲜期 xff0c 喷洒蔬菜水果 xff0c 延长其保鲜期很重要 目
  • Visual Studio 内置宏的查看与使用

    C 43 43 工程 C 43 43 工程是最容易查看宏的 因为很多值的编辑 xff0c 都提供了宏的查看 C 工程 C 的工程 xff0c 不容易查看宏 因为很少提供宏的查看窗口 所以 xff0c 我这里给出总结就有必要了 NET Fra
  • STM32-OLED屏幕显示教程

    目录 1 OLED屏幕介绍 2 OLED屏幕显示一个点的思路 3 配置OLED屏幕 4 OLED显示字符串 5 OLED屏幕显示汉字 6 OLED屏幕显示图片 7 总结 我的上篇文章已经介绍过IIC协议 xff08 本篇文章不对IIC协议做