MFRC522模块开发笔记
Write_to_Card(…)和Read_from_Card(…)可谓是所有函数的终点,而SPIWriteByte(…)则是最底层对MFRC522模块进行操作的函数,所有函数都是为了Write_to_Card(…)和Read_from_Card(…)而产生的。因此,我们只需要调用这两个函数就可以完成IC卡的读写,同时,这两个函数的参数和使用方法都是一样的,是不是很简单!
虽然说可以直接把我们的程序拿来用应一下急,但作为嵌入式开发者,我们建议还是需要了解这些程序是怎么来的,下面我们就来讲讲程序的组成架构和函数的功能原理。在讲程序之前,我们需要将IC卡的结构给大家讲清楚,看下图:
上图是IC卡中的存储区结构。Mifare卡片的存储容量为8192×1位字长(即1K * 8位字长),采用E2PROM作为存储介质。整个结构划分为16个扇区,编为扇区0~15。每个扇区有4个块(Block),分别为块0,块1,块2和块3。每个块有16个字节。一个扇区共有16Byte* 4 = 64Byte。每个扇区的块3(即第四块)也称作尾块,包含了该扇区的密码A(6个字节)、存取控制(4个字节)、密码B(6 个字节)。其余三个块是一般的数据块。
每个扇区的块3(即第四块)也称作尾块,包含了该扇区的密码A(6个字节)、存取控制(4个字节)、密码B(6个字节)。其余三个块是一般的数据块。扇区0的块0是特殊的块,包含了厂商代码信息,在生产卡片时写入,不可改写。其中:第0~4个字节为卡片的序列号,第5个字节为序列号的校验码;第6个字节为卡片的容量“SIZE”字节;第7、8个字节为卡片的类型号字节,即Tagtype字节;其他字节由厂商另加定义。
综上所述,我们可以用来存储数据的空间为第一扇区的第1、2块,第二扇区到第63扇区的第0、1、2块,简而言之就是我们上图中的“数据块”。
M1卡结构:
共16个扇区,每个扇区4块(块0~3),共64块,按块号编址为0~63。
第0扇区的块0(即绝对地址0块)用于存放厂商代码,已经固化,不可更改。
其他各扇区:
块0、块1、块2为数据块,用于存贮数据;
块3为控制块,存放密码A、存取控制、密码B。
因此,只要做出一个接口,即设计一个函数,让我们指定要在哪个块上输入什么数据就好了,块的数据范围是0到63,写入的数据的格式为16个字节,如:ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff,我们设定一个数组来存储这个数据:Write_Data[16] = {0x00};
我们设计了一个函数:Write_to_Card(kuai,Write_Data);其中,kuai就是指定是哪个块,Write_Data是指要写入的数据,就是上面所说数组的起始地址,只要事先对这两个变量进行赋值,就可以轻松向IC卡中写入数据了,我们设计了另一个函数Read_from_Card(kuai,Read_Data);kuai是指要操作的块,Read_Data就是从这个块中读取出来的数据的存放地,有了数据,不管是在lcd1602还是lcd12864或者是tft液晶显示都没什么问题了。
现在让我们看看Write_to_Card(…)和Read_from_Card(…)的使用方法:
void main()
{
Write_Data[0] = 0x33; //需要写入IC卡中的数据赋值
init(); //串口通信初始化
while(1)
{
Write_to_Card(0x01,Write_Data); //向IC卡中的0x01块存储区中写数据
delay_welcome(100);
Read_from_Card(0x01,Read_Data); //从IC卡中的0x01块存储区中读数据
}
}
这是Mian函数程序.
读写卡的时间是短暂的,而人刷卡时,卡在读卡器读卡范围内的时间相对较长,这就涉及到一次读卡和重复读卡的问题了,我们的程序设计的是一次读卡,也就是说你不管把卡放在读卡器上多长时间,系统只读写一次卡,串口调试助手不会重复显示一样的数据,这个功能可不是所有淘宝店可以提供的哦。下面我们来看看程序:
//向IC卡中写数据
unsigned charWrite_to_Card(unsigned char data KuaiN,unsigned char *pData)
{
char data status;
unsigned char idata RevBuffer[4];
unsigned char data MLastSelectedSnr[4];
unsigned char dataPassWd[6]={0xff,0xff,0xff,0xff,0xff,0xff};
unsigned char data place = 0x00;
PcdReset();
字节
status=PcdRequest(PICC_REQIDL,&RevBuffer[0]);
if(status!=MI_OK)
{
flag = 0;
green = 1;
return 0x00;
}
//判断当操作卡完成后就停止重复读写卡
if(flag == 1)
{
return 0x00;
}
字节
status=PcdAnticoll(&RevBuffer[2]);
if(status!=MI_OK)
{
return 0x00;
}
memcpy(MLastSelectedSnr,&RevBuffer[2],4);
//拷贝序列号到变量MLastSelectedSnr中
//选卡,卡号为MLastSelectedSnr
status=PcdSelect(MLastSelectedSnr);
if(status!=MI_OK)
{
return 0;
}
//验证卡片密码,空白卡都是0xff,0xff,0xff,0xff,0xff,0xff
status=PcdAuthState(PICC_AUTHENT1A,KuaiN,PassWd,MLastSelectedSnr);
if(status!=MI_OK)
{
return 0x00;
}
//向卡中指定块中写数据
status=PcdWrite(KuaiN,pData);
if(status!=MI_OK)
{
return 0;
}
//命令卡片进入休眠状态
PcdHalt();
flag = 1;
green = 0;
return 1;
}
//从IC卡中读数据
unsigned char Read_from_Card(unsigned char data KuaiN,unsigned char *pData)
{
char data status;
unsigned char idata RevBuffer[4];
unsigned char data MLastSelectedSnr[4];
unsigned char dataPassWd[6]={0xff,0xff,0xff,0xff,0xff,0xff};
unsigned char data place = 0x00;
PcdReset();
字节
status=PcdRequest(PICC_REQIDL,&RevBuffer[0]);
if(status!=MI_OK)
{
flag = 0;
green = 1;
return 0x00;
}
//判断当操作卡完成后就停止重复读写卡
if(flag == 1)
{
return 0x00;
}
字节
status=PcdAnticoll(&RevBuffer[2]);
if(status!=MI_OK)
{
return 0x00;
}
memcpy(MLastSelectedSnr,&RevBuffer[2],4);
//拷贝序列号到变量MLastSelectedSnr中
//选卡,卡号为MLastSelectedSnr
status=PcdSelect(MLastSelectedSnr);
if(status!=MI_OK)
{
return 0;
}
//验证卡片密码,空白卡都是0xff,0xff,0xff,0xff,0xff,0xff
status=PcdAuthState(PICC_AUTHENT1A,KuaiN,PassWd,MLastSelectedSnr);
if(status!=MI_OK)
{
return 0x00;
}
字节
status= PcdRead (KuaiN,pData);
if(status!=MI_OK)
{
return 0;
}
//命令卡片进入休眠状态
PcdHalt();
flag = 1;
green = 0;
//如果程序走到这一步,就说明读卡成功,并且pData指定人数组中存放着块数据
//我们可以通过下面的函数向PC机传送卡里的数据
Serial_Rs232(pData,16);
return 1;
}
程序的函数关系:
Main()
|---- Write_to_Card(…); //写卡
| |---- PcdRequest(…); //寻天线区内未进入休眠状态的卡
| | |--- ClearBitMask(…)
| | | |--- ReadRawRC(…)
| | | | |---SPIWriteByte(…)
| | | | |---SPIReadByte(…)
| | | |--- WriteRawRC(…)
| | | |---SPIWriteByte(…)
| | |--- WriteRawRC(…)
| | | |--- SPIWriteByte(…)
| | |--- SetBitMask(…)
| | | |--- ReadRawRC (…)
| | | | |---SPIWriteByte(…)
| | | | |---SPIReadByte(…)
| | | |--- WriteRawRC (…)
| | | | |---SPIWriteByte(…)
| | |--- PcdComMF522
| | |--- WriteRawRC (…)
| | |---SPIWriteByte(…)
| | |--- ClearBitMask (…)
| | | |--- ReadRawRC(…)
| | | | |---SPIWriteByte(…)
| | | | |---SPIReadByte(…)
| | | |--- WriteRawRC(…)
| | | |---SPIWriteByte(…)
| | |--- SetBitMask (…)
| | | |--- ReadRawRC (…)
| | | | |---SPIWriteByte(…)
| | | | |---SPIReadByte(…)
| | | |--- WriteRawRC (…)
| | | | |---SPIWriteByte(…)
| | |--- ReadRawRC(…)
| | |---SPIWriteByte(…)
| |---- PcdAnticoll(…)
| | |--- ClearBitMask (…)
| | | | |--- ReadRawRC(…)
| | | | | |---SPIWriteByte(…)
| | | | | |---SPIReadByte(…)
| | | | |--- WriteRawRC(…)
| | | | |---SPIWriteByte(…)
| | |--- WriteRawRC (…)
| | | |---SPIWriteByte(…)
| | |--- PcdComMF522 (…)
| | | |--- WriteRawRC (…)
| | | | |---SPIWriteByte(…)
| | | |--- ClearBitMask (…)
| | | | |--- ReadRawRC(…)
| | | | | |---SPIWriteByte(…)
| | | | | |---SPIReadByte(…)
| | | | |--- WriteRawRC(…)
| | | | |---SPIWriteByte(…)
| | | |--- SetBitMask (…)
| | | | |--- ReadRawRC (…)
| | | | | |---SPIWriteByte(…)
| | | | | |---SPIReadByte(…)
| | | | |--- WriteRawRC (…)
| | | | | |---SPIWriteByte(…)
| | | |--- ReadRawRC(…)
| | | |---SPIWriteByte(…)
| | |--- SetBitMask (…)
| | | |--- ReadRawRC (…)
| | | | |---SPIWriteByte(…)
| | | | |---SPIReadByte(…)
| | | |--- WriteRawRC (…)
| | | | |---SPIWriteByte(…)
| |----PcdSelect(…)
| | |--- CalulateCRC (…)
| | | |--- WriteRawRC (…)
| | | | |---SPIWriteByte(…)
| | | |--- ClearBitMask (…)
| | | | |--- ReadRawRC(…)
| | | | | |---SPIWriteByte(…)
| | | | | |---SPIReadByte(…)
| | | | |--- WriteRawRC(…)
| | | | |---SPIWriteByte(…)
| | | |--- SetBitMask (…)
| | | | |--- ReadRawRC (…)
| | | | | |---SPIWriteByte(…)
| | | | | |---SPIReadByte(…)
| | | | |--- WriteRawRC (…)
| | | | | |---SPIWriteByte(…)
| | | |--- ReadRawRC(…)
| | | |---SPIWriteByte(…)
| | |--- ClearBitMask (…)
| | | | |--- ReadRawRC(…)
| | | | | |---SPIWriteByte(…)
| | | | | |---SPIReadByte(…)
| | | | |--- WriteRawRC(…)
| | | | |---SPIWriteByte(…)
| | |--- PcdComMF522 (…)
| | | |--- WriteRawRC (…)
| | | | |---SPIWriteByte(…)
| | | |--- ClearBitMask (…)
| | | | |--- ReadRawRC(…)
| | | | | |---SPIWriteByte(…)
| | | | | |---SPIReadByte(…)
| | | | |--- WriteRawRC(…)
| | | | |---SPIWriteByte(…)
| | | |--- SetBitMask (…)
| | | | |--- ReadRawRC (…)
| | | | | |---SPIWriteByte(…)
| | | | | |---SPIReadByte(…)
| | | | |--- WriteRawRC (…)
| | | | | |---SPIWriteByte(…)
| | | |--- ReadRawRC(…)
| | | |---SPIWriteByte(…)
| |----PcdAuthState (…)
| | |--- PcdComMF522 (…)
| | | |--- WriteRawRC (…)
| | | | |---SPIWriteByte(…)
| | | |--- ClearBitMask (…)
| | | | |--- ReadRawRC(…)
| | | | | |---SPIWriteByte(…)
| | | | | |---SPIReadByte(…)
| | | | |--- WriteRawRC(…)
| | | | |---SPIWriteByte(…)
| | | |--- SetBitMask (…)
| | | | |--- ReadRawRC (…)
| | | | | |---SPIWriteByte(…)
| | | | | |---SPIReadByte(…)
| | | | |--- WriteRawRC (…)
| | | | | |---SPIWriteByte(…)
| | | |--- ReadRawRC(…)
| | | |---SPIWriteByte(…)
| | |--- ReadRawRC (…)
| | | |---SPIWriteByte(…)
| | | |---SPIReadByte(…)
| | |--- PcdWrite (…)
| | |---CalulateCRC(…)
| | | |--- WriteRawRC (…)
| | | | |---SPIWriteByte(…)
| | | |--- ClearBitMask (…)
| | | | |--- ReadRawRC(…)
| | | | | |---SPIWriteByte(…)
| | | | | |---SPIReadByte(…)
| | | | |--- WriteRawRC(…)
| | | | |---SPIWriteByte(…)
| | | |--- SetBitMask (…)
| | | | |--- ReadRawRC (…)
| | | | | |---SPIWriteByte(…)
| | | | | |---SPIReadByte(…)
| | | | |--- WriteRawRC (…)
| | | | | |---SPIWriteByte(…)
| | | |--- ReadRawRC(…)
| | | | |---SPIWriteByte(…)
| | |---PcdComMF522(…)
| | | |--- WriteRawRC (…)
| | | | |---SPIWriteByte(…)
| | | |--- ClearBitMask (…)
| | | | |--- ReadRawRC(…)
| | | | | |---SPIWriteByte(…)
| | | | | |---SPIReadByte(…)
| | | | |--- WriteRawRC(…)
| | | | |---SPIWriteByte(…)
| | | |--- SetBitMask (…)
| | | | |--- ReadRawRC (…)
| | | | | |---SPIWriteByte(…)
| | | | | |---SPIReadByte(…)
| | | | |--- WriteRawRC (…)
| | | | | |---SPIWriteByte(…)
| | | |--- ReadRawRC(…)
| | | |---SPIWriteByte(…)
| |----PcdHalt (…) |
| |---CalulateCRC (…)
| | |--- WriteRawRC (…)
| | | |---SPIWriteByte(…)
| | |--- ClearBitMask (…)
| | | |---ReadRawRC(…)
| | | | |---SPIWriteByte(…)
| | | | |---SPIReadByte(…)
| | | |--- WriteRawRC(…)
| | | | |---SPIWriteByte(…)
| | |--- SetBitMask (…)
| | | |--- ReadRawRC (…)
| | | | |---SPIWriteByte(…)
| | | | |---SPIReadByte(…)
| | | |--- WriteRawRC (…)
| | | | |---SPIWriteByte(…)
| | |--- ReadRawRC(…)
| | | |---SPIWriteByte(…)
| |---PcdComMF522 (…)
| |--- WriteRawRC (…)
| | |---SPIWriteByte(…)
| |--- ClearBitMask (…)
| | |--- ReadRawRC(…)
| | | |---SPIWriteByte(…)
| | | |---SPIReadByte(…)
| | |--- WriteRawRC(…)
| | |---SPIWriteByte(…)
| |--- SetBitMask (…)
| | |--- ReadRawRC (…)
| | | |---SPIWriteByte(…)
| | | |---SPIReadByte(…)
| | |--- WriteRawRC (…)
| | | |---SPIWriteByte(…)
| |--- ReadRawRC(…)
| |---SPIWriteByte(…)
|
|----delay_welcome(100);
|----Read_from_Card(…)
|---- PcdRequest(…); //寻天线区内未进入休眠状态的卡
| |--- ClearBitMask(…)
| | |--- ReadRawRC(…)
| | | |---SPIWriteByte(…)
| | | |---SPIReadByte(…)
| | |--- WriteRawRC(…)
| | |---SPIWriteByte(…)
| |--- WriteRawRC(…)
| | |--- SPIWriteByte(…)
| |--- SetBitMask(…)
| | |--- ReadRawRC (…)
| | | |---SPIWriteByte(…)
| | | |---SPIReadByte(…)
| | |--- WriteRawRC (…)
| | | |---SPIWriteByte(…)
| |--- PcdComMF522
| |--- WriteRawRC (…)
| |---SPIWriteByte(…)
| |--- ClearBitMask (…)
| | |--- ReadRawRC(…)
| | | |---SPIWriteByte(…)
| | | |---SPIReadByte(…)
| | |--- WriteRawRC(…)
| | |---SPIWriteByte(…)
| |--- SetBitMask (…)
| | |--- ReadRawRC (…)
| | | |---SPIWriteByte(…)
| | | |---SPIReadByte(…)
| | |--- WriteRawRC (…)
| | | |---SPIWriteByte(…)
| |--- ReadRawRC(…)
| |---SPIWriteByte(…)
|---- PcdAnticoll(…)
| |--- ClearBitMask (…)
| | | |--- ReadRawRC(…)
| | | | |---SPIWriteByte(…)
| | | | |---SPIReadByte(…)
| | | |--- WriteRawRC(…)
| | | |---SPIWriteByte(…)
| |--- WriteRawRC (…)
| | |---SPIWriteByte(…)
| |--- PcdComMF522 (…)
| | |--- WriteRawRC (…)
| | | |---SPIWriteByte(…)
| | |--- ClearBitMask (…)
| | | |--- ReadRawRC(…)
| | | | |---SPIWriteByte(…)
| | | | |---SPIReadByte(…)
| | | |--- WriteRawRC(…)
| | | |---SPIWriteByte(…)
| | |--- SetBitMask (…)
| | | |--- ReadRawRC (…)
| | | | |---SPIWriteByte(…)
| | | | |---SPIReadByte(…)
| | | |--- WriteRawRC (…)
| | | | |---SPIWriteByte(…)
| | |--- ReadRawRC(…)
| | |---SPIWriteByte(…)
| |--- SetBitMask (…)
| | |--- ReadRawRC (…)
| | | |---SPIWriteByte(…)
| | | |---SPIReadByte(…)
| | |--- WriteRawRC (…)
| | | |---SPIWriteByte(…)
|----PcdSelect(…)
| |--- CalulateCRC (…)
| | |--- WriteRawRC (…)
| | | |---SPIWriteByte(…)
| | |--- ClearBitMask (…)
| | | |--- ReadRawRC(…)
| | | | |---SPIWriteByte(…)
| | | | |---SPIReadByte(…)
| | | |--- WriteRawRC(…)
| | | |---SPIWriteByte(…)
| | |--- SetBitMask (…)
| | | |--- ReadRawRC (…)
| | | | |---SPIWriteByte(…)
| | | | |---SPIReadByte(…)
| | | |--- WriteRawRC (…)
| | | | |---SPIWriteByte(…)
| | |--- ReadRawRC(…)
| | |---SPIWriteByte(…)
| |--- ClearBitMask (…)
| | | |--- ReadRawRC(…)
| | | | |---SPIWriteByte(…)
| | | | |---SPIReadByte(…)
| | | |--- WriteRawRC(…)
| | | |---SPIWriteByte(…)
| |--- PcdComMF522 (…)
| | |--- WriteRawRC (…)
| | | |---SPIWriteByte(…)
| | |--- ClearBitMask (…)
| | | |--- ReadRawRC(…)
| | | | |---SPIWriteByte(…)
| | | | |---SPIReadByte(…)
| | | |--- WriteRawRC(…)
| | | |---SPIWriteByte(…)
| | |--- SetBitMask (…)
| | | |--- ReadRawRC (…)
| | | | |---SPIWriteByte(…)
| | | | |---SPIReadByte(…)
| | | |--- WriteRawRC (…)
| | | | |---SPIWriteByte(…)
| | |--- ReadRawRC(…)
| | |---SPIWriteByte(…)
|----PcdAuthState (…)
| |--- PcdComMF522 (…)
| | |--- WriteRawRC (…)
| | | |---SPIWriteByte(…)
| | |--- ClearBitMask (…)
| | | |--- ReadRawRC(…)
| | | | |---SPIWriteByte(…)
| | | | |---SPIReadByte(…)
| | | |--- WriteRawRC(…)
| | | |---SPIWriteByte(…)
| | |--- SetBitMask (…)
| | | |--- ReadRawRC (…)
| | | | |---SPIWriteByte(…)
| | | | |---SPIReadByte(…)
| | | |--- WriteRawRC (…)
| | | | |---SPIWriteByte(…)
| | |--- ReadRawRC(…)
| | |---SPIWriteByte(…)
| |--- ReadRawRC (…)
| | |---SPIWriteByte(…)
| | |---SPIReadByte(…)
| |--- PcdWrite (…)
| |---CalulateCRC(…)
| | |--- WriteRawRC (…)
| | | |---SPIWriteByte(…)
| | |--- ClearBitMask (…)
| | | |--- ReadRawRC(…)
| | | | |---SPIWriteByte(…)
| | | | |---SPIReadByte(…)
| | | |--- WriteRawRC(…)
| | | |---SPIWriteByte(…)
| | |--- SetBitMask (…)
| | | |--- ReadRawRC (…)
| | | | |---SPIWriteByte(…)
| | | | |---SPIReadByte(…)
| | | |--- WriteRawRC (…)
| | | | |---SPIWriteByte(…)
| | |--- ReadRawRC(…)
| | | |---SPIWriteByte(…)
| |---PcdComMF522(…)
| | |--- WriteRawRC (…)
| | | |---SPIWriteByte(…)
| | |--- ClearBitMask (…)
| | | |--- ReadRawRC(…)
| | | | |---SPIWriteByte(…)
| | | | |---SPIReadByte(…)
| | | |--- WriteRawRC(…)
| | | |---SPIWriteByte(…)
| | |--- SetBitMask (…)
| | | |--- ReadRawRC (…)
| | | | |---SPIWriteByte(…)
| | | | |---SPIReadByte(…)
| | | |--- WriteRawRC (…)
| | | | |---SPIWriteByte(…)
| | |--- ReadRawRC(…)
| | |---SPIWriteByte(…)
|----PcdHalt (…) |
|---CalulateCRC(…)
| |--- WriteRawRC (…)
| | |---SPIWriteByte(…)
| |--- ClearBitMask (…)
| | |---ReadRawRC(…)
| | | |---SPIWriteByte(…)
| | | |---SPIReadByte(…)
| | |--- WriteRawRC(…)
| | | |---SPIWriteByte(…)
| |--- SetBitMask (…)
| | |--- ReadRawRC (…)
| | | |---SPIWriteByte(…)
| | | |---SPIReadByte(…)
| | |--- WriteRawRC (…)
| | | |---SPIWriteByte(…)
| |--- ReadRawRC(…)
| | |---SPIWriteByte(…)
|---PcdComMF522 (…)
|--- WriteRawRC (…)
| |---SPIWriteByte(…)
|--- ClearBitMask (…)
| |--- ReadRawRC(…)
| | |---SPIWriteByte(…)
| | |---SPIReadByte(…)
| |--- WriteRawRC(…)
| |---SPIWriteByte(…)
|--- SetBitMask (…)
| |--- ReadRawRC (…)
| | |---SPIWriteByte(…)
| | |---SPIReadByte(…)
| |--- WriteRawRC (…)
| | |---SPIWriteByte(…)
|--- ReadRawRC(…)
|---SPIWriteByte(…)
MFRC522模块开发笔记的更多相关文章
- VB 核心编程及通用模块开发 笔记1
前言:学习任何编程语言.编程工具的目的不外乎解决生活问题,能够快速.高效解决问题的方式就是不错的方式,至于选择什么“工具”,众位看官看着办,本人虽然有过3年vb开发经验,但是一直没有深入学习,现已购买 ...
- EC20 minipcie版4g模块开发笔记
插在电脑上实验时若出现 AT+CREG? +CREG: 0,2 可能是usb口供电不足所致,换至主机箱后面usb口后问题解决,返回值+CREG: 0,1
- 【模块应用】MFRC522开发笔记
一.了解基本概念 ①ISO-14443A协议:( 国际标准化组织:International Organization for Standardization)RFID协议的一种; PICC:临近 ...
- [自娱自乐] 4、超声波测距模块DIY笔记(四)——终结篇·基于C#上位机软件开发
前言 上一节我们已经基本上把超声波硬件的发射和接收模块全部做好了,接下来我们着手开发一个软硬结合的基于C#的平面定位软件! 目录 一.整体思路 二.效果提前展示 2-1.软件部分展示 2-2.硬件部分 ...
- odoo开发笔记 -- 用户配置界面如何增加模块访问权限
在odoo设置界面,点击用户,进入用户配置界面,会看到: 访问权 | 个人资料菜单 在访问权 page菜单界面,可以看到系统预制的一些模块都会显示在这里, 那么,我们自己开发的模块如何显示在这块呢,从 ...
- MFRC522开发笔记
一.了解基本概念 ①ISO-14443A协议:( 国际标准化组织:International Organization for Standardization)RFID协议的一种; PICC:临近 ...
- [自娱自乐] 3、超声波测距模块DIY笔记(三)
前言 上一节我们已经研究了超声波接收模块并自己设计了一个超声波接收模块,在此基础上又尝试用单片机加反相器构成生成40KHz的超声波发射电路,可是发现采用这种设计的发射电路存在严重的发射功率太低问题,对 ...
- IOS开发笔记(4)数据离线缓存与读取
IOS开发笔记(4)数据离线缓存与读取 分类: IOS学习2012-12-06 16:30 7082人阅读 评论(0) 收藏 举报 iosiOSIOS 方法一:一般将服务器第一次返回的数据保存在沙盒里 ...
- CoolBlog开发笔记第1课:项目分析
首先说一下CoolBlog开发笔记是我制作的<Django实战项目>系列教程基础篇的内容,使用Django来开发一个酷炫的个人博客,涉及的知识包括项目的分析,环境的搭建,模型和视图定义等等 ...
随机推荐
- 2018-02-11 发布 spring 自定义注解(annotation)与 aop获取注解
知识点: Java自定义注解.spring aop @aspect的使用 首先我们先介绍Java自定义注解. 在开发过程中,我们实现接口的时候,会出现@Override,有时还会提示写@Suppres ...
- linux基础(1)-yum源配置
用linux将近一年了,开始学的东西因为没经常用都忘记了,现在将笔记的东西慢慢整理成自己的博客,也算是看着自己进步.有些东西从他人博客笔记学的,有些是从视频学的,有些是自己填坑积累的. 在linux下 ...
- div css 练习1
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Codeforces Round #374 (Div. 2) D. Maxim and Array 线段树+贪心
D. Maxim and Array time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- selenium webdriver如何添加cookie
一. webdriver中常用的cookie方法 webdriver中提供了操作cookie的相关方法: get_cookies() 获得cookie信息 add_c ...
- Java匿名对象和匿名类总结
一.匿名对象 匿名对象是没有名字的实体,也就是该实体没有对应的变量名引用 匿名对象的特征: 创建的匿名类的对象只能够调用一次 匿名对象只在堆内存中开辟空间 ...
- winform使用相对路径读取文件的方法
获取exe文件的路径进行截取,分两次进行,然后拼接文件名,形成全路径 代码如下: string haarXmlPath = @"haarcascade_frontalface_alt_tre ...
- 又是毕业季1&&又是毕业季2
又是毕业季2 n/k; 又是毕业季2 一开始很容易想到枚举n个数取k个的所有组合,然后分别用辗转相除法求最大公约数,但是复杂度明显不符合要求,于是必须换一种思路. 我们想到,k个数的公约数含义就是这k ...
- Codeforces Round #258 (Div. 2)C(暴力枚举)
就枚举四种情况,哪种能行就是yes了.很简单,关键是写法,我写的又丑又长...看了zhanyl的写法顿时心生敬佩.写的干净利落,简直美如画...这是功力的体现! 以下是zhanyl的写法,转载在此以供 ...
- php实现pdf导出和打印功能。
所用插件:TCODF //导出pdf public function export_pdf($order_sn){ require_once(FCPATH .'../sha ...