基于51单片机的刷卡停车计时收费系统射频RFID方案原理图程序设计

硬件电路的设计

(末尾附文件)
3.1系统的功能分析及体系结构设计
3.1.1系统功能分析
本设计由STC89C52单片机电路+RFID模块电路+蜂鸣器报警电路+LCD1602液晶显示电路+电源电路组成。
1、RFID卡刷卡一次,液晶5秒倒计时,再刷卡一次,增加5秒倒计时,一共可以刷5次。
2、时间到,蜂鸣器长鸣报警。
3.1.2系统总体结构
本系统具体框图如下图所示:

基于51单片机的刷卡停车计时收费系统射频RFID方案原理图程序设计_第1张图片
基于51单片机的刷卡停车计时收费系统射频RFID方案原理图程序设计_第2张图片
模块电路的设计
3.2.1 STC89C52单片机核心系统电路设计
STC89C52RC是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K字节系统可编程Flash存储器。STC89C52使用经典的MCS-51内核,但是做了很多的改进使得芯片具有传统51单片机不具备的功能。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。具有以下标准功能:8k字节Flash,512字节RAM, 32 位I/O 口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,3个16 位定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工串行口。另外 STC89C52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。最高运作频率35MHz,6T/12T可选。
一、STC89C52主要特性如下:
(1)8K字节程序存储空间;
(2)512字节数据存储空间;
(3)内带4K字节EEPROM存储空间;
(4)可直接使用串口下载。
二、STC89C52主要参数如下:
(1)增强型8051单片机,6时钟/机器周期和12 时钟/机器周期可以任意选择,指令代码完全兼容传统8051;
(2)工作电压:5.5V~3.3V(5V单片机)/3.8V~2.0V(3V 单片机);
(3)工作频率范围:0~40MHz,相当于普通8051的0~80MHz,实际工作 频率可达48MHz;
(4)用户应用程序空间为8K字节;
(5)片上集成512 字节RAM;
(6)通用I/O 口(32个),复位后为:P1/P2/P3 是准双向口/弱上拉,P0口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为 I/O口用时,需加上拉电阻;
(7)ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器,可通过串口(RxD/P3.0,TxD/P3.1)直接下载用户程序,数秒即可完成一片;
(8)具有EEPROM功能;
(9)共3个16 位定时器/计数器。即定时器T0、T1、T2;
(10)外部中断4路,下降沿中断或低电平触发电路,Power Down 模式可 由外部中断低电平触发中断方式唤醒;
(11)通用异步串行口(UART),还可用定时器软件实现多个UART;
(12)工作温度范围:-40~+85℃(工业级)/0~75℃(商业级);
(13)PDIP封装。
三、STC89C52单片机相关引脚说明:
(1)VCC:供电电压。
(2)GND:接地。
(3)P3.0 RXD(串行输入口)
(4)P3.1 TXD(串行输出口)
(5)P3.2 /INT0(外部中断0)
(6)P3.3 /INT1(外部中断1)
(7)P3.4 T0(记时器0外部输入)
(8)P3.5 T1(记时器1外部输入)
(9)P3.6 /WR(外部数据存储器写选通)
(10)P3.7 /RD(外部数据存储器读选通)
(11)RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
(12)ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。
(13)/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
(14)/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
(15)XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。
(16)XTAL2:来自反向振荡器的输出。

LCD1602液晶显示模块电路设计
LCD显示器分为字段显示和字符显示两种。其中字段显示与LED显示相似,只要送对应的信号到相应的管脚就能显示。字符显示是根据需要显示基本字符。本设计采用的是字符型显示。系统中采用LCD1602作为显示器件输出信息。与传统的LED数码管显示器件相比,液晶显示模块具有体积小、功耗低、显示内容丰富等优点,而且不需要外加驱动电路,现在液晶显示模块已经是单片机应用设计中最常用的显示器件了。LCD1602可以显示2行16个汉字。
一、LCD1602主要技术参数如下:
(1)显示容量为16×2个字符;
(2)芯片工作电压为4.5~5.5V;
(3)工作电流为2.0mA(5.0V);
(4)模块最佳工作电压为5.0V;
(5)字符尺寸为2.95×4.35(W×H)mm。
二、LCD1602采用标准的14脚,其接口的引脚说明如下:
(1)第1脚:VSS为地电源。
(2)第2脚:VDD接5V正电源。
(3)第3脚:V0为液晶显示器对比度调整端。
(4)第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
(5)第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。
(6)第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
(7)第7~14脚:D0~D7为8位双向数据线。
(8)第15~16脚:空脚

蜂鸣器报警电路(低电平有效)设计
有源蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。本系统所采用的报警模块为5V有源蜂鸣器模块,电路中采用三极管9012来驱动,只要单片机控制引脚为低电平,蜂鸣器就会鸣叫报警,反之则不鸣叫,可以通过控制单片机引脚方波输出形式控制蜂鸣器的鸣叫方式。电阻为限流电阻,保护作用。
基于51单片机的刷卡停车计时收费系统射频RFID方案原理图程序设计_第3张图片

系统软件设计

基于51单片机的刷卡停车计时收费系统射频RFID方案原理图程序设计_第4张图片

#include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include
#include 
#include "delay.h"
#include "rc522.h"
#include "1602.h"

sbit buzzer =P1^1;	//引脚定义

/********************/
unsigned char cardTab[4]={0x52,0x80,0xe3,0x73};	 //该出修改有效卡ID号
/********************/

unsigned char UID[5];	 //暂存卡号
unsigned char Temp[4] ;   //中间变量

unsigned long time_20ms;   //定时计数
char dis0[16];			   //显示数组变量
bit disFlag;			   //显示更新标志
unsigned int timelater =0; //时间延时计数
unsigned char timesNum =0;	//防止抖动计数
unsigned char startFlag = 0;  //开始计数标志

void Init_Timer0(void);
void uartSendStr(unsigned char *s,unsigned char length);
void UART_Init(void);
void uartSendByte(unsigned char dat);

void main (void)
{     
	Init_Timer0();        //定时器0初始化
	UART_Init();

	LCD_Init();           //初始化液晶
	buzzer = 0;
	DelayMs(200);          //延时有助于稳定
	buzzer = 1;
	LCD_Clear(); 

	LCD_Write_String(0,0,"My Designer !");//显示第一行

	uartSendStr("ready ok!",9);
	PcdReset();//复位RC522
	PcdAntennaOn();//开启天线发射 
	timesNum = 3;
	while (1)         //主循环
	{
	 	if(PcdRequest(0x52,Temp)==MI_OK)
	    {
	      if(PcdAnticoll(UID)==MI_OK)
	      { 
		  	uartSendByte(0x00);
			uartSendStr(UID,4);//上报卡号	
			uartSendByte(0x00);
			if((UID[0]==cardTab[0])&&(UID[1]==cardTab[1])) //确定卡 通过
			{
				if(timesNum>2)		 //防止抖动大于1s后刷卡有效
				{
					startFlag++;		//开始计数
					if(startFlag<6)		  //开始计数标志最多计数5次
					{
						timelater=timelater+5;//时间延时
					}				
					buzzer =0;		//刷卡成功标志
					DelayMs(10);
					buzzer =1;
					timesNum = 0; //清楚消抖计数				
				}
			}   
	      }
	    }
		if(disFlag == 1)	 //定时更新显示
		{
			sprintf(dis0,"Time:%02d s",timelater);//打印要显示的数据
			LCD_Write_String(0,1,dis0);//显示第二行
			disFlag = 1;   //清除标志
		}
	}
}

void Init_Timer0(void)
{
	TMOD |= 0x01;	  //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响		     
	TH0=(65536-20000)/256;		  //重新赋值 20ms
	TL0=(65536-20000)%256;
	EA=1;            //总中断打开
	ET0=1;           //定时器中断打开
	TR0=1;           //定时器开关打开
}

void Timer0_isr(void) interrupt 1 
{
	TH0=(65536-20000)/256;		  //重新赋值 20ms
	TL0=(65536-20000)%256;	
	time_20ms++;
	if(time_20ms%10==0)		   //定时显示
	{disFlag =1;timesNum++;}
	if(time_20ms%48==0)		   //1s定时
	{
		
		if(startFlag != 0)	   //刷卡成功标志
		{
			if(timelater>0)	  //延时计数时间--
			{timelater--;}
			else
			{buzzer=0;startFlag=0;}	//时间到进入下次循环	
		}
	}
}

.

链接:https://pan.baidu.com/s/1BfuZgerapvL-UCI2p65hGg
提取码:dd93

.

你可能感兴趣的:(基于51单片机的刷卡停车计时收费系统射频RFID方案原理图程序设计)