泰克示波器TDS210更换IPS彩色屏幕

2023-05-16


本文将介绍如何为泰克示波器TDS210更换当前流行的IPS彩色屏幕,甚至在以后准备将屏幕图像转换为HDMI输出,彻底对以往的老旧屏幕说拜拜。
文章如有侵权请联系我删除。

目录

  • 一、缘起
    • 1.与TDS210的相遇
    • 2.改装预想步骤
    • 3.意义
  • 二、我的DIY实现过程
    • 1.查询屏幕通讯协议
      • 1.首先查看屏幕的引脚。
      • 2.屏幕显示像素点分布
      • 3.查看协议,分析协议,将协议搞明白。
      • 4.配合处理器的通俗理解
    • 2.根据协议选取合适的处理器以及屏幕
    • 3.编写程序,实现显示
  • 三、改装步骤
    • 1.拆开示波器
    • 2.自己DIY
  • 四、最后

一、缘起

1.与TDS210的相遇

  2019年,那时本人还是电子信息工程专业的大一学生,一直梦想有一台属于自己的示波器,但因为还未工作经费不那么充足,于是想要在 “海鲜市场” 淘一台二手示波器。经过网上查询对比,发现二手示波器还是泰克的相对靠谱一些,于是乎就在 “海鲜市场” 买到了一台TDS210,60MHz的频率以及1GS/s的采样频率,虽然存储深度很低,折腾乐趣大于使用,但是对于我来说还勉强足够了。
TDS210示波器主视图

  就这样,使用了几年的时间,一直到现在。但是因为TDS210的生产时间实在是太早了,大约10年前的东西了,所以他的屏幕实在是惨不忍睹,哪怕我买的上家已经更换过一块黄底的屏幕,但是还是不可避免的老化了,而且就算没有老化,屏幕的视角也太差劲了,视角必须比示波器低才能看清显示的东西。所以我的想法是再去 “海鲜市场” 淘一个成色好的代换屏幕,就在前几天,经过一番搜索,发现了一款看起来还不错的白底黑显示替换屏幕,标价140软妹币。不过卖家实在是让人恶心的很:因为我的屏幕视角不行,只在一个方向上看不太清,所以我就想先了解下卖家的屏幕视角什么样(他的宝贝链接图片也只有一个视角方向的上机图),所以我就向卖家询问能否拍个实际的上机视频看看,视角怎么样。然后卖家就莫名其妙的直接三两句话就让人gun,事后还拉黑,逃避自己的行为后果。不知道这个卖家是什么原因做出的这种行为,可能是觉得我问的问题很傻,浪费他的宝贵时间,亦或者他遇到什么事情心情不好。本来我心想,只要他的屏幕显示效果比我的好,我就买了。结果,害。。。
海鲜市场与卖家聊天截图
  经过这个卖家的这一通行为,我也没了继续淘这种屏幕的想法。既然这种屏幕这么差劲,而且还要受个别卖家的气,我为什么不自己搞一块现在流行的IPS全视角彩屏接上去呢,甚至如果可以将信号转换为HDMI信号,以接到通用显示器上不更爽歪歪。于是乎,说干就干。先放一下当前已经实现的显示效果。实测,延迟几乎没有,与原屏幕显示的刷新效果完全乎一致,使用上完全没问题,长期运行也无异常情况出现。当前仅仅在4.3寸的480x272屏幕上显示的,接下来还会将其显示到5寸800x480的屏幕上并等比放大,然后实现背景替换,颜色更改,甚至设置一些常用主题等功能。
【已实现更好的效果,点此查看 2022/10/10】

TDS210示波器修改IPS彩屏试机效果

  当然还有很重要的价格问题,如果只是换用5寸 800x480 IPS全视角彩屏的话,屏幕加上自己设计的配套PCB板,全部价格会在100元以内。一个全新5寸 800x480 IPS全视角彩屏也就50元左右,使用的处理器也就15元,再加上其他电阻电容啥的最小系统组成器件,稳稳100元以内。

2.改装预想步骤

1.可以显示到常用的IPS全视角彩屏上(已基本完成,花费了两天时间)
2.可以将显示信号输出到HDMI上,以显示到通用显示器上(待实现,可实现机率90%,打算使用国产便宜的FPGA,已购买)
3.将TDS210的控制主板(控制板很小,巴掌大,大赞)拿出来,自己重新画一个按键板,自制新的外壳,将TDS210的体积缩小至少一倍,近似便携。(待实现,可实现机率70%)
4.改装为可以使用电池供电,或者外部独立供电的,更小的便携示波器。(待实现,可实现机率80%)
【注:实现机率为我的时间、是否继续下去的心以及其他影响,哈哈】

3.意义

  说了这么多,有人会说,你费这么多功夫,折腾这么一个实用性没有那么好的东西,有什么意义呢?所以,我觉得我认为的意义也有必要列一下:

1.首要意义就是换一款我看起来舒服的显示方案,以便我自己使用起来更舒心。
2.在这过程中会收获很多实践经验。
3.我在很多地方看到过其他电子爱好者有过IPS屏显示的需求。这个改装可以为其他电子爱好者提供一种其他的选择,这也是很有意义的一件事情。


因为时间并不是特别充裕,所以,进度会很龟速。[捂脸]😅,但是一旦有新的进度,我一定会第一时间更新。

二、我的DIY实现过程

1.查询屏幕通讯协议

  首先拆开示波器,发现了屏幕的型号为LM32P07,然后搜索LM32P07的datasheet(注意,不要使用baidu引擎,否则搜不到,推荐必应。并且要直接搜索 “LM32P07 datasheet”,才能找到。),找到手册并打开,手动将手册重要部分翻译为中文。

1.首先查看屏幕的引脚。

[屏幕控制引脚]

引脚编号符号说明电源等级
1V0LCD对比度调整电压-
2VEELCD电源(-24V)-
3D3显示数据信号高电平点亮,低电平熄灭
4D2显示数据信号高电平点亮,低电平熄灭
5D1显示数据信号高电平点亮,低电平熄灭
6D0显示数据信号高电平点亮,低电平熄灭
7NC--
8VSS信号地(0V)-
9VDD逻辑电源(+5V)-
10CP2数据输入时钟信号下降沿
11CP1输入数据锁存信号下降沿
12S扫描启动信号高电平

[屏幕灯管引脚]

引脚编号符号说明
1VFT1CCFT背光电源
2VFT2CCFT背光电源

  屏幕使用4线并口进行数据的传输,一个时钟信号、一个锁存信号以及一个扫描信号。具体每个信号是什么意思,可以在看协议时详细分析。

2.屏幕显示像素点分布

  因为屏幕是个单色屏幕,可以近似认为是单色led点阵(便于理解,以下也说是led点),所以从图上可以看出,分布非常简单,由左向右,由上向下的顺序排序,以此组成一个平面二维坐标点。每行有320个led点,共有240行。1.1就表示第一行第一列的点,这样标记后有利于后面协议的分析。
请添加图片描述

3.查看协议,分析协议,将协议搞明白。

  值得庆贺的是,这种屏幕的协议超级简单,很容易就能够看明白。根据下图可以看出,CP1来一个高脉冲,表示将要传输1行的数据,经过一点点间隔后,CP2信号开始传输。在CP2信号的下降沿处依次取D3、D2、D1、D0的数据,放置到此行的第1、2、3、4点上,以此类推。每个CP2下降沿传输4个数据,这样经过80个CP2下降沿,即可传输完4x80=320个点,即1行的显示数据。1表示点亮此处的led,0表示熄灭此处的led点。这样就知道一行的开始以及每个数据的传输,但是如何确定当前数据是哪一行呢?所有有了S信号,当传输完第1行数据后(注意是第1行),S信号会发送1个脉冲,告诉屏幕现在已经将第1行的数据保存进缓冲区了,可以进行刷新了,然后屏幕就开始从第1行数据开始显示,一次刷新1行的数据。依次刷新完一帧的数据。然后再传输第1行的数据,再来1个S信号,屏幕再次开始刷新,循环以往。这样就确定了屏幕数据的开始和每1行的开始。

在这里插入图片描述

4.配合处理器的通俗理解

  因为屏幕的驱动是纯数字芯片构成的,所以tds210发送给屏幕的1行数据,可以暂时锁存到屏幕的缓存器上,并且只能暂存1行的数据。然后S信号高电平来后,屏幕会不断的将缓存器上的数据,从第1行开始,发送给具体的led点进行显示,直至240行刷新完,再次等待S信号。所以CP1引脚叫做输入数据锁存信号,S叫做扫描启动信号。这也是为什么S信号会在第1行数据发送完毕后产生。

  如果使用处理器对协议进行交互的话,就可以保存所有的数据,而不是只能锁存1行的数据,这时这些引脚就又可以有一个通俗的理解:

信号意义行为
S帧开始信号高电平表示开始传输一帧的第2行
CP1行开始信号下降沿表示开始传输1行数据
CP2数据时钟信号下降沿表示传输4个数据

  这样一来,控制信号就明朗了起来,开局等待S信号下降沿表明开始新的一帧图像,等待CP1信号下降沿表示开始1行,根据CP2下降沿获取4个数据,循环以往就可稳定刷新数据。需要注意的是,S表示从第2行开始刷新,直至刷新到下一帧的第1行,这样也是完整的320x240数据。

2.根据协议选取合适的处理器以及屏幕

  使用逻辑分析仪,将S、CPP1、CPP2以及D3-D0全部接上,捕捉屏幕的控制接口协议波形。优先查看的应该是频率最快的CPP2信号,可以看到一个CPP2信号的脉宽343.75ns,周期687.5ns,频率达到了1.45MHz。如果要对这么多信号同时进行采样捕捉、根据协议解码、并且实时将数据显示到320*240的彩色屏幕上的话,使用像如STM32f1、STM32f4等常见单片机,将会非常吃力,并且带LCD控制器的型号价格又非常的昂贵。显然对于使用常见单片机完成来说,是非常愚蠢的行为。那么找到一款运行主频高,带有LCD控制器,价格低廉,并且简单易用的处理器,就是非常必要的了。
请添加图片描述
  还好,在此之前已经用过一个全志的ARM9芯片–F1C100S,但是这个芯片主要是面对主线linux的场景使用,所以程序代码就要在linux环境上编写。又还好,因为我也没学过linux,所以在此之前就研究如何当作单片机一样使用,经过各种网络搜索和学习,在其他大佬的肩膀上[非常非常感谢挖坑网上的大佬们],已经在裸机和RTOS环境实现基本常用的所有功能,完全可以当作一个单片机来使用了。并且也根据其原理图,添加用得到的外设电路,画了一块PCB板,全部器件也可以手动焊接完成,也编写了一套固件成功运行,相当于对这个芯片已经算是比较熟了。
  F1C100S,标准主频408MHz,但是可以超频,在本DIY中实际运行在720MHz。其内置了32MB的DDR1 RAM,且带有LCD-RGB控制器,甚至内部还包含I-Cachel和D-Cachel缓存,对于逻辑判断、数值运算等的运行性能可以提升非常大。最主要的还是其价格,某宝一片仅需15元左右,而且常规应用场景下,仅使用2层板即可PCB布线成功,可以说是超超超超(x100)值了。

3.编写程序,实现显示

  全部开始前的准备工作现已准备完毕,接下来就是根据协议写程序了。首先,如果程序在flash中运行,每次执行都要去flash中读取,这样会导致程序执行效率大幅下降,所以芯片开始时运行bootloader,不要在bootloader内直接编写应用代码程序,而是在bootloader内将用到的基础外设初始化,将flash中的应用代码全部读取到ram中,然后跳转到ram中的应用代码开始执行,这样程序的运行效率最高。
请添加图片描述
  进入应用程序代码后,首先要初始化MMU,开启I-Cachel和D-Cachel。将系统频率初始化到720MHz,此时AHB总线360MHz、APB总线180MHz。然后初始化LCD-RGB控制器,设置显示缓存区域,可以进行显示即可。之后就是循环的协议解析和向显示缓存发送数据,LCD-RGB控制器会自动控制显示,无需CPU干预。我将S接到GPIOE4,CPP1接到GPIOE5,CPP2接到GPIOE7,D3接到GPIOE8,D2接到GPIOE9,D1接到GPIOE10,D0接到GPIOE11。如下所示。

F1C100S引脚屏幕引脚
GPIOE4S
GPIOE5CPP1
GPIOE7CPP2
GPIOE8D3
GPIOE9D2
GPIOE10D1
GPIOE11D0

  主代码如下,对其他各平台不通用的硬件相关代码就不贴了。代码还会存在BUG、执行效率等问题,大家仅作为参考。

volatile unsigned int * PE_Dat;											//用于保存GPIOE的DAT寄存器地址
volatile unsigned int x=320;											//显示位置
//dstc1为显示缓存,为了减少运算,直接定义四个相连的地址,直接对应存放D3-D0shuju 
__align(4) unsigned short *BT1 = (unsigned short *)dstc1;				//D3存放地址
__align(4) unsigned short *BT2 = (unsigned short *)dstc1+1;				//D2存放地址
__align(4) unsigned short *BT3 = (unsigned short *)dstc1+2;				//D1存放地址
__align(4) unsigned short *BT4 = (unsigned short *)dstc1+3;				//D0存放地址

int main(void)
{ 
	sys_mmu_init();																				//MMU初始化,包含
	Sys_Clock_Init(720000000);																	//系统初始化
	Sys_LCD_Init();																				//屏幕初始化
	
	display_colour(0,0,320,240,BLACK);															//清屏
	
	GPIO_Congif(GPIOE,GPIO_Pin_4,GPIO_Mode_IN,GPIO_PuPd_DOWN);									//GPIOE.4  下拉输入模式  S
	GPIO_Congif(GPIOE,GPIO_Pin_5,GPIO_Mode_IN,GPIO_PuPd_DOWN);									//GPIOE.5  下拉输入模式  CPP1
    GPIO_Congif(GPIOE,GPIO_Pin_7,GPIO_Mode_IN,GPIO_PuPd_DOWN);									//GPIOE.7  下拉输入模式  CPP2
	GPIO_Congif(GPIOE,GPIO_Pin_8,GPIO_Mode_IN,GPIO_PuPd_DOWN);									//GPIOE.8  下拉输入模式  D3
	GPIO_Congif(GPIOE,GPIO_Pin_9,GPIO_Mode_IN,GPIO_PuPd_DOWN);									//GPIOE.9  下拉输入模式  D2
	GPIO_Congif(GPIOE,GPIO_Pin_10,GPIO_Mode_IN,GPIO_PuPd_DOWN);									//GPIOE.10 下拉输入模式  D1
	GPIO_Congif(GPIOE,GPIO_Pin_11,GPIO_Mode_IN,GPIO_PuPd_DOWN);									//GPIOE.11 下拉输入模式  D0

	PE_Dat = &(GPIOE->DAT);																		//获取GPIOE的DAT的寄存器地址
	
	while(1)
	{
											
		
		b:x=320;																				//在发送第一行数据后,帧开始信号S才会发出,则会导致第一行在上一帧的最后才能检测到
		
		while(((*PE_Dat)&0x00000010)==0);														//等待开始一帧图像
		while((*PE_Dat)&0x00000010);															//等待一帧开始信号结束
	
		while(((*PE_Dat)&0x00000010)==0)														//在一帧之内
		{
			do																					//因为帧开始信号S来的时候,行开始信号CPP1也会来,会错过行开始信号CPP1,所以直接进行一行显示
			{
				while(((*PE_Dat)&0x00000080)==0)												//CPP2为低电平,等待高电平到来
				{
					if((*PE_Dat)&0x00000020) goto a;											//如果在此期间,因为一些错误缘故导致丢失一些数据,到了刷新下一行的时间,跳转到下一行处出刷新
				}																		
				if((*PE_Dat)&0x00000100)*(BT1+x) = WHITE;										//如果D3=1,则写白色
				else *(BT1+x) = BLACK;															//如果D3=0,则写黑色
	
				if((*PE_Dat)&0x00000200)*(BT2+x) = WHITE;										//如果D2=1,则写白色
				else *(BT2+x) = BLACK;															//如果D2=0,则写黑色

				if((*PE_Dat)&0x00000400)*(BT3+x) = WHITE;										//如果D1=1,则写白色
				else *(BT3+x) = BLACK;															//如果D1=0,则写黑色

				if((*PE_Dat)&0x00000800)*(BT4+x) = WHITE;										//如果D0=1,则写白色
				else *(BT4+x) = BLACK;															//如果D0=0,则写黑色
				x+=4;																			//地址一次+4
				
				if(x>=76800)x=0;																//写完最后一行后,写第一行
				
				if(x==320)goto b;																//写完第一行后,跳转到刷新新一帧处
				
			}while(((*PE_Dat)&0x00000020)==0);													//在一行之内
			
			a:if(x%320)x = (x/320+1)*320;														//如果一行数据有错失,设置到对齐位置
			while(((*PE_Dat)&0x00000020)==0);													//等待开始一行图像
			while(((*PE_Dat)&0x00000020));														//等待开始一行图像
		}
	}
}

  因为涉及频繁的IO操作,任何一点耗时操作都会影响代码的执行效率,所以在上面代码中,尽量直接操作寄存器,使用寄存器地址处理问题,尽量少使用判断语句等。最终,终于实现了简单的同步显示效果。
请添加图片描述

  大家有需要的,可以先根据本文所述的代码和协议,移植到自己熟悉的平台上进行实现。等我做到一个算是合格的显示时,在整理整理资料全部开源。[比如在5寸屏上等比例放大显示,或者全屏显示,绘制配套的专用电路板后,在开源]

三、改装步骤

1.拆开示波器

  因为示波器是220V供电,拆之前,请先断电,并打开开关放置一段时间,让电源板上电容内部的余电释放一下,以防止出现触电意外。在整个改装过程中,可以不拆电源板,也尽量不用去动他。

  为保安全,非专业人员请勿私自拆开!!!
  为保安全,非专业人员请勿私自拆开!!!
  为保安全,非专业人员请勿私自拆开!!!

  1.在示波器上方的提手下面藏着外壳上唯二的两颗螺丝,需要先小心翼翼的将提手拿下,才能将螺丝拧下。在拆提手时一定要小心一点,因为经过10几年的时间,已经变得比较脆,老化了,很容易断。我的就断了[捂脸]😅。
   [待补图]
  2.拆下螺丝后,要先将示波器按键面板上所有的旋钮拔下来,将电源开关的帽也拔下来。前面板的上方没有卡扣,在下方有几个卡扣,轻轻用塑料片撬开即可。
  [待补图]
  3.将示波器主体从壳内整个拿出,将屏幕排线、屏幕背光灯线、按键板排线从主板上拔下。要先拆下按键电路板,才能拆下屏幕。
  [待补图]
  4.屏幕排线由左向右依次为1-12引脚,与手册引脚对应。
  [待补图]

2.自己DIY

  此时,可根据自己的需求选择直接替换掉屏幕,或者两块屏幕共存等。因为在项目此时,还不适合直接改装到可以使用的地步,所以不提任何建议,大家自行脑洞即可。

四、最后

  本文会不断添加新的进度,请耐心等待,如有大的进度改进,会另起博客,但是会在此设置跳转。本人技术水平有限,可能出现错误等问题,请大家多多指教。

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

泰克示波器TDS210更换IPS彩色屏幕 的相关文章

  • Docker WIndows最新版(4.17.x)修改镜像存储路径

    一般情况 在 Docker Desktop 4 17 0 版本中 xff0c 可以按照以下步骤来修改 Docker 镜像存储路径 打开 Docker Desktop 应用程序 xff0c 单击顶部菜单栏中的 Docker Desktop 菜
  • Nginx限制请求方式

    在nginx的配置文件中 xff0c 将location 下的IF条件中的 request method参数设置允许的请求类型 仅允许Get server span class token punctuation span span cla
  • Nginx实现一个IP访问总流量限制

    在 Nginx 中 xff0c 可以使用 ngx http limit req module 模块配合 ngx http limit conn module 模块实现基于 IP 的流量和连接数控制 具体来说 xff0c 可以按照如下步骤实现
  • CentOS - node命令not found解决

    背景 xff1a 前几天在阿里云部署了一个node项目 xff0c node版本 v12 10 0 每次重新远程连接 xff0c 输入node v pm2 v 显示 command not found xff1b 每次必须先输入 nvm u
  • 用Java实现天天酷跑(附源码),这个真的有点强了!

    点击上方 阿拉奇学Java xff0c 选择 置顶或者星标 每天早晨00点00分 与你相约 xff01 首先 xff0c 写一个需求文档 xff1a 一 项目名称 xff1a 天天酷跑 xff08 RunDay xff09 二 功能介绍 x
  • SpringBoot开源在线考试系统

    推荐一款在线考试系统 xff1b 基于 SpringBoot 43 Mybatis 43 Shiro 43 mysql 43 redis构建的智慧云智能教育平台 架构上使用完全前后端分离 支持多种题型 xff1a 选择题 多选题 判断题 填
  • 微信闪退Bug罪魁祸首竟是二维码引擎,附源代码分析

    建议别尝试 xff1a 转发这个二维码到群里 xff0c 3秒后你会回来骂我 xff08 抖m求骂 xff09 近日 xff0c 网传微信识别上方二维码就会出现闪退BUG xff0c 小编也忍不住尝试了一下 xff0c 果然 xff0c 一
  • java多线程之线程安全(重点,难点)

    由于操作系统中 线程的调度是抢占式执行的 或者说是随机的 这就造成线程调度执行时 线程的执行顺序是不确定的 虽然有一些代码在这种执行顺序不同的情况下也不会运行出错 但是还有一部分代码会因为执行顺序发生改变而受到影响 这就会造成程序出现Bug
  • React-Native: DatePickerIOS设置选择24小时

    原帖 xff1a https github com mmazzarolo react native modal datetime picker DatePickerIOS选择24小时的方法 xff1a How to set 24 hours
  • 使用chatgpt实现微信聊天小程序(秒回复),github开源(附带链接)

    前言 我在前一段时间突发奇想 xff0c 就使用java来调用chatgpt的接口 xff0c 然后写了一个简单小程序 xff0c 也上了热榜第一 xff0c java调用chatgpt接口 xff0c 实现专属于自己的人工智能助手 xff
  • HttpPost 携带参数的请求方式

    一 HTTP请求 Http的几种请求方式对应程序包中的HttpGet HttpHead HttpPost HttpPut HttpDelete HttpTrace and HttpOptions xff0c 这些类均实现了HttpUriRe
  • mysql 根据时间范围查询

    时间格式为 第一种写法 xff1a select from test where create time between 39 2019 03 05 13 04 07 39 and 39 2019 03 08 13 04 07 39 第二种
  • java 根据条件从List中筛选出符合条件的集合

    1 list 你要在里面筛选的对象集合 存放格式例如 list add user1 list add user2 list add user3 2 xff1a tableColumnName xff1a user 里面的属性字段 xff1a
  • Es QueryBuilder 简单查询

    1 matchQuery String name Object text matchQuery 34 filedname 34 34 value 34 匹配单个字段 xff0c 匹配字段名为filedname 值为value的文档 单个匹配
  • Mysql 查询区分大小写的两种方法

    oracle中查询默认是区分大小写的 xff0c 但是在mysql中默认不区分大小写 解决办法 xff1a mysql可以在SQL语句中加入 binary来区分大小写 BINARY不是函数 xff0c 是类型转换运算符 xff0c 它用来强
  • 微信小程序实现登录页面

    wxml文件 xff1a lt view class 61 34 container 34 gt lt view class 61 34 login icon 34 gt lt image class 61 34 login img 34
  • 锂电池充电IC-TP4056电路设计详解

    首先 xff0c 先介绍下TP4056 TP4056是一款完整的单节锂离子电池采用恒定电流 恒定电压线性充电器 其底部带有散热片的SOP8封装与较少的外部元件数目使得TP4056成为便携式应用的理想选择 TP4056可以适合USB电源和适配
  • mysql无法插入中文的解决办法:修改数据库编码为utf-8

    mysql无法插入中文的解决办法 1 无法插入中文原因 mysql数据库的默认编码是latin1 xff0c 可以使用下面代码查看数据库编码 show variables like 34 character 34 发现有两处的编码是lati
  • 为Debian 10.2 安装图形化桌面环境

    首先先下载x window的内核 xff1a apt get u install x window system core 下载登录管理界面gdm或kdm xff1a apt get u install gdm gdm themes 下载G
  • C# System.BadImageFormatException 解决方法

    出现System BadImageFormatException 异常有两种情况 xff1a 程序目标平台不一致 amp 引用dll文件的系统平台不一致 异常参考 xff1a BadImageFormatException 程序目标平台不一

随机推荐

  • leetcode452

    题目 xff1a 在二维空间中有许多球形的气球 对于每个气球 xff0c 提供的输入是水平方向上 xff0c 气球直径的开始和结束坐标 由于它是水平的 xff0c 所以y坐标并不重要 xff0c 因此只要知道开始和结束的x坐标就足够了 开始
  • UVA-11300

    span class token macro property span class token directive hash span span class token directive keyword include span spa
  • UVA-11520 Fill the Square

    思路 xff1a 因为要求是字典序 xff0c 这道题的第一反应就是从A Z选取字母 xff0c 在正方形中从上到下 xff0c 从左到右这样的顺序去填字母 xff0c 一旦判断这个字母旁边没有和它一样的 xff0c 那么就证明这个字母就是
  • UVA10881 Piotr‘s Ants

    span class token macro property span class token directive hash span span class token directive keyword include span spa
  • -bash: conda: command not found

    其实是因为你没有加路径 执行一条 export PATH 61 PATH usr local miniconda2 bin 就OK啦 额 其实还不行 你要给conda加一个软链接 转换python2和3要创建虚拟环境
  • Sequence2Sequence 学习

    转载至 https blog csdn net MebiuW article details 52832847 1 前言 这个深度学习 xff0c 其实是来自每周Paper笔记的整理版 xff0c 即文章的主要内容其实是我对一篇文章的整理
  • Foreign Exchange (UVA - 10763)

    include lt iostream gt include lt bits stdc 43 43 h gt define maxn 500002 using namespace std int N1 maxn int N2 maxn in
  • 如何正确安装Microsoft Office 2019

    昨天作死 xff0c 因为Excel经常弹出一些奇奇怪怪的弹窗 xff0c 我去百度搜索 xff0c 没有找到答案 然后我发现大家都说最有效的办法是卸载了重新安装 xff0c 于是一键就卸载完了 然而 xff0c 最让我担心的事情发生了 x
  • 如何用java打印出JSON文件

    应老师要求 xff0c 需要打印出被剪枝的结点 xff0c 临时上网上查了资料 xff0c 我们需要下面的东西 xff1a 1 org json jar 下载之后把所有文件单独放在项目新建的文件夹org json下即可 2 我们需要知道两个
  • 关于apt update 的产生的一个问题

    E Release file for http mirrors 163 com ubuntu dists bionic updates InRelease is not valid yet invalid for another 1天 12
  • python在打开GBK格式的txt文件时无法用UTF-8格式读取

    如标题 xff0c 可以曲线救国 xff0c 把GBK文件转换成UTF 8文件 方法 xff1a 打开记事本 xff0c 点击另存为 xff0c 下面有编码 xff0c 选择UTF 8即可 美滋滋
  • dpkg和pip在ubuntu下查找所安装的包

    目录 原因结论 原因 这些天在弄ubuntu的时候 xff0c 想查看一些包的版本 xff0c 然后上网查了一下如何去做 一开始 xff0c 我就搜到利用下面这个语句 dpkg span class token operator span
  • Docker容器挂载本地共享文件夹

    Docker挂载本地目录的方法 Docker容器启动时 xff0c 我们可以使用 v参数来挂载主机下的一个目录 比如 xff0c 我需要启动一个ubuntu的容器 xff0c 并把 opt文件挂载在这个容器上做共享文件夹 a3551444f
  • 【论文解读 ICEIT2022】Heterogeneous Graph Based Knowledge Tracing基于异构图的知识追踪

    文章目录 摘要1 引言2 相关工作2 1 知识追踪2 2 异构图嵌入 3 基于异构图嵌入的知识追踪4 实验5 结论 依然是两阶段 摘要 最近 xff0c 随着在线辅导系统的发展 xff0c 对知识追踪 Knowledge Tracing 的
  • 【AAAI22】Interpretable Knowledge Tracing: Simple and Efficient Student Modeling with Causal Relations

    文章目录 摘要1 引言 可解释的知识追踪 xff1a 简单高效的因果关系学生建模 摘要 智能辅导系统在未来的学习环境中已变得至关重要 知识追踪是该系统的重要组成部分 它是关于推断学生的技能掌握和预测他们的表现 xff0c 以相应地调整课程
  • stm32CubeIDE 在自己工程中添加.c 和.h文件

    stm32CubeIDE发布已经有一段时间了 xff0c 网上也出现了好多使用教程 xff0c 但是大多数教程都是从软件的安装 gt 汉化 gt 改软件皮肤 gt 新建工程 gt 在工程的main 函数添加自己的测试代码 gt 设置调试配置
  • 快充芯片IP5328P的寄存器数据读写[用于DIY数显快充充电宝]

    本帖DIY因为有一定的危险性 xff0c 非专业人员请勿自行尝试 如有侵权 联系删除 IP5328P是一款最大18W的快充芯片 xff0c 主要用于快充充电宝的产品 xff0c 基本支持市面上绝大部分主流的快充协议 因为能看到本帖的想必都是
  • 使用汇编开发STM32

    使用汇编开发STM32系列文章 xff0c 会长期连载 xff0c 本文作为跳转用的目录 目录 一 说明二 系列文章跳转链接1 STM32涉及到的汇编基础知识2 STM32启动文件详解3 STM32不使用启动文件点亮一个LED灯并闪烁4 S
  • STM32F10x启动文件详解

    本文为使用汇编开发STM32系列文章之 启动文件详解篇 xff0c 全部文章目录点此跳转 本文不会像其他文章一样只是简单的说一下启动文件的每个部分是什么 xff0c 说了很多却又像没说一样 本文将对启动文件中的每句话的作用及其如此编写的原因
  • 泰克示波器TDS210更换IPS彩色屏幕

    本文将介绍如何为泰克示波器TDS210更换当前流行的IPS彩色屏幕 xff0c 甚至在以后准备将屏幕图像转换为HDMI输出 xff0c 彻底对以往的老旧屏幕说拜拜 文章如有侵权请联系我删除 目录 一 缘起1 与TDS210的相遇2 改装预想