基于单片机的智能门禁系统的设计(4)

2019-04-14 10:06

淮阴师范学院毕业设计

{

tochar(Temp[0]); tochar(Temp[1]); }

比如,当Temp[0]=04,Temp[1]=00时,卡类型为S50。

第二步:防冲撞处理 status2= PcdAnticoll(UID); if(status2==MI_OK) {

PutString0(\ tochar(UID[0]); tochar(UID[1]); tochar(UID[2]); tochar(UID[3]); }

第三步:选卡。

status2= PcdSelect(UID); 选择卡片,输入卡片序列号,4字节 第四步:在读写卡之前需要先进行认证。

status2= PcdAuthState(PICC_AUTHENT1A, 1, Password_Buffer, UID);

其中四个参数分别代表:验证A密钥+块地址+扇区密码+卡序号。

然后进行写操作:

status2=PcdWrite(1,writeData);

写数据,将数组writeData中的数写入到卡 中,其中第一个参数1代表写入的地址为块1,或者进行读卡操作:

status2 = PcdRead(1, str);

读卡 其中第一个参数1代表读的地址为块1,读卡后得到的数据存放于数组str中。

输出卡片序列号

防冲撞处理,输出卡片序列号,4字节

输出卡类型

15

淮阴师范学院毕业设计

4.3 子程序分析 4.3.1 RC522读卡程序

定义端口:

sbit MF522_RST = P1^7; sbit MF522_SO = P1^6; sbit MF522_SI = P1^5; sbit MF522_SCK = P1^4; sbit MF522_NSS = P1^3; 参数说明: req_code[IN]: 寻卡方式

0x52 = 寻感应区内所有符合14443A标准的卡 0x26 = 寻未进入休眠状态的卡 pTagType[OUT]:卡片类型代码 0x4400 = Mifare_UltraLight 0x0400 = Mifare_One(S50) 0x0200 = Mifare_One(S70) 0x0800 = Mifare_Pro(X) 0x4403 = Mifare_DESFire 返 回: 成功返回MI_OK 防冲撞函数:

参数说明: pSnr[OUT]:卡片序列号,4字节 返 回: 成功返回

char PcdAnticoll(unsigned char *pSnr) { char status;

unsigned char i,snr_check=0; unsigned int unLen;

unsigned char ucComMF522Buf[MAXRLEN]; ClearBitMask(Status2Reg,0x08); WriteRawRC(BitFramingReg,0x00); ClearBitMask(CollReg,0x80);

16

复位信号 SPI 接口主入从出 SPI 接口主出从入 时钟接口

应该是SDA接口 寻卡函数:

淮阴师范学院毕业设计

ucComMF522Buf[0] = PICC_ANTICOLL1; ucComMF522Buf[1] = 0x20; status = MI_OK }

4.3.2 24C02存储程序

bit Write_more_byte(uchar add,uchar number,uchar *p)number { bit val; uchar i=0; IIc_init(); IIc_start();

val = IIc_write_byte(Address_24C02);

while(val==0) {

if(i++==10)

return(0); delay(1); IIc_start();

val = IIc_write_byte(Address_24C02);

}

IIc_write_byte(add); for(i=0;number>0;number--)

{ IIc_write_byte(*p++); }

IIc_stop();

return(1);

17

表示要写入字节的个数.

写器件地址

等待超时(10ms) 等待一会 重新发送 写器件地址

写存储的地址

写存储的数据 如果在发送停止信号之前主器件发送超过P+1个字节,地址计数器将自动翻转,先前写入的数据被覆盖.

淮阴师范学院毕业设计

}

void read_more_byte(uchar add,uchar number,uchar *p)//number

表示要读取的字节个数,读取的数据保存在*p中。

{

bit val=0; IIc_init(); IIc_start();

val = IIc_write_byte(Address_24C02); while(val==0)

写器件地址

器件没有应答 可能是内部编程/擦除周期

{

delay(1); IIc_start(); val=IIc_write_byte(Address_24C02); }

IIc_write_byte(add); IIc_start();

IIc_write_byte(Address_24C02+1); 写器件地址(读) for(;number>1;number--) {

*p++=IIc_read_byte(1); }

*p = IIc_read_byte(0); 读最后一个数据主机不应答 IIc_stop(); }

写存储的地址

等待一会 重新发送 写器件地址

4.3.3 显示程序

定义端口: sbit RW = P1^1;

R/W为读写信号线,与P1.1端口连接,高电平(1)时进行读操作,低电平(0)时进行写操作,

sbit RS = P1^0;

RS为寄存器选择,与P1.0端口连接,高电平(1)时

18

淮阴师范学院毕业设计

选择数据寄存器、低电平(0)时选择指令寄存器。

sbit EN = P1^2;

EN为使能端,与P1.2连接,写操作时,下降沿使能。读操作时,E高电平有效。

初始化函数: void LCD_Init(void) {

LCD_Write_Com(0x38); DelayMs(5);

不检测忙信号 延时5毫秒 不检测忙信号 延时5毫秒 不检测忙信号 延时5毫秒

LCD_Write_Com(0x38); DelayMs(5);

LCD_Write_Com(0x38); DelayMs(5);

LCD_Write_Com(0x38); 显示模式设置 LCD_Write_Com(0x08); 显示关闭 LCD_Write_Com(0x01); 显示清屏 LCD_Write_Com(0x06); DelayMs(5);

LCD_Write_Com(0x0C); }

显示开及光标设置

显示光标移动设置

5 结束语

经过这段时期系统的开发,我对基于单片机AT89C52的开发研究有了更深的了解和认识,掌握了单片机使用的一些技巧和引脚的使用方法。本次毕业设计给了我一个独立思考和解决问题的机会,在系统的电路设计、功能模块和各方面的设计开发中,都需要进行细致全面的思考,从中让我学会了以前不曾接触过的知识,并且学会了怎样将书本知识转化到实际应用开发工作中去。毕业设计能够很好地提高我们的综合能力。除了学习到了相关的技术之外,还培养了自学、独立的解决问题的能力。

19

淮阴师范学院毕业设计

致 谢

在此论文撰写过程中我遇到了很多的困难和障碍,都在同学和老师的帮助下一一解决了,我要感谢我的论文指导老师——葛恒清。在整个论文写作过程中,他对我进行了耐心的指导和帮助,提出严格要求,引导我不断开阔思路,为我答疑解惑,鼓励我大胆创新,这使我在大学最后生活的时光中,既增长了知识、开阔了视野、锻炼了心态,又培养了良好的钻研精神。他那严谨的治学作风,一丝不苟的工作态度将会指导我以后的工作学习,在此,我向俞阿龙教授表示最诚挚的谢意!

同时还要感谢我的同学和朋友,他们在我论文的写作过程中提出了很多有用的意见与建议,还在论文排版过程中提供热情的帮助。

最后还要感谢这篇论文引用所有文献的学者们,如果没有各位学者的研究成果的帮助和启发,我将很难完成本篇论文的写作。

20


基于单片机的智能门禁系统的设计(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:《营养与健康》模拟题(2)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: