基于51单片机的RFID门禁系统-LCD12864显示

一.硬件方案

本RFID系统设计可分为硬件部分和软件部分。硬件部分以MFRC522射频识别模块为核心,结合主控模块STC89C52设计系统的外围硬件电路,实现对射频卡的控制与MCU之间的互通。软件部分采用C语言进行系统的下位机程序的开发,完成与IC卡之间的通信,实现数据交换功能。
电路主要由51单片机+最小系统+LCD12864液晶显示模块+RFID无线模块+5V转3.3V稳压电路+蜂鸣器模块+AT24C02存储电路+继电器控制电路+按键模块;

二.设计功能

(1)通过按键输入密码,根据密码的正确与否来进行相应的操作;
(2)可使用管理员密码可以自行设定和修改密码;修改的密码自动保存至存储芯片,支持掉电保存;
(3)IC卡感应,匹配成功开锁;匹配三次不成功,蜂鸣器报警;
(4)输入正确的密码后,驱动开锁电路。

三.设计原理图

(1)原理图主要采用AD软件进行设计,如图:
在这里插入图片描述

(2)PCB图如下:
在这里插入图片描述

四.软件设计

(1)LCD初始化

/*******************************************************************/
void lcd_init()
{ 

   LCD_PSB = 1;         //并口方式	,部分液晶不需要
    write_cmd(0x36);      //扩充指令操作
    delay(5);
    write_cmd(0x30);      //基本指令操
	delay(5);
    write_cmd(0x0C);      //显示开,关光标
    delay(5);
    write_cmd(0x01);      //清除LCD的显示内容
    delay(5);
}

(2)修改密码

 case 3:		
		       display(1,0,4);      //密码设置
			   display2(3,0,table,8);
			   key_count=0;
			   while(1)
			   {  
			      key_value=key_scan();	  
				  if(key_value==12) 
				   { 
				     states--;
	                 return;
					}
			 
			      if(key_value>=0 && key_value <=9)//有按键输入
				  {		  				    				    
					table[key_count++]=key_value+'0';
					display2(3,0,table,8);			
				  }
				  
				  if(key_value==11)//退格
				  {								    
					table[--key_count]='-';
					display2(3,0,table,8); 				
				  }

				   if(key_count==8 && key_value == 15) //按下确定键
				  
				  { 
				  
				    for(i=0;i<8;i++)
				     KEY_BUF[i]=table[i];	
				   	 EEPROM_WRITE(7,KEY_BUF,8);//写入EEPROM
				 
				   break;
				   }
                } 			 
				
		       break ;

(3)匹配密码

  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;
					}

				  if(key_value==13)
				  {
				   states++;
				   return;
				  }				 
				  if(key_value>=0 && key_value <=9)//有按键输入
				  {		  				    				    
					table[key_count++]=key_value+'0';
					display2(3,0,table,8);			
				  }
				  
				  if(key_value==11)//退格
				  {								    
					table[--key_count]='-';
					display2(3,0,table,8); 				
				  }

				  if(key_count==8)
				  {
				     if( table[0]==KEY_BUF[0] &&
					     table[1]==KEY_BUF[1] &&
					 	 table[2]==KEY_BUF[2] &&
						 table[3]==KEY_BUF[3] &&
						 table[4]==KEY_BUF[4] &&
						 table[5]==KEY_BUF[5] &&
						 table[6]==KEY_BUF[6] &&
						 table[7]==KEY_BUF[7] )	  //密吗正确 
				
				     { 
					   bPass=1;
					   relay_ON();//灯开关
                       display(2,0,5);
					   relay_OFF();
					   break;				  
					
					 }
					  else 	 //密码错误
					  {	
					    relay_OFF();
						beep1()	 ;
						bWarn=1;
					    display(2,0,6);
						 break;
					 }	  				
				  }

			   }
		       break ;

(3)主程序源码

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;	//上一功能
	   
	   if(key==13) if(++states>3) states=3;	//下一功能
	   ctrl_process(); //进入RC522操作
	}
}	  

资料链接:https://pan.baidu.com/s/1sXGJ3kVkt7C5CQdGZSkXLA?pwd=ra6q

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值