GD32F103 硬件 IIC

news2024/9/21 20:51:50

1. 硬件IIC 

1. 硬件IIC的框图 

如果MCU做为主机SCL就做为输出,做从机SCL就做为输入。

主机:

当MCU作为主机发送数据流程从数据缓冲寄存器里拿到移位寄存器。在从移位寄存器一位一位发送。

当MCU作为主机接收数据流程先放到移位寄存器。在从移位寄存器放到数据缓冲寄存器。然后读取即可。读取的是一个字节。

从机:对主机发送的地址进行判断。CRC计算/校验。

2. 7位地址与10位地址。 

对于10位地址分两次发。7位地址一次就可以了。

 

3. 多个主机问题。

CLK2的决定(以低电平为准)线与功能。

 

 主机2SDA发起。主机1靠边站。

 4. 具体的寄存器

 

2. OLED介绍 

1. OLED的简介 

 

 2. OLED IIC通信配置。

首先OLED要选择通信模式。可以IIC,SPI通信。

把 BS0,BS1,BS2分别设置成 0,1,0就是选择IIC通信。

 

64行分成8页。相当于一页有8行。 

 

一页。6行来显色。 

  

3. dome (硬件IIC读取LM75以及OLED) 

 1. OLED的唯一地址。(查手册)

 

2. 主机发送的流程。 (数据手册)

1.   首先,软件应该使能 I2C 外设时钟,以及配置 I2C_CTL1 中时钟相关寄存器来确保正确
I2C 时序。使能和配置以后, I2C 运行在默认的从机模式状态,等待 START 信号,随

 后等待I2C总线寻址。

2.  软件将START位置1,在I2C总线上产生一个START信号。
3. 发送一个START信号后,l2C硬件将I2C_STATO的SBSEND位置1然后进入主机模式。现
在软件应该读I2C STATO寄存器然后写一个7位地址位或10位地址的地址头到I2C DATA
寄存器来清除SBSEND位。当SBSEND位被清O时,I2C就开始发送地址或者地址头到I2C
总线。如果发送的地址是10位地址的地址头,硬件在发送地址头的时候会将ADD10SEND
位置1,软件应该通过读I2C STATO寄存器然后写10位低地址到I2C DATA来清除
ADD10SEND位。
4.  7位或10位的地址位发送出去之后,I2C硬件将ADDSEND位置1,软件通过读I2C_STAT0
寄存器然后读l2C_STAT1寄存器清除ADDSEND位。
5.  l2C进入数据发送状态,因为移位寄存器和数据寄存器I2C DATA都是空的,所以硬件将
TBE位置1。此时软件可以写第一个字节数据到I2C DATA寄存器,但是TBE位此时不会被
清零,因为写入I2C DATA寄存器的字节会被立即移入内部移位寄存器。当移位寄存器非
空时,12C就开始发送数据到总线。
6.  在第一个字节的发送过程中,软件可以写第二个字节到I2C_DATA,此时TBE会被清零,
因为I2C_DATA寄存器和移位寄存器都不为空。
7.  任意时刻TBE被置1,软件都可以向I2C_DATA寄存器写入一个字节,只要还有数据待发送。
8.  在倒数第二个字节发送过程中,软件写入最后一个字节数据到I2C DATA来清除TBE标志
位,此后就不用关心TBE位的状态。TBE位会在倒数第二个字节发送完成后被置起,直到
发送STOP信号时被清零。
最后一个字节发送结束后,I2C主机将BTC位置起,因为移位寄存器和I2C DATA寄存器此时都
为空。软件此时应该配置STOP来发送一个STOP信号,此后TBE和BTC状态位都将被清0。

3. 主机接收的流程。 (数据手册) 

在主机接收模式下,主机需要为最后一个字节接收产生 NACK ,然后发送 STOP 信号。因此,需
要特别注意以确保最后接收到数据的正确性。
1.  首先,软件应该使能l2C外设时钟,以及配置I2C_CTL1中时钟相关寄存器来确保正确的
12C时序。使能和配置以后,I2C运行在默认的从机模式状态,等待START信号,随后等待
I2C总线寻址。
2. 软件将START位置1,从而在I2C总线上产生一个START信号。
3. 发送一个START信号后,I2C硬件将I2C STATO寄存器的SBSEND位置1然后进入主机模
式。现在软件应该读I2C STATO寄存器然后写一个7位地址位或10位地址的地址头到
I2C_DATA寄存器来清除SBSEND位。当SBSEND位被清O时,I2C就开始发送地址或者地
址头到I2C总线。如果发送的地址是10位地址的地址头,硬件在发送地址头的时候会先将
ADD10SEND 位置 1 ,软件应该通过读 I2C_STAT0 寄存器然后写 10 位低地址到 I2C_DATA
来清除 ADD10SEND 位。
4. 7 位或 10 位的地址位发送出去之后, I2C 硬件将 ADDSEND 位置 1 ,软件应该通过读
I2C_STAT0 寄存器然后读 I2C_STAT1 寄存器清除 ADDSEND 位。如果地址是 10 位格式,软
件应该再次将 START 位置 1 来重新产生一个 START 。在 START 产生后, SBSEND 位会被置
1 。软件应该通过先读 I2C_STAT0 然后写地址头到 I2C_DATA 来清除 SBSEND 位,然后地
址头被发到 I2C 总线, ADDSEND 再次被置 1 。软件应该再次通过先读 I2C_STAT0 然后读
I2C_STAT1 来清除 ADDSEND 位。
5.   当接收到第一个字节时,硬件会将 RBNE 位置 1 。此时软件可以从 I2C_DATA 寄存器读取第
一个字节,之后 RBNE 位被清 0
6.   此后任何时候 RBNE 被置 1 ,软件就可以从 I2C_DATA 寄存器读取一个字节。
7.   接收完倒数第二个字节( N-1 )数据之后,软件应该立即将 ACKEN 位清 0 ,并将 STOP 位置
1 ,这一过程需要在最后一个字节接收完毕之前完成,以确保 NACK 发送给最后一个字节。
8.   最后一个字节接收完毕后, RBNE 位被置 1 ,软件可以读取最后一个字节。由于 ACKEN
经在前一步骤中被清 0 I2C 不再为最后一个字节发送 ACK ,并在最后一个字节发送完毕后
产生一个 STOP 信号。
以上步骤要求字节数目 N>1 ,如果 N=1 ,步骤 7 应该在步骤 4 之后就执行,且需要在字节接收完
成之前完成。

4. 代码实现 

lm75a_temp.h

#ifndef __LM75A_TEMP_H
#define __LM75A_TEMP_H

#include "gd32f10x.h"
#include "i2c.h"

#define LM75A_I2C_ADDR  0x9E   //LM75A的唯一从机地址

#define LM75A_TEMP_REG  0x00   /* 温度寄存器的指针地址 */
#define LM75A_CONF_REG  0x01   /* 配置寄存器(Conf)*/
#define LM75A_THYST_REG 0x10   /* 滞后寄存器(Thyst) */
#define LM75A_TOS_REG   0x11   /* 过热关断寄存器(Tos) */



float lm75a_get_temp(void);     //获取温度传感器的温度值

void lm75a_read_temp_reg(uint8_t lm75a_id, uint8_t *p);  //读温度寄存器的值

#endif

lm75a_temp.c

#include "lm75a_temp.h"

// 读温度传感器的温度寄存器的值并转换为温度值
float lm75a_get_temp(void){
	float temp_result;
	//读温度寄存器值
	uint8_t byte_data[2];
	lm75a_read_temp_reg(LM75A_I2C_ADDR, byte_data);
	
	//将温度寄存器值转为温度值
	uint16_t temp_reg = byte_data[0]<<3 | byte_data[1]>>5;
	
	if((temp_reg & 0x0400) == 0){
		temp_result = temp_reg * 0.125;
	}else{
		temp_reg = (~((temp_reg&0x03ff)-1)) & 0x03ff;    //补码到原码转换
		temp_result = temp_reg * (-0.125);
	}
	
	return temp_result;
}



/***
功能:读温度寄存器的值
输入:
	uint8_t lm75a_id: lm75a的iic从机地址
	uint8_t *p:读取结果存放的位置
返回:无
*****/
void lm75a_read_temp_reg(uint8_t lm75a_id, uint8_t *p){
	/******给LM75A写温度寄存器的指针字节********/   // 使用了I2C0(主模式)写功能,
  
	while(i2c_flag_get(I2C0, I2C_FLAG_I2CBSY));    // 如果I2C0繁忙,空等
  
	i2c_start_on_bus(I2C0);                        // 在I2C0上生成一个起始位
	while(!i2c_flag_get(I2C0, I2C_FLAG_SBSEND));   // 如果起始位还没有发送,空等
  
	i2c_master_addressing(I2C0, lm75a_id, I2C_TRANSMITTER); //发送地址,发送模式
	while(!i2c_flag_get(I2C0, I2C_FLAG_ADDSEND));  // 如果地址还没有发送,空等
  
	i2c_flag_clear(I2C0, I2C_FLAG_ADDSEND);   /* 清除I2C_FLAG_ADDSEND标志位 */
  
	while(!i2c_flag_get(I2C0, I2C_FLAG_TBE)); // I2C_FLAG_TBE标志是否空闲
	i2c_data_transmit(I2C0, LM75A_TEMP_REG);  // 发送温度传感器的地址
  
	while(!i2c_flag_get(I2C0, I2C_FLAG_TBE)); // I2C_FLAG_TBE标志是否空闲
	i2c_stop_on_bus(I2C0);                    // 停止信号
  
	while(I2C_CTL0(I2C0) & 0x20);             // 判断STOP是否发送完成
	
	/******读LM75A温度寄存器里面的两个字节的值********/  //使用了I2C0(主模式)读功能
	i2c_ackpos_config(I2C0, I2C_ACKPOS_NEXT);        //设置应答的位置配置 (下一个)
	
	while(i2c_flag_get(I2C0, I2C_FLAG_I2CBSY));    // 如果I2C0繁忙,空等
  
	i2c_start_on_bus(I2C0);                        // 在I2C0上生成一个起始位
	while(!i2c_flag_get(I2C0, I2C_FLAG_SBSEND));   // 如果起始位还没有发送,空等
  
	i2c_master_addressing(I2C0, lm75a_id, I2C_RECEIVER); //发送地址,接收模式
  
	i2c_ack_config(I2C0, I2C_ACK_DISABLE); /* 从机是否发送ACK应答 */
  
	while(!i2c_flag_get(I2C0, I2C_FLAG_ADDSEND)); /* 地址是否发送完成 */
  
	i2c_flag_clear(I2C0, I2C_FLAG_ADDSEND); /* 清除I2C_FLAG_ADDSEND标志位 */
	
	//从I2C_DATA读值
	while(!i2c_flag_get(I2C0, I2C_FLAG_BTC));     // 字节是否传输完成 
  
	while(!i2c_flag_get(I2C0, I2C_FLAG_RBNE));    // 如果I2C_DATA为空,空等
	*p = i2c_data_receive(I2C0);
  
	while(!i2c_flag_get(I2C0, I2C_FLAG_RBNE));    // 如果I2C_DATA为空,空等
	*(p+1) = i2c_data_receive(I2C0); 
  
	i2c_stop_on_bus(I2C0);
	while(I2C_CTL0(I2C0) & 0x200);
	
	i2c_ackpos_config(I2C0, I2C_ACKPOS_CURRENT);        // 重新设置应答的位置
	i2c_ack_config(I2C0, I2C_ACK_ENABLE);
}

oled_i2c.h

#ifndef __OLED_H
#define __OLED_H

#include "gd32f10x.h"
#include "i2c.h"

#define OLED_I2C_ADDR      0x78

#define OLED_I2C_CMD_ADDR  0x00
#define OLED_I2C_DATA_ADDR 0x40

#define MAX_COLUMN 132

void i2c_write_byte(uint8_t i2c_addr, uint8_t i2c_data);

void oled_write_command(uint8_t oled_cmd); 
void oled_write_data(uint8_t oled_data); 

void oled_init(void);

void oled_display_white(void);							// OLED 白屏显示
void oled_clear_all(void);								  // OLED 清屏显示
void oled_fill(uint8_t fill_data);                      // 单一色度填充OLED屏

void oled_set_pos(uint8_t x, uint8_t y);                // 设置坐标
void oled_show_char(uint8_t x, uint8_t y, uint8_t chr, uint8_t char_size);    // 显示字符
void oled_show_string(uint8_t x, uint8_t y, uint8_t *str, uint8_t char_size); // 显示字符串


void oled_show_error(uint8_t x, uint16_t y, uint8_t *err);                    // 显示错误提示
	
#endif

 oled_i2c.c

#include "oled_i2c.h"
#include "oled_font.h"

/**
* 功能:
* 输入:
*     1)uint8_t i2c_addr, 
*     2)uint8_t i2c_data

**/
void i2c_write_byte(uint8_t i2c_addr, uint8_t i2c_data){
	while(i2c_flag_get(I2C0, I2C_FLAG_I2CBSY));
  
	i2c_start_on_bus(I2C0);
	while(!i2c_flag_get(I2C0, I2C_FLAG_SBSEND));    // 进入主机模式
  
	i2c_master_addressing(I2C0, OLED_I2C_ADDR, I2C_TRANSMITTER);
	while(!i2c_flag_get(I2C0, I2C_FLAG_ADDSEND));   // 判断地址发送出去
  
	i2c_flag_clear(I2C0, I2C_FLAG_ADDSEND);         // 清除ADDSEND位
  
	while(SET != i2c_flag_get(I2C0, I2C_FLAG_TBE)); // 进入数据发送状态(命令或者数据地址)
	i2c_data_transmit(I2C0, i2c_addr);
  
	while(!i2c_flag_get(I2C0, I2C_FLAG_BTC));
	i2c_data_transmit (I2C0, i2c_data);  // (要发的命令或者数据指令的具体数据)
  
	while(!i2c_flag_get(I2C0, I2C_FLAG_BTC));
	i2c_stop_on_bus (I2C0);
  
	while(I2C_CTL0(I2C0)&0x0200);
}

/**
* 功能:
* 输入:oled_cmd:oled的控制命令
**/
void oled_write_command(uint8_t oled_cmd){
	i2c_write_byte(OLED_I2C_CMD_ADDR, oled_cmd); 
}

/**
* 功能:
* 输入:oled_data:要发送给oled的数据
**/
void oled_write_data(uint8_t oled_data){
	i2c_write_byte(OLED_I2C_DATA_ADDR, oled_data); 
}

/**
* 功能:
* 输入:无
**/
void oled_init(void){
	oled_write_command(0xAE);// 0xAE:关显示,0xAF:开显示
	
	oled_write_command(0x00);// 设置开始地址的低字节       
	oled_write_command(0x10);// 设置开始地址的高字节
	
	oled_write_command(0xd5);// 命令头,设置显示时钟分频比/振荡器频率
	oled_write_command(0x80);// 设置分割比率,设置时钟为100帧/秒
	
	oled_write_command(0xa8);// 命令头,设置多路复用率(1 to 64)
	oled_write_command(0x3f);// --1/64 duty
	
	oled_write_command(0xd3);// 命令头,设置显示偏移移位映射RAM计数器(0x00~0x3F)
	oled_write_command(0x00);// 不偏移
	
	oled_write_command(0x00);// 写入页位置(0xB0~7)
	oled_write_command(0x40);// 显示开始线
	
	oled_write_command(0x8d);// VCC电源
	oled_write_command(0x14);// --set(0x10) disable
	
	oled_write_command(0xa1);// 设置段重新映射
	oled_write_command(0xc8);// 设置Y轴扫描方向,0xc0上下反置 ,0xc8正常(上边为0行)
	
	oled_write_command(0xda);// 命令头,--set com pins hardware configuration
	oled_write_command(0x12);
	
	oled_write_command(0x81);// 对比度,指令:0x81,数据:0~255(255最高)
	oled_write_command(0xff);
	
	oled_write_command(0xd9);// 命令头,--set pre-charge period
	oled_write_command(0xf1);// Set Pre-Charge as 15 Clocks & Discharge as 1 Clock
	
	oled_write_command(0xdb);// 命令头,--set vcomh
	oled_write_command(0x30);// Set VCOM Deselect Level
	
	oled_write_command(0x20);// 水平寻址设置
	oled_write_command(0x00);
	
	oled_write_command(0xa4);// 0xa4:正常显示,0xa5:整体点亮
	oled_write_command(0xa6);// 0xa6:正常显示,0xa7:反色显示
	
	oled_write_command(0xAF);// 0xAE:关显示,0xAF:开显示
}

// OLED显示单一色度
void oled_fill(uint8_t fill_data){
	uint8_t i=0, n;
	for(i = 0; i < 8; i++){
		oled_write_command (0xB0+i);    //设置页地址(0~7)
		oled_write_command (0x00);      //设置显示位置—列低地址
		oled_write_command (0x10);      //设置显示位置—列高地址  		
		for(n = 0; n < 132; n++){
			oled_write_data(fill_data);
		}
	}
}

// OLED 白屏显示
void oled_display_white(void){
	oled_fill(0xFF);
}

// OLED 清屏显示
void oled_clear_all(void){

	oled_fill(0x00);
}

// OLED打开
void oled_on(){
	oled_write_command(0xAF);  // 开启显示
	oled_write_command(0x8D);  // 设置电荷泵
	oled_write_command(0x14);  // 开启电荷泵
}

// OLED关闭
void oled_off(){
	oled_write_command(0xAF);  // 开启显示
	oled_write_command(0x8D);  // 设置电荷泵
	oled_write_command(0x10);  // 关闭电荷泵
}

// OLED设置显示位置
void oled_set_pos(uint8_t x, uint8_t y){
	oled_write_command(0xB0 + y);
	oled_write_command((x & 0xf0) >> 4 | 0x10 );
	oled_write_command((x & 0x0f) | 0x01 );
}



// 显示char字符
void oled_show_char(uint8_t x, uint8_t y, uint8_t chr, uint8_t char_size){
	uint8_t c_index = 0, i = 0;
	
	c_index = chr - ' ';  // 获取chr在字模数组中的序号
	if(char_size == 16){
		if(x > MAX_COLUMN - 8){ //如果超出了屏幕的显示宽度,则换到下一行重新开始
			x = 0;
			y += 2;
		}
		oled_set_pos(x, y);
		for(i = 0; i < 8; i++){
			oled_write_data(F8X16[c_index*16 + i]);
		}
		oled_set_pos(x, y+1);
		for(i = 0; i < 8; i++){
			oled_write_data(F8X16[c_index*16 + i + 8]);
		}
	}else if(char_size == 8){
		if(x > MAX_COLUMN - 6){ //如果超出了屏幕的显示宽度,则换到下一行重新开始
			x = 0;
			y += 1;
		}
		oled_set_pos(x, y);
		for(i = 0; i < 6; i++){
			oled_write_data(F6x8[c_index][i]);
		}
	}else{
		oled_show_error(x, y, (uint8_t *)"wrong char_size setted.");
	}
}

// 显示字符串
void oled_show_string(uint8_t x, uint8_t y, uint8_t *str, uint8_t char_size){
	uint8_t i = 0;
	while(str[i] != '\0'){
		oled_show_char(x, y, str[i], char_size);
		if(char_size == 16){
			x += 8;
			if(x > MAX_COLUMN - 8){
				x = 0;
				y += 2;
			}
		}else if(char_size == 8){
			x += 6;
			if(x > MAX_COLUMN - 8){
				x = 0;
				y += 1;
			}
		}
		i++;
	}
}

// 在(x,y)处显示“error!”信息
void oled_show_error(uint8_t x, uint16_t y, uint8_t *err){
	oled_show_string(x, y, err, 16);
}

oled_font.h

#ifndef __OLED_FONT_H
#define __OLED_FONT_H 	   
//常用ASCII表
//偏移量32
//ASCII字符集
//偏移量32
//大小:12*6
/************************************6*8的点阵************************************/
const unsigned char F6x8[][6] =		
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,// sp
0x00, 0x00, 0x00, 0x2f, 0x00, 0x00,// !
0x00, 0x00, 0x07, 0x00, 0x07, 0x00,// "
0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14,// #
0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12,// $
0x00, 0x62, 0x64, 0x08, 0x13, 0x23,// %
0x00, 0x36, 0x49, 0x55, 0x22, 0x50,// &
0x00, 0x00, 0x05, 0x03, 0x00, 0x00,// '
0x00, 0x00, 0x1c, 0x22, 0x41, 0x00,// (
0x00, 0x00, 0x41, 0x22, 0x1c, 0x00,// )
0x00, 0x14, 0x08, 0x3E, 0x08, 0x14,// *
0x00, 0x08, 0x08, 0x3E, 0x08, 0x08,// +
0x00, 0x00, 0x00, 0xA0, 0x60, 0x00,// ,
0x00, 0x08, 0x08, 0x08, 0x08, 0x08,// -
0x00, 0x00, 0x60, 0x60, 0x00, 0x00,// .
0x00, 0x20, 0x10, 0x08, 0x04, 0x02,// /
0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E,// 0
0x00, 0x00, 0x42, 0x7F, 0x40, 0x00,// 1
0x00, 0x42, 0x61, 0x51, 0x49, 0x46,// 2
0x00, 0x21, 0x41, 0x45, 0x4B, 0x31,// 3
0x00, 0x18, 0x14, 0x12, 0x7F, 0x10,// 4
0x00, 0x27, 0x45, 0x45, 0x45, 0x39,// 5
0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30,// 6
0x00, 0x01, 0x71, 0x09, 0x05, 0x03,// 7
0x00, 0x36, 0x49, 0x49, 0x49, 0x36,// 8
0x00, 0x06, 0x49, 0x49, 0x29, 0x1E,// 9
0x00, 0x00, 0x36, 0x36, 0x00, 0x00,// :
0x00, 0x00, 0x56, 0x36, 0x00, 0x00,// ;
0x00, 0x08, 0x14, 0x22, 0x41, 0x00,// <
0x00, 0x14, 0x14, 0x14, 0x14, 0x14,// =
0x00, 0x00, 0x41, 0x22, 0x14, 0x08,// >
0x00, 0x02, 0x01, 0x51, 0x09, 0x06,// ?
0x00, 0x32, 0x49, 0x59, 0x51, 0x3E,// @
0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C,// A
0x00, 0x7F, 0x49, 0x49, 0x49, 0x36,// B
0x00, 0x3E, 0x41, 0x41, 0x41, 0x22,// C
0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C,// D
0x00, 0x7F, 0x49, 0x49, 0x49, 0x41,// E
0x00, 0x7F, 0x09, 0x09, 0x09, 0x01,// F
0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A,// G
0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F,// H
0x00, 0x00, 0x41, 0x7F, 0x41, 0x00,// I
0x00, 0x20, 0x40, 0x41, 0x3F, 0x01,// J
0x00, 0x7F, 0x08, 0x14, 0x22, 0x41,// K
0x00, 0x7F, 0x40, 0x40, 0x40, 0x40,// L
0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F,// M
0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F,// N
0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E,// O
0x00, 0x7F, 0x09, 0x09, 0x09, 0x06,// P
0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E,// Q
0x00, 0x7F, 0x09, 0x19, 0x29, 0x46,// R
0x00, 0x46, 0x49, 0x49, 0x49, 0x31,// S
0x00, 0x01, 0x01, 0x7F, 0x01, 0x01,// T
0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F,// U
0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F,// V
0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F,// W
0x00, 0x63, 0x14, 0x08, 0x14, 0x63,// X
0x00, 0x07, 0x08, 0x70, 0x08, 0x07,// Y
0x00, 0x61, 0x51, 0x49, 0x45, 0x43,// Z
0x00, 0x00, 0x7F, 0x41, 0x41, 0x00,// [
0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55,// 55
0x00, 0x00, 0x41, 0x41, 0x7F, 0x00,// ]
0x00, 0x04, 0x02, 0x01, 0x02, 0x04,// ^
0x00, 0x40, 0x40, 0x40, 0x40, 0x40,// _
0x00, 0x00, 0x01, 0x02, 0x04, 0x00,// '
0x00, 0x20, 0x54, 0x54, 0x54, 0x78,// a
0x00, 0x7F, 0x48, 0x44, 0x44, 0x38,// b
0x00, 0x38, 0x44, 0x44, 0x44, 0x20,// c
0x00, 0x38, 0x44, 0x44, 0x48, 0x7F,// d
0x00, 0x38, 0x54, 0x54, 0x54, 0x18,// e
0x00, 0x08, 0x7E, 0x09, 0x01, 0x02,// f
0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C,// g
0x00, 0x7F, 0x08, 0x04, 0x04, 0x78,// h
0x00, 0x00, 0x44, 0x7D, 0x40, 0x00,// i
0x00, 0x40, 0x80, 0x84, 0x7D, 0x00,// j
0x00, 0x7F, 0x10, 0x28, 0x44, 0x00,// k
0x00, 0x00, 0x41, 0x7F, 0x40, 0x00,// l
0x00, 0x7C, 0x04, 0x18, 0x04, 0x78,// m
0x00, 0x7C, 0x08, 0x04, 0x04, 0x78,// n
0x00, 0x38, 0x44, 0x44, 0x44, 0x38,// o
0x00, 0xFC, 0x24, 0x24, 0x24, 0x18,// p
0x00, 0x18, 0x24, 0x24, 0x18, 0xFC,// q
0x00, 0x7C, 0x08, 0x04, 0x04, 0x08,// r
0x00, 0x48, 0x54, 0x54, 0x54, 0x20,// s
0x00, 0x04, 0x3F, 0x44, 0x40, 0x20,// t
0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C,// u
0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C,// v
0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C,// w
0x00, 0x44, 0x28, 0x10, 0x28, 0x44,// x
0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C,// y
0x00, 0x44, 0x64, 0x54, 0x4C, 0x44,// z
0x14, 0x14, 0x14, 0x14, 0x14, 0x14,// horiz lines
};

/****************************************8*16的点阵************************************/
const unsigned char F8X16[]=	  
{
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//  0
  0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00,//! 1
  0x00,0x10,0x0C,0x06,0x10,0x0C,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//" 2
  0x40,0xC0,0x78,0x40,0xC0,0x78,0x40,0x00,0x04,0x3F,0x04,0x04,0x3F,0x04,0x04,0x00,//# 3
  0x00,0x70,0x88,0xFC,0x08,0x30,0x00,0x00,0x00,0x18,0x20,0xFF,0x21,0x1E,0x00,0x00,//$ 4
  0xF0,0x08,0xF0,0x00,0xE0,0x18,0x00,0x00,0x00,0x21,0x1C,0x03,0x1E,0x21,0x1E,0x00,//% 5
  0x00,0xF0,0x08,0x88,0x70,0x00,0x00,0x00,0x1E,0x21,0x23,0x24,0x19,0x27,0x21,0x10,//& 6
  0x10,0x16,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//' 7
  0x00,0x00,0x00,0xE0,0x18,0x04,0x02,0x00,0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x00,//( 8
  0x00,0x02,0x04,0x18,0xE0,0x00,0x00,0x00,0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x00,//) 9
  0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00,//* 10
  0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x1F,0x01,0x01,0x01,0x00,//+ 11
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xB0,0x70,0x00,0x00,0x00,0x00,0x00,//, 12
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,//- 13
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,//. 14
  0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04,0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00,/// 15
  0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,//0 16
  0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//1 17
  0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,//2 18
  0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,//3 19
  0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,//4 20
  0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,//5 21
  0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,//6 22
  0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,//7 23
  0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,//8 24
  0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,//9 25
  0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,//: 26
  0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x00,0x00,0x00,0x00,//; 27
  0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00,//< 28
  0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,//= 29
  0x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00,//> 30
  0x00,0x70,0x48,0x08,0x08,0x08,0xF0,0x00,0x00,0x00,0x00,0x30,0x36,0x01,0x00,0x00,//? 31
  0xC0,0x30,0xC8,0x28,0xE8,0x10,0xE0,0x00,0x07,0x18,0x27,0x24,0x23,0x14,0x0B,0x00,//@ 32
  0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20,//A 33
  0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00,//B 34
  0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,//C 35
  0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,//D 36
  0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00,//E 37
  0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00,//F 38
  0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00,//G 39
  0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20,//H 40
  0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//I 41
  0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00,//J 42
  0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00,0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00,//K 43
  0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00,//L 44
  0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00,//M 45
  0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00,//N 46
  0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,//O 47
  0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00,//P 48
  0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00,//Q 49
  0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20,//R 50
  0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00,//S 51
  0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//T 52
  0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//U 53
  0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00,//V 54
  0xF8,0x08,0x00,0xF8,0x00,0x08,0xF8,0x00,0x03,0x3C,0x07,0x00,0x07,0x3C,0x03,0x00,//W 55
  0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20,//X 56
  0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//Y 57
  0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00,//Z 58
  0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x00,//[ 59
  0x00,0x0C,0x30,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x06,0x38,0xC0,0x00,//\ 60
  0x00,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x7F,0x00,0x00,0x00,//] 61
  0x00,0x00,0x04,0x02,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//^ 62
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,//_ 63
  0x00,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//` 64
  0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20,//a 65
  0x08,0xF8,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00,//b 66
  0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00,//c 67
  0x00,0x00,0x00,0x80,0x80,0x88,0xF8,0x00,0x00,0x0E,0x11,0x20,0x20,0x10,0x3F,0x20,//d 68
  0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00,//e 69
  0x00,0x80,0x80,0xF0,0x88,0x88,0x88,0x18,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//f 70
  0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x6B,0x94,0x94,0x94,0x93,0x60,0x00,//g 71
  0x08,0xF8,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//h 72
  0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//i 73
  0x00,0x00,0x00,0x80,0x98,0x98,0x00,0x00,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,//j 74
  0x08,0xF8,0x00,0x00,0x80,0x80,0x80,0x00,0x20,0x3F,0x24,0x02,0x2D,0x30,0x20,0x00,//k 75
  0x00,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//l 76
  0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,//m 77
  0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//n 78
  0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//o 79
  0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00,0x80,0xFF,0xA1,0x20,0x20,0x11,0x0E,0x00,//p 80
  0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x0E,0x11,0x20,0x20,0xA0,0xFF,0x80,//q 81
  0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x00,//r 82
  0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00,//s 83
  0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x00,0x00,//t 84
  0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20,//u 85
  0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x00,0x01,0x0E,0x30,0x08,0x06,0x01,0x00,//v 86
  0x80,0x80,0x00,0x80,0x00,0x80,0x80,0x80,0x0F,0x30,0x0C,0x03,0x0C,0x30,0x0F,0x00,//w 87
  0x00,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x31,0x2E,0x0E,0x31,0x20,0x00,//x 88
  0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x81,0x8E,0x70,0x18,0x06,0x01,0x00,//y 89
  0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x21,0x30,0x2C,0x22,0x21,0x30,0x00,//z 90
  0x00,0x00,0x00,0x00,0x80,0x7C,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40,//{ 91
  0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,//| 92
  0x00,0x02,0x02,0x7C,0x80,0x00,0x00,0x00,0x00,0x40,0x40,0x3F,0x00,0x00,0x00,0x00,//} 93
  0x00,0x06,0x01,0x01,0x02,0x02,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//~ 94
};

#endif

 main.c

#include <stdio.h>
#include "systick.h"
#include "usart_comm.h"
#include "i2c.h"
#include "lm75a_temp.h"
#include "oled_i2c.h"

int main(){
	systick_config();
	i2c_init();
	
	oled_init();
	oled_clear_all();
	oled_show_string(24, 0, (uint8_t *)"hello", 16);
	float temp_result = 0.0;
	char temp_string[80]; 

	while(1){
		  temp_result = lm75a_get_temp(); /* 获取温度 */
		  sprintf(temp_string, "temperature is: %.3f C.", temp_result);
		  oled_show_string(0, 2, (uint8_t *)temp_string, 16); /* 显示到OLED */
		  delay_1ms(1000);  //等待1s
	}
}

OLED具体初始化设置看手册。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微信小程序软件著作权申请成功!

软件著作权登记是对自己开发的软件享有著作权的一种保障&#xff0c;也是对自己开发能力的一种认证&#xff0c;在个人找工作或者公司拿项目资质审查时都可能发挥作用。我成功开发了一款微信小程序后&#xff0c;便了解了许多相关资料&#xff0c;花钱请代理代办速度快、省事&a…

Visopsys 0.92 发布

Visopsys 是一个 PC 机的操作系统&#xff0c;系统小型、快速而且开源。有着丰富的图形界面、抢先式多任务机制以及支持虚拟内存。Visopsys 视图兼容很多操作系统&#xff0c;但并不是他们的克隆版本。Visopsys 0.92 现已发布&#xff0c;此维护版本引入了多任务处理程序、文件…

C++标准模板(STL)- 类型支持 (定宽整数类型)(int8_t,int_fast8_t,int_least8_t,intmax_t,intptr_t)

定宽整数类型 类型 定义于头文件 <cstdint> int8_tint16_tint32_tint64_t (可选) 分别为宽度恰为 8、16、32 和 64 位的有符号整数类型 无填充位并对负值使用补码 &#xff08;仅若实现支持该类型才提供&#xff09; (typedef) int_fast8_tint_fast16_tint_fast32_tint…

进程调度算法之先来先服务(FCFS),短作业优先(SJF)以及高响应比优先(HRRN)

1.先来先服务&#xff08;FCFS&#xff09; first come first service 1.算法思想 主要从“公平”的角度考虑(类似于我们生活中排队买东西的例子) 2.算法规则 按照作业/进程到达的先后顺序进行服务。 3.用于作业/进程调度 用于作业调度时&#xff0c;考虑的是哪个作业先…

Spring 原理

它是一个全面的、企业应用开发一站式的解决方案&#xff0c;贯穿表现层、业务层、持久层。但是 Spring仍然可以和其他的框架无缝整合。 1 Spring 特点 轻量级控制反转面向切面容器框架集合 2 Spring 核心组件 3 Spring 常用模块 4 Spring 主要包 5 Spring 常用注解 bean…

【HTTP】URL结构、HTTP请求和响应的报文格式、HTTP请求的方法、常见的状态码、GET和POST有什么区别、Cookie、Session等重点知识汇总

目录 URL格式 HTTP请求和响应报文的字段&#xff1f; HTTP请求方法 常见的状态码 GET 和 POST 的区别 Cookie 和 Session URL格式 &#xff1f;&#xff1a;是用来分割URL的主体部分&#xff08;通常是路径&#xff09;和查询字符串&#xff08;query string&#xff09;…

MyBatisPlus(九)模糊查询

说明 模糊查询&#xff0c;对应SQL语句中的 like 语句&#xff0c;模糊匹配“要查询的内容”。 like /*** 查询用户列表&#xff0c; 查询条件&#xff1a;姓名包含 "J"*/Testvoid like() {String name "J";LambdaQueryWrapper<User> wrapper ne…

十天学完基础数据结构-第六天(树(Tree))

树的基本概念 树是一种层次性的数据结构&#xff0c;它由节点组成&#xff0c;这些节点按照层次关系相互连接。树具有以下基本概念&#xff1a; 根节点&#xff1a;树的顶部节点&#xff0c;没有父节点。 子节点&#xff1a;树中每个节点可以有零个或多个子节点。 叶节点&am…

力扣第102题 广度优先搜索 二叉数 c++

题目 102. 二叉树的层序遍历 中等 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[[3],[9,20…

八大排序算法汇总(C语言实现)

本专栏内容为&#xff1a;八大排序汇总 通过本专栏的深入学习&#xff0c;你可以了解并掌握八大排序以及相关的排序算法。 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;八大排序汇总 &#x1f69a;代码仓库&#xff1a;小小unicorn的代码仓库…

【1++的刷题系列】之双指针

&#x1f44d;作者主页&#xff1a;进击的1 &#x1f929; 专栏链接&#xff1a;【1的刷题系列】 文章目录 一&#xff0c;什么是双指针二&#xff0c;相关例题例一例二例三例四例五 一&#xff0c;什么是双指针 常见的双指针有两种形式&#xff1a;一种是对撞指针&#xff08…

tinymce富文本编辑器【tip】

项目场景&#xff1a; tinymce富文本编辑器在iview的modal框中显示的问题 问题描述 最近在使用tinymceiviewvue写项目&#xff0c;在富文本编辑器配合弹框一起使用时&#xff0c;总是存在问题&#xff1a;弹框弹出的时候&#xff0c;富文本编辑器不能点击&#xff0c;鼠标的光…

【软考】PV 操作

#国庆发生的那些事儿# 临界资源: 诸进程间需要互斥方式对其进行共享的资源&#xff0c;如打印机、磁带机等临界区: 每个进程中访问临界资源的那段代码称为临界区信号量: 是一种特殊的变量。 信号量的值与相应资源的使用情况有关: ①: 当信号量的值大于0时&#xff0c;表示当…

Lucene学习总结之Lucene的索引文件格式

四、具体格式 上面曾经交代过&#xff0c;Lucene保存了从Index到Segment到Document到Field一直到Term的正向信息&#xff0c;也包括了从Term到Document映射的反向信息&#xff0c;还有其他一些Lucene特有的信息。下面对这三种信息一一介绍。 4.1. 正向信息 Index –> Seg…

Spring 体系架构模块和三大核心组件介绍

Spring架构图 模块介绍 1. Spring Core&#xff08;核心容器&#xff09;&#xff1a;提供了IOC,DI,Bean配置装载创建的核心实现。 spring-core &#xff1a;IOC和DI的基本实现 spring-beans&#xff1a;BeanFactory和Bean的装配管理(BeanFactory) spring-context&#xff1…

LLMs 用强化学习进行微调 RLHF: Fine-tuning with reinforcement learning

让我们把一切都整合在一起&#xff0c;看看您将如何在强化学习过程中使用奖励模型来更新LLM的权重&#xff0c;并生成与人对齐的模型。请记住&#xff0c;您希望从已经在您感兴趣的任务上表现良好的模型开始。您将努力使指导发现您的LLM对齐。首先&#xff0c;您将从提示数据集…

<C++> 模板-上

目录 前言 一、函数模板 1. 概念 2. 格式 3. 原理 4. 函数模板的实例化 4.1 隐式实例化 4.2 显示实例化 5. 模板参数的匹配原则 5.1 5.2 5.3 二、类模板 1. 类模板定义格式 2. 类模板的实例化 总结 前言 如何实现一个通用的函数&#xff0c;函数可以实现两个类型的交换&…

C++_pen_友元

友元&#xff08;破坏封装&#xff09; 我故意让别人能使用我的私有成员 友元类 friend class B;友元函数 friend void func();友元成员函数 friend void A::func();例 #include <stdio.h>class A;class C{ public:void CprintA(A &c); };class B{ public:void Bpri…

jira 浏览器插件在问题列表页快速编辑问题标题

jira-issueTable-quicker 这是一个可以帮助我们在问题表格页快速编辑问题的浏览器插件 github 地址 功能介绍 jira 不可否认是一个可以帮助有效提高工作效率的工具&#xff0c;但是我们在使用 jira 时使用问题表格可以让我们看到跟多的内容而不用关注细节&#xff0c;但是目…

c与c++中的字符串

在c中&#xff0c;string本质上是一个类&#xff1b; string与char *有些区别&#xff1a; char*是一个指针&#xff1b;string是一个类&#xff0c;类内封装了char*&#xff0c;管理这一个字符串&#xff0c;是一个char*的容器 在使用string类型时&#xff0c;要加上其头文…