基于51单片机停车RFID一停车扣费充值语音播报系统

1、前言

 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉小洪学长自己做的项目系统达不到老师的要求。为了大家能够顺利以及最少的精力通过毕设,小洪学长分享优质毕业设计项目,今天要分享的是基于51单片机停车RFID一停车扣费充值语音播报系统

2、简介

基于51单片机停车RFID一停车扣费充值语音播报系统

1、按键说明:从左边第一个起,K1功能键、K2加(车位)键、K3减(车位)键、K4充值(给卡)键。
2、四大功能:智能停车场、停车场剩余车位设置、ID卡充值和语音播报。
3、智能停车场:液晶实时显示是否有卡、刷卡是否有效、持卡姓名、余额多少和剩余车位,余额只有在刷入卡时才会显示。
4、停车场剩余车位设置:通过K2按键增加或K3按键减少剩余车位数量。
5、ID卡充值:当刷入卡时显示持卡姓名、余额多少,可以通过按键K4进行充值,充值单位10元,如果金额超过200,有过充提醒。
6、语音播报:当每次开机时播报“智能停车系统”、刷卡停车时播报“当前剩余车位为xxx”、充值成功时播报“充值成功”。
7、在刷如卡的情况下,自动进行扣费处理,如果余额不足,有余额不足提醒。
8、无论充值还是扣费,必须在卡放上读取到的情况下执行,否则不执行。
9、所有余额数据,具有掉电不丢失功能。

3、组成

本设计由STC89C52单片机电路+RFID读卡器模块+JQ8400语音播报模块+液晶LCD12864显示电路+红外电路+蜂鸣器声光报警电路+按键电路+电源电路组成。

4、实现效果

整体展示

在刷如卡的情况下,自动进行扣费处理

5、设计原理

5.1 STC89C52RC简介

STC89C52RC单片机使用范围十分广泛,而且是每个电子设备设计者的首选芯片,此款芯片深得广大用户的喜爱。这款单片机是基于8051单片机进行加强改造的,在对于指令代码的编写时能完全兼容传统8051单片机,所以在程序的编写方面更加便捷。其优点就是有很高的可靠性、价格实惠、功耗比较低,STC89C52RC单片机芯片在技术方面最主要的优点就是采用了Flash存贮器技术,这种技术的使用不仅降低了制造的成本,并且在软件和硬件方面都能与8051单片机完全兼容,还采用了高密度非易失存储制造技术制造,将多功能8位CPU和闪烁存储器组合在单个芯片中,所以可以被中国的大多数用户接受。其程序的电可擦写特性,使得开发与试验更加容易,也为了很多嵌入式控制系统提供了一种灵活性高且价廉的方案选择。

在芯片内部有12时钟/机器周期和6时钟/机器周期,我们可以进行随意的选择。它的工作电压为:5.5V~3.3V(5V单片机)/3.8V~2.0V(3V单片机)。其工作频率在0~40MHz之间,和普通的8051单片机相比更加方便,在实际使用中它的工作频率可达48MHz。我们能使用的应用程序空间为8K字节,在片上集成512字节RAM。芯片上有32个通用的I/O口,就是4组分别是P1、P2、P3、P4,每组各有8个I/O口。复位后的4组接口是准双向口/弱上拉,当被作为总线扩展使用时,就不用加上拉电阻,而作为I/O口使用时,就需加上拉电阻。在芯片内部内置的ISP(在系统可编程)和IAP(在应用可编程)技术,让其编程和仿真都变得十分简便,省去使用专用编程器和专用仿真器的麻烦,并且还可以直接通过串口(RxD/P3.0,TxD/P3.1)下载用户程序,下载速度很快,这使得程序的烧写更加容易。还有看门狗的功能。外部中断4路,下降沿中断或低电平触发电路,Power Down模式可由外部中断低电平触发中断方式唤醒。共有3个16位定时器/计数器,即定时器T0、T1、T2。通用异步串行口(UART),还可用定时器软件实现多个UART。

STC89C52RC引脚功能说明:

VCC(40引脚):电源电压

VSS(20引脚):接地

P0端口(P0.0~P0.7,39~32引脚):P0口是一个漏极开路的8位双向I/O口。作为输出端口,每个引脚能驱动8个TTL负载,对端口P0写入“1”时,可以作为高阻抗输入。在访问外部程序和数据存储器时,P0口也可以提供低8位地址和8位数据的复用总线。此时,P0口内部上拉电阻有效。在Flash ROM编程时,P0端口接收指令字节;而在校验程序时,则输出指令字节。验证时,要求外接上拉电阻。

P1端口(P1.0~P1.7,1~8引脚):P1口是一个带内部上拉电阻的8位双向I/O口。P1的输出缓冲器可驱动(吸收或者输出电流方式)4个TTL输入。对端口写入1时,通过内部的上拉电阻把端口拉到高电位,这是可用作输入口。P1口作输入口使用时,因为有内部上拉电阻,那些被外部拉低的引脚会输出一个电流。

P2端口(P2.0~P2.7,21~28引脚):P2口是一个带内部上拉电阻的8位双向I/O端口。P2的输出缓冲器可以驱动(吸收或输出电流方式)4个TTL输入。对端口写入1时,通过内部的上拉电阻把端口拉到高电平,这时可用作输入口。P2作为输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流。

在访问外部程序存储器和16位地址的外部数据存储器(如执行“MOVX @DPTR”指令)时,P2送出高8位地址。在访问8位地址的外部数据存储器(如执行“MOVX @R1”指令)时,P2口引脚上的内容(就是专用寄存器(SFR)区中的P2寄存器的内容),在整个访问期间不会改变。在对Flash ROM编程和程序校验期间,P2也接收高位地址和一些控制信号。

P3端口(P3.0~P3.7,10~17引脚):P3是一个带内部上拉电阻的8位双向I/O端口。P3的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。对端口写入1时,通过内部的上拉电阻把端口拉到高电位,这时可用作输入口。P3做输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输入一个电流。

STC89C52RC单片机的芯片引脚图,如图所示。

图 STC89C52RC单片机引脚图

晶振电路

对于每个单片机系统中都会有晶振电路,晶振在整个单片机系统中起到举足轻重的作用。它结合单片机内部电路,产生时钟频率,有了这个基础单片机才能执行全部的指令,完成所需的功能。同时,时钟频率产生的快慢直接影响单片机运行速度的快慢,时钟频率越高,相对的单片机运行的速度也是越快的。晶振其实就是电能与机械能相互转化的晶体共振技术,为其单片机提供稳定、精确的单频振荡。

晶振电路一般会有两个电容组成,也叫做负载电容。其单片机的工作状态一般会处于并联谐振状态。而其中负载电容的大小会根据晶振的要求来选取确定值。晶振的频率就是在它提供的负载电容下完成的测试,使其减小误差的产生。同时也能保证温漂产生的误差,选取相同的电容值,是为了保证晶振电路的正常运行,如果两个电容的取值不同,甚至相差过大的话,都会容易造成谐振的不平衡,导致停振或干脆振不起来。

在此次的设计中XTAL1和XTAL2端外接石英晶体作为定时元件,在STC89C52RC芯片内部有用于构成振荡器的高增益反向放大器,从而实现自激振荡,产生时钟。晶体振荡器的工作频率一般在1.2~12MHZ之间选择,电容C1、C2一般在10PF~40PF之间取值都是可以的。在这里我选用了12MHZ的工作频率和两个22PF的电容构成晶振电路,STC89C52RC单片机的晶振电路如图3.2所示。

 晶振电路

复位电路

复位电路也是单片机中重要的一部分,在单片机启动运行时,首先要进行复位操作,而单片机自己又不能独自完成,所以要结合外部电路进行复位操作。如图3.3为复位电路图。RST引脚是复位信号的输入端。当输入连续两个机器周期以上高电平时为有效,当晶振频率为12MHZ时,复位信号持续的时间应超过2us才能完成复位操作。当我们加上复位电路,单片机上电以后,RST引脚会先保持一小段时间的高电平而后变为低电平,这就是单片机复位的过程。

 复位电路

6、部分核心代码

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

/********************/
unsigned char code cardId[8]={0xD3,0x44,0xDA,0x0C,0x1C,0xF0,0xA6,0x17};	 //该出修改有效卡ID号

/********************/


sbit key1 =P3^7;	//引脚定义
sbit key2 =P3^6;
sbit key3 =P3^5;
sbit key4 =P3^4;
sbit beep =P2^5;
sbit HW =P1^0;		 //红外检测车辆离开

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

unsigned long time_20ms;   //定时计数
xdata char dis0[16];			   //显示数组变量
xdata char dis1[25];			   //显示数组变量
bit disFlag;			   //显示更新标志
bit yuyinFlag=0;			   //语音标志
bit yuyinFlag1=0;			   //语音标志
bit chongzhiFlag=0;			   //充值标志
bit koufeiFlag=0;			   //充值标志
unsigned int shezhiFlag=0;			   //设置翻页标志

unsigned char timelater =0; //时间延时计数
unsigned char readCardFlag = 0;  //读卡状态
unsigned int SetNum = 10;//扣费金额
bit rekey =0;//防止重复按下
unsigned char yuE = 100;//余额
unsigned char yuE1 = 100;//余额
unsigned int CW = 200;//余额

void Init_Timer0(void);
void uartSendStr(unsigned char *s,unsigned char length);
void UART_Init(void);
void uartSendByte(unsigned char dat);
void MP3_Star(unsigned char Number);
void MP3_Init(void);
unsigned char initFlagData;	//初始化数据存读取
unsigned char initFlagData1;	//初始化数据存读取
unsigned char initFlagData2;	//初始化数据存读取
uint i;
void main (void)
{     
	Init_Timer0();        //定时器0初始化
	UART_Init();

	Lcd12864_Init();//液晶LCD12864初始化		
	Lcd12864_ClrScreen();//清除屏幕显示内容
 
	init_eeprom();
	Lcd12864_PutString(0,1,"智能停车场");
	PcdReset();//复位RC522
	PcdAntennaOn();//开启天线发射 

	MP3_Init();
	MP3_Star(13);

	while (1)         //主循环
	{
		sprintf(dis0,"  剩余车位:%3d    ",(unsigned int)CW);//打印
		Lcd12864_PutString(3,0,dis0);		
		if(shezhiFlag==1)
		 {
			Lcd12864_PutString(0,0,"    设置停车位  ");			 		 
		 }
		else if(shezhiFlag==2)
		 {
			Lcd12864_PutString(0,0,"    充值余额    ");	 		 
		 }
		else
		 {
			Lcd12864_PutString(0,0,"    智能停车场  ");	
		 }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值