本次培训内容
1.作业评讲以及相关知识复习
        1.1DXP作业
        1.2计算器思路
        1.3使用头文件
        1.4调试方法
2.芯片查找以及数据手册的阅读
        2.1电源类芯片手册阅读-以线性稳压TLV760为例
        2.2逻辑类芯片手册阅读-以74HC138为例
        2.3芯片手册时序图阅读-以SPI为例
        2.4在ti查找所需的芯片
        2.5使用ti的webench进行设计
附录1 计算器程序
1.作业评讲以及相关知识复习
1.1DXP作业
首先复习一遍DXP制板流程:新建工程,加入原理图和PCB文件,记得要保存;绘制原理图,完成后导入到PCB;摆放元件,布线,铺铜。如果有些操作忘记了,可以翻看物联网科协新生群中第一次培训的PPT。
问题1:封装选错
解决方法:进入Tools –Footprint Manager选择正确的的封装
小建议:选错封装归根到底还是对常用的电子元件的实物不熟悉,所以建议大家留意一下常用元件的大小,遇到自己不熟悉的封装,使用CTRL+M测量一下。
使用ctrl+M可以测量PCB图中距离,按ctrl+M鼠标变成十字准星,点击鼠标确定起点和结束点,即可测出距离。

常用元件的封装一般选多大?我们先从贴片电阻和电容说起,红色为常用的尺寸

0402=1.0mmx0.5mm  0603=1.6mmx0.8mm

0805=2.0mmx1.2mm  1206=3.2mmx1.6mm

1210=3.2mmx2.5mm  1812=4.5mmx3.2mm
下面有几张3D示意图,大家可以熟悉一下他们和其它元件之间的大小关系。
可以看出,几uf以下的陶瓷电容、常用的中小功率电阻、二极管、三极管体积都可以做到很小,一般情况下除了大功率元件和大容量电容,在保证焊接质量的前提下建议选择小体积贴片元件,这样不仅可以缩小电路板体积,也有利于降低寄生效应,提高电路板性能。对于芯片,建议初学者从SOIC或SOP、SOT23封装开始使用,他们的引脚间距适中,既可以缩小电路体积,焊接难度也不会太大。至于QFP、QFN等封装,一般引脚间距只有0.5mm,而且QFN没有伸出的引脚,它们的焊接难度较大。

大家没事的时候看看开发板上的各种元件、接口、芯片,熟悉一下他们的尺寸。

问题二:忘记使用过孔

我们必须使用过孔连接不同层导线

小建议:熟悉双层PCB板的结构和各层的含义,双层板两层导线之间是绝缘的玻纤板,不加过孔肯定是不能连通的。

正确示范:

问题三:电源部分线宽过细


小建议:熟悉线宽与可承受电流的关系,留充足裕量,否则板子会发烫。

在默认工艺下,一根0.25mm的导线在长期流过0.5A电流时温度升高约10度。

问题四:单片机IO口使用不当

51单片机P0口需要外接上拉才能这样使用,原因如下:

小建议:熟悉51IO口内部结构,不同种类单片机的不同IO口特点不同,从图中可以看出51单片机P0口内部无法输出高电平,其余口输出高电平能力较弱,所以开发板上所有IO口都有1K左右外部上拉电阻来提高单片机高电平的输出强度。

大家以后可能学习的一些单片机例如STM32和K60,其大部分IO内部为推挽结构,输出高电平和低电平的能力都很强,就不需要外加电阻了。

1.2计算器思路

写在前面

1.面对一个复杂的问题,要学会将一个复杂的问题分解成多个简单的问题,逐个击破。

2.要学会使用现成的库和例程以减少自己的负担,一个大规模的工程不可能自己写全部的代码,今后大家也会和同事、队友合作写代码,使用已有的成熟代码/别人的代码是很常见的。

3.程序要养成注释的好习惯,有一个笑话:一位程序员写了一段没有注释的代码,第一个星期只有上帝和他自己知道这段代码干了什么,第二个星期就只有上帝知道了

4.思路多种多样,我讲的不一定最好。

基础部分:计算两个整数的加减乘除或者一个数的阶乘或者开根,不要求连续计算。

思路1:将矩阵键盘分为数字区,运算符区,再加上一个清零键。用数码管显示。流程图如下:

其中输入第一个数这个过程可以细化为

思路2:一次性输入整个算式,包含所有数字和符号,全部输入完后按等于号计算并用LCD1602显示结果。

其中字符串处理内核又可以细化为

例如我输入字符串123+456,程序首先会搜索到加号,然后将加号两边的两个数字(字符串)转化为数值型式,然后计算出结果

在这些流程中,好多部分可以使用例程和库。

1.矩阵键盘例程

2.数码管例程

3.LCD1602例程

4.Stdlib、Stdio中sprintf(数值转字符串)

atof(字符串转浮点)

atoi(字符串转整数)

提高部分:

TIPS:只要理解思路即可,具体实现起来还是要花很多时间处理BUG的,代码在附录部分

1.一次性输入整个表达式,使用LCD显示
2.能够处理嵌套括号
3.能够处理小数和负数

难点分析:

1.用户通过键盘向计算器输入的表达式为带小数点和运算符的字符串,无法直接运算。

解决方法:

利用atof函数把数字转换为浮点数,然后数据和运算符分离开分别存储。

创建两个数组,第一个数组是一个字符串,储存用户输入的表达式。第二个数组是浮点数组,用于存储分离出来的数字。

注:指令和编号字符串<0>  *(  <1>  +  <2>  *(  <3>  -  <4>  ))*(  <5> +  <6>  )
中只存储指令和数字编号,不存储数字真身。<0>是一个编号代表此处有一个数字,这个数字的真身是浮点数组的第一个浮点数。

这样做的好处是算式中的数字无论长短或者有没有小数点,都被变成了长度和内容统一的编号,这样下面的处理步骤会变得更加简单。

2.嵌套括号的处理

解决方法:递归法

假设你有两个函数,第一个函数可以计算

不带括号的表达式,第二个函数可以找出最内层的配对括号,你会怎么办?

PC端程序运行效果

FAQ:
1.内存空间溢出  2.FLASH写爆

解决方法:

将memoy Model 和Code Rom Size调大。

注意:52单片机RAM 256B,ROM 8KB,超过这些要不仅要改变软件设置,还要换单片机。

建议换成STC12C5A60S2:2KB RAM, 60KB ROM ,更高频率,52的程序只需修改延时即可使用。

3.矩阵键盘不够用

解决:用一个独立按键当shift键即可成倍扩展

进度超前的同学可以提前学习stm32、K60等单片机、高级的模块、进阶电路设计。

1.显示屏类 LCD1602 LCD12864 OLED
2.无线通信模块 蓝牙HC-05 WIFI ESP8266
3.电机驱动模块  L298N MX1508 
4.AD/DA/放大器/比较器 LM358 LM339,  AD/DA需自行挑选
5.电源模块 LM2596 XL6009
6.运动传感器 MPU6050 MPU9250

1.3 头文件的使用

将常用的函数、库放在单独的C文件中,只要include相应的头文件就可以调用C文件中的函数。

一个大工程常常按照功能模块划分成多个C文件可以提高可读性。以后我们购买的OLED、RFID等较为复杂的模块卖家都会提供自己的c文件和头文件供我们添加和使用。

我们举LCD1602的例子,卖家给了我们一个库,库包含LCD1602.C文件和LCD1602.h文件。LCD1602.C里面包含了操作LCD1602所需的底层代码。LCD1602.h里面声明了所有需要在外部调用的函数。我们只要在main.c里面include LCD1602.h即可调用这个库里面的函数。

我们可以仿照卖家给的库,自己往c文件和h文件里面添加函数,直到做出自己的的库。

1.4 DEBUG 工具

1.单片机仿真器:和大家C语言课学的调试功能差不多,可以操纵程序的运行和停止,查看变量的值,处理软件bug的好办法。


2.示波器、万用表:观察电压、电流、波形,来推测程序运行到哪一部分出现了问题,也可以查出硬件的故障,当系统中有多个模块时可以迅速定位故障位置。
DEBUG思路:缩小范围,定位故障。

关于仪器的详细使用方法是以后的培训内容,有兴趣的同学可以来找我们单独学习。作业评讲部分到这里就结束了,接下我们开始学习数据手册的阅读。

2.芯片查找以及数据手册的阅读

芯片手册是芯片的使用说明书。 而说明书 一个最显著的特点就是必须尽可能地使用通俗易懂的语句, 向使用者交代清楚该产品的特点、 功能以及使用方法。不同类型的芯片数据手册风格略有差异,需要大家多多阅读。

我们在进行设计时常常需要阅读大量的数据手册来找出合适的芯片,为了提升效率,常常先粗读后细读。

粗读——数据手册怎么看?先看芯片特性、应用场合、内部框图,有一个宏观的了解。重 点关注芯片参数,同时参考手册给出的参数图。

细读——选定器件后,研究管脚定义、推荐的 PCB layout 。内部寄存器,时序图必须研究透彻。数据手册中的 note ,都必须仔细阅读,是把芯 片用好的关键所在。

大部分产品的数据手册是英文的,或者只是翻译了第一页,所以需要大家提升英语阅读能力。

下载数据手册的途径:芯片厂商网站,alldatasheet网站,或者直接百度。

2.1电源类芯片手册阅读-以线性稳压TLV760为例

http://www.ti.com.cn/product/cn/tlv760/
关键点:输入电压、输出电压、最大电流、压降、典型电路、元件取值、内部框图、布线示例、封装、功耗计算

对于一个电源芯片,最重要的参数肯定是电压范围和最大电流了。数据手册会将这些重要参数联同这个芯片的特性简介还有芯片的典型电路放在第一页。

翻到下一页,大家会看到绝对最大值和建议工作值的表格。一个芯片在任何情况下都不能在超过绝对最大值的状态下工作,否则会永久损坏。

继续向下,大家会看到一张长长的电学性能参数表,这里面涉及到的参数太多,本次培训只挑一些简单的参数进行解释,有兴趣的同学可以自行查找资料或者私下讨论。本次只介绍一个参数:最低压差,假设你有一个5.5V的电池希望通过这个芯片稳压到5.0V给一个耗电10ma的单片机使用,查阅手册可知此时最小压差为0.7V,所以单片机实际得到的电压最多为5.5-0.7=4.8V。

接下来大家会看到详细的介绍部分,例如芯片内部功能框图显示,这个芯片具有过热和过载的自我保护功能。还有一些常用的计算公式,例如线性稳压芯片的发热功率=两边电压差*电流。还有一个比较重要的部分是芯片对电容的要求,大部分线性稳压芯片对电容的要求比较低。只要容量不是太小都可以,但是也有部分芯片对电容的容量和内阻有较为严格的限制。

最后一部分给出了PCB布局参考,还有封装尺寸图,ti手册尺寸图的单位是毫米。大家如果需要自己画封装就可以参考这一部分。

2.2逻辑类芯片手册阅读-以74HC138为例

http://www.ti.com.cn/product/cn/sn74hc138
关键点:使能、工作电压、真值表、速度、驱动能力。

这个芯片是一个数字逻辑芯片,虽然不同种类的芯片数据手册会有一些差异,但是相似度还是挺高的

使能端口相当于芯片的开关,只有使能端口输入了正确的信号芯片才会工作,否则芯片进入关闭状态。各种类型的芯片大部分具有使能功能,所以需要熟练掌握。

真值表:真值表就是将芯片所有可能的输入状态和对应的输出情况列成一张表。真值表十分直观。实际上,不仅数字电路芯片使用真值表,其他类型的芯片也常常使用真值表来描述他们的工作状态。

速度:芯片从接受输入信号到做出正确的响应需要时间,51单片机速度比较慢,一般不会出现问题,但是当你使用更快速的单片机驱动低速的模块或者芯片就可能出问题。

驱动能力:芯片管脚允许流出或者流入的电流是有限的,假如你用单片机IO口直接驱动电机那么IO口肯定会烧坏。一般芯片IO口的驱动能力在10ma左右。

2.3芯片手册时序图阅读-以SPI为例

关键词:时钟,上升沿,下降沿

对于一些较为复杂的芯片,需要和单片机互相传输数据。数据要想正常的传输,收发双方必须要保持节奏的准确和一致,在电路中,节奏就是时序。

完整的SPI包含四条线,第一条是片选线,功能相当于使能,只有它为低时才能通信,它为高时结束通信。

第二条线是时钟,时钟由主机控制,从机只能接收。时钟就是电路中的节拍,控制着双方互发信息的节奏。

剩下两条线是数据线,一条是主机发送从机接收,另一条是从机发送主机接收。每当时钟从低到高跃变时(上升沿),双方读取对方放在信号线的比特。时钟下降沿,双方将新的数据放到信号线上。

实际上不同厂商制造的SPI设备标准略有区别,初学者只要掌握常用的CPOL=0,CPHA=0的时序即可

2.4在ti查找所需的芯片

打开ti的网站,选择你所需要的产品类型,由于芯片型号众多,我们要进行筛选然后显示。常用的筛选条件是工作电压、封装等等。

2.5使用ti的webench进行设计

webench是ti提供的在线电路设计工具,他可以帮助工程师快速的挑选芯片并且自动设计电路原理图和PCB。我们在webench上可以设计电源、放大器、参考电压源等等多种多样的电路。

这里我们以设计电源为例,只需要输入你的要求然后点击确认,接下来选择全部显示,这样系统就自动将最合适的方案以及他们的关键指标以列表的形式展示出来。

作为初学者,一般选择一个BOM COUNT(元件数量)比较少的方案,这样难度比较低。

接下来点击芯片的名称,即可进入对应芯片的介绍页面。点击开始设计,即可进入设计界面,里面有详细的仿真、参数表、原理图、PCB图。

附录1 PC版计算器程序

支持小数负数、括号多层嵌套、可容忍部分不标准写法,可以指出错误种类和位置,注意不要使用中文括号和中文小数点。

我去年写计算器的时候没有单片机仿真器,于是在先PC端写了代码,调试完成后只要稍加修改就可以移植到单片机上。

思路不唯一,我的程序也不一定优秀,重在开拓思路锻炼思维,只要理解思路就行,不需要逐行阅读。

#include <stdio.h>
#include <stdlib.h>
#define LEN 100
#define FLOAT 30///这两个参数控制表达式最大长度
unsigned char left;
unsigned char right;///括号起始和结束
int opverify( char*s)///检查运算符是否有错误的函数
{unsigned char i,flagl=0,flagr=0;int a;for(i=0;i<LEN;i++){if(s[i]==43||s[i]==45){flagr=0;for(a=i+1;a<LEN;a++)            ///右边有数字{if(s[a]==46||(s[a]>=48&&s[a]<=57)||s[a]==40){flagr=1;break;}if(s[a]==42||s[a]==47||s[a]==41){return i;}}if(flagr==0)return i;}if(s[i]==42||s[i]==47){flagl=0;flagr=0;for(a=i-1;i>=0;a--)          ///左边有数字{if(s[a]==46||(s[a]>=48&&s[a]<=57)||s[a]==41){flagl=1;break;}if(s[a]==42||s[a]==47||s[a]==40){return i;}}for(a=i+1;a<LEN;a++)            ///右边有数字{if(s[a]==46||(s[a]>=48&&s[a]<=57)||s[a]==40){flagr=1;break;}if(s[a]==42||s[a]==47||s[a]==41){return i;}}if(flagl==0||flagr==0)return i;}}return -1;
}
int dotverify( char*s)///检查小数点是否有错误的函数
{unsigned char i,dotcount,numcount;for(i=0;i<LEN;i++){if(s[i]==46||(s[i]>=48&&s[i]<=57)){dotcount=0;numcount=0;while(1){if(s[i]==46){dotcount++;i++;continue;}if(s[i]>=48&&s[i]<=57){numcount++;i++;continue;}break;}if(dotcount>1||numcount==0){while(s[i]!=46)i--;return i;}}}return -1;
}
int kuohaoverify( char*s)///检查括号是否有错误的函数
{unsigned char i;char wrongposition=0;int flag=0;for(i=0;i<LEN;i++){if(i>0)if(s[i-1]==40&&s[i]==41)return wrongposition;if(s[i]==40)flag++;if(s[i]==41)flag--;if(flag<0)return wrongposition;if(s[i]!=0)wrongposition++;}if(flag==0)return -1;return wrongposition;
}
int kuohaolocater( char*s)///定位内层配对括号起点和终点
{unsigned char i;for(i=0;i<LEN;i++){if(s[i]==40)left=i;if(s[i]==41){right=i;return 1;}}return 0;
}
void convert( char*s,float*num)///原始字符串分离成运算符和编号数组+浮点数组
{int source=LEN-1,target=LEN-2;unsigned char count=0;while(s[source]==0)source--;count=target-source;while(source>=0){s[target]=s[source];target--;source--;}for(source=0;source<count;source++)s[source]=0;source=count;target=0;count=0;while(source<LEN){if(s[source]==46||(s[source]>=48&&s[source]<=57)){num[count]=(float)atof(s+source);s[target]=48+count;count++;source++;target++;while(s[source]==46||(s[source]>=48&&s[source]<=57))source++;continue;}if(s[source]==41&&(s[source+1]==46||(s[source+1]>=48&&s[source+1]<=57))){s[target]=s[source];target++;source++;s[target]=42;target++;continue;}if(s[source]==40&&(s[source-1]==46||(s[source-1]>=48&&s[source-1]<=57))){s[target]=42;target++;}s[target]=s[source];target++;source++;}for(source=target;source<LEN;source++)s[source]=0;
}
void signprocess(char *s,float*num)///运算符处理函数,负责处理符号以及处理一些不标准的写法
{unsigned char flagl;int a,i;for(i=right;i>=left;i--){if(s[i]==43||s[i]==45){flagl=0;for(a=i-1;a>=left;a--)          ///zuobianyoushuzi{if(s[a]>=48){flagl=1;break;}if(s[a]>=40&&s[a]<=47){break;}}if(flagl==0){if(s[i]==43)s[i]=0;if(s[i]==45){s[i]=0;for(a=i+1;;a++)if(s[a]>=48){num[s[a]-48]=-num[s[a]-48];break;}}}}}
}
void multipledivide(char *s,float*num)///乘除法计算函数
{unsigned char i,flagl,flagr,a;for(i=left+1;i<right;i++){if(s[i]==42||s[i]==47){for(a=i+1;;a++)if(s[a]>=48){flagr=s[a]-48;break;}for(a=i-1;;a--)if(s[a]>=48){flagl=s[a]-48;break;}if(s[i]==42){num[flagr]=num[flagl]*num[flagr];s[a]=0;s[i]=0;}if(s[i]==47){num[flagr]=num[flagl]/num[flagr];s[a]=0;s[i]=0;}}}
}
void addminus(char*s,float*num)///加减法计算函数
{unsigned char i,flagl,flagr,a;for(i=left+1;i<right;i++){if(s[i]==43||s[i]==45){for(a=i+1;;a++)if(s[a]>=48){flagr=s[a]-48;break;}for(a=i-1;;a--)if(s[a]>=48){flagl=s[a]-48;break;}if(s[i]==43){num[flagr]=num[flagl]+num[flagr];s[a]=0;s[i]=0;}if(s[i]==45){num[flagr]=num[flagl]-num[flagr];s[a]=0;s[i]=0;}}}
}
void singlecacu(char*s,float*num)///中间层运算函数,不带括号的计算函数,可以处理无括号的表达式
{signprocess(s,num);printf("***正负号处理完毕***\n");multipledivide(s,num);printf("***乘除完毕***\n");addminus(s,num);printf("***加减完毕***\n");if(s[left]==40){printf("***去括号***\n");s[left]=0;}if(s[right]==41)s[right]=0;///每次计算都将被处理的运算数、运算符、括号抹掉并在原位值写入本次计算结果,这样表达式越来越简。
}
void caculate (char*s,float*num)///顶层运算函数,循环调用括号查找和无括号计算函数,直到把括号消完
{while(kuohaolocater(s))singlecacu(s,num);left=0;right=LEN-1;singlecacu(s,num);
}
void display(char*s,float*num)///显示最终结果
{unsigned char i;for(i=0;i<LEN;i++)if(s[i]>=48){printf("结果:%f",num[s[i]-48]);break;}
}
int main()///注意不要使用中文括号和小数点
{char wrongposition;///表达式错误位置unsigned char i;char s[LEN];///STEP1:初始化部分开始for(i=0;i<LEN;i++){s[i]=0;}float num[FLOAT];for(i=0;i<FLOAT;i++){num[i]=0;}///初始化部分结束printf("输入表达式\n");scanf("%s",s);///STEP2:表达式查错开始wrongposition=kuohaoverify(s);if(kuohaoverify(s)!=-1){printf("括号错误\n位置:%d\n",wrongposition);return 0;}printf("括号检查完毕\n");wrongposition=dotverify(s);if(dotverify(s)!=-1){printf("小数点错误\n位置:%d\n",wrongposition);return 0;}printf("小数点检查完毕\n");wrongposition=opverify(s);if(opverify(s)!=-1){printf("运算符错误\n位置:%d\n",wrongposition);return 0;}printf("运算符检查完毕\n");///表达式查错部分结束///STEP3:开始处理表达式,数据与运算符分离convert(s,num);printf("%s\n",s);for(i=0;i<FLOAT;i++)printf("%f  ",num[i]);printf("\n***数据与运算符分离完毕***\n");printf("\n");///表达式处理完成///STEP4:开始计算caculate(s,num);display(s,num);return 0;
}


电子技术部下半学期第一次培训相关推荐

  1. 电子技术部第四次培训总结

    电子技术部第四次培训总结 文章目录 电子技术部第四次培训总结 一.开关电源PCB绘制 1.原理图 2.PCB绘制要求 3.元件封装选择 (1)众多封装类型 (2)常用封装类型 (3)相关封装知识补充 ...

  2. 宣传部第二学期第一次培训

    宣传部第二学期第一次培训总结 一.网页基础HTML部分 1.什么是网页 网页是一种可以在互联网上传输,能被浏览器认识和翻译成页面并显示出来的文件,是网站的基本构成元素. 2.网页的类型 静态网页和动态 ...

  3. 2020科协竞赛部第一次培训

    2020科协竞赛部第一次培训-硬件 三极管部分 一.半导体及PN结 1.本征半导体 2.杂质半导体 3.PN结 二.三极管入门 1.三极管是什么 2.三极管的类型 3.三极管基本工作原理 4.输入特性 ...

  4. 2018硬件第一次培训总结

    2018届科协硬件第一次培训总结          第一次的科协硬件培训,主要为大家讲解了对基本电路元器件和电路的认识,以及AD18的使用操作,使用DXP绘制原理图并生成PCB,下面对培训的内容进行详 ...

  5. 信号与系统 2022 春季学期第一次作业-作业题目准备

    简 介: 关于作业的参考答案需要根据之前结果,再结合现在的修改进行补充. 关键词: 作业,信号与系统 #mermaid-svg-HSmAT7ir1Kl95O1z {font-family:" ...

  6. 微型计算机生产制约因素,精品解析:广东省东莞市2019-2020学年高三下学期第一次统考(5月)模拟考试文科综合地理试题...

    ID:15018200 资源大小:3271KB 资料简介: " \r东莞市2020届高三第二学期第一次统考(5月)模拟考试文科综合地理试题\r一.选择题\r下表为我国四个省市2009年.20 ...

  7. citrix+netscaler配置第一次培训

    citrix_netscaler配置第一次培训.pptx http://files.cnblogs.com/files/niaowo/citrix_netscaler%E9%85%8D%E7%BD%A ...

  8. 2021年创新实践部第一次培训电脑拆装总结

    2021年创新实践部第一次培训电脑拆装总结 目录 一.电脑组件 二.注意事项 1.没有过保修期不要拆!!! 2.笔记本建议使用硅脂,不建议使用液金 3.断电!!! 4.防静电!!! 三.电脑清灰 主要 ...

  9. 2019年科协宣传部第一次培训

    宣传部第一次培训 一.易企秀制作(H5) 1.制作流程 2.保存与发布 二.秀米(微信图文) 三.Ps基础工具的使用 1.移动工具 2.选框工具 3.套索工具 4.快速选择工具和魔棒工具 5.图框工具 ...

  10. 2021铜鼓中学高考成绩查询,江西省宜春市铜鼓中学2020-2021学年高一下学期第一次月考数学(文实验班)试题含答案.doc...

    PAGE 1 江西省铜鼓中学2020至2021学年度高一下学期第一次月考 文 科 数 学(实验班) (试卷满分:150分 考试时间:120分 命题人:) 一.选择题(本大题共12小题,每小题5分,共6 ...

最新文章

  1. Android对话框-下篇-之设置activity为Dialog
  2. BAT会看上哪样的中小公司程序员?
  3. hpux oracle9,oracle 9.2.0.8在HP-UX 11.31 下的安装步骤和注意事项
  4. windows清理剪切板
  5. wins系统flask绑定mysql_flask如何连接mssql,网上大多是sqlite和mysql教程?
  6. Leetcode每日一题:28.implement-strstr(实现strStr())
  7. over oracle 不足补零,oracle的rank,over partition涵数使用
  8. [2017-10-26]Abp系列——DTO入参验证使用方法及经验分享
  9. IAR软件调试延时时间
  10. java日期格式化 类_Java日期格式化(DateFormat类)
  11. 在安装软件CAJViewer时出现,“错误1327。无效驱动器:F:
  12. 移动端高度兼容iPhoneX
  13. C# 实现屏幕键盘 (ScreenKeyboard)
  14. vue2 - 基于Export2Excel.js导出Excel案例(js-xlsx插件二次封装使用)
  15. uni-app Image组件在加载图片发生错误时,显示默认图片
  16. QQ群怎么快速封群,如何举报骗子QQ群可以使之封群?
  17. 留学Paper写作中的门道怎么讲解?
  18. 千兆12光12电管理型工业以太网交换机 12千兆光12千兆电口宽温环网交换机
  19. 最新IP地理数据库(dat文件) --别花钱了
  20. terracotta安装配置与集群过程

热门文章

  1. 【机器学习 基本概念】马尔可夫链
  2. 残差灰色模型matlab,数学建模+灰色预测模型+MATLAB详解.doc
  3. C语言实现编译原理的LR分析法,编译原理LR(0)分析器(C语言).pdf
  4. sql查询将字段值转换成汉字
  5. 布谷鸟优化算法 matlab,布谷鸟算法(Cuckoo Search,CS)MATLAB案例详细解析
  6. html 重复执行函数,javascript延时重复执行函数 lLoopRun.js
  7. Matlab中imhist的用法
  8. 基于51单片机的电子罗盘数字指南针HCM8553原理图程序设计
  9. java 获取中文拼音首字母(缩写) 含pinyin4j maven包
  10. pb模型文件与.pbtxt配置不匹配导致OpenCV调用dnn模块出错(Mask R-CNN为例)