LED面板显示屏驱动芯片

一、基本概述

TM1638是一种带键盘扫描接口的LED(发光二极管显示器)驱动控制专用IC,内部集成有MCU数字接口、数据锁存器、LED驱动、键盘扫描等电路。本产品质量可靠、稳定性好、抗干扰能力强。

二、主要应用场合

主要适用于家电设备(智能热水器、微波炉、洗衣机、空调、电磁炉)、机顶盒、电子称、智能电表等数码管或LED显示设备。

三、管脚说明

DIO口输出数据时为N管开漏输出,在读键的时候需要外接1K-10K的上拉电阻。推荐10K的上拉

电阻。DIO在时钟的下降沿控制N管的动作,此时读数时不稳定,在时钟的上升沿读数才时稳定。

四、串行数据传输

读取和接收1个BIT都在时钟的上升沿操作。

1、读取数据时,从串行时钟CLK的第8个上升沿开始设置指令到CLK下降沿读数据之间需要一个等

待时间Twait(最小2μ S)。具体参数见时序特性表。

五、应用电路

1、VDD、GND之间滤波电容在PCB板布线应尽量靠近TM1638芯片放置,加强滤波效果。

2、连接在DIO、CLK、STB通讯口上三个100P电容可以降低对通讯口的干扰。

3、因蓝光数码管的导通压降压约为3V,因此TM1638供电应选用5V。

六、电气参数

极限参数(Ta = 25℃, Vss = 0 V)

正常工作范围(Ta = -20 ~ +70℃,Vss = 0 V)

电气特性(Ta = -20 ~ +70℃,VDD = 4.5 ~ 5.5 V, Vss = 0 V)

开关特性(Ta = -20 ~ +70℃,VDD = 4.5 ~ 5.5 V)

时序特性(Ta = -20 ~ +70℃,VDD = 4.5 ~ 5.5 V)

七、封装尺寸

基于stm32智能时钟的实践--- TM1638的运用

/**
 * @brief 给TM1638写入数据
 * @param byte-写入的数据
 * @retval 
 */
void TM1638_Write_Byte(uint8_t byte) 
{
    uint8_t Count;
    for(Count = 0; Count < 8; Count++)
    {
        CLK_0();         //在时钟的上升沿写入数据
        if(byte & 0x01)
        {
            DIO_1(); 
        }
        else
        {
            DIO_0(); 
        }
        byte >>= 1;        //8位全部读取
        CLK_1();  		 //在时钟的上升沿写入数据
    }
}
 
/**
 * @brief 给TM1638写入数据(或者命令)
 * @param byte-写入的数据
 * @retval 
 */
void TM1638_Write_Data(uint8_t data) //TM1638写数据函数
{
    STB_0();                         //片选,为低时开始处理信息
    TM1638_Write_Byte(data);
    STB_1();
}
 
void (*TM1638_Write_Cmd)(u8)=TM1638_Write_Data;//给函数起一个别名,函数指针
 
/**
 * @brief 写入地址加上数据
 * @param 
		addr-对应地址
		data-写入数据
 * @retval 
 */
void TM1638_Write_Addr_Byte(uint8_t addr,uint8_t data)
{
    STB_0();
    TM1638_Write_Byte(addr);        //STB 为低后的第一个字节作为指令
    TM1638_Write_Byte(data);
    STB_1();
}

这里一共有三个函数,其实就是写入一个字节的数据;代开片选写入一字节数据;打开片选写入2字节数据,分别是地址和参数.

/**
 * @brief TM1638读数据函数
 * @param
 * @retval 读取的8位数据
 */
unsigned char TM1638_Read(void) //读数据函数
{
    uint8_t i;
	uint8_t data,temp=0;
 
    TM1638_IO_INPUT();
    for(i=0; i<8; i++)
    {
        temp>>=1;
        CLK_0(); //CLK=0
        data = DIO_Read();  //读取DIO值
        if(data)
		{
			temp|=0x80; //按位或:与0或不变、与1或置1
        }
		CLK_1(); //CLK=1
    }
	TM1638_IO_OUTPUT();
    return temp;
}
 
/**
 * @brief TM1638读键扫数据函数
 * @param
 * @retval 读取的按键号,1~8
 */
unsigned char TM1638_ReadKey(void)  //TM1638读键扫数据函数
{
    unsigned char c[4],i,key_value=0;
 
    STB_0();  //STB=0,开始写命令
    TM1638_Write_Byte(0x42);  //普通模式,地址自动增加,读键扫数据
    for(i=0; i<4; i++)	
	{
		c[i]=TM1638_Read(); //读取键值
    }
	STB_1();  //STB=1,读键值结束
 
    //数据处理
    for(i=0; i<4; i++)
	{
        key_value|=(c[i]<<i);
    }
	for(i=0; i<8; i++)
	{
        if((0x01<<i)==key_value) break;
    }
	return (i+1);//返回按键值,与模块上的相对应
}

.c文件

#include "stm32f10x.h"   // Device header
#include "TM1638.h"
 
unsigned char TM1638_Arr_SEG[]= {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07, //共阴极数码管段码,不带小数点
                                 0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,
                                 0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,  //共阴极数码管段码,带小数点
                                 0xFF,0xEF,0xF7,0xFC,0xB9,0xDE,0xF9,0xF1
                                }; //0~F,1亮0灭
 
//共阴极数码管段码,不带小数点,display函数用
unsigned char TM1638_Arr_SEG_Display[]= {   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                                            0,   0,   0,   0,   0,   0,0x3F,0x06,0x5B,0x4F,//0-9
                                            0x66,0x6D,0x7D,0x07,0x7F,0x6F,   0,   0,   0,   0,
                                            0,   0,   0,0x77,0x7C,0x39,0x5E,0x79,0x71,   0
                                        };
 
uint8_t TM1638_Addr_SEG[8]= {0xC0,0xC2,0xC4,0xC6,0xC8,0xCA,0xCC,0xCE}; //模块从右到左的八个数码管
uint8_t TM1638_Addr_LED[8]= {0xC1,0xC3,0xC5,0xC7,0xC9,0xCB,0xCD,0xCF}; //模块从右到左的八个发光二极管
 
 
 
/**
 * @brief TM1638-GPIO初始化函数
 * @param
 * @retval 
 */
static void TM1638_GPIO_Config()
{
    GPIO_InitTypeDef GPIO_InitStructure; 
    RCC_TIM1638_CMD(RCC_TM1638,ENABLE);  
	//将3只因脚全部设置为同样的推挽输出模式
    GPIO_InitStructure.GPIO_Pin = TM1638_GPIO_Pin; 
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 
    GPIO_Init(TM1638_GPIO, &GPIO_InitStructure); 
	STB_1();
	CLK_1();
	DIO_1();
}
void TM1638_IO_INPUT()
{
    GPIO_InitTypeDef GPIO_InitStructure; 
    RCC_TIM1638_CMD(RCC_TM1638,ENABLE);  
	//将3只因脚全部设置为同样的推挽输出模式
    GPIO_InitStructure.GPIO_Pin = DIO; 
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; 
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 
    GPIO_Init(TM1638_GPIO, &GPIO_InitStructure); 	
}
void TM1638_IO_OUTPUT()
{
    GPIO_InitTypeDef GPIO_InitStructure; 
    RCC_TIM1638_CMD(RCC_TM1638,ENABLE);  
	//将3只因脚全部设置为同样的推挽输出模式
    GPIO_InitStructure.GPIO_Pin = DIO; 
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 
    GPIO_Init(TM1638_GPIO, &GPIO_InitStructure); 
	DIO_1();	
}
/**
 * @brief TM1638初始化函数
 * @param
 * @retval 
 */
void TM1638_Init() 
{
    TM1638_GPIO_Config();
    TM1638_Clear();
}
 
/**
 * @brief 给TM1638写入数据
 * @param byte-写入的数据
 * @retval 
 */
void TM1638_Write_Byte(uint8_t byte) 
{
    uint8_t Count;
    for(Count = 0; Count < 8; Count++)
    {
        CLK_0();         //在时钟的上升沿写入数据
        if(byte & 0x01)
        {
            DIO_1(); 
        }
        else
        {
            DIO_0(); 
        }
        byte >>= 1;        //8位全部读取
        CLK_1();  		 //在时钟的上升沿写入数据
    }
}
 
/**
 * @brief 给TM1638写入数据(或者命令)
 * @param byte-写入的数据
 * @retval 
 */
void TM1638_Write_Data(uint8_t data) //TM1638写数据函数
{
    STB_0();                         //片选,为低时开始处理信息
    TM1638_Write_Byte(data);
    STB_1();
}
 
void (*TM1638_Write_Cmd)(u8)=TM1638_Write_Data;//给函数起一个别名,函数指针
 
/**
 * @brief 写入地址加上数据
 * @param 
		addr-对应地址
		data-写入数据
 * @retval 
 */
void TM1638_Write_Addr_Byte(uint8_t addr,uint8_t data)
{
    STB_0();
    TM1638_Write_Byte(addr);        //STB 为低后的第一个字节作为指令
    TM1638_Write_Byte(data);
    STB_1();
}
 
/**
 * @brief 在数码管上面显示数据
 * @param 
		data-写入数据
 * @retval 
 */
void TM1638_Display_Num(uint32_t data)
{
    unsigned int dataL=0,dataR=0;
    dataL=data/10000;
    dataR=data%10000;
    TM1638_Write_Cmd(0x44);//固定地址,写数据
    TM1638_Write_Cmd(0x88);//显示开,亮度1
 
    TM1638_Write_Addr_Byte(TM1638_Addr_SEG[0],TM1638_Arr_SEG[dataL/1000]);
    TM1638_Write_Addr_Byte(TM1638_Addr_SEG[1],TM1638_Arr_SEG[dataL%1000/100]);
    TM1638_Write_Addr_Byte(TM1638_Addr_SEG[2],TM1638_Arr_SEG[dataL%100/10]);
    TM1638_Write_Addr_Byte(TM1638_Addr_SEG[3],TM1638_Arr_SEG[dataL%10]);
    TM1638_Write_Addr_Byte(TM1638_Addr_SEG[4],TM1638_Arr_SEG[dataR/1000]);
    TM1638_Write_Addr_Byte(TM1638_Addr_SEG[5],TM1638_Arr_SEG[dataR%1000/100]);
    TM1638_Write_Addr_Byte(TM1638_Addr_SEG[6],TM1638_Arr_SEG[dataR%100/10]);
    TM1638_Write_Addr_Byte(TM1638_Addr_SEG[7],TM1638_Arr_SEG[dataR%10]);
}
 
/**
 * @brief 在数码管上面显示温度
 * @param 
		data-写入数据
 * @retval 
 */
void TM1638_Display_Tmp(uint32_t data)
{
    TM1638_Write_Cmd(0x44);//固定地址,写数据
    TM1638_Write_Cmd(0x88);//显示开,亮度1
 
    TM1638_Write_Addr_Byte(TM1638_Addr_SEG[0],TM1638_Arr_SEG[data/10]);
    TM1638_Write_Addr_Byte(TM1638_Addr_SEG[1],TM1638_Arr_SEG[data%10]);
}
 
/**
 * @brief 在数码管上面显示湿度
 * @param 
		data-写入数据
 * @retval 
 */
void TM1638_Display_Hum(uint32_t data)
{
    TM1638_Write_Cmd(0x44);//固定地址,写数据
    TM1638_Write_Cmd(0x88);//显示开,亮度1
 
    TM1638_Write_Addr_Byte(TM1638_Addr_SEG[4],TM1638_Arr_SEG[data/10]);
    TM1638_Write_Addr_Byte(TM1638_Addr_SEG[5],TM1638_Arr_SEG[data%10]);
}
 
 
/**
 * @brief TM1638指定地址显示数码,0-F
 * @param 
		num-数码管位置12345678
		seg-字符0-F
		p-N/Y
 * @retval 
 */
void TM1638_Display_SEG(unsigned int num,unsigned char seg,PointState p)
{
    TM1638_Write_Cmd(0x44);//固定地址,写数据
    TM1638_Write_Cmd(0x88);//显示开,亮度1
 
    TM1638_Write_Addr_Byte(TM1638_Addr_SEG[num-1],TM1638_Arr_SEG_Display[seg-32]|p);
}
 
/**
 * @brief TM1638指定LED亮灭
 * @param 
		num-LED位置
		light-OFF/ON
 * @retval 
 */
void TM1638_Display_LED(unsigned int num,LightState light)
{
    TM1638_Write_Cmd(0x44);//固定地址,写数据
    TM1638_Write_Cmd(0x88);//显示开,亮度1
 
    TM1638_Write_Addr_Byte(TM1638_Addr_LED[num],light);
}
 
 
/**
 * @brief TM1638关闭指定数码管函数
 * @param serial-数码管序号1-8
 * @retval 
 */
void TM1638_SEG_Off(unsigned char num)  //TM1638关闭指定数码管函数
{
    TM1638_Write_Cmd(0x44);//固定地址,写数据
    TM1638_Write_Cmd(0x88);//显示开,亮度1
 
    TM1638_Write_Addr_Byte(TM1638_Addr_SEG[num-1],0x80);
}
 
/**
 * @brief TM1638读数据函数
 * @param
 * @retval 读取的8位数据
 */
unsigned char TM1638_Read(void) //读数据函数
{
    uint8_t i;
	uint8_t data,temp=0;
 
    TM1638_IO_INPUT();
    for(i=0; i<8; i++)
    {
        temp>>=1;
        CLK_0(); //CLK=0
        data = DIO_Read();  //读取DIO值
        if(data)
		{
			temp|=0x80; //按位或:与0或不变、与1或置1
        }
		CLK_1(); //CLK=1
    }
	TM1638_IO_OUTPUT();
    return temp;
}
 
/**
 * @brief TM1638读键扫数据函数
 * @param
 * @retval 读取的按键号,1~8
 */
unsigned char TM1638_ReadKey(void)  //TM1638读键扫数据函数
{
    unsigned char c[4],i,key_value=0;
 
    STB_0();  //STB=0,开始写命令
    TM1638_Write_Byte(0x42);  //普通模式,地址自动增加,读键扫数据
    for(i=0; i<4; i++)	
	{
		c[i]=TM1638_Read(); //读取键值
    }
	STB_1();  //STB=1,读键值结束
 
    //数据处理
    for(i=0; i<4; i++)
	{
        key_value|=(c[i]<<i);
    }
	for(i=0; i<8; i++)
	{
        if((0x01<<i)==key_value) break;
    }
	return (i+1);//返回按键值,与模块上的相对应
}
 
 
 
/**
 * @brief TM1638全清
 * @param 
 * @retval 
 */
void TM1638_Clear(void)
{
    uint8_t i;
    TM1638_Write_Data(0x44); //普通模式,固定地址,写数据到显示寄存器
    TM1638_Write_Data(0x88); //显示开,亮度第1级
    for(i=0; i<16; i++)
    {
        TM1638_Write_Addr_Byte(0XC0+i,0X00); //全地址写入0X00
    }
}

.h文件

#ifndef _TM1638_H_
#define _TM1638_H_
 
 
 
#include "stm32f10x.h"
 
typedef enum {N = 0x00, Y = 0x80} PointState; //是否带小数点 Y:带,N:不带
 
typedef enum {OFF = 0x00, ON = 0x01} LightState; //灯开关状态 On:开,Off:关
 
 
 
 
//TM1638引脚定义
#define STB 				GPIO_Pin_13
#define CLK 				GPIO_Pin_14
#define DIO 				GPIO_Pin_15
#define TM1638_GPIO 		GPIOB
#define TM1638_GPIO_Pin 	STB | CLK | DIO 
#define RCC_TM1638 			RCC_APB2Periph_GPIOB
#define RCC_TIM1638_CMD  	RCC_APB2PeriphClockCmd
 
//TM1638引脚的写入和读取函数定义
#define STB_0() GPIO_ResetBits(TM1638_GPIO,STB)
#define STB_1() GPIO_SetBits(TM1638_GPIO,STB)
#define CLK_0() GPIO_ResetBits(TM1638_GPIO,CLK)
#define CLK_1() GPIO_SetBits(TM1638_GPIO,CLK)
#define DIO_0() GPIO_ResetBits(TM1638_GPIO,DIO)
#define DIO_1() GPIO_SetBits(TM1638_GPIO,DIO)
#define DIO_Read() GPIO_ReadInputDataBit(TM1638_GPIO,DIO)
 
//用户层函数
void TM1638_Init(); //TM1638初始化函数
void TM1638_Display_Num(u32 data); //显示数字
void TM1638_Display_Tmp(uint32_t data);
void TM1638_Display_Hum(uint32_t data);
void TM1638_Display_SEG(unsigned int num,unsigned char seg,PointState p); //选择数码管显示0-F
void TM1638_Display_LED(unsigned int num,LightState light); //指定led亮灭
 
unsigned char TM1638_ReadKey(); //TM1638读键扫数据函数
void TM1638_SEG_Off(unsigned char num);  //TM1638关闭指定数码管函数
void TM1638_Clear(); //TM1638全清
 
//底层函数
void TM1638_Write_Byte(u8 byte); //TM1638单写数据,需要在函数外对STB操作
void TM1638_Write_Data(u8 data); //TM1638一个完整数据写入
void TM1638_Write_Addr_Byte(u8 addr,u8 data); //TM1638指定地址写入数据
unsigned char TM1638_Read(); //TM1638读数据函数
void TM1638_GPIO_Init(); //TM1638引脚初始化函数
extern void (*TM1638_Write_Cmd)(u8);//给函数起一个别名,函数指针
void TM1638_IO_INPUT();
void TM1638_IO_OUTPUT();
#endif
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/188179.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Hibernate 脏检查和刷新缓存机制

刷新缓存: Session是Hibernate向应用程序提供的操作数据库的主要接口,它提供了基本的保存,更新,删除和加载java对象的方法,Session具有一个缓存,可以管理和追踪所有持久化对象,对象和数据库中的相关记录对应,在某些时间点,Session会根据缓存中对象的变化来执行相关SQL语句,将对…

杂货铺 | Windows系统上解压缩tgz文件

文章目录 &#x1f4da;快速终端打开实现 & 解压缩实现步骤&#x1f4da;环境变量的一般配置步骤 & 问题解决思路 &#x1f4da;快速终端打开实现 & 解压缩实现步骤 将对应的tgz文件放入对应的文件夹。快速在指定文件夹下打开终端 打开对应的路径 双击地址栏 然后…

Cisco Packet Tracer配置命令——路由器篇

路由基础 路由器用于互联两个或多个网络&#xff0c;具有两项功能&#xff1a;为要转发的数据包选择最佳路径以及将数据包交换到正确的端口&#xff0c;概括为路由选择和分组转发。 路由选择 路由选择就是路由器根据目的IP地址的网络地址部分&#xff0c;通过路由选择算法确…

图的建立基本操作

#include <stdio.h> #include <stdlib.h> #include <stdbool.h> // 添加头文件#define MAX_VERTEX_NUM 100 //图中最大顶点数//struct ArcNode* nextarc; //ArcNode* firstarc; //这两个是很有必要的&#xff0c;如果你没有这两个指针&#xff0c;你就无法判…

力扣114. 二叉树展开为链表(java,用树模拟链表)

Problem: 114. 二叉树展开为链表 文章目录 题目描述思路解题方法复杂度Code 题目描述 给你二叉树的根结点 root &#xff0c;请你将它展开为一个单链表&#xff1a; 1.展开后的单链表应该同样使用 TreeNode &#xff0c;其中 right 子指针指向链表中下一个结点&#xff0c;而左…

Selenium 4.11 正式发布--再也不用手动更新chrome driver 了

Selenium 4.11.0 正式发布了&#xff0c;先来看一下主要特性。 Chrome DevTools支持的版本现在是&#xff1a;v113、v114和v115&#xff08;Firefox仍然对所有版本使用v85&#xff09; 通过Selenium Manager支持Chrome For Testing&#xff08;CfT&#xff09; Selenium Manag…

LeetCode Hot100 105.从前序与中序遍历序列构造二叉树

题目&#xff1a;给定两个整数数组 preorder 和 inorder &#xff0c;其中 preorder 是二叉树的先序遍历&#xff0c; inorder 是同一棵树的中序遍历&#xff0c;请构造二叉树并返回其根节点。 代码&#xff1a; class Solution {private Map<Integer, Integer> indexM…

midjourney过时了?如何使用基于LCM的绘图技术画出你心中的画卷。

生成 AI 艺术在近年来迅速发展&#xff0c;吸引了数百万用户。然而&#xff0c;传统的生成 AI 艺术需要等待几秒钟或几分钟才能生成&#xff0c;这对于快节奏的现代社会来说并不理想。 近日&#xff0c;中国清华大学和 AI 代码共享平台 HuggingFace 联合开发了一项新的机器学习…

性能压测工具:wrk

一般我们压测的时候&#xff0c;需要了解衡量系统性能的一些参数指标&#xff0c;比如。 1、性能指标简介 1.1 延迟 简单易懂。green:一般指响应时间 95线&#xff1a;P95。平均100%的请求中95%已经响应的时间 99线&#xff1a;P99。平均100%的请求中99%已经响应的时间 平…

2023年亚太杯数学建模A题水果采摘机器人的图像识别功能(matlab 部分代码)

对于1-4问针对的是附录1 中的数据 clc; close all; clear; % 图像文件夹路径 folder_path E:/新建文件夹/yatai/Attachment/Attachment 1/; % 图像文件列表 image_files dir(fullfile(folder_path, *.jpg)); % 假设所有图片都是jpg格式% 解析文件名中的数字&#xff0c;并转…

2023年汉字小达人市级比赛在线模拟题的使用顺序、建议和常见问题

今天是2023年11月25日&#xff0c;星期六&#xff0c;上午举办了2023年第八届上海小学生古诗文大会的复选活动&#xff08;复赛&#xff09;&#xff0c;结束了复选活动&#xff0c;很多学霸孩子们马上就开始投入到第十届汉字小达人的市级活动&#xff08;市级比赛&#xff09;…

STM32 配置中断常用库函数

单片机学习 目录 一、配置AFIO相关库函数 1.1函数GPIO_AFIODeInit 1.2函数GPIO_EventOutputConfig 1.3函数GPIO_EventOutputCmd 1.4函数GPIO_EXTILineConfig 二、配置EXTI相关库函数 2.1函数EXTI_DeInit 2.2函数EXTI_Init 2.3函数EXTI_StructInit 2.4函数 EXTI_Gener…

python_接口自动化测试框架

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…

02_MySQL体系结构及数据文件介绍

#课程目标 了解MySQL的体系结构了解MySQL常见的日志文件及作用了解事务的控制语句&#xff0c;提交和回滚能够查看当前数据库的版本和用户了解MySQL数据库如何存放数据能在使用SQL语句创建、删除数据库 #一、MySQL的体系结构 ##1、客户端(连接者) MySQL的客户端可以是某个客户…

vue2-006——使用脚手架搭建vue2项目+项目结构分析

一、创建项目&#xff1a;vue create 项目名 D:\EnyiWang\Documents\myStudy\vue>vue create vue_testVue CLI v5.0.8 ? Please pick a preset: Default ([Vue 2] babel, eslint)Vue CLI v5.0.8 ✨ Creating project in D:\EnyiWang\Documents\myStudy\vue\vue_test. &am…

Java基准测试工具JMH的简介与使用

JMH是一套Java基准测试工具&#xff0c;用于对Java执行进行基准测试以及生成测试报告。平时应用于Java一些基础Api或者一些工具类这种离开网络因素的纯系统测试。 使用方式 maven引入&#xff1a; <dependency><groupId>org.openjdk.jmh</groupId><art…

postman和Jmeter做接口测试的区别(经验之谈)

接口测试的目的 API 测试作为集成测试的一部分&#xff0c;经过被测应用的接口&#xff08;API&#xff09;来确定是否在功能、可靠性、性能和安全方面达到预期的软件测试。因为 API 都没有 GUI 界面&#xff0c;API 测试都是在通信层进行的。 1.建立接口用例集 Postman功能…

QT visual stdio加载动态库报错126问题

报错126是找不到指定的模块 QT 查看构建目录&#xff0c;将依赖的动态库放到该目录下即可成功 visual stdio将依赖的动态库放到运行目录 在vs中使用导出类的动态库时&#xff0c;不但需要将对应的.dll放到对应的目录下&#xff0c;还需要将该动态库对应的.lib添加到如下配置才…

AJAX技术-04-- 跨域说明

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1 同源策略同源策略介绍规定要求 请求协议://域名:端口号 关于同源策略练习关于同源策略总结 2.JSONPJSONP原理说明关于JSONP优化 3.CORS介绍介绍不允许跨域说明跨域…

JavaScript解构数组

还记得之前我们是如何读取到数组里面的元素的么&#xff1f; const arr [2, 3, 4]; const a arr[0]; const b arr[1]; const c arr[2];然后通过这个方式去读取数组中的数据&#xff1b; 现在我们可以使用解构赋值的方法去实现 const [x, y, z] arr; console.log(x, y, …