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);
ucComMF522Buf[0] = PICC_ANTICOLL1; ucComMF522Buf[1] = 0x20;
status = MI_OK }
4.3.2 24C02存储程序
用页写 CAT24WC01可一次写入8个字节数据,CAT24WC02/04/08/16可以一次写入16个字节的数据;页写操作的启动和字节写一样,不同在于传送了一字节数据后并不产生停止信号,主器件被允许发送 P(CAT24WC02/04/08/16 P=15)个额外的字节,每发送一个字节数据后CAT24WC01/02/04/08/16产生一个应答位并将字节地址低位加1,高位保持不变如果在发送停止信号之前主器件发送超过P+1个字节,地址计数器将自动翻转,先前写入的数据被覆盖。
20
在24C02的add地址中连续写入一串数据*p,返回1设备正常;24C02的首地址:0x00--0xFF,共256个寻址地址;存储容量2Kb,内部分成32页,每页8个Byte。
2^5 * 2^3 * 2^3=2^11=2Kb.
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) 等待超时(10ms) 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(); 如果在发送停止信号之前主器件发送超过P+1个字节,地址计数器将自动翻转,先前写入的数据被覆盖. return(1); }
void read_more_byte(uchar add,uchar number,uchar *p)//number表示要读取的字节个
21
数,读取的数据保存在*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)时选择数据寄存器、低电平(0)时选择指令寄存器。
22
sbit EN = P1^2; EN为使能端,与P1.2连接,写操作时,下降沿使能。读操作时,E高电平有效。
初始化函数: void LCD_Init(void) { LCD_Write_Com(0x38); DelayMs(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毫秒 不检测忙信号 延时5毫秒 不检测忙信号 延时5毫秒
显示模式设置 显示关闭 显示清屏 显示光标移动设置 显示开及光标设置
23
5 系统调试与结果
5.1 硬件调试
此次课题的硬件调试是为了排除和解决在前期电路设计上和后期电路焊接上导致的错误。
第一步:脱机检查。对照自己设计的电路原理图,用万用表对电路板中各个器件的引脚进行仔细的检测,认真检查单片机管脚和其他器件是否连接正确。同时要注意电路的电源的连接是否正确,否则会烧掉芯片;检查所选用的器件是否能正常使用,如果发现要及时更换;系统的芯片是最重要的,一旦使用不当,就会导致芯片烧毁。所以要对各IC座的电位进行仔细的排除。特别要注意电源端的电位是否连接正确,检测没有问题后将芯片插入,进行下一步的检查。
第二步: 联机调试。开始先拔出系统的核心芯片,然后使用仿真器的仿真插头插入89C52的芯片排插中,在主机上进行仿真调试,检测电路的设置按键部分是否能达到设计的效果。同时为了检查各个接口是否连接良好,可以通过一些测试软件进行测试。比如说我们为了检测键盘电路是否正常,可以设计一个按键控制蜂鸣器声响的方法。如果系统运行测试结果达不到目标,就能比较简单的通过发生的故障现象来找出发生故障的原因,通过采取一些措施来解决故障。
5.2 软件调试
软件调试的任务是利用KEIL软件进行在线仿真调试,发现和纠正程序上的错误,同时也能够判断是否硬件是否发生故障。
由于程序是分为多个模块,所以针对程序的每个模块的都需要进行调试。首先对各个子程序进行单独的仿真调试,检测所编写的程序是否有错误。一旦有错进行更改,当程序能运行时,检测是否能够达到自己想要的效果,以及是否能正常控制各接口电路等;然后调试主程序,看是否能成功运行,如果不能,仔细检查各个子程序是否成功运行。调试过程中需要注意的是:各程序模块中的参数是否能正确传输。然后所写的程序烧入单片机中,然后进行调试,再次检查硬件和软件上的问题。这里需要特别注意各子程序的现场保护恢复。调试的基本步骤如下: (1) 编写蜂鸣程序,调试是蜂鸣器是否会发出响声。 (2) 编写读卡程序,调试刷卡时是否显示刷卡信息。
24
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库智能门禁系统设计毕业论文(6)在线全文阅读。
相关推荐: