• 说一下个人的学习经历
    • 我做过的项目:
  • 今天先把当初做的89E51总结出来
    • 先说下89E51
      • 一、流水灯、数码管
      • 二、矩阵键盘,蜂鸣器和电子时钟
    • 结语:

说一下个人的学习经历

我是大二开始进入学校电子设计实验室的,从SST89E516到现在stm32f4。以前没有系统的整理过自己的项目,现在由于疫情期间在家有空,就把这些学习成长经历给总结和分享出来,也去自己从新走一遍自己的路,温故而知新。

我做过的项目:

我们在实验室的是按老师上节课把题目讲下后我们自己做(实验室有单独的教室和专门负责的老师),做完找老师验收(验收的时候还会提问,当初最怕的就是这个了)

0. 89E51的 流水灯 按键 数码管 时钟 液晶 adc dac
1.  模电的 放大器   300-3.4kHz带通滤波器  低频功率放大器
2. stm32f4语音存储回放
3. 电子秤
4. 帆板
5. 平衡车
6. 纸张测量(19年8月参加全国大学生电子设计大赛,获得省2奖)
7. 倒立摆
8. 手势识别
9. 红外通信
10.风力摆 (未做完 开始调参数了)

今天先把当初做的89E51总结出来

先说下89E51

我们实验室用的是SST89E516RD

SST89E516RD片内有两块SuperFlashEEPROM。
SST89E516RD是一款8位单片机。SST89E516RD含有1k的RAM和64k+8k的内置可擦除程序存储器ROM
SST89E516RD在5V电压时可工作在0~40MHz和3V。

主要特性:·

·  兼容80C51 系列,内置超级FLASH 存储器的单片机·
·  SST89E5XXRD工作电压 VDD=4.5~5.5V5 伏工作电压时0-40MHz 的频率范围
·  SST89V5XXRD工作电压 VDD=2.7~3.6V在3 伏工作电压下,原厂保证0~25 MHz的工作频率 ,实际最高可达40MHz
·  1K*8 的内部RAM(256Bytes+768Bytes)
·  最大片外程序/数据地址空间为64K*8(当然也可以通过I/O 口进行块切换,实现超64K 扩展)
·  三个16 位定时器/计数器
·  9 个中断源,四个中断优先级
·  四个8 位I/O 口(32 根输入输出线)

一、流水灯、数码管

实验要求: 实现8个LED灯轮流循环被点亮,将6只数码管按指定字符点亮
设计思路:
流水灯:先点亮最右边的LED,延时,再点亮下一盏灯,循环点亮
数码管:先将位选给高电平,在逐一给低电平,将段选逐一赋值,延时时间要短,让视觉效果上是一起亮
电路图:

//流水灯程序
ORG 0000HLJMP MAINORG 000BHLJMP T0ISRORG 0030HMAIN:MOV TMOD,#01HMOV TH0,#HIGH(65536-50000)    //50毫秒定时MOV TL0,#LOW(65536-50000)SETB TR0SETB ET0SETB EAMOV A,#0FEHMOV P1,AMOV R2,#20SJMP $T0ISR:CLR TR0MOV TH0,#HIGH(65536-50000)MOV TL0,#LOW(65536-50000)SETB TR0DJNZ R2,T0E    //1秒未到直接退出MOV R2,#20RL A    MOV P1,A    //秒一变的花样流水灯。T0E:RETIEND
//数码管程序ORG 0000HAJMP 0030HORG 0030HMAIN:CLR P2.0MOV P1,#0F9H   //1ACALL DELAY1MSMOV P1,#0FFH   //P1口赋值FFH,即P1口全部置1 #0FFH, 转换为二进制是11111111 SETB P2.0CLR P2.1MOV P1,#0A4H   //2ACALL DELAY1MSMOV P1,#0FFHSETB P2.1CLR P2.2MOV P1,#0B0H     //3ACALL DELAY1MSMOV P1,#0FFHSETB P2.2CLR P2.3MOV P1,#099H    //4ACALL DELAY1MSMOV P1,#0FFHSETB P2.3CLR  P2.4MOV P1,#092H    //5ACALL DELAY1MSMOV P1,#0FFHSETB P2.4CLR P2.5MOV P1,#082H    //6ACALL DELAY1MSMOV P1,#0FFHSETB P2.5AJMP MAINDELAY1MS:   ;//误差 0usMOV R6,#04HDL:MOV R5,#0F8HDJNZ R5,$DJNZ R6,DLRETEND

总结

  1. 复位电路:
    复位条件:两个机器周期以上的高电平(2us)
    前提:足够的电压启动晶振,频率越低,启动时间越长
    据查SST89E516RD文档知RC电路是使用时,应确保VDD的上升时间不超过1ms,振荡器启动时间不超过10ms,因此复位时应保证有足够的时间保证振荡器启动,因此时间应大于等于10ms,所以

    Urst=Vcc*e^(-t/RC)=0.77 Vcc
    t=R1Cln0.7>10ms     R1>2.8k
    R1/(R1+R2)Vcc        R2<3/7R
    
  2. 定时:单片机的定时器是一个16位的定时器,则能从0~65536计数,一次最多能计时65.5ms,定时要先定一个时间,然后执行n次
    例如:计时1s

     MOV R4,#20MOV TMOD,#01HMOV TH0,#030HMOV TL0,#0B0H
    

定时有4种工作模式:

模式0为13位计数器;
模式1为16位计数器;
模式2为自动再装入8位计数器;
模式3为定时器0:分成二个8位计数器   定时器1:停止计数
  1. ORG 0050H 地址从0050H开始是因为此单片机在0000H到0050H之间存在中断002BH
  2. EA=0,只访问外部ROM
    EA=1,先访问内部ROM,当PC值超过内部的ROM的地址范围时会转到执行外部ROM
  3. 片机使用低电平驱动的原因:此单片机是采用的负逻辑语言,只能低电平驱动,低电平驱动能力强
  4. 码管电路中加三极管的作用:增大电流,单片机的输出电流小于20mA,而数码管是5mA左右,不加三极管会导致单片机功耗过大
  5. 不能用P3驱动流水灯或数码管的原因:
    1. P3.0与P3.1是单片机与计算机串口通信的端口
    2. P3.6与P3.7是外部数据存储器写/读选通,只有当对片外ROM进行读写时,WR与RD才会工作


二、矩阵键盘,蜂鸣器和电子时钟

实验要求:构建44的16位矩阵键盘,从左至右,从上至下分别代表“0-F”,按任意键时,数码管都能显示出与之相对应的字符,并通过蜂鸣器来实现按键音;实现一电子时钟,6位数码管从左至右分别代表时,分,秒,并可以通过44的矩阵键盘实现时钟的调时功能。

  1. 矩阵键盘:
    (1)矩阵所用的按键为四脚轻触按键其外观图及内部结构图如下图所示


如上图可知按键1,2脚导通;3,4脚导通。按下按键时1,3或1,4或2,3或2,4导通

(2)矩阵的连接
本实验连接4*4矩阵键盘其连接图如下。在控制的过程中矩阵键盘采用的是行列扫描法。因为我们的矩阵按键接的是单片机的P0口,且矩阵的行接P0.0-P0.3,列接P0.4-0.7,所以其扫描原理为:将接P0.0口的行变为低电平,其余行为高电平,然后读取列线的电平;在这一行上如果有某一按键被按下,则相应的列被拉到低电平,则此行与此列相交的按键被按下;若没有任何一列被拉为低电平则表示没有按键被按下。以此方法类推其他按键的定位。


(3)按键的程序及流程图


ORG 0000H ;//伪指令,指定一下程序汇编后代码在入程序存储器0000H单元开始的连续单元中,不占有内存 AJMP MAIN ;//短转移指令,转到主程序开始处 ORG 0050H ;//伪指令,指定一下程序是从0050H之后连续单元存储 MAIN: MOV P0,#0F0H ;//给P0口赋值,使得低四位为低电平,所有行为低电平,全扫描 高四位列 ONE:MOV A,P0  ;//将P0口值赋值给寄存器A,读取列值 XRL A,#0F0H ;//将A中的值与11110000异或 JZ ONE  ;//判断A的值是否为0,为0则没有键按下,继续判断,有则进行下面程序 ACALL DELAY  ;//延时20ms去除按压时的抖动 MOV A,P0 ;//再将P0口的值赋值给寄存器A XRL A,#0F0H ;//与11110000异或 JZ ONE  ;//判断若A=0则PC+ONE的地址跳转 MOV A,#00H ;//若不为0,PC值继续向下运行,给A赋值0 JNB P0.4,TWO ;//判断P0.4引脚是否为0,若不为0跳转TWO,继续下面的判断键值 INC A  ;//若为0,将A 值加1 JNB P0.5,TWO ;//继续判断P0.5位是否为0,舨晃?跳转TWO,继续下面的判断键值 INC A  ;//若为0,将A 值加1 JNB P0.6,TWO ;//继续判断P0.6位是否为0,舨晃?跳转TW,继续下面的判断键值 INC A  ;//若为0,将A 值加1 JNB P0.7,TWO ;//继续判断P0.7位是否为0,舨晃?跳转TW,继续下面的判断键值 TWO:MOV R1,A  ;//将判断列值的A赋值与R1,暂存于此 MOV R2,#00H ;//R2赋值0将作为行值 MOV R3,#0FEH ;//R3赋值为11111110,作为后面提取行 FOUR: MOV A,R3 ;//将R3的值赋给寄存器A MOV P0,A ;//将A赋值给P0口,将第一行给低电平 MOV A,P0 ;//再将P0口的值赋值给A XRL A,R3 ;//与R3做异或,若某一位不一样,则该位赋值于1 JNZ THREE ;//判断A是否不为0,若不为0则证明该行有键按下,若为0 ,继续下一行的判断 MOV A,R3 ;//将R3的值给A RL A  ;//循环左移一位,将第二行赋于低电平 MOV R3,A ;//将A的值给R3,暂存 MOV A,R2 ;//将R2的值给R2 INC A  ;//由于上一行无键按下,则自加1 MOV R2,A ;//再将A 的值赋值给R2暂存 AJMP FOUR ;//挑战FOUR循环判断 THREE: MOV A,R2 ;//判断到具体的某行时,将暂存行数的R2值,赋值给A MOV B,#04H ;//给寄存器B赋值4 MUL AB  ;//A*B=A,两者相乘赋值给A ADD A,R1 ;//再将列值相加就得到了该键所对应的具体值 MOV P2,#0FEH ;//将P2口赋值0FE,唤醒数码管第一位,作为显示 MOV DPTR,#TAB ;//寄存器间接寻址,采用数据指针(DPTR)作为间接寻址寄存器,将表TAB赋值于DPTR,以查表方式赋值 MOVC A,@A+DPTR ;//以查表的方式将DPTR中数值赋值于A MOV P1,A ;//将P1口赋值A中的所查值,P1口控制数码管段选 AJMP MAIN ;//跳转至MAIN,继续下一次判断 DELAY:   ;//延迟程序20ms MOV R6,#40 ;//该语句占1个机器周期 D1: MOV R5,#246 ;//该语句占1个机器周期 D2: DJNZ R5,D2 ;//该语句占2个机器周期共执行246*40次 DJNZ R6,D1 ;//该语句占2个机器周期共执行40次 RET  ;//该语句占2个机器周期 TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH;//表,伪指令DB,通知汇编程序从当前ROM地址开始保留一字节或字节串的存储单元,并存入DB后面的数据 END   ;//伪指令,表示END后面所有的汇编语言指令均不予以汇编
  1. 蜂鸣器
    本实验内蜂鸣器的作用是连接矩阵按键,当有键按下时蜂鸣器会发出响声,起到提示的作用。我们所用到的蜂鸣器是无源蜂鸣器,无源是指蜂鸣器的内部不带震荡源,以至与用直流信号是无法让蜂鸣器发出响声的,必须用方波信号输入谐振装置转换为声音信号输出,可控制方波信号的频率来改变声音的大小。无源蜂鸣器的内部结构图如下。

蜂鸣器接的是单片机的P3.7口,且连接了一个限流电阻。如上面电路图接法给三级管接5V电源满足发射结正偏,集电结正偏,8550工作在饱和导通状态。蜂鸣器的另一端接地。蜂鸣器用延时程序使谐振装置转化为声音信号,其程序如下。

ORG 0000HLJMP MAINORG 000BHMAIN:   MOV  P3, #0FFHLCALL DELAYMOV  P3, #00H LCALL DELAY LJMP MAIN DELAY:MOV R7, #250 D1: MOV R6, #250 D2: DJNZ R6, D2 DJNZ R7, D1 RET  END//如上程序可知其延时时间为[1+(1+2*250+2)*250+2]*1us.~
  1. 电子时钟
    用数码管实现电子时钟的显示,6个数码管分别依次两个显示时,两个显示分,两个显示秒并且分,时,秒之间有点隔开。电子时钟还需有调时功能,通过矩阵按键控制,及在矩阵按键中每一行的四个按键都可以完成相应的功。每一行从右到左四个按键依次实现控制时钟启动,调节秒(每按一次加一),调节分(每按一次加一),调节时(每按一次加一)。
    主要设计的思路为,数码管的段选a,b,c,d,e,f,g,dp依次接到单片机的P1.0-P1.7且段选和I/O口之间要接电阻460Ω,且数码管一侧的GND接一个三级管,在三级管的基级接一个电阻起限流作用电阻的大小为4.7KΩ。电子时钟通过按键控制,按键的行依次接P0.1-P0.3,列依次接P0.4-P0.7,并在各处接一个上拉电阻。按键和数码管组成的电路图如下所示。

电子时钟的程序及流程图


//电子时钟STRT EQU P0.0    ;等价代换SEC EQU P0.1MIN EQU P0.2HOUR EQU P0.3CL EQU P2.0ORG 0000HSJMP MAINORG 000BH  ;TO溢出时的中断程序入口地址AJMP T0INT0  ;TO溢,跳到T0INT0ORG 0100H MAIN:CLR P0.4MOV P2,#0FFH   ;初值MOV R4,#20
;20*0.05=1sMOV TMOD,#01H    ;TO为模式1MOV TH0,#03CH   MOV TL0,#0B0H ; 即:t=0.05后,TO溢出SETB ET0     ;T0中断允许位SETB EA      ;开中断MOV 30H,#00H  ;清零30H-32H地址单元:MOV 31H,#00HMOV 32H,#00HKS:LCALL DISP           ;作用:无任何按键,动态显示JB SEC, KM       ;检查 秒键 按否?KSS:LCALL DISPLCALL DALY2   ;显示JNB  SEC,KSS  ;当前地址,产生中断AJMP SINC     ;松秒键(秒+1)KM: LCALL DISPJB MIN,KH    ;分调整按键(按,不管)KMM:LCALL DISPLCALL DALY2JNB MIN,KMMAJMP MINC;(分+1)KH:LCALL DISPJB HOUR,K1     ;时调整按键 (按,不跳)KHH:LCALL DISPLCALL DALY2 JNB HOUR,KHHAJMP HINC     ;(时+1)SINC:LCALL DISPLCALL CLOLCALL DISPINC 30H       ;秒调整 30H单元的数据+1MOV A,30H        CJNE A,#60,SINC0    ;A=60时,不管 ,   否则跳MOV 30H,#0        ;A=60 30H单元的数据清零60/10=6.0(6与0)59/10=(5与9)SINC0:AJMP KS  MINC:LCALL DISPLCALL CLOLCALL DISPINC 31H          ;31H单元的数据+1MOV A,31HCJNE A,#60,MINC0MOV 31H,#0MINC0:AJMP KM         ;返回"主跳"HINC:LCALL DISPLCALL CLOLCALL DISPINC  32H      MOV A,32HCJNE A,#24,HINC0MOV 32H,#0HINC0:AJMP KH  k1: LCALL DISP JB STRT,KS    ;检查开始键K11:LCALL DISPLCALL DALY2JNB STRT,K11AJMP STARTSTART:LCALL DISPLCALL CLOLCALL DISPCPL TR0       AJMP K1DISP:MOV A,30H       ;单元中的数据/10,分离个位与十位      MOV B,#10DIV ABMOV 40H,B   ;余数(秒个位数)MOV 41H,A   ;商(秒十位数)MOV A,31HMOV B,#10DIV ABMOV 42H,B   ;余数(分个位数)MOV 43H,A   ;商(分十位数)MOV A,32HMOV B,#10DIV ABMOV 44H,B   ;余数(时个位数)MOV 45H,A   ;商(时十位数)MOV A,40H   ;秒个位ACALL SEG7MOV P1,ACLR P2.5ACALL DLYSETB P2.5MOV A,41H   ;秒十位ACALL SEG7MOV P1,ACLR P2.4ACALL DLYSETB P2.4MOV A,42H   ;分个位ACALL SEG7MOV P1,ACLR P2.3ACALL DLYSETB P2.3 MOV A,43H   ;分十位ACALL SEG7 MOV P1,ACLR P2.2ACALL DLYSETB P2.2MOV A,44H  ;时个位CALL SEG7MOV P1,ACLR P2.1ACALL DLYSETB P2.1MOV A,45H  ;时十位ACALL SEG7MOV P1,ACLR P2.0ACALL DLYSETB P2.0RET T0INT0:PUSH ACCPUSH PSWCLR TR0MOV A,#0B5HADD A,TL0MOV TH0,#03CH  ;定时中断子程序。重装定时常数 MOV TL0,A     SETB TR0DJNZ R4,T0INTRMOV R4,#20INC 30H      ;1S,秒存储单元内数+1MOV A,30H  CJNE A,#60,T0INTR   ;未满60S,跳出中断。MOV 30H,#0        ;满60S,秒单元清零INC 31H                 ;分+1MOV A,31HCJNE A,#60,T0INTRMOV 31H,#0INC 32HMOV A,32HCJNE A,#24,T0INTRMOV 32H,#0T0INTR: POP PSWPOP ACCRETICLO:CLR CLLCALL DALY1SETB  CLRETDALY2: ;误差 0usMOV R6,#01HDL0:MOV R5,#2FHDJNZ R5,$DJNZ R6,DL0RETDLY:MOV R7,#2D1:MOV R6,#40DJNZ R6,$DJNZ R7,D1RETDALY1: ;误差 0usMOV R6,#0D7HDL3:MOV R5,#2DHDJNZ R5,$DJNZ R6,DL3NOPNOPRETSEG7:INC AMOVC A,@A+PCRETIDB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90
  1. 矩阵键盘,蜂鸣器和电子时钟中知识点

(1) 按键扫描的工作原理

将接P0.0口的行变为低电平,其余行为高电平,然后读取列线的电平;在这一行上如果有某一按键被按下,则相应的列被拉到低电平,则此行与此列相交的按键被按下;若没有任何一列被拉为低电平则表示没有按键被按下
。其他行的按键判断都是以此方法进行,将该行置为低电平,其余行为高电平,然后读取列的电平来判断哪个按键被按下。

(2)为什么按键接P0口时要接上拉电阻

因为P0口的内部接构中没有上拉电阻,加了上拉电阻可以很好的控制按键的电平的状态,使按键按下后能很好的回复为初始状态。

(3)定时和中断

T0INT0:PUSH ACC  PUSH PSW
CLR ETO CLR TR0 MOV A,#0B7H  (7是补从CLR TR0到MOV TH0,A用时)   ADD A,TL0    (TL0值从50ms后到TR0所有用时,弥补中断响应时间)中断响应的时间不能确定因此用定时器补误差)   MOV TH0,#03CH  ;定时中断子程序。重装定时常数  MOV TL0,A   MOV A,#3CH  ADDC A,TH0  (当前面的ADD中A+TL0高八位有溢出时ADD会进位使初值精确)  MOVTH0,A     TB TR0

①中断请求Interrupt Request
②Interrupt Enable中断使能 (中断总开关,允许其它中断的前提)
③Interrupt Priority中断优先级
④breakpoint address断点地址
⑤Vector address

①②③④⑤构成中断响应

结语:

我们当初的时候是零基础进的实验室,开始的时候都要求用汇编写程序,以此打好基础(建议零基础的同学也这样),每次做完一个项目时要好好作报告和总结,每一封耕耘都会有一份收获 下一篇写89E51的LCD1602液晶、ADC0809、DAC0832

从51开始的单片机之旅(一)----流水灯、矩形键盘、电子时钟相关推荐

  1. 51单片机-LED模块-来回流水灯

    51单片机-LED模块-来回流水灯 1. 视频 哔哩哔哩视频地址: https://www.bilibili.com/video/av89552821 51单片机-LED模块-来回流水灯 2. 文件 ...

  2. 51单片机 74HC154译码器制作流水灯+Proteus仿真

    51单片机 74HC154译码器制作流水灯+Proteus仿真 Proteus仿真 实例代码 #include <reg52.h> #define uint unsigned int #d ...

  3. 51单片机AT24C02写读流水灯实例+Proteus仿真

    51单片机AT24C02写读流水灯实例+Proteus仿真 Proteus仿真 这个流水灯的状态是通过读取AT24C02地址中的数值来改变的.(有点废AT24C02) 程序代码 #include &l ...

  4. 51单片机通过CD4051实现流水灯效果+Proteus仿真

    51单片机通过CD4051实现流水灯效果+Proteus仿真 Proteus仿真效果 CD4051 CD4051是一款八选一模拟开关电路,内置3个地址选择端(A0-A2),低有效的使能输入端( E), ...

  5. 51单片机学习笔记5 流水灯实现及蜂鸣器控制

    51单片机学习笔记5 流水灯实现及蜂鸣器控制 一.流水灯 1. 硬件电路 2. 代码实现 (1) 点亮一个LED的基本操作 (2) 使用算术左移实现流水灯 (3) 使用库文件左移函数 二.蜂鸣器 1. ...

  6. 设计分享|单片机左右来回的流水灯

    目录 具体实现功能 设计介绍 51单片机简介 设计思路 设计内容 仿真图(protues8.7) 程序(Keil5) 具体实现功能 51单片机控制8路流水灯左右来回移动! 设计介绍 51单片机简介 5 ...

  7. c语言编程流水灯与交通灯实验,C51单片机实验报告_流水灯_交通灯_定时器_双机交互_时钟.doc...

    C51单片机实验报告_流水灯_交通灯_定时器_双机交互_时钟 学 号: 班 级: 自动化10班 姓 名: 张 指导老师: 胡 2012.12 单片机核心板实验要求 流水灯实验 实验目的: 简单I/O引 ...

  8. c51单片机学习笔记-LED流水灯实验

    目的:实现 LED 流水灯,只需循环让 D1-D8 指示灯逐个点亮. 方法:点亮 D1 且把 D2-D8 熄灭,延时一段时间后再点亮 D2 且把 D1. D3-D8 熄灭,延时一段时间后再点亮 D3 ...

  9. 从51开始的单片机之旅(二)----LCD1602液晶、ADC0809、DAC0832

    说在前面 上篇已经把流水灯.矩形键盘.电子时钟已经总结完了,今天来总结89E51的LCD1602液晶.ADC0809.DAC0832的相关内容 说在前面 一.基本原理介绍 二.原器件介绍 三.设计及接 ...

最新文章

  1. 使用JSON.parse(),JSON.stringify()实现对对象的深拷贝
  2. kettle 遇到 解决Incorrect integer value: '' for column 'id' at row 1 完美解决-费元星
  3. 超详细的8psk调制解调通信系统讲解与仿真
  4. 机器学习能诊断病情,还能预测患者出院后的情况?
  5. 【转】TFS签入签出规范
  6. 2-4实战分类之模型构建
  7. 设置loadrunner中每个mdrv.exe进程中包含的vuser个数
  8. Android内核开发:为什么刷机后系统第一次启动会很慢?
  9. php中dump是什么文件怎么打开,Win8/Win10 dump文件怎么打开?dump文件分析工具下载及使用教程...
  10. 仿视频字幕弹幕网站 – Miko二次元动漫视频网站源码 视频播放带源码
  11. 项目管理第四章项目整合管理
  12. gateway断言工厂Path,Weight
  13. J2ME平台的的RPG游戏开发历程(1)-盘古开天辟地,j2me创造游戏世界
  14. 给定连接查询ems配送信息
  15. arduino点阵声音频谱_Arduino实现32分频音频频谱显示器
  16. android 电池运行时间计算,android 电池充电时间计算方法
  17. KNN和K-means的区别 为什么KNN算法里的K越小模型会越复杂? 过拟合和欠拟合的偏差和方差问题
  18. 可变数据之流水号数据的批量打印
  19. 310页(11万字)2021年数字医院信息化综合解决方案
  20. 一次协作多端同步,打通看云、github互相同步(serverless实践)

热门文章

  1. 4. PCIe 接口时序
  2. php 404 not found,404 not found nginx是什么意思
  3. 学术必备!35个国内外社会科学数据网站资源汇总(附链接)
  4. 如何查看进程所打开的端口
  5. Manjaro Linux使用必应图片桌面/锁屏壁纸,每天自动更换
  6. 卧槽,又来一个Python神器!!
  7. 【Anki 牌组+Markdown笔记分享】汇编语言
  8. 算法5:线性DP与区间DP
  9. Solace 调整最大连接数
  10. MySQL中支持的字符集和排序规则