STM32F103系列控制的OLED IIC 4针

2023-11-05

最近在研究四针的OLED 先上个效果图

总工程文件评论区留下邮箱我会发送

在这里插入图片描述
硬件部分

有开发板的直接用开发板就好 没有的去某宝买一块STM32F103C8T6(10元左右)

类似这种在这里插入图片描述

接线部分

OLED一共有四个接口 本别是SCL(时钟),SDA(数据),GND(电源负),VCC3.3(注意是接3.3V, 5V会烧坏)

电源正负随便接是3.3V就OK SCL,SDA接单片机IO口 具体配置看原理图 我这个芯片的对应的是PB6,7用排线连接就好

硬件部分结束。

软件部分

源码是借鉴的 亲测能用 不得不说 站在巨人的肩膀上真的很舒服 现在分享主和OLED C文件 总工程文件评论区留下邮箱我会发送

//主c文件
#include "delay.h"
#include "sys.h"
#include "oled.h"
#include "bmp.h"
int main(void)
  {	u8 t;
		delay_init();	    	 //延时函数初始化	  
		NVIC_Configuration(); 	 //设置NVIC中断	
	//	delay_ms(8000);
		OLED_Init();			
		OLED_Clear()  	; 
	
		t=' ';
		//显示汉字
		OLED_ShowCHinese(18,0,0);//
		OLED_ShowCHinese(36,0,1);//
		OLED_ShowCHinese(72,0,2);//
		OLED_ShowCHinese(90,0,3);//

	while(1) 
	{		
		OLED_Clear();
		OLED_ShowCHinese(18,0,0);
		OLED_ShowCHinese(36,0,1);
		OLED_ShowCHinese(72,0,2);
		OLED_ShowCHinese(90,0,3);
		OLED_ShowString(6,3,"0.96' OLED TEST",16);

		OLED_ShowString(0,6,"ASCII:",16);  
		OLED_ShowString(63,6,"CODE:",16);  
		OLED_ShowChar(48,6,t,16);//显示字符   
		t++;
		if(t>'~')t=' ';
		OLED_ShowNum(103,6,t,3,16);
		delay_ms(8000);
		delay_ms(8000);
		delay_ms(8000);
		delay_ms(8000);
		delay_ms(8000);
		OLED_DrawBMP(0,0,128,8,BMP1);  //显示图片
		delay_ms(8000);
		delay_ms(8000);
		delay_ms(8000);
		delay_ms(8000);
		OLED_DrawBMP(0,0,128,8,BMP1);
		delay_ms(8000);
		delay_ms(8000);
		delay_ms(8000);
		delay_ms(8000);
	}	  
	
}
//oled c文件
void IIC_Start()
{

	OLED_SCLK_Set() ;
	OLED_SDIN_Set();
	OLED_SDIN_Clr();
	OLED_SCLK_Clr();
}

/**********************************************
//IIC Stop
**********************************************/
void IIC_Stop()
{
OLED_SCLK_Set() ;
//	OLED_SCLK_Clr();
	OLED_SDIN_Clr();
	OLED_SDIN_Set();
	
}

void IIC_Wait_Ack()
{

	//GPIOB->CRH &= 0XFFF0FFFF;	//设置PB12为上拉输入
	//GPIOB->CRH |= 0x00080000;
//	OLED_SDA = 1;
//	delay_us(1);
	//OLED_SCL = 1;
	//delay_us(50000);
/*	while(1)
	{
		if(!OLED_SDA)				//判断是否接收到应答
		{
			//GPIOB->CRH &= 0XFFF0FFFF;	//设置PB12为推挽输出
			//GPIOB->CRH |= 0x00030000;
			return;
		}
	}
*/
	OLED_SCLK_Set() ;
	OLED_SCLK_Clr();
}
/**********************************************
// IIC Write byte
**********************************************/

void Write_IIC_Byte(unsigned char IIC_Byte)
{
	unsigned char i;
	unsigned char m,da;
	da=IIC_Byte;
	OLED_SCLK_Clr();
	for(i=0;i<8;i++)		
	{
			m=da;
		//	OLED_SCLK_Clr();
		m=m&0x80;
		if(m==0x80)
		{OLED_SDIN_Set();}
		else OLED_SDIN_Clr();
			da=da<<1;
		OLED_SCLK_Set();
		OLED_SCLK_Clr();
		}


}

void Write_IIC_Command(unsigned char IIC_Command)
{
   IIC_Start();
   Write_IIC_Byte(0x78);            //Slave address,SA0=0
	IIC_Wait_Ack();	
   Write_IIC_Byte(0x00);			//write command
	IIC_Wait_Ack();	
   Write_IIC_Byte(IIC_Command); 
	IIC_Wait_Ack();	
   IIC_Stop();
}
/**********************************************
// IIC Write Data
**********************************************/
void Write_IIC_Data(unsigned char IIC_Data)
{
   IIC_Start();
   Write_IIC_Byte(0x78);			//D/C#=0; R/W#=0
	IIC_Wait_Ack();	
   Write_IIC_Byte(0x40);			//write data
	IIC_Wait_Ack();	
   Write_IIC_Byte(IIC_Data);
	IIC_Wait_Ack();	
   IIC_Stop();
}
void OLED_WR_Byte(unsigned dat,unsigned cmd)
{
	if(cmd)
			{

   Write_IIC_Data(dat);
   
		}
	else {
   Write_IIC_Command(dat);
		
	}


}


/********************************************
// fill_Picture
********************************************/
void fill_picture(unsigned char fill_Data)
{
	unsigned char m,n;
	for(m=0;m<8;m++)
	{
		OLED_WR_Byte(0xb0+m,0);		//page0-page1
		OLED_WR_Byte(0x00,0);		//low column start address
		OLED_WR_Byte(0x10,0);		//high column start address
		for(n=0;n<128;n++)
			{
				OLED_WR_Byte(fill_Data,1);
			}
	}
}


/***********************Delay****************************************/
void Delay_50ms(unsigned int Del_50ms)
{
	unsigned int m;
	for(;Del_50ms>0;Del_50ms--)
		for(m=6245;m>0;m--);
}

void Delay_1ms(unsigned int Del_1ms)
{
	unsigned char j;
	while(Del_1ms--)
	{	
		for(j=0;j<123;j++);
	}
}

//坐标显示

	void OLED_Set_Pos(unsigned char x, unsigned char y) 
{ 	OLED_WR_Byte(0xb0+y,OLED_CMD);
	OLED_WR_Byte(((x&0xf0)>>4)|0x10,OLED_CMD);
	OLED_WR_Byte((x&0x0f),OLED_CMD); 
}   	  
//开启OLED显示    
void OLED_Display_On(void)
{
	OLED_WR_Byte(0X8D,OLED_CMD);  //SET DCDCÃüÁî
	OLED_WR_Byte(0X14,OLED_CMD);  //DCDC ON
	OLED_WR_Byte(0XAF,OLED_CMD);  //DISPLAY ON
}
//关闭OLED显示    
void OLED_Display_Off(void)
{
	OLED_WR_Byte(0X8D,OLED_CMD);  //SET DCDCÃüÁî
	OLED_WR_Byte(0X10,OLED_CMD);  //DCDC OFF
	OLED_WR_Byte(0XAE,OLED_CMD);  //DISPLAY OFF
}		   			 
//清屏函数  
void OLED_Clear(void)  
{  
	u8 i,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(0,OLED_DATA); 
	} //更新显示
}
void OLED_On(void)  
{  
	u8 i,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(1,OLED_DATA); 
	} //更新显示
}
//在指定位置显示一个字符
//x:0~127
//y:0~63
//mode: 0反白显示 1正常显示		 
//size:选择字体16/12 
void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size)
{      	
	unsigned char c=0,i=0;	
		c=chr-' ';//得到偏移后的值			
		if(x>Max_Column-1){x=0;y=y+2;}
		if(Char_Size ==16)
			{
			OLED_Set_Pos(x,y);	
			for(i=0;i<8;i++)
			OLED_WR_Byte(F8X16[c*16+i],OLED_DATA);
			OLED_Set_Pos(x,y+1);
			for(i=0;i<8;i++)
			OLED_WR_Byte(F8X16[c*16+i+8],OLED_DATA);
			}
			else {	
				OLED_Set_Pos(x,y);
				for(i=0;i<6;i++)
				OLED_WR_Byte(F6x8[c][i],OLED_DATA);
				
			}
}
//m^n函数
u32 oled_pow(u8 m,u8 n)
{
	u32 result=1;	 
	while(n--)result*=m;    
	return result;
}				  
//显示两个数字
//x,y :起点坐标	 
//len :数字的位数
//size:字体的大小
//mode:0填充模式 1叠加模式
//num:数值(0~4294967295);	 		  
void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size2)
{         	
	u8 t,temp;
	u8 enshow=0;						   
	for(t=0;t<len;t++)
	{
		temp=(num/oled_pow(10,len-t-1))%10;
		if(enshow==0&&t<(len-1))
		{
			if(temp==0)
			{
				OLED_ShowChar(x+(size2/2)*t,y,' ',size2);
				continue;
			}else enshow=1; 
		 	 
		}
	 	OLED_ShowChar(x+(size2/2)*t,y,temp+'0',size2); 
	}
} 
//显示一个字符
void OLED_ShowString(u8 x,u8 y,u8 *chr,u8 Char_Size)
{
	unsigned char j=0;
	while (chr[j]!='\0')
	{		OLED_ShowChar(x,y,chr[j],Char_Size);
			x+=8;
		if(x>120){x=0;y+=2;}
			j++;
	}
}
//显示汉字
void OLED_ShowCHinese(u8 x,u8 y,u8 no)
{      			    
	u8 t,adder=0;
	OLED_Set_Pos(x,y);	
    for(t=0;t<16;t++)
		{
				OLED_WR_Byte(Hzk[2*no][t],OLED_DATA);
				adder+=1;
     }	
		OLED_Set_Pos(x,y+1);	
    for(t=0;t<16;t++)
			{	
				OLED_WR_Byte(Hzk[2*no+1][t],OLED_DATA);
				adder+=1;
      }					
}
/***********显示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_Set_Pos(x0,y);
    for(x=x0;x<x1;x++)
	    {      
	    	OLED_WR_Byte(BMP[j++],OLED_DATA);	    	
	    }
	}
} 

//初始化SSD1306					    
void OLED_Init(void)
{ 	
 
 	 
 	GPIO_InitTypeDef  GPIO_InitStructure;
 	
 	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOG, ENABLE);	 //ʹÄÜPC,D,G¶Ë¿ÚʱÖÓ

	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_3|GPIO_Pin_8;	 //PD3,PD6ÍÆÍìÊä³ö  
 	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 //推挽输出
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度50HZ
 	GPIO_Init(GPIOD, &GPIO_InitStructure);	  //初始化GPIOD3,6
 	GPIO_SetBits(GPIOD,GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_3|GPIO_Pin_8);	//PD3,PD6 Êä³ö¸ß

 #if OLED_MODE==1
 
 	GPIO_InitStructure.GPIO_Pin =0xFF; //PC0~7 推挽输出
 	GPIO_Init(GPIOC, &GPIO_InitStructure);
 	GPIO_SetBits(GPIOC,0xFF); //PC0~7输出高

 	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;				 //PG13,14,15 OUT推挽输出
 	GPIO_Init(GPIOG, &GPIO_InitStructure);
 	GPIO_SetBits(GPIOG,GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);						 //PG13,14,15 OUT  输出高

 #else
 	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;				 //PC0,1 OUT推挽输出
 	GPIO_Init(GPIOC, &GPIO_InitStructure);
 	GPIO_SetBits(GPIOC,GPIO_Pin_0|GPIO_Pin_1);						 //PC0,1 OUT  输出高

	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;				 //PG15 OUT 推挽输出	  RST
 	GPIO_Init(GPIOG, &GPIO_InitStructure);
 	GPIO_SetBits(GPIOG,GPIO_Pin_15);						 //PG15 OUT  输出高


 #endif
delay_ms(200);

OLED_WR_Byte(0xAE,OLED_CMD);//--display off
	OLED_WR_Byte(0x00,OLED_CMD);//---set low column address
	OLED_WR_Byte(0x10,OLED_CMD);//---set high column address
	OLED_WR_Byte(0x40,OLED_CMD);//--set start line address  
	OLED_WR_Byte(0xB0,OLED_CMD);//--set page address
	OLED_WR_Byte(0x81,OLED_CMD); // contract control
	OLED_WR_Byte(0xFF,OLED_CMD);//--128   
	OLED_WR_Byte(0xA1,OLED_CMD);//set segment remap 
	OLED_WR_Byte(0xA6,OLED_CMD);//--normal / reverse
	OLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64)
	OLED_WR_Byte(0x3F,OLED_CMD);//--1/32 duty
	OLED_WR_Byte(0xC8,OLED_CMD);//Com scan direction
	OLED_WR_Byte(0xD3,OLED_CMD);//-set display offset
	OLED_WR_Byte(0x00,OLED_CMD);//
	
	OLED_WR_Byte(0xD5,OLED_CMD);//set osc division
	OLED_WR_Byte(0x80,OLED_CMD);//
	
	OLED_WR_Byte(0xD8,OLED_CMD);//set area color mode off
	OLED_WR_Byte(0x05,OLED_CMD);//
	
	OLED_WR_Byte(0xD9,OLED_CMD);//Set Pre-Charge Period
	OLED_WR_Byte(0xF1,OLED_CMD);//
	
	OLED_WR_Byte(0xDA,OLED_CMD);//set com pin configuartion
	OLED_WR_Byte(0x12,OLED_CMD);//
	
	OLED_WR_Byte(0xDB,OLED_CMD);//set Vcomh
	OLED_WR_Byte(0x30,OLED_CMD);//
	
	OLED_WR_Byte(0x8D,OLED_CMD);//set charge pump enable
	OLED_WR_Byte(0x14,OLED_CMD);//
	
	OLED_WR_Byte(0xAF,OLED_CMD);//--turn on oled panel
}  


代码部分结束 总工程文件评论区留下邮箱我会发送

2020.12.3

又针对代码做出了一些改良 实现了通过按键实现翻页 按键部分是搬运的正点原子的代码 现贴出主函数

#include "delay.h"
#include "sys.h"
#include "oled.h"
#include "key.h"
 int main(void)
  {	
		u8 key=0;
		delay_init();	    	//延时函数初始化	  
		NVIC_Configuration(); 	//设置nvic中断	 	    
		OLED_Init();			//oled初始化
		OLED_Clear();           //清屏  
		KEY_Init();             //按键初始化  
	
		
		OLED_ShowCHinese(18,0,0);//
		OLED_ShowCHinese(36,0,1);//
		OLED_ShowCHinese(72,0,0);//
		OLED_ShowCHinese(90,0,1);//
    
		while(1)
	{
 		  key=KEY_Scan(0);	//µÃµ½¼üÖµ
//	      if(key)
//		{						   
			switch(key)
			{				 
			case WKUP_PRES:					
			OLED_Init();	
			OLED_Clear();
		    OLED_ShowCHinese(18,0,2);
		    OLED_ShowCHinese(36,0,3);
		    OLED_ShowCHinese(72,0,4);
		    OLED_ShowCHinese(90,0,5);
			break; 
			case KEY1_PRES:	 
			OLED_Init();	
			OLED_Clear();
		    OLED_ShowCHinese(18,0,7);
		    OLED_ShowCHinese(36,0,8);
		    OLED_ShowCHinese(72,0,9);
		    OLED_ShowCHinese(90,0,10);
			break;
			case KEY0_PRES:	
			break;
			}
//		}else delay_ms(10); 
	}	 
}
	

效果如图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
完结

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

STM32F103系列控制的OLED IIC 4针 的相关文章

  • 浏览器输入url后回车后全过程及其优化

    浏览器输入URL后回车后 会发生什么 嗯嗯 很经典的问题 概括性大致流程是这样的 1 查询URL对应的IP地址 DNS域名解析 2 建立TCP连接 连接服务器 3 浏览器发起请求 4 服务器响应浏览器请求 5 浏览器解析响应 渲染页面 6
  • 代码随想录算法训练营第二十四天

    LeetCode 77 组合 链接 77 组合 思路 回溯算法的典型应用 回溯算是理解难度比较大的算法了 经常会有一些循环嵌套在递归里 其本质就是罗列出所有的组合排列 可能性 因为是暴力算法时间复杂度都比较高 有时候需要搭配一定的剪枝操作
  • 数据结构——二叉树的遍历

    树 是一种重要的数据结构 本文浅谈二叉树的遍历问题 采用C语言描述 一 二叉树基础 1 定义 有且仅有一个根结点 除根节点外 每个结点只有一个父结点 最多含有两个子节点 子节点有左右之分 2 存储结构 二叉树的存储结构可以采用顺序存储 也可

随机推荐

  • GitHub Actions + Nginx 部署React App到云服务器

    初始化环境 一台云服务器 我的服务器是基于centos的华为云 个人电脑安装好git node环境 安装Nginx 进入云服务器控制台 远程连接进服务器终端 或者本地终端输入ssh 你的服务器用户名 你的服务器公网ip 如果出现Someon
  • Doxygen文档系统---入门

    Doxygen简介 Doxygen是一种开源跨平台的 以类似JavaDoc风格描述的文档系统 完全支持C C Java Objective C和IDL语言 部分支持PHP C 注释的语法与Qt Doc KDoc和JavaDoc兼容 Doxy
  • 神兵利器

    声明 该公众号大部分文章来自作者日常学习笔记 也有部分文章是经过作者授权和其他公众号白名单转载 未经授权 严禁转载 如需转载 联系开白 请勿利用文章内的相关技术从事非法测试 如因此产生的一切不良后果与文章作者和本公众号无关 现在只对常读和星
  • WebRTC建立会话流程分析

    WebRTC建立会话流程总结 了解如何运行PeerConnection Demo后 熟悉运行流程可以做为深入学习WebRTC的切入点 本节重点解释客户端双方建立会话时交互的主要信令 控制会话的文本协议 和与信令相关的 WebRTC API
  • node-sass报错

    我们安装vue项目时 经常遇到nade sass报错 然后切换到某个node版本后不再报错 原因见下文 一 报错内容 二 保存原因 本地nodejs版本跟安装的node sass版本不一致 三 解决办法 1 查看本地node版本 node
  • 使用书签修改视频播放速度(javascript:)

    增加书签 网址输入以下内容 javascript document querySelector video playbackRate 2 0 2 0是2倍速 根据需要自行修改速度 使用方法 打开视频后 点一下书签即可修改视频速度 如果没有改
  • 如何提高训练模型准确率

    8个经过证实的方法 提高机器学习模型的准确率 摘要 本文分享了 8 个经过证实的方法 这些方法用来改善模型的预测表现 它们广为人知 但不一定要按照文中的顺序逐个使用 导语 提升一个模型的表现有时很困难 如果你们曾经纠结于相似的问题 那我相信
  • Android开发指南!2021中级Android开发面试解答,完整版开放下载

    Google 为了帮助 Android 开发者更快更好地开发 App 推出了一系列组件 这些组件被打包成了一个整体 称作 Android Jetpack 它包含的组件如下图所示 老的 support 包被整合进了 Jetpack 例如上图
  • 混合策略纳什均衡——附例题及解析

    目录 引入 混合纳什均衡 例题 求法 引入 假设这样一种对局 甲乙两人抽扑克牌 扑克牌只有两种花色 红和黑 两张牌花色相同算甲胜 反之乙胜 那么甲乙双方应该如何设定自己抽出不同花色的概率呢 比如 设甲抽红牌的概率P 60 那么黑牌概率就是1
  • [架构之路-204]- 常见的需求分析技术:结构化分析与面向对象分析

    目录 前言 1 1 3 需求分析概述 导言 11 3 1需求分析的任务 1 绘制系统上下文范围关系图 2 创建用户界面原型 3 分析需求的可行性 4 确定需求的优先级 5 为需求建立模型 最难的一项任务 SA and OOA 6 创建数据字
  • EMI滤波器设计概念

    EMI滤波器设计概念 1 1 基本概念 在开关电源的设计里 为了对策传导干扰大都会在输入端前端加入EMI滤波器 因传导测试是由AC端来做量测 因此滤波器愈靠近接收器效果愈好 让所有的干扰都可经由滤波器做衰减 而一般滤波器是经由电感与电容组合
  • AMR文件格式的解释

    一 什么是AMR AMR WB 全称Adaptive Multi Rate和Adaptive Multi Rate Wideband 主要用于移动设备的音频 压缩比比较大 但相对其他的压缩格式质量比较差 由于多用于人声 通话 效果还是很不错
  • docker swarm 集群构建及服务管理

    文章目录 一 集群构建及部分配置 1 环境准备 2 swarm 初始化 3 worker子节点加入 4 查看集群信息 1 查看 swarm 集群节点 2 查看各节点 swarm 信息 5 swarm 证书配置 二 集群服务管理 1 创建集群
  • elasticsearch8.2 http开启鉴权

    Elasticsearch 早期的版本配置鉴权 由于插件收费 所以配置起来比较麻烦 但是最近发现Elasticsearch的8 2版本中可以配置https及鉴权的操作 所以记录一下给想要获取该知识的人 分享一下 第一步 修改elastics
  • java导入自定义类_java如何引入自己定义的类,即import语句该如何写?

    我写了2个java的小程序Time java和MyTime java 其内容分别如下 Time java 文件的内容publicclassTime privateinthour privateintminute privateintseco
  • 怎样做自媒体视频剪辑赚钱?

    不想真人出镜 但是想做自媒体赚钱 除了发布图文作品和音频作品外 我们还可以做视频剪辑发布到自媒体平台上 简单的说就是剪辑一些现有的视频作品 重新剪辑成一个新的作品并发布到自媒体平台上获得收益 不说多了 每天收益100 200还是不难的 新手
  • 函数指针做函数参数

    什么是函数指针 当我们定义一个函数的时候 编译器会为这个函数分配一段内存空间 而这段内存空间的首地址就是函数指针 函数指针的定义 函数返回值类型 指针变量名 函数参数列表 int p int int 这个语句就定义了一个指向函数的指针变量
  • python uiautomation mac os_(selenium+python)_UI自动化01_Mac下selenium环境搭建

    前言 Selenium是一个用于Web网页UI自动化测试的开源框架 可以驱动浏览器模拟用户操作 支持多种平台 Windows Mac OS Linux 和多种浏览器 IE Firefox Chrome Safari 可以用多种语言 Java
  • java new file会创建文件吗_Java高级——文件与I/O流

    简介 本文分为四个部分 首先是介绍File类 概括了一下概念 构造方法及常用方法等 其次是描述了面对对象的三大特征 再次是对抽象类进行了简单的概述 最后从特性 使用等等几个方面对接口进行了一定的描述 一 File类 1 File类概念 1
  • STM32F103系列控制的OLED IIC 4针

    最近在研究四针的OLED 先上个效果图 总工程文件评论区留下邮箱我会发送 硬件部分 有开发板的直接用开发板就好 没有的去某宝买一块STM32F103C8T6 10元左右 类似这种 接线部分 OLED一共有四个接口 本别是SCL 时钟 SDA