基于射频识别技术的小区智能门禁控制系统 - 图文 下载本文

内容发布更新时间 : 2024/12/23 5:16:48星期一 下面是文章的全部内容请认真阅读。

陕西理工学院毕业设计

附 录 C 源程序

#include \#include \#include \#include \#include \#include \#include \#include \#include \#include \

void init_all(void) //初始化 {

EA = 0; //关总中断 init_timer(); //定时器初始化 init_uart(); //串口初始化 init_rc522(); //RC522初始化 lcd_init(); //LCD初始化

EEPROM_READ(0,Card_SN_BUF,4);//EEPROM初始化,取出记录的卡号 EEPROM_READ(7,KEY_BUF,8);//EEPROM初始化,取出记录的密码

send_bytes(Card_SN_BUF,4); EA = 1; //开总中断 }

void main(void) //主函数 {

INT8U key;

Delay_ms(50); //让硬件稳定

init_all(); //执行初始化函数 relay_OFF(); //关继电器 LED_BLINK_1(); //led test beep1(); //beep test display(0,0,0); //显示初始化 while(1) {

key=key_scan(); //按键操作 if(key==12)

if(states>0) states--;

else states=0; //上一功能

第 32 页 共 61 页

陕西理工学院毕业设计

if(key==13)

if(++states>3) states=3; //下一功能

ctrl_process(); //进入RC522操作 }

void time0() interrupt 1 //定时器中断1 {

TH0=(65536-50000)/256; //给定时器1赋初值 TL0=(65536-50000)%6; //给定时器1赋初值 if(flag_m==1) {counts1++;}

if(counts1>150){counts1=0;beep1();} //count1=20是计数一秒,150大概7.5秒 if(l2==1){beep1();}

} }

#include \#include \#include \#include \#include \#include \#include \#include \#include \#include \#include \

INT8U states=0;//状态机

INT8U Card_type[2], //卡片类型 Card_SN[4]={0},//IC卡号

Card_SN_BUF[4]={0xff,0xff,0xff,0xff},//卡号登记缓冲区 KEY_BUF[8]={'0','0','0','0','0','0','0','0'}; INT8U bPass = 0; bWarn = 0;

void uart_over( void ) //串口数据还原 {

UartCount = 0; UartStart = FALSE; UartComp = FALSE; }

void pass( void ) {

beep1();

Delay_ms(2000);//让卡片离开 LED_BLINK_1();

第 33 页 共 61 页

陕西理工学院毕业设计

}

void warn(void) {

LED_BLINK_2(); }

INT8U IC_READ( void ) {

INT8U ID_ASC[8],i;

if( PcdRequest( PICC_REQIDL, Card_type ) != MI_OK )//寻天线区内未进入休眠状态的卡,返回卡片类型 2字节 {

if( PcdRequest( PICC_REQIDL, Card_type ) != MI_OK )//寻天线区内未进入休眠状态的卡,返回卡片类型 2字节 {

return FALSE; } }

if( PcdAnticoll( Card_SN ) != MI_OK ) //防冲撞,返回卡的序列号 4字节 {

bWarn = 1;

return FALSE; }

bPass = 1;

send_bytes(Card_type,2); send_bytes(Card_SN,4);

for(i=0;i<4;i++) //卡ID号转化成ASCII {

if(Card_SN[i]/16>9) ID_ASC[i*2]=Card_SN[i]/16+'7'; else ID_ASC[i*2]=Card_SN[i]/16+'0';

if(Card_SN[i]>9) ID_ASC[i*2+1]=Card_SN[i]+'7'; else ID_ASC[i*2+1]=Card_SN[i]+'0'; }

display2(3,0,\显示卡号 display2(3,2,ID_ASC,8);

return TRUE; }

第 34 页 共 61 页

陕西理工学院毕业设计

void ctrl_process( void ) {

INT8U i,key_count,key_value=16,table[8]=\

if(states!=statesbuf) //状态改变,清屏 {

display_clear_line(2); display_clear_line(3); statesbuf=states; }

switch(states) {

case 0: //IC卡读卡输入 display(1,0,1); if(IC_READ()) {

if ((Card_SN[0]==Card_SN_BUF[0]) &&(Card_SN[1]==Card_SN_BUF[1]) &&(Card_SN[2]==Card_SN_BUF[2]) &&(Card_SN[3]==Card_SN_BUF[3])) {

relay_ON();//灯开关 display(2,0,5); }

else display(2,0,6); relay_OFF(); }

break;

case 1:

display(1,0,2); //密码输入 display2(3,0,table,8); key_count=0; while(1) {

key_value=key_scan(); if(key_value==12) {

states--; return; }

第 35 页 共 61 页