51单片机实验05 -点阵

目录

 一,熟悉矩阵led小灯

1,点亮矩阵的一只led

 2,点亮矩阵的一排led

3,点亮矩阵的全部led

static 关键字

unsigned 关键字

4,点阵的静态显示

 2)心形矩阵显示代码

3)效果

二,课后练习题

1、用点阵做一个9到0的倒计时牌显示。

1)效果

2)代码

2、尝试实现流水灯、数码管和点阵的同时显示。

1)效果

2)代码


资料见本文所在的专栏:

 一,熟悉矩阵led小灯

1,点亮矩阵的一只led

1)基础

2)代码 

#include<reg52.h>
sbit enled=P1^4;   // 138译码器使能  
sbit addr3=P1^3;
sbit addr2=P1^2;
sbit addr1=P1^1;
sbit addr0=P1^0; 
sbit led=P0^0;  // 这里只点亮led点阵的左上角第一个led小灯
void main(){enled=0;  // 控制点阵led	的 U4(138)使能,需要e2低电平addr3=0;	 // 控制点阵led	的 U4(138)使能,需要e1低电平addr2=0;   // y0输出低电平,使Q10晶体管开关打开,使led灯能够点亮addr1=0;addr0=0;led=0;    // 控制一只小灯点亮while(1);  // 长亮
}

 3)效果

 2,点亮矩阵的一排led

1)基础

2)代码

#include<reg52.h>
sbit enled=P1^4;   // 138译码器使能  
sbit addr3=P1^3;
sbit addr2=P1^2;
sbit addr1=P1^1;
sbit addr0=P1^0;
void main(){enled=0;  // 控制点阵led的 U4(138)使能,需要e2低电平addr3=0;	 // 控制点阵led的 U4(138)使能,需要e1低电平addr2=0;   // y0输出低电平,使Q10晶体管开关打开,使led灯能够点亮addr1=0;addr0=0;  // 选择了第1行的ledP0=0x00;    // 控制列上的led,如果写成0x01,则左边第一列不亮,剩下其它列的led亮while(1);  // 长亮
}

3)效果

3,点亮矩阵的全部led

1)代码

下面用到了定时器及中断器(在单片机中带有break关键字的switch语句和中断器是绝配,天造地设的一对)一旦中断器检测到break关键字,就会停下来。在动态显示中,不管是点阵还是数码管点亮的持续时间通常为1ms左右,然后切换到下一个数码管。这意味着在1ms的时间内,数码管应该能够完成从关闭到完全点亮,再到关闭的完整过程。就会有“鬼影”,即会有视觉残留,我们会看到小灯有明显的亮暗波动,所以定时器和中断器的使用就很有必要。

#include<reg52.h>
sbit enled=P1^4;   // 138译码器使能  
sbit addr3=P1^3;
sbit addr2=P1^2;
sbit addr1=P1^1;
sbit addr0=P1^0;
void main(){enled=0;  // 控制点阵led	的 U4(138)使能,需要e2低电平addr3=0;	 // 控制点阵led	的 U4(138)使能,需要e1低电平EA=1;		  // 总使能中断打开ET0=1;	  // 定时器T0使能中断打开TMOD=0x01;  // 定时器T0的模式为1TH0=0xFC;   // 定时1msTL0=0x67;TR0=1;  // 开启定时器T0while(1);  // 长亮
}void InterrutpTimer0()  interrupt 1{	  // 中断服务函数static  unsigned char rowmilisec=0; // 用于存储亮起的行,且是每一毫秒亮一行TMOD=0x01;   // 只要有溢出造成的中断,就将T0初始值重新赋值TH0=0xFC;   P0=0xFF;   //关闭段switch(rowmilisec){case 0:addr2=0;addr1=0;addr0=0;P0=0x00;rowmilisec++;break;	 case 1:addr2=0;addr1=0;addr0=1;P0=0x00;rowmilisec++;break;	case 2:addr2=0;addr1=1;addr0=0;P0=0x00;rowmilisec++;break;	 case 3:addr2=0;addr1=1;addr0=1;P0=0x00;rowmilisec++;break;		 case 4:addr2=1;addr1=0;addr0=0;P0=0x00;rowmilisec++;break;		case 5:addr2=1;addr1=0;addr0=1;P0=0x00;rowmilisec++;break;	 case 6:addr2=1;addr1=1;addr0=0;P0=0x00;rowmilisec++;break;		 case 7:addr2=1;addr1=1;addr0=1;P0=0x00;rowmilisec=0;break;}
}

在51单片机中,总使能中断EAEnable All Interrupt的缩写。具体来说,EA是中断允许寄存器(IE寄存器)中的一个位,用于控制是否允许CPU响应所有中断请求。

  • 当EA=0时,CPU会屏蔽所有中断请求,即不会响应任何中断。
  • 当EA=1时,CPU会开放所有中断请求,即会根据其他中断使能位(如ES、ET0、ET1、EX0、EX1等)的设置来响应相应的中断。

static 关键字

在函数内部声明一个变量为 static 时,该变量的生命周期会持续到程序执行完毕,而不是在函数返回时结束。此外,static 变量只会初始化一次,即当程序开始运行时。在后续的函数调用中,该变量会保持其上一次被修改后的值。

在中断服务函数 InterrutpTimer0 中,rowmilisec 被声明为 static 是为了确保它能在每次中断调用之间保持其值。这是一个定时器中断,它会在定时器溢出时定期被调用。由于 rowmilisec 用于跟踪已经过去的毫秒数(或行),所以需要它在每次中断之间保持其值,以便知道下一行应该是什么。

unsigned 关键字

unsigned 关键字指定了一个整数类型,它只能存储非负值。与 signed 类型(如 int)相比,unsigned 类型没有符号位,因此它可以存储两倍于相同大小 signed 类型的正数。

在上面的代码中rowmilisec 被用来作为一个计数器,从 0 计数到 7,然后回到 0。由于这个值永远不会是负数,所以使用 unsigned char 是合适的。这不仅可以确保值始终是非负的,而且还可以节省一个位(符号位)

2)效果

4,点阵的静态显示

1)基础 

经过点亮点阵的一只led,一排led,全部led灯相关操作,现在我们开始来让其静态的展示我们指定的图案。要绘制图案,就需要使用到《点阵液晶取模》程序。

对应软件及资源的网盘连接,见本文专栏。之后下载app里面的字模软件即可,如下👇 

之后绘制想要的图案请按照电子书的步骤来: 

 这里绘制出来的是心形图像并使用软件取模得到P0口所需要的值,如下👇

 2)心形矩阵显示代码

#include<reg52.h>
sbit enled=P1^4;   // 138译码器使能  
sbit addr3=P1^3;
sbit addr2=P1^2;
sbit addr1=P1^1;
sbit addr0=P1^0;
unsigned char code heart_matrix[]={  // 心型矩阵真值表0xFF,0x99,0x00,0x00,0x00,0x81,0xC3,0xE7 
};
void main(){enled=0;  // 控制点阵led	的 U4(138)使能,需要e2低电平addr3=0;	 // 控制点阵led	的 U4(138)使能,需要e1低电平EA=1;		  // 总使能中断打开ET0=1;	  // 定时器T0使能中断打开TMOD=0x01;  // 定时器T0的模式为1TH0=0xFC;   // 定时1msTL0=0x67;TR0=1;  // 开启定时器T0while(1);  // 长亮
}void InterrutpTimer0()  interrupt 1{	  // 中断服务函数static  unsigned char rowmilisec=0; // 用于存储亮起的行,且是每一毫秒亮一行// 只要有溢出造成的中断,就将T0初始值重新赋值TH0=0xFC;  TL0=0x67; P0=0xFF;  // 关闭列switch(rowmilisec){case 0:addr2=0;addr1=0;addr0=0;P0=heart_matrix[0];rowmilisec++;break;	 case 1:addr2=0;addr1=0;addr0=1;P0=heart_matrix[1];rowmilisec++;break;	case 2:addr2=0;addr1=1;addr0=0;P0=heart_matrix[2];rowmilisec++;break;	 case 3:addr2=0;addr1=1;addr0=1;P0=heart_matrix[3];rowmilisec++;break;		 case 4:addr2=1;addr1=0;addr0=0;P0=heart_matrix[4];rowmilisec++;break;		case 5:addr2=1;addr1=0;addr0=1;P0=heart_matrix[5];rowmilisec++;break;	 case 6:addr2=1;addr1=1;addr0=0;P0=heart_matrix[6];rowmilisec++;break;	 case 7:addr2=1;addr1=1;addr0=1;P0=heart_matrix[7];rowmilisec=0;break;	}  
}

3)效果

二,课后练习题

1、用点阵做一个9到0的倒计时牌显示。

1)效果

矩阵实现每隔1s倒计时(从9到0)

2)代码
 

#include<reg52.h>
sbit enled=P1^4;   // 138译码器使能  
sbit addr3=P1^3;
sbit addr2=P1^2;
sbit addr1=P1^1;
sbit addr0=P1^0;
unsigned char code matrix[10][8]={  // 数字矩阵真值表 {0xFF,0xC3,0xDB,0xDB,0xC3,0xDF,0xDF,0xFF},//9{0xFF,0xC3,0xDB,0xC3,0xDB,0xDB,0xC3,0xFF},//8  {0xFF,0xC3,0xDF,0xDF,0xDF,0xDF,0xDF,0xFF}, 	 //7{0xFF,0xC3,0xFB,0xC3,0xDB,0xDB,0xC3,0xFF},	 //6   {0xFF,0xC3,0xFB,0xC3,0xDF,0xDF,0xC3,0xFF},  //5{0xFF,0xEB,0xEB,0xEB,0xC3,0xEF,0xEF,0xFF},	 //4  {0xFF,0xC3,0xDF,0xC3,0xDF,0xDF,0xC3,0xFF},	//3{0xFF,0xC3,0xDF,0xDF,0xC3,0xFB,0xC3,0xFF},	//2	   {0xFF,0xDF,0xDF,0xDF,0xDF,0xDF,0xDF,0xFF},  // 1{0xFF,0xC3,0xDB,0xDB,0xDB,0xDB,0xC3,0xFF} //0};
void main(){enled=0;  // 控制点阵led	的 U4(138)使能,需要e2低电平addr3=0;	 // 控制点阵led	的 U4(138)使能,需要e1低电平EA=1;		  // 总使能中断打开ET0=1;	  // 定时器T0使能中断打开TMOD=0x01;  // 定时器T0的模式为1TH0=0xFC;   // 定时1msTL0=0x67;TR0=1;  // 开启定时器T0while(1);}
void  Timer0()  interrupt 1{	  // 中断服务函数static  unsigned char rowmilisec=0; static unsigned char 	 ind=0;static unsigned int  milisec=0;  //int容纳1000以上的数值// 只要有溢出造成的中断,就将T0初始值重新赋值TH0=0xFC;  TL0=0x67; P0=0xFF;switch(rowmilisec){case 0:addr2=0;addr1=0;addr0=0;P0=matrix[ind][0];rowmilisec++; break;	 case 1:addr2=0;addr1=0;addr0=1;P0=matrix[ind][1];rowmilisec++;break;	case 2:addr2=0;addr1=1;addr0=0;P0=matrix[ind][2];rowmilisec++;break;	 case 3:addr2=0;addr1=1;addr0=1;P0=matrix[ind][3];rowmilisec++; break;		 case 4:addr2=1;addr1=0;addr0=0;P0=matrix[ind][4];rowmilisec++; break;		case 5:addr2=1;addr1=0;addr0=1;P0=matrix[ind][5];rowmilisec++; break;	 case 6:addr2=1;addr1=1;addr0=0;P0=matrix[ind][6];rowmilisec++; break;	 case 7:addr2=1;addr1=1;addr0=1;P0=matrix[ind][7];rowmilisec=0;break;	default:break;}	   milisec++;if(milisec==1000){  //1s更新数字ind++;milisec=0;if(ind ==10){    // 倒计时一轮之后继续倒计时ind=0;}}
}


2、尝试实现流水灯、数码管和点阵的同时显示。

  • 点阵:从9倒计时到0(间隔1s);
  •  流水灯:从最左边往右1s移动一个,到头之后再从左开始;
  • 数码管:使用最左边的一支数码管,让其从9倒计时到0(间隔1s);

1)效果

点阵和数码管同时倒计时led流水灯从左到右

2)代码

#include<reg52.h>
sbit addr3 = P1^3;
sbit enled = P1^4;
void setTimer0(unsigned long ms);//设置定时器的定时毫秒数
void scan();//点阵,led流水灯,数码管扫描函数
unsigned char T0H_att = 0;	// 用来存储临时产生的定时器初始值
unsigned char T0L_att = 0;unsigned char code zzb_matrix[10][8]={  // 数字矩阵真值表 {0xFF,0xC3,0xDB,0xDB,0xC3,0xDF,0xDF,0xFF},//9{0xFF,0xC3,0xDB,0xC3,0xDB,0xDB,0xC3,0xFF},//8  {0xFF,0xC3,0xDF,0xDF,0xDF,0xDF,0xDF,0xFF}, 	 //7{0xFF,0xC3,0xFB,0xC3,0xDB,0xDB,0xC3,0xFF},	 //6   {0xFF,0xC3,0xFB,0xC3,0xDF,0xDF,0xC3,0xFF},  //5{0xFF,0xEB,0xEB,0xEB,0xC3,0xEF,0xEF,0xFF},	 //4  {0xFF,0xC3,0xDF,0xC3,0xDF,0xDF,0xC3,0xFF},	//3{0xFF,0xC3,0xDF,0xDF,0xC3,0xFB,0xC3,0xFF},	//2	   {0xFF,0xDF,0xDF,0xDF,0xDF,0xDF,0xDF,0xFF},  // 1{0xFF,0xC3,0xDB,0xDB,0xDB,0xDB,0xC3,0xFF} //0};
unsigned char code zzb_smg[]={//数码管显示字符转换表0~9(P0值)	0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,0x80, 0x90 //0~9
//	, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E	// A~F};
unsigned char code zzb_led[8] = { // 指定led亮起的P0值?数码管位0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};
unsigned char off_smg[]={  // 关闭数码管的段,消隐	    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
bit flag1s = 0;//1s定时标志,flag1s只存储一位,所以使用bit来声明定义
unsigned char interrupt_t0 = 0;//记录T0中断次数
static char row_matrix=-1;	// 矩阵的行,设置成-1是为了让它在i=0时,显示9,而不是8。	   
static unsigned char ind_smg=0;	// 数码管索引
void main()
{// unsigned long sec_smg = 0;	 // 数码管秒数enled = 0;setTimer0(1);	 //定时器定时1mswhile(1){if(flag1s == 1)		  {flag1s = 0;//sec_smg++; // 记录数码管显示的秒数,因为这里只显示9~0,所以不用sec_smg这个变量row_matrix++; //实现点阵的图片刷新(更新)if(row_matrix>9){  // 点阵只有8行,之所以本来应该是大于8就让它置零,是因为我们一开始设置了row_matrix=-1row_matrix=0;}	/*off_smg[0] = zzb_smg[sec%10];	 // 如果想要多位显示,可以把相应的代码块注释去掉off_smg[1] = zzb_smg[sec/10%10];off_smg[2] = zzb_smg[sec/100%10];off_smg[3] = zzb_smg[sec/1000%10];off_smg[4] = zzb_smg[sec/10000%10];*/off_smg[5] = zzb_smg[9-ind_smg]; // ind_smg=0,数码管显示9-0=9ind_smg++;if(ind_smg>9){ ind_smg=0;}	}}	
}
void scan()
{	static unsigned char i = 0;P0 = 0xFF;if(i>7)//扫描数码管与LED小灯{addr3 = 1;	// led流水灯亮P1 = (P1&0xF8)|(i-8); if(i==14){ off_smg[6]=zzb_led[interrupt_t0];} P0 = off_smg[i-8];}else  //i<7时扫描点阵{addr3 = 0;  // 点阵对应的led打开     P1 = (P1&0xF8)|i;if(row_matrix>=0){P0 = zzb_matrix[row_matrix][i];}}i++;	if(i>15) i=0;  // 
}
void setTimer0(unsigned long milisec)
{unsigned long n;n = 11059200/12;n=(n*milisec)/1000;n = 65536-n;n += 12;  //补偿中断函数引起的误差,编写《教材手把手教你学51单片机-C语言版》的作者经过多次尝试加12是最佳的T0H_att = (unsigned char)(n>>8);T0L_att = (unsigned char)n;TMOD=0x01;EA = 1;	ET0 = 1;TH0 = T0H_att;TL0 = T0L_att;TR0 = 1;
}									   
void InterruptTimer0() interrupt 1
{static unsigned long milisec = 0;TH0 = T0H_att;TL0 = T0L_att;milisec++;if(milisec>=1000){milisec=0;interrupt_t0++;flag1s=1;if(interrupt_t0>7)//interrupt_t0为LED数组索引interrupt_t0=0;	}scan();//点阵、数码管、LED扫描
}

 有任何问题请在评论区留言或者是私信我,一天8h在线。

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

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

相关文章

模仿qsort实现一个通用的冒泡排序

目录 前言 模仿 排序整型数组 排序结构体数组 排序字符数组 前言 qsort在前面我们讲到底层逻辑是快速排序的方式&#xff0c;是不是可以发现有了qsort来进行排序的话&#xff0c;就更加的方便快捷&#xff0c;我们在使用的时候 一方面&#xff0c;代码量会大大的减少 另一…

北京多商入驻app开发项目的主要优势及功能

多商入驻app开发项目的定义 随着电子支付技术的不断成熟&#xff0c;全国各地的消费者通过网络在线上购物的频率越来越高&#xff0c;为此&#xff0c;多商入驻app开发项目应用而生。各商家也纷纷开始申请入驻商城平台&#xff0c;开设自己的店铺。 图片来源&#xff1a;unspl…

【CT】LeetCode手撕—121. 买卖股票的最佳时机

目录 题目1- 思路2- 实现⭐121. 买卖股票的最佳时机——题解思路 2- ACM实现 题目 原题连接&#xff1a;121. 买卖股票的最佳时机 1- 思路 模式识别 模式1&#xff1a;只能某一天买入 ——> 买卖一次 ——> dp 一次的最大利润 动规五部曲 1.定义dp数组&#xff0c;确…

数据结构之线性表(2)

顺序表中的动态存储 上文我们了解到了顺序表中的静态顺序表的相关操作&#xff0c;今天我们来学习动态顺序表的知识。 为什么会存在动态顺序表呢&#xff1f;&#xff1f; 原因&#xff1a;静态顺序表给定的数据容量固定&#xff0c;多了浪费&#xff0c;少了不够用。 首先我…

【Python深度学习】——信息量|熵

【Python深度学习】——信息量|熵 假设1. 信息量1.1 含义1.2 信息量的公式: 2. 熵Entropy2. 含义2.2 熵的计算公式:2.3 熵的作用 假设 例子&#xff1a;掷硬币 假设我们有一个公平的硬币。这个硬币有两个面&#xff1a;正面&#xff08;H&#xff09;和反面&#xff08;T&…

一. 做一个前后端分离的电商项目(技术栈 : springboot+mybatis-plus+vue) 的前期准备

前期准备 ---- 项目创建和配置 一.创建springboot项目二.项目前期准备工作1. 修改springboot和jdk版本号2.Web请求处理(1) 添加web依赖(2) 测试是否能够成功访问(3) 修改端口号(4) 创建数据库 3. 连接数据库(1) 添加依赖(2)配置application.properties文件(3)添加包扫描 Mapper…

Validation校验

文章目录 Validation校验作用依赖坐标UserController接收客户端注册用户请求的方法请求参数封装实体User的结构校验分组 Validation校验 作用 服务端接收前端传递的请求从参数的时候&#xff0c;可以对请求参数进行自动校验。 场景&#xff1a;通过postman向服务端发送一个注…

《检索技术核心20讲》进阶篇之LSM树

背景 学习极客实践课程《检索技术核心20讲》https://time.geekbang.org/column/article/215243&#xff0c;文档形式记录笔记。 内容 磁盘和内存数据读取特点 工业界中数据量往往很庞大&#xff0c;比如数据无法全部加载进内存&#xff0c;无法支持索引的高效实时更新&…

视频格式转换avi格式怎么弄?分享视频转换方法

视频格式转换avi格式怎么弄&#xff1f;AVI作为一种广泛支持的视频格式&#xff0c;能够在多种设备和播放器上顺畅播放&#xff0c;确保我们的视频内容能够无障碍地分享给朋友或上传至各大平台。其次&#xff0c;AVI格式通常具有较好的兼容性&#xff0c;能够避免格式转换过程中…

修改yarn、npm、pnpm为国内镜像源

国内由于网络的原因&#xff0c;使用官方的npm、yarn、pnpm访问下载依赖库会很慢&#xff0c;有时候还会出现无法访问的情况&#xff0c;这时候就需要我们给npm、yarn、pnpm换一个国内的镜像源的&#xff0c;一般的我们可以将镜像换成淘宝的源&#xff0c;由于平时比较常用到的…

用飞书写博客,并自动部署

feishu-vitepress 用飞书写博客,并自动部署 目前的静态博客如vitepress&#xff0c;主要是用markdown来写内容。markdown虽然可读性比较好&#xff0c;但是在文章中贴图片有点麻烦&#xff0c;需要先保存图片到asset目录下&#xff0c;再在markdown中写图片地址。 平时工作主要…

优化查询性能:DolphinDB 时间类型数据比较规则详解

在数据库中&#xff0c;时间是一种常见的数据类型。在处理时间数据时&#xff0c;比较操作是非常常见的需求。然而&#xff0c;在不同的场景下&#xff0c;对时间类型数据进行比较时应用的规则不同。本文将从 DolphinDB 支持的时间类型开始&#xff0c;由浅入深分别介绍时间类型…

47.PyCharm P版突然无法启动

目录 1.启动cmd.exe&#xff0c;进到pycharm\bin目录&#xff0c;启动.\pycharm.bat&#xff0c;如果正常&#xff0c;就像下面这个样子&#xff0c;如果不正常&#xff0c;则会报错&#xff0c; 2.用记事本打开pycharm.bat文件&#xff0c;加上以下代码后 今晨&#xff0c;无…

《C++ Primer》导学系列:第 3 章 - 字符串、向量和数组

3.1 命名空间的使用 概述 命名空间是C中的一种机制&#xff0c;用于组织代码并避免名字冲突。通过使用命名空间&#xff0c;可以将全局作用域中的标识符组织到逻辑分组中&#xff0c;从而提高代码的可读性和可维护性。命名空间在大型项目中尤为重要&#xff0c;因为它们可以防…

关于C#导出Word时报错“{00020970-0000-0000-C000-000000000046}加载类型库/DLL 时出错”的解决办法

之前还运行正常的程序&#xff0c;突然发现导出Word的时候会报错&#xff0c;报错内容&#xff1a; System.InvalidCastException:“Unable to cast COM object of type ‘Microsoft.Office.Interop.Word.ApplicationClass’ to interface type ‘Microsoft.Office.Interop.Wor…

ubuntu18.04 配置 mid360并测试fast_lio

1.在买到Mid360之后&#xff0c;我们可以看到mid360延伸出来了三组线。 第一组线是电源线&#xff0c;包含了红色线正极&#xff0c;和黑色线负极。一般可以用来接9-27v的电源&#xff0c;推荐接12v的电源转换器&#xff0c;或者接14.4v的电源转换器。 第二组线是信号线&#x…

CSS概述

CSS是一种样式表语言&#xff0c;用于为HTML文档控制外观&#xff0c;定义布局。例如&#xff0c; CSS涉及字体、颜色、边距、高度、宽度、背景图像、高级定位等方面 。 ● 可将页面的内容与表现形式分离&#xff0c;页面内容存放在HTML文档中&#xff0c;而用 于定义表现形式…

本学期嵌入式期末考试的综合项目,我是这么出题的

时间过得真快&#xff0c;临近期末&#xff0c;又到了老师出卷的时候。作为《嵌入式开发及应用》这门课的主讲教师&#xff0c;今年给学生出的题目有一点点难度&#xff0c;最后的综合项目要求如下所示&#xff0c;各位学生朋友和教师同行可以评论一下难度如何&#xff0c;单片…

【推荐算法】召回模型总结

文章目录 1、传统召回算法2、向量化召回统一建模架构2.1、如何定义正样本2.2、重点关注负样本2.3、召回生成Embedding&#xff1a;要求用户、物料解耦2.4、如何定义优化目标2.4.1、Softmax Loss、NCE Loss、NEG Loss2.4.2、Sampled Softmax Loss2.4.3、Pairwise Loss 3、Word2V…

量化交易入门——盘口

今天接着上一期讲解开盘定势的种类&#xff0c;在讲之前&#xff0c;科普一下“盘口五档”的成交知识。 每个炒股软件上&#xff0c;都会有某只个股的成交信息&#xff0c;在其中会出现一个五档的行情列表&#xff0c;里面列出了买家和卖家各五个价格及其对应的数量。这五档价…